obsidian_read_fileLABSCO SUMMARY
Frontmatter and tags are edited in place, and Dataview queries come back as answers.
Two things separate this from a filesystem server pointed at a vault: obsidian_manage_frontmatter changes metadata atomically instead of rewriting the note, and obsidian_dataview_query lets the assistant ask the same questions your dashboards ask. The multi-vault mode routes by a vault parameter, so one server can hold work and personal side by side without mixing them.
What it is
An Obsidian vault server that talks to the Obsidian Local REST API plugin over HTTP. This fork adds multi-vault routing, a stateless HTTP mode for Claude.ai's remote connectors, and query tools for Dataview and the Tasks plugin.
What you get
- obsidian_read_file — a note's content and metadata, as markdown or JSON, with case-insensitive path fallback
- obsidian_update_file — append, prepend or overwrite, targeting a path, the active note, or a periodic note
- obsidian_search_replace — string or regex search and replace inside one note
- obsidian_global_search — text or regex across the vault, filtered by path and modification date, paginated
- obsidian_list_files — files and subfolders in a folder, filtered by extension or name regex, as a tree
- obsidian_manage_frontmatter — get, set or delete YAML keys without rewriting the whole file
- obsidian_manage_tags — add, remove or list tags in both frontmatter and inline content
- obsidian_delete_file — remove a file from the vault
- obsidian_dataview_query — run TABLE and LIST DQL queries against the vault
- obsidian_task_query — search tasks by status, date range and priority, in table, list or summary form
Requirements
Obsidian with the Local REST API plugin enabled, and its API key. For a single vault set OBSIDIAN_API_KEY and OBSIDIAN_BASE_URL; for several, pass a JSON array in OBSIDIAN_VAULTS with an id, apiKey and baseUrl per vault. Remote access through Claude.ai also needs MCP_AUTH_KEY. Runs over stdio or HTTP; set MCP_HTTP_STATELESS to true for Claude.ai compatibility.
Setup effort
Build from source — git clone https://github.com/BoweyLou/obsidian-mcp-server-enhanced.git
USE CASES
Finding a note you half remember
Search the whole vault by text or regex, narrowed by folder and how recently it changed.
Filing a note properly
Set the frontmatter keys and tags without rewriting the body of the note.
Getting a weekly review out of the vault
Query tasks by status, due date and priority, and read the result back as a summary.
Running the query behind a dashboard
Execute a Dataview TABLE or LIST query and get the rows back in the conversation.
Making the same edit across notes
Find the notes, then run a regex search and replace inside each one.
Appending to today's note
Add a line to the active or periodic note without opening Obsidian.
15 tools
Listed in project docs. Your client may show a different list.
obsidian_update_fileobsidian_search_replaceobsidian_global_searchobsidian_list_filesobsidian_manage_frontmatterobsidian_manage_tagsobsidian_delete_fileobsidian_dataview_queryobsidian_task_queryobsidian_periodic_notesobsidian_block_referenceobsidian_graph_analysisobsidian_template_systemobsidian_smart_linkingBEFORE YOU INSTALL
What to know first
Tools you get
15 tools named in the project's documentation. Five tools are this fork's additions: periodic notes, block references, graph analysis, templates and smart linking. search, fetch, create_note and similar names are HTTP actions for ChatGPT, not MCP tools.
Requires
OBSIDIAN_API_KEY in your environment
INSTALLATION
Connect your client
You clone and build this one yourself.
Server setup
git clone https://github.com/BoweyLou/obsidian-mcp-server-enhanced.git
cd obsidian-mcp-server-enhanced
npm install
npm run buildMCP Clients
Cline — single vault
{
"mcpServers": {
"obsidian-mcp-server": {
"command": "node",
"args": [
"<YOUR_PATH_TO_OBSIDIAN_MCP_SERVER_ENHANCED>/dist/index.js"
],
"env": {
"MCP_AUTH_KEY": "<YOUR_MCP_AUTH_KEY>",
"OBSIDIAN_API_KEY": "<YOUR_OBSIDIAN_API_KEY>",
"OBSIDIAN_BASE_URL": "http://127.0.0.1:27123",
"OBSIDIAN_ENABLE_CACHE": "true"
}
}
}
}Cline — multiple vaults
{
"mcpServers": {
"obsidian-mcp-server": {
"command": "node",
"args": [
"<YOUR_PATH_TO_OBSIDIAN_MCP_SERVER_ENHANCED>/dist/index.js"
],
"env": {
"MCP_AUTH_KEY": "<YOUR_MCP_AUTH_KEY>",
"OBSIDIAN_VAULTS": "[{\"id\":\"work\",\"name\":\"Work Vault\",\"apiKey\":\"work-api-key\",\"baseUrl\":\"http://127.0.0.1:27123\"},{\"id\":\"personal\",\"name\":\"Personal Vault\",\"apiKey\":\"personal-api-key\",\"baseUrl\":\"http://127.0.0.1:27122\"}]",
"OBSIDIAN_ENABLE_CACHE": "true"
}
}
}
}Claude.ai
Install Tailscale on the machine running the server and enable Tailscale Funnel for your account
Generate an MCP auth key:
openssl rand -hex 32In the .env file set MCP_AUTH_KEY to that key, MCP_TRANSPORT_TYPE=http, MCP_HTTP_PORT=3010 and MCP_HTTP_STATELESS=true, alongside your vault settings
Start the server:
npm run build && npm run start:httpExpose it through Funnel:
tailscale funnel 3010Find your public URL:
tailscale status --self | grep "Funnel on"In Claude.ai, add a remote MCP server with that URL, ending in /mcp?api_key= followed by your MCP auth key
https://<YOUR_DEVICE>.<YOUR_TAILNET>.ts.net/mcp?api_key=<YOUR_API_KEY>ChatGPT facade server
Set the facade's public URL to your Funnel hostname:
export CHATGPT_FACADE_PUBLIC_URL="https://<YOUR_DEVICE>.<YOUR_TAILNET>.ts.net"Set an admin approval secret: export CHATGPT_FACADE_ADMIN_SECRET="$(openssl rand -hex 24)"
Build and start the facade:
npm run build && npm run start:chatgptExpose only the facade through Funnel:
make tailscale-funnel-chatgptIn ChatGPT, create the connector with your public URL followed by /mcp; the facade signs ChatGPT in with OAuth
https://<YOUR_DEVICE>.<YOUR_TAILNET>.ts.net/mcp