obsidian-mcp-server
Provides tools to manage Obsidian vaults, including reading, writing, searching, and deleting notes, as well as managing tags and navigating links.
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 search my notes for 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
A Model Context Protocol (MCP) server for Obsidian vault operations. Works with any MCP-compatible client including Claude Desktop, Cursor, Windsurf, and VS Code.
Features
Full Vault Access: Read, write, search, and delete notes
Link Navigation: Get outgoing links and backlinks for any note
Tag Management: List all tags, find notes by tag
Flexible Search: Search by content, title, tags, or folder
Two Transports: Stdio (local) or Streamable HTTP (remote)
Modern MCP: Built with MCP SDK 1.6.1, Zod validation, tool annotations
Related MCP server: Obsidian MCP Server
Quick Start
# Install dependencies
npm install
# Build
npm run build
# Run (stdio mode)
OBSIDIAN_VAULT_PATH=/path/to/vault npm start
# Run (HTTP mode)
OBSIDIAN_VAULT_PATH=/path/to/vault npm run start:httpConfiguration
Environment Variables
Variable | Required | Default | Description |
| Yes | - | Absolute path to your Obsidian vault |
| No |
| Transport mode: |
| No |
| HTTP server port |
| No |
| HTTP server host |
| No |
| Enable debug logging |
MCP Client Configuration
Claude Desktop / Cursor / Windsurf (stdio)
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/path/to/obsidian-mcp-server/dist/index.js"],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/vault"
}
}
}
}HTTP Mode
Start the server:
OBSIDIAN_VAULT_PATH=/path/to/vault TRANSPORT=http npm startConnect via http://localhost:3000/mcp
Available Tools
Note Operations
Tool | Description |
| List notes with pagination and folder filtering |
| Read a note's full content and metadata |
| Create or update a note |
| Permanently delete a note |
| Search notes by content, tags, or folder |
Vault Information
Tool | Description |
| Get vault statistics (note count, size, etc.) |
| List all tags with usage counts |
| Get all notes with a specific tag |
Link Navigation
Tool | Description |
| Get outgoing links from a note |
| Get backlinks to a note |
Response Formats
All tools support a response_format parameter:
json(default): Structured JSON datamarkdown: Human-readable markdown
Development
# Development mode (with auto-reload)
npm run dev
# Build
npm run build
# Test (builds and runs --help)
npm testProject Structure
src/
index.ts # Entry point, transport handling
server.ts # MCP server with tool registrations
vault.ts # Vault operations (CRUD, search, links)
schemas.ts # Zod input validation schemas
types.ts # TypeScript type definitionsLicense
MIT
Available Tools
10 toolsobsidian_delete_noteDelete Obsidian NoteADestructiveIdempotent
Permanently delete a note from the vault.
WARNING: This action cannot be undone. The note file will be removed from the filesystem.
Inputs: path (required).
obsidian_get_backlinksGet Note BacklinksARead-onlyIdempotent
Get backlinks to a specific note (notes that link TO this note).
Useful for understanding how notes are connected and finding related content.
Returns: { "note": string, "backlinks": [{ "path": string }] }
Inputs: path (required), response_format.
obsidian_get_linksGet Note LinksARead-onlyIdempotent
Get outgoing links from a specific note.
Extracts both wiki-style [[links]] and markdown links. Shows whether each linked note exists in the vault.
Returns: { "note": string, "links": [{ "path": string, "displayText"?: string, "exists": boolean }] }
Inputs: path (required), response_format.
obsidian_get_tagged_notesGet Notes by TagARead-onlyIdempotent
Get all notes that have a specific tag.
The tag can be provided with or without the # prefix.
Returns: { "tag": string, "total": number, "notes": [{ "path": string, "name": string, "tags": string[] }] }
Inputs: tag (required), limit, response_format.
obsidian_list_notesList Obsidian NotesARead-onlyIdempotent
List notes in the Obsidian vault with pagination support.
Returns a list of note paths, names, tags, and modification dates. Use 'folder' to filter to a specific directory. Use 'offset' and 'limit' for pagination on large vaults.
Returns JSON by default with schema: { "total": number, "count": number, "offset": number, "notes": [{ "path": string, "name": string, "tags": string[], "modified": string }], "hasMore": boolean, "nextOffset"?: number }
Inputs: limit, folder, offset, response_format.
obsidian_list_tagsList All TagsARead-onlyIdempotent
List all tags used in the vault with their usage counts.
Tags are extracted from both YAML frontmatter and inline #tags. Results are sorted by frequency (most used first).
Returns: { "total": number, "tags": [{ "tag": string, "count": number }] }
Inputs: response_format.
obsidian_read_noteRead Obsidian NoteARead-onlyIdempotent
Read the full content of a specific note by path.
The path can be with or without .md extension. Set include_frontmatter=false to get only the markdown content.
Returns: { "path": string, "name": string, "content": string, "frontmatter"?: object, "tags": string[], "modified": string }
Inputs: path (required), include_frontmatter.
obsidian_search_notesSearch Obsidian NotesARead-onlyIdempotent
Search notes by content, title, tags, or folder.
'query': Full-text search in content and titles
'tags': Filter to notes with any of these tags
'folder': Filter to notes in a specific folder
'include_content': Include full content in results (default: false)
Returns ranked results with match information: { "total": number, "results": [{ "path": string, "name": string, "score": number, "matches": string[], "tags": string[], "excerpt"?: string }] }
Inputs: tags, limit, query, folder, +2 more.
obsidian_vault_statsGet Vault StatisticsARead-onlyIdempotent
Get statistics about the Obsidian vault.
Returns: { "totalNotes": number, "totalSize": number (bytes), "totalTags": number, "lastModified": string (ISO date) }
Inputs: response_format.
obsidian_write_noteWrite Obsidian NoteAIdempotent
Create or update a note in the vault.
Provide markdown content and optionally YAML frontmatter. Directories are created automatically if they don't exist. Set overwrite=false to prevent overwriting existing notes.
Returns the created/updated note metadata.
Inputs: path (required), content (required), overwrite, frontmatter.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool targets a distinct operation: CRUD, search, stats, links, backlinks, and tag management. Even similar tools like list_tags and get_tagged_notes serve clearly different purposes (listing all tags vs. retrieving notes with one tag).
All tools follow a consistent pattern: obsidian_ + verb_noun in lowercase snake_case. The verbs (delete, list, read, write, search, get) are predictable and match the action.
With 10 tools, the server is well-scoped for its purpose. Each tool covers a necessary aspect of Obsidian vault management without unnecessary bloat.
The tool surface provides full coverage for note CRUD, search, link graph, and tag operations. It supports creating, reading, updating (via write), deleting, listing, searching, and exploring connections. Minor missing operations like rename/move are not critical gaps.
Maintenance
Related MCP Connectors
Hosted MCP server for Obsidian Sync vaults: read, search, edit notes. Not affiliated with Obsidian.
Search, read, and safely update Markdown notes in your connected Phasoric knowledge vaults.
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables comprehensive management of Obsidian vaults with full CRUD operations, advanced search, link/tag extraction, backlinks discovery, frontmatter editing, and template-based note creation through natural language.16MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Obsidian vaults for creating, reading, searching, and managing notes, daily notes, TODOs, session reports, and backlinks through both stdio and HTTP/SSE transports.103,512 npm4MIT
- FlicenseAqualityNot gradedmaintenanceIntegrates with the Obsidian Local REST API to enable reading, creating, editing, and searching notes within an Obsidian vault. It supports advanced operations like Dataview queries and partial file updates through both stdio and HTTP transport modes.87,397 npm-
- FlicenseAqualityDmaintenanceEnables interaction with multiple Obsidian vaults through natural language, supporting note operations, search, and vault management with both REST and filesystem backends.17-