Obsidian MCP Server
Provides 40+ tools for searching, creating, and managing notes in an Obsidian vault, including full-text search, tag management, daily notes, templates, backlinks, and more.
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 machine learning"
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
Connect AI assistants like Claude to your Obsidian vault via Model Context Protocol. 40+ tools for searching, creating, and managing your notesโall 100% local.
What Can You Do?
You Say | What Happens |
"Search my notes for machine learning" | Searches your entire vault |
"Create a meeting note for tomorrow" | Creates a formatted meeting note |
"What links to my Projects note?" | Shows all backlinks |
"Add to my daily note: finished the API" | Appends to today's daily note |
"Find orphan notes" | Lists unconnected notes |
Related MCP server: Obsidian MCP Server
Quick Start
1. Install the Obsidian Plugin
Obsidian โ Settings โ Community plugins โ Browse
Search "Local REST API" โ Install โ Enable
Settings โ Local REST API โ Copy your API Key
2. Install the MCP Server
Option A: Install from npm (recommended)
npm install -g @aniketbiswas/obsidian-mcp-serverOption B: Install from source
git clone https://github.com/aniketbiswas/obsidian-mcp.git
cd obsidian-mcp
npm install && npm run build
npm link # Makes it available globally3. Configure Claude Desktop
Edit the config file:
OS | Config Path |
macOS |
|
Windows |
|
Linux |
|
If installed via npm:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["node_modules/@aniketbiswas/obsidian-mcp-server/build/index.js"],
"env": {
"OBSIDIAN_API_KEY": "your-api-key-here"
}
}
}
}Note: If the above doesn't work (common with nvm), use full paths:
{ "command": "/usr/local/bin/node", "args": ["/usr/local/lib/node_modules/@aniketbiswas/obsidian-mcp-server/build/index.js"] }Find your paths with:
which nodeandnpm root -g
If installed from source:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/FULL/PATH/TO/obsidian-mcp-server/build/index.js"],
"env": {
"OBSIDIAN_API_KEY": "your-api-key-here"
}
}
}
}Windows paths: Use
C:\\Users\\Name\\...orC:/Users/Name/...
4. Restart Claude Desktop
Make sure Obsidian is running, then try: "Show me my vault status"
Available Tools
vault_status ยท list_files ยท list_all_files ยท get_vault_structure ยท get_file_stats ยท delete_file
read_note ยท create_note ยท update_note ยท append_to_note ยท prepend_to_note ยท insert_under_heading ยท replace_in_note ยท delete_note ยท copy_note
search_notes ยท simple_search ยท search_by_tag ยท search_in_folder ยท find_notes_by_name ยท get_recent_notes ยท search_with_context
get_frontmatter ยท update_frontmatter ยท set_frontmatter_property ยท get_tags ยท add_tags ยท remove_tags ยท add_aliases ยท get_all_tags_in_vault
open_note ยท get_active_note ยท append_to_active_note ยท get_commands ยท execute_command ยท quick_capture
get_daily_note ยท append_to_daily_note ยท get_periodic_note ยท append_to_periodic_note ยท daily_journal_entry ยท daily_standup
get_outgoing_links ยท get_backlinks ยท find_broken_links ยท find_orphan_notes ยท add_link_to_note ยท get_link_graph_data
create_note_from_template ยท create_meeting_note ยท create_project_note ยท list_templates
Built-in: meeting ยท project ยท book ยท article ยท person ยท recipe ยท decision
Configuration
Variable | Required | Default | Description |
| โ | โ | From Local REST API plugin |
|
| API host | |
|
| API port | |
|
| Use HTTPS | |
|
| Verify SSL certificate |
Troubleshooting
This is usually a PATH issue. Claude Desktop doesn't inherit your shell's PATH (especially with nvm).
Solution: Use full absolute paths in your config:
Find your node path:
which nodeFind global modules:
npm root -gUpdate config with full paths:
{
"mcpServers": {
"obsidian": {
"command": "/Users/YOU/.nvm/versions/node/v22.x.x/bin/node",
"args": ["/Users/YOU/.nvm/versions/node/v22.x.x/lib/node_modules/@aniketbiswas/obsidian-mcp-server/build/index.js"],
"env": {
"OBSIDIAN_API_KEY": "your-key"
}
}
}
}Check logs: ~/Library/Logs/Claude/mcp.log (macOS)
Validate JSON:
cat config.json | python3 -m json.toolPath must be absolute (starts with
/orC:\)Restart Claude Desktop completely (Cmd+Q / right-click quit)
Windows: ensure file is
.jsonnot.json.txt
Obsidian must be running with Local REST API enabled
Test API:
curl -k https://127.0.0.1:27124/ -H "Authorization: Bearer YOUR_KEY"Regenerate API key if needed
Use full path: "command": "C:\\Program Files\\nodejs\\node.exe"
Development
npm run build # Compile TypeScript
npm run dev # Watch mode
npm run inspector # Test tools in browser UIAdding Tools
Create/edit files in src/tools/, then rebuild:
server.tool("my_tool", "Description", { param: z.string() }, async ({ param }) => {
return { content: [{ type: "text", text: "Result" }] };
});FAQ
Is it free? Yes, the Local REST API plugin is free.
Are my notes sent to the cloud? No. Everything stays local. Only your conversation with Claude goes to Anthropic (like any Claude chat).
Works with Obsidian Sync? Yes, it accesses your local vault files.
Contributing
PRs welcome! Fork โ create branch โ commit โ open PR.
License
MIT โ see LICENSE
Built with MCP SDK ยท Powered by Local REST API
Available Tools
52 toolsadd_aliasesA
Add aliases (alternative names) to a note's frontmatter. Aliases help find notes by different names.
Inputs: path (required), aliases (required).
add_link_to_noteC
Add an internal link ([[note]]) to a note. Can append to the end or insert at a specific location.
Inputs: sourcePath (required), targetPath (required), position, asListItem, +1 more.
add_tagsA
Add tags to a note's frontmatter. Tags are added without duplicates. Creates frontmatter if needed.
Inputs: path (required), tags (required).
append_to_active_noteA
Append content to the currently active note in Obsidian. Useful for quickly adding content to whatever note you're working on.
Inputs: content (required), ensureNewline.
append_to_daily_noteA
Append content to today's daily note. Creates the daily note if it doesn't exist.
Inputs: content (required), heading, addTimestamp.
append_to_noteA
Append content to the end of an existing note. Useful for adding new sections, logging entries, or updating lists.
Inputs: path (required), content (required), ensureNewline, createIfMissing.
append_to_periodic_noteB
Append content to a periodic note. Can append to current period's note or a specific date.
Inputs: period (required), content (required), day, year, +1 more.
copy_noteA
Copy a note to a new location in the vault. The original note is preserved.
Inputs: sourcePath (required), destinationPath (required), overwrite.
create_meeting_noteC
Create a structured meeting note with attendees, agenda, and action items.
Inputs: title (required), date, agenda, folder, +1 more.
create_noteA
Create a new note in the Obsidian vault. Can include frontmatter properties like tags, aliases, and custom fields.
Inputs: path (required), content (required), overwrite, frontmatter.
create_note_from_templateA
Create a new note using a built-in template. Available templates: meeting, project, book, article, person, recipe, decision.
Inputs: title (required), template (required), folder, customFields.
create_project_noteC
Create a structured project note with goals, tasks, and timeline.
Inputs: title (required), goals, folder, status, +2 more.
daily_journal_entryB
Add a structured journal entry to today's daily note. Creates a nicely formatted journal entry with optional sections.
Inputs: entry (required), mood, todos, gratitude, +1 more.
daily_standupA
Add a daily standup/scrum entry to today's daily note. Uses the classic standup format: yesterday, today, blockers.
Inputs: today (required), yesterday (required), blockers.
delete_fileA
Delete a file from the Obsidian vault. WARNING: This permanently removes the file. Use with caution.
Inputs: path (required), confirm (required).
delete_noteA
Delete a note from the Obsidian vault. WARNING: This permanently removes the note. Use with caution.
Inputs: path (required), confirm (required).
execute_commandA
Execute an Obsidian command by its ID. Use get_commands to find available commands and their IDs. Examples: 'app:toggle-left-sidebar', 'editor:toggle-fold'
Inputs: commandId (required).
find_broken_linksA
Find broken internal links in the vault. Identifies [[links]] that point to notes that don't exist.
Inputs: folder.
find_notes_by_nameA
Find notes by their filename. Searches for notes whose name contains the specified text.
Inputs: name (required), exactMatch.
find_orphan_notesA
Find orphan notes - notes with no incoming links from other notes. These are notes that aren't connected to the rest of your knowledge graph.
Inputs: folder, includeUnlinked.
get_active_noteA
Get the content of the currently active (focused) note in Obsidian. Returns the note's content, path, and metadata.
Inputs: includeStats, includeContent.
get_all_tags_in_vaultA
Get a list of all unique tags used across the entire vault. Useful for understanding tag taxonomy and finding related notes.
Inputs: folder.
get_backlinksA
Find all notes that link to a specific note (backlinks). Searches the entire vault for [[note]] references.
Inputs: path (required), includeContext.
get_commandsA
Get a list of all available commands in Obsidian. Commands are actions that can be executed, like 'Toggle fold' or 'Export to PDF'.
Inputs: filter.
get_daily_noteA
Get the content of today's daily note. Creates the note if it doesn't exist (using Obsidian's daily notes settings). Requires Daily Notes core plugin or Periodic Notes plugin.
Inputs: includeContent.
get_file_statsA
Get statistics about files in the vault or a specific directory. Shows file counts by extension, total files, and directory counts.
Inputs: path.
get_frontmatterA
Get the frontmatter (YAML metadata) from a note. Returns all frontmatter fields including tags, aliases, and custom properties.
Inputs: path (required).
get_link_graph_dataA
Get link graph data for a folder or the entire vault. Returns nodes (notes) and edges (links) for visualization.
Inputs: folder, maxNotes.
get_outgoing_linksA
Get all outgoing links from a note. Returns internal links ([[note]]), external links, and tags.
Inputs: path (required).
get_periodic_noteA
Get a periodic note for a specific period and date. Supports daily, weekly, monthly, quarterly, and yearly notes. Requires the Periodic Notes plugin for non-daily periods.
Inputs: period (required), day, year, month.
get_recent_notesA
Get a list of recently modified markdown notes. Useful for finding notes you've worked on recently.
Inputs: limit, folder.
get_tagsA
Get all tags from a note. Includes tags from frontmatter and inline tags (#tag) in the content.
Inputs: path (required).
get_vault_structureA
Get a tree-like structure of folders in the Obsidian vault. Useful for understanding the vault organization. Only shows directories, not individual files.
Inputs: path, maxDepth.
insert_under_headingA
Insert content under a specific heading in a note. Useful for adding content to specific sections without modifying the rest.
Inputs: path (required), content (required), heading (required), headingLevel, +1 more.
list_all_filesA
Recursively list all files in the Obsidian vault. Can start from a specific directory and filter by file extension. Useful for getting a complete view of vault structure.
Inputs: path, maxDepth, extensions.
list_filesA
List files and folders in the Obsidian vault. Can list the root directory or a specific folder. Returns names of files and directories (directories end with /).
Inputs: path.
list_templatesA
List all available built-in templates and their descriptions.
Inputs: no named parameters.
open_noteA
Open a note in the Obsidian user interface. Makes the note visible and active in Obsidian.
Inputs: path (required), newPane.
prepend_to_noteA
Prepend content to the beginning of a note (after frontmatter). Useful for adding headers, timestamps, or important notices.
Inputs: path (required), content (required), ensureNewline.
quick_captureA
Quickly capture a thought, idea, or note. Appends to a designated capture file with timestamp. Great for inbox-style note capture.
Inputs: content (required), format, captureFile, addTimestamp.
read_noteB
Read the content of a note from the Obsidian vault. Returns the full content including frontmatter, or can return parsed sections.
Inputs: path (required), includeStats, includeFrontmatter.
remove_tagsA
Remove tags from a note's frontmatter. Only removes tags from frontmatter, not inline tags.
Inputs: path (required), tags (required).
replace_in_noteB
Find and replace text in a note. Useful for making specific edits without replacing the entire content.
Inputs: find (required), path (required), replace (required), replaceAll.
search_by_tagA
Find all notes that have specific tags. Tags can be in frontmatter or inline in the content. Can search for multiple tags (notes must have all specified tags).
Inputs: tags (required), matchAll.
search_in_folderB
Search for notes within a specific folder. Combines folder path filtering with text search.
Inputs: folder (required), query, includeSubfolders.
search_notesA
Search for notes in the Obsidian vault using Obsidian's query syntax. Supports operators like: path:, file:, tag:#, content in quotes, and more. Returns matching files with relevance scores.
Inputs: query (required), limit.
search_with_contextA
Search notes and return results with content snippets/context. Useful for previewing search results without opening each note.
Inputs: query (required), limit, contextLength.
set_frontmatter_propertyA
Set a single frontmatter property in a note. Creates the property if it doesn't exist.
Inputs: key (required), path (required), value (required).
simple_searchA
Simple text search across all notes in the vault. Searches for the exact text (case-insensitive). Good for finding specific phrases or terms.
Inputs: query (required), limit.
update_frontmatterA
Update frontmatter fields in a note. Can add new fields or update existing ones. Existing fields not specified are preserved.
Inputs: path (required), properties (required).
update_noteA
Update the content of an existing note in the Obsidian vault. Replaces the entire content of the note.
Inputs: path (required), content (required), updateModified, preserveFrontmatter.
vault_statusA
Check the connection to Obsidian and get server status information. Use this to verify the MCP server can communicate with Obsidian.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogโฆ
TDQS
Scored across 52 tools
Many tools have overlapping purposes: there are six different search tools (search_notes, simple_search, search_by_tag, search_in_folder, find_notes_by_name, search_with_context) and five content-edit tools (update_note, replace_in_note, insert_under_heading, append_to_note, prepend_to_note). While descriptions provide distinctions, an agent may struggle to choose the right one for a given task.
Most tools follow a verb_noun pattern with underscores, but verbs are inconsistent (list vs. get vs. find vs. search). A few tools like daily_journal_entry, daily_standup, and quick_capture deviate from the verb-first pattern, making the naming system mixed but still readable.
With 52 tools, this is far beyond the typical well-scoped range. Even for a complex application like Obsidian, the sheer number creates unnecessary cognitive load and makes tool selection more difficult. This qualifies as an extreme mismatch.
The toolset is highly comprehensive, covering note CRUD, advanced search, frontmatter/tag management, daily/periodic notes, templates, backlinks, graph data, and command execution. Minor gaps exist (e.g., no move/rename note, no folder creation/deletion), but these are workable.
Maintenance
Related MCP Connectors
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analyโฆ
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, aโฆ
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Turn your notes, links and conversations into a Living Brain your AI tools share and build on.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Obsidian vaults, providing tools for reading, creating, editing and managing notes and tags.3,512 npm750MIT
- AlicenseAqualityCmaintenanceEnables AI agents to explore, search, and manage local Obsidian vault documents with tools for document search, automatic frontmatter property generation, and attachment organization.5205 npm2ISC
- 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,512 npm-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to manage Obsidian vaults programmatically with 28 tools for reading, writing, editing, and analyzing notes.MIT