Obsidian MCP Server
Provides LLM agents with comprehensive access to Obsidian vaults via the official Obsidian CLI bridge. It enables users to read, search, and modify notes, tasks, properties, and plugins while the Obsidian desktop app is running.
README
Obsidian MCP Server
MCP server that gives LLM agents access to your Obsidian vault through the official Obsidian CLI. Read, create, search notes, manage tasks, tags, properties, plugins and more — all via the Model Context Protocol.
Important: This server requires the Obsidian desktop app running on your machine. The CLI is a bridge to the app's internal API — it does not work without a running Obsidian instance.
Prerequisites
1. Obsidian 1.12+
You need Obsidian version 1.12 or later (with the latest installer — 1.12.4+).
Download: https://obsidian.md/download
2. Enable CLI in Obsidian
- Open Obsidian
- Go to Settings → General
- Enable Command line interface
- Follow the prompt to register the CLI
- Restart your terminal for PATH changes to take effect
Verify it works:
obsidian --version
Windows users: You also need the
Obsidian.comterminal redirector file, available to Catalyst members on the Obsidian Discord.
3. Python 3.11+ and uv
Install uv if you don't have it:
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Installation
Clone the repository and install dependencies:
git clone https://github.com/Storks/obsidian-mcp.git
cd obsidian-mcp
uv sync
Verify everything is set up:
uv run obsidian-mcp
The server communicates via stdio, so you won't see any output — it's waiting for MCP messages. Press Ctrl+C to stop.
Connecting to LLM agents
The server uses stdio transport. Every MCP client needs to know how to start the process: run uv with the project directory and the obsidian-mcp command.
Below are configuration examples for popular tools. Replace /path/to/obsidian-mcp with the actual path where you cloned the repository.
Claude Code
Add via CLI:
claude mcp add obsidian-mcp -- uv run --directory /path/to/obsidian-mcp obsidian-mcp
Or add manually to .mcp.json in your project root (or ~/.claude.json for global access):
{
"mcpServers": {
"obsidian-mcp": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/obsidian-mcp", "obsidian-mcp"]
}
}
}
Restricting available tools
The server exposes 54 tools — you may not need all of them. Claude Code lets you allow or deny specific tools via .claude/settings.json (project-level) or ~/.claude/settings.json (global). Tools follow the naming pattern mcp__obsidian-mcp__<tool_name>.
Example: read-only mode — deny any tool that can modify the vault:
{
"permissions": {
"deny": [
"mcp__obsidian-mcp__obsidian_create",
"mcp__obsidian-mcp__obsidian_append",
"mcp__obsidian-mcp__obsidian_prepend",
"mcp__obsidian-mcp__obsidian_delete",
"mcp__obsidian-mcp__obsidian_move",
"mcp__obsidian-mcp__obsidian_rename",
"mcp__obsidian-mcp__obsidian_property_set",
"mcp__obsidian-mcp__obsidian_property_remove",
"mcp__obsidian-mcp__obsidian_task",
"mcp__obsidian-mcp__obsidian_bookmark",
"mcp__obsidian-mcp__obsidian_base_create",
"mcp__obsidian-mcp__obsidian_plugin_enable",
"mcp__obsidian-mcp__obsidian_plugin_disable",
"mcp__obsidian-mcp__obsidian_plugin_install",
"mcp__obsidian-mcp__obsidian_plugin_reload",
"mcp__obsidian-mcp__obsidian_workspace_save",
"mcp__obsidian-mcp__obsidian_workspace_load"
]
}
}
Example: allow only specific tools — useful when you want a minimal set:
{
"permissions": {
"allow": [
"mcp__obsidian-mcp__obsidian_read",
"mcp__obsidian-mcp__obsidian_search",
"mcp__obsidian-mcp__obsidian_search_context",
"mcp__obsidian-mcp__obsidian_files",
"mcp__obsidian-mcp__obsidian_tags",
"mcp__obsidian-mcp__obsidian_outline"
]
}
}
Any tool not listed in allow will require manual confirmation before each use.
OpenCode
Add to opencode.json in your project root (or ~/.config/opencode/opencode.json for global access):
{
"mcp": {
"obsidian-mcp": {
"type": "local",
"command": ["uv", "run", "--directory", "/path/to/obsidian-mcp", "obsidian-mcp"],
"enabled": true
}
}
}
Codex (OpenAI)
Add via CLI:
codex mcp add obsidian-mcp -- uv run --directory /path/to/obsidian-mcp obsidian-mcp
Or add manually to ~/.codex/config.toml:
[mcp_servers.obsidian-mcp]
command = "uv"
args = ["run", "--directory", "/path/to/obsidian-mcp", "obsidian-mcp"]
Configuration
Environment variables (all optional):
| Variable | Default | Description |
|---|---|---|
OBSIDIAN_PATH |
obsidian |
Path to the Obsidian CLI binary |
OBSIDIAN_TIMEOUT |
30 |
Command timeout in seconds |
OBSIDIAN_VAULT |
— | Default vault name (if not specified per-call) |
Example with environment variables in .mcp.json:
{
"mcpServers": {
"obsidian-mcp": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/obsidian-mcp", "obsidian-mcp"],
"env": {
"OBSIDIAN_VAULT": "My Notes",
"OBSIDIAN_TIMEOUT": "60"
}
}
}
}
Available tools (54)
Every tool accepts an optional vault parameter to target a specific vault.
Files (12)
| Tool | Description |
|---|---|
obsidian_create |
Create or overwrite a file |
obsidian_read |
Read file contents |
obsidian_append |
Append content to a file |
obsidian_prepend |
Prepend content after frontmatter |
obsidian_delete |
Delete a file |
obsidian_move |
Move or rename a file |
obsidian_rename |
Rename a file |
obsidian_open |
Open a file in Obsidian |
obsidian_file_info |
Show file info |
obsidian_files |
List files in the vault |
obsidian_folder_info |
Show folder info |
obsidian_folders |
List folders in the vault |
Search (2)
| Tool | Description |
|---|---|
obsidian_search |
Search vault for text |
obsidian_search_context |
Search with matching line context |
Daily Notes (5)
| Tool | Description |
|---|---|
obsidian_daily |
Open today's daily note |
obsidian_daily_path |
Get daily note file path |
obsidian_daily_read |
Read daily note contents |
obsidian_daily_append |
Append content to daily note |
obsidian_daily_prepend |
Prepend content to daily note |
Tasks (2)
| Tool | Description |
|---|---|
obsidian_tasks |
List tasks in the vault |
obsidian_task |
Show or update a task |
Tags (2)
| Tool | Description |
|---|---|
obsidian_tags |
List tags in the vault |
obsidian_tag |
Get tag info |
Properties (4)
| Tool | Description |
|---|---|
obsidian_properties |
List properties in the vault |
obsidian_property_set |
Set a property on a file |
obsidian_property_remove |
Remove a property from a file |
obsidian_property_read |
Read a property value |
Links (5)
| Tool | Description |
|---|---|
obsidian_backlinks |
List backlinks to a file |
obsidian_links |
List outgoing links from a file |
obsidian_unresolved |
List unresolved links |
obsidian_orphans |
List files with no incoming links |
obsidian_deadends |
List files with no outgoing links |
Outline (1)
| Tool | Description |
|---|---|
obsidian_outline |
Show headings for a file |
Templates (1)
| Tool | Description |
|---|---|
obsidian_templates |
List available templates |
Bookmarks (2)
| Tool | Description |
|---|---|
obsidian_bookmarks |
List bookmarks |
obsidian_bookmark |
Add a bookmark |
Vault (1)
| Tool | Description |
|---|---|
obsidian_vault |
Show vault info |
Word Count (1)
| Tool | Description |
|---|---|
obsidian_wordcount |
Count words and characters |
Plugins (7)
| Tool | Description |
|---|---|
obsidian_plugins |
List installed plugins |
obsidian_plugins_enabled |
List enabled plugins |
obsidian_plugin_info |
Get plugin info |
obsidian_plugin_enable |
Enable a plugin |
obsidian_plugin_disable |
Disable a plugin |
obsidian_plugin_install |
Install a community plugin |
obsidian_plugin_reload |
Reload a plugin |
Workspace (4)
| Tool | Description |
|---|---|
obsidian_workspace |
Show workspace tree |
obsidian_workspaces |
List saved workspaces |
obsidian_workspace_save |
Save current layout |
obsidian_workspace_load |
Load a saved workspace |
Bases (3)
| Tool | Description |
|---|---|
obsidian_bases |
List .base files in the vault |
obsidian_base_create |
Create a new item in a base |
obsidian_base_query |
Query a base and return results |
History (2)
| Tool | Description |
|---|---|
obsidian_diff |
Compare file versions |
obsidian_history |
List file versions |
Development
# Install dev dependencies
uv sync
# Run tests
uv run pytest tests/ -v
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.