Obsidian MCP Server
Provides tools for managing an Obsidian vault, including creating and editing notes, searching content, managing daily notes, creating TODOs with priorities and due dates, discovering backlinks, and saving coding session reports with metadata.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Obsidian MCP Server create a daily note for today with my meeting notes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Obsidian MCP Server
An MCP (Model Context Protocol) server for integrating AI assistants with your Obsidian vault. Supports both stdio and HTTP/SSE transports for maximum compatibility.
Features
Session Reports: Automatically save coding session summaries with metadata
Note Management: Create, read, append, and search notes
Daily Notes Integration: Append to daily notes automatically
TODO Tracking: Create and manage TODOs with priorities and due dates
Backlink Discovery: Find notes that link to a specific note
Smart Linking: Get suggestions for related notes based on keywords
Dual Transport: Supports both stdio (direct) and HTTP/SSE (networked) modes
Related MCP server: mcp-obsidian
Quick Start with Docker (Recommended)
The easiest way to run the server is with Docker Compose:
# Clone the repository
git clone https://github.com/igorilic/obsidian-mcp.git
cd obsidian-mcp
# Create your environment file
cp .env.example .env
# Edit .env and set your vault path
# OBSIDIAN_VAULT_HOST_PATH=/path/to/your/obsidian/vault
# Start the server
docker compose up -d
# Verify it's running
curl http://localhost:9111/healthThe server will be available at http://localhost:9111/mcp.
Installation (Local)
Prerequisites
Node.js 18+
npm or pnpm
Steps
git clone https://github.com/igorilic/obsidian-mcp.git
cd obsidian-mcp
npm install
npm run buildClient Setup
Claude Code (CLI)
Claude Code supports HTTP transport natively. Add to your global config at ~/.claude.json:
{
"mcpServers": {
"obsidian": {
"type": "http",
"url": "http://localhost:9111/mcp"
}
}
}Or for stdio transport (direct, no Docker):
{
"mcpServers": {
"obsidian": {
"type": "stdio",
"command": "node",
"args": ["/path/to/obsidian-mcp/dist/index.js"],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault"
}
}
}
}After adding, restart Claude Code or run /mcp to reconnect.
Claude Desktop
Claude Desktop only supports stdio transport, so use mcp-remote as a bridge for HTTP servers.
Config location:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
For HTTP transport (with Docker):
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:9111/mcp"]
}
}
}For stdio transport (direct, no Docker):
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/path/to/obsidian-mcp/dist/index.js"],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault"
}
}
}
}Restart Claude Desktop after changes.
Cursor
Cursor supports MCP servers with stdio, SSE, and HTTP transports.
Config location:
Global:
~/.cursor/mcp.jsonProject:
.cursor/mcp.json
For stdio transport:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/path/to/obsidian-mcp/dist/index.js"],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault"
}
}
}
}For HTTP transport:
{
"mcpServers": {
"obsidian": {
"url": "http://localhost:9111/mcp",
"transport": "sse"
}
}
}Or configure via UI: File → Preferences → Cursor Settings → MCP
Documentation: Cursor MCP Docs
Windsurf
Windsurf uses the same config format as Claude Desktop.
Config location: ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/path/to/obsidian-mcp/dist/index.js"],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault"
}
}
}
}Or configure via UI: Windsurf Settings → Cascade → Plugins
Documentation: Windsurf MCP Docs
Zed
Zed has built-in MCP support but currently only supports stdio transport (not HTTP).
Config location: ~/.config/zed/settings.json
{
"context_servers": {
"obsidian": {
"command": {
"path": "node",
"args": ["/path/to/obsidian-mcp/dist/index.js"],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault"
}
}
}
}
}To verify: Check the Agent Panel settings - a green indicator means the server is active.
Documentation: Zed MCP Docs
VS Code with Continue
Continue supports MCP servers via YAML configuration files.
Config location: Create .continue/mcpServers/obsidian.yaml in your workspace or home directory:
For stdio transport:
name: Obsidian MCP Server
version: 1.0.0
schema: v1
mcpServers:
- name: obsidian
command: node
args:
- /path/to/obsidian-mcp/dist/index.js
env:
OBSIDIAN_VAULT_PATH: /path/to/your/obsidian/vaultFor HTTP transport:
name: Obsidian MCP Server
version: 1.0.0
schema: v1
mcpServers:
- name: obsidian
type: streamable-http
url: http://localhost:9111/mcpDocumentation: Continue MCP Docs
VS Code with Cline
Cline supports both stdio and SSE transports.
Click the MCP Servers icon in Cline's top navigation → Configure → Advanced MCP Settings
For stdio transport:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/path/to/obsidian-mcp/dist/index.js"],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault"
}
}
}
}For SSE/HTTP transport:
{
"mcpServers": {
"obsidian": {
"url": "http://localhost:9111/mcp",
"transport": "sse"
}
}
}Documentation: Cline MCP Docs
JetBrains IDEs (IntelliJ, WebStorm, PyCharm, etc.)
JetBrains AI Assistant supports MCP servers starting from version 2025.1.
Setup via UI:
Go to Settings → Tools → AI Assistant → Model Context Protocol (MCP)
Click + to add a new server
Configure the server
For stdio transport:
{
"command": "node",
"args": ["/path/to/obsidian-mcp/dist/index.js"],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault"
}
}Note: MCP tools only work with "Codebase" mode enabled in the chat window.
Documentation: JetBrains MCP Docs
Generic HTTP Client
For any client supporting HTTP/SSE MCP transport:
Endpoint:
http://localhost:9111/mcpHealth check:
http://localhost:9111/healthProtocol: MCP over Streamable HTTP (SSE responses)
Required headers:
Accept: application/json, text/event-stream
Example initialization request:
curl -X POST http://localhost:9111/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "my-client", "version": "1.0.0"}
}
}'Transport Modes
HTTP/SSE Transport (Default for Docker)
Best for:
Multiple clients connecting simultaneously
Networked/remote access
Containerized deployments
# Using Docker
docker compose up -d
# Or manually
MCP_TRANSPORT=http MCP_HTTP_PORT=3000 node dist/index.jsStdio Transport (Default for local)
Best for:
Direct integration with IDEs
Single client usage
Lower latency
OBSIDIAN_VAULT_PATH=/path/to/vault node dist/index.jsAvailable Tools
Tool | Description |
| Save coding session summaries with metadata |
| Create or overwrite a note |
| Append content to an existing note |
| Append to today's daily note |
| Search notes by content, tags, or folder |
| Read a note's content and frontmatter |
| List recently modified notes |
| Find notes linking to a specific note |
| Create a TODO item |
| Get suggestions for related notes |
Tool Details
{
title: string; // Short title (required)
summary: string; // Brief summary (required)
details?: string; // Detailed description
files_changed?: string[]; // List of modified files
next_steps?: string[]; // Follow-up TODOs
tags?: string[]; // Tags for categorization
project?: string; // Project name
folder?: string; // Subfolder in Claude-Sessions
}{
path: string; // Relative path (required)
content: string; // Markdown content (required)
title?: string; // Note title
tags?: string[]; // Tags
frontmatter?: object; // Additional frontmatter
}{
query: string; // Search query (required)
tags?: string[]; // Filter by tags
folder?: string; // Limit to folder
limit?: number; // Max results (default: 20)
}{
task: string; // Task description (required)
project?: string; // Project tag
priority?: string; // "high" | "medium" | "low"
due_date?: string; // YYYY-MM-DD format
context?: string; // Additional context
todo_file?: string; // Target file (default: "TODOs.md")
}Environment Variables
Variable | Description | Default |
| Path to Obsidian vault | Required |
| Transport mode: |
|
| HTTP server port (when using http transport) |
|
Vault Structure
The server creates/uses this structure:
Your Vault/
├── Claude-Sessions/ # Session reports
│ ├── project-name/ # Per-project folders
│ │ └── 2024-01-15-1430-feature-complete.md
│ └── 2024-01-15-1200-quick-fix.md
├── Daily Notes/ # Daily notes (configurable)
│ └── 2024-01-15.md
└── TODOs.md # TODO itemsDevelopment
# Watch mode
npm run dev
# Build
npm run build
# Run with stdio
OBSIDIAN_VAULT_PATH=/path/to/vault npm start
# Run with HTTP
MCP_TRANSPORT=http npm start
# Docker build
docker compose build
# Docker logs
docker compose logs -fTroubleshooting
"Server not initialized" error
The MCP client has a stale session. Solutions:
Claude Code: Run
/mcpto reconnectClaude Desktop: Restart the app
Docker: Run
docker compose restart
Connection refused
Ensure the server is running:
curl http://localhost:9111/healthPermission denied writing notes
If using Docker, ensure the vault is mounted with write access (:rw not :ro) in your .env file.
MCP tools not appearing
Check server logs:
docker compose logsVerify configuration path is correct
Restart your IDE/client
For JetBrains: Ensure "Codebase" mode is enabled
Zed shows "Server not active"
Zed doesn't support HTTP transport yet. Use stdio configuration instead.
License
MIT
Available Tools
10 toolsappend_to_daily_noteA
Append content to today's daily note. Creates the daily note if it doesn't exist.
Inputs: content (required), section, daily_folder.
append_to_noteA
Append content to an existing note. Useful for adding entries to running logs, daily notes, or accumulating information.
Inputs: path (required), content (required), add_timestamp.
create_todoC
Create or add a TODO item. Can create a new TODO note or append to existing TODO list.
Inputs: task (required), project, priority, due_date, +2 more.
find_backlinksC
Find all notes that link to a specific note.
Inputs: note_name (required).
link_notesC
Get suggestions for notes that might be related to given content or keywords.
Inputs: keywords (required), content, limit.
list_recent_notesB
List recently modified notes in the vault.
Inputs: limit, folder.
read_noteC
Read the content of a specific note.
Inputs: path (required).
search_notesB
Search notes in the vault by content, tags, or folder.
Inputs: query (required), tags, folder, limit.
write_noteC
Write or create a note in the Obsidian vault. Can be used for documentation, meeting notes, ideas, or any other content.
Inputs: path (required), content (required), title, tags, +1 more.
write_session_reportA
Write a session report to the Obsidian vault. Use this at the end of coding sessions, after completing significant tasks, or when wrapping up work phases. The report will be saved with proper frontmatter and timestamps.
Inputs: title (required), summary (required), details, files_changed, +4 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Most tools have distinct purposes, but there is some overlap between 'append_to_daily_note' and 'append_to_note' that could cause confusion, as both handle appending content. Additionally, 'create_todo' and 'write_note' might be ambiguous for creating new notes, though their specific focuses help differentiate them.
The naming follows a consistent verb_noun pattern throughout, such as 'append_to_daily_note', 'read_note', and 'search_notes'. Minor deviations like 'find_backlinks' (which could be 'list_backlinks') and 'link_notes' (which suggests linking but is for suggestions) slightly break the pattern, but overall it's highly readable and predictable.
With 10 tools, this server is well-scoped for managing an Obsidian vault, covering key operations like reading, writing, appending, searching, and listing notes. Each tool serves a clear purpose, and the count aligns well with typical MCP server ranges, avoiding bloat or thinness.
The toolset provides strong coverage for core Obsidian workflows, including CRUD operations (create, read, write, append) and utilities like search and backlinks. Minor gaps exist, such as the lack of update or delete operations for notes, which might require workarounds, but agents can handle most tasks effectively with the available tools.
Maintenance
Related MCP Connectors
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Persistent memory, hybrid search and a goal graph for AI agents, over stdio or remote HTTP.
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…
Personal wiki and memory layer for AI assistants. Persistent, structured memory across sessions.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to read, write, search, and navigate Obsidian vault notes with support for CRUD operations, full-text search, graph navigation, daily notes, and frontmatter management.3,487 npm-
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to Obsidian vaults via the Local REST API to search notes, retrieve content, and perform semantic searches. It features self-healing multi-URL connectivity and supports both stdio and HTTP transports for flexible deployment.283 npm13MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to search, create, and manage notes in an Obsidian vault via 40+ local tools.527 npmMIT
- AlicenseNot gradedqualityCmaintenanceExposes Obsidian vault tools via Model Context Protocol (MCP) server over stdio, HTTP, or SSE transports, enabling AI assistants to read, write, search, and manage vault notes with 28+ built-in tools and CLI bridge integration.1PolyForm Noncommercial 1.0.0