A Model Context Protocol (MCP) server that enables Claude Code and other MCP clients to interact with your org-roam knowledge base.
- Read Operations: Search and retrieve org-roam nodes, explore backlinks and relationships
- Write Operations: Create new notes, update existing content, add links between nodes
- Full Integration: Respects org-roam's file structure, UUID system, and conventions
- Auto-Detection: Automatically finds your org-roam database and directory
- Fast Search: Leverages org-roam's SQLite database for efficient queries
- Robust Error Handling: Comprehensive input validation and descriptive error messages
- Path Normalization: Handles quoted/unquoted file paths and node IDs consistently
- Database Synchronization: Automatic refresh after file operations for immediate updates
- π§ Fixed File Path Handling: Resolved issues with quoted file paths from the org-roam database
- π Improved Node ID Support: Now handles both quoted and unquoted node ID formats seamlessly
- π Enhanced Search Synchronization: Database automatically refreshes after create/update operations
- β Better Error Handling: Added comprehensive input validation with clear error messages
- π§Ή Path Cleaning: Automatic normalization of file paths with quote removal
- π Improved Logging: Better error reporting and debugging information
# Using uvx (recommended)
uvx org-roam-mcp
# Or with pip in a virtual environment
pip install org-roam-mcpThe server automatically detects your org-roam setup by looking for:
Database locations:
~/.emacs.d/org-roam.db~/org-roam.db~/.config/emacs/org-roam.db~/Documents/org-roam/org-roam.db
Directory locations:
~/org-roam/~/Documents/org-roam/~/Dropbox/org-roam/~/Notes/
Override auto-detection with environment variables:
export ORG_ROAM_DB_PATH="/path/to/your/org-roam.db"
export ORG_ROAM_DIR="/path/to/your/org-roam-directory"
export ORG_ROAM_MAX_SEARCH_RESULTS=100 # Default: 50Add to your Claude Code MCP configuration (~/.claude_code/mcp.json):
{
"mcpServers": {
"org-roam": {
"command": "uvx",
"args": ["org-roam-mcp"]
}
}
}Or for local development:
{
"mcpServers": {
"org-roam": {
"command": "python",
"args": ["-m", "org_roam_mcp.server"],
"env": {
"ORG_ROAM_DB_PATH": "/path/to/your/org-roam.db",
"ORG_ROAM_DIR": "/path/to/your/org-roam"
}
}
}
}search_nodes: Search for nodes by title, tags, or aliasesget_node: Get detailed information about a specific nodeget_backlinks: Find all nodes that link to a specific nodelist_files: List all org files in your org-roam directory
create_node: Create a new org-roam node with title, content, and tagsupdate_node: Update the content of an existing nodeadd_link: Create a link from one node to another
The server provides these resources for read-only access:
org-roam://nodes: List of all nodes in your databaseorg-roam://stats: Database statistics (node count, file count, etc.)org-roam://node/{id}: Detailed information about a specific node
# Through Claude Code
"Create a new org-roam note titled 'Machine Learning Concepts' with the tag 'AI'"# Through Claude Code
"Search my org-roam notes for anything related to 'neural networks'"# Through Claude Code
"Show me all the notes that link to my 'Deep Learning' note"- Clone the repository:
git clone <repository-url>
cd org-roam-mcp- Create virtual environment and install:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -e .- Run tests:
pytest tests/ -v- Run the server:
python -m org_roam_mcp.serverorg-roam-mcp/
βββ src/org_roam_mcp/
β βββ __init__.py
β βββ server.py # Main MCP server implementation
β βββ database.py # SQLite database interface
β βββ file_manager.py # Org file operations
β βββ config.py # Configuration management
βββ tests/
β βββ test_database.py
β βββ test_file_manager.py
βββ pyproject.toml
βββ README.md
The server creates org-roam files with the standard structure:
:PROPERTIES:
:ID: 12345678-1234-1234-1234-123456789abc
:END:
#+title: Your Note Title
#+filetags: :tag1: :tag2:
Your note content here...
- Python 3.8+
- Existing org-roam setup with SQLite database
- Read/write access to your org-roam directory
If you get a "Database not found" error:
- Check that org-roam is set up and has created a database
- Run
M-x org-roam-db-syncin Emacs to ensure the database exists - Set
ORG_ROAM_DB_PATHenvironment variable to the correct path
Ensure the MCP server has read/write access to:
- Your org-roam database file
- Your org-roam directory and all subdirectories
- Restart Claude Code after adding the MCP server configuration
- Check Claude Code logs for any connection errors
- Verify the server starts correctly by running it manually
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
MIT License - see LICENSE file for details