obsidian-vault-mcp
Provides read-only access to an Obsidian vault, enabling search across notes, reading individual notes, listing folders, and discovering recent changes while honoring configured folder, filename, and content exclusions.
Enables optional task capture by adding tasks with a title, note, and priority to a Todoist inbox.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
obsidian-vault-mcp
A small, read-only MCP server that lets Claude search and read an Obsidian vault that lives on your own server. You add it to Claude as a custom connector, sign in with GitHub, and from then on Claude on the web, desktop, or phone can answer from your notes and cite the note it used.
The vault never leaves your server. The server has no tool that writes to it.
Why I built it
My notes are the record of my work: projects, people, and decisions. Claude on my laptop could read them from disk, but Claude on my phone could not, so it answered from memory or from stale exports. I wanted the same notes everywhere, without uploading the vault to a third party and without opening it to anyone who learns a URL.
The first version was protected by a secret path in the URL plus an IP allowlist. That was not good enough: connectors call from Anthropic's cloud, and that address range is shared by every Claude user, so the URL was the only real credential. This version replaces it with a proper sign-in.
Related MCP server: Obsidian MCP Server
How access is controlled
Layer | What it does |
Identity | OAuth 2.1 with GitHub sign-in (FastMCP's GitHub provider), scope |
Who may read | Every MCP request is checked against |
Who may register | Only Claude's callback URL may register as an OAuth client, so a stranger cannot register their own callback and trick you into approving it |
Network | The reverse proxy lets only Anthropic's address range reach the MCP endpoints; the sign-in pages stay open for your own browser |
Fail-safe | The server refuses to start without its OAuth settings |
At rest | Client registrations and tokens are stored encrypted |
Read-only | No write tools on the vault; the systemd unit can write to its state directory and nowhere else |
Revocation | Revoke the OAuth App in your GitHub settings and every connection is gone |
On top of that you decide what is in scope: folders to hide, filename prefixes to hide, and a regular expression that withholds any note whose filename or body matches it.
Tools
Tool | Purpose |
| Case-insensitive search, regex allowed; title matches and recent notes first |
| One note, capped at 40,000 characters |
| One level of the folder tree |
| What changed lately |
| Optional: search a Markdown task file in Obsidian Tasks format |
| Optional: capture a task in a Todoist inbox, the only write the server can make |
Set-up
You need a Linux server that already holds the vault (for example through Nextcloud, Syncthing, or git), a domain name for it, Python 3.10 or newer, and a reverse proxy with TLS. The examples use Apache and systemd.
Clone and install.
git clone <this repository> /opt/obsidian-vault-mcp cd /opt/obsidian-vault-mcp python3 -m venv .venv .venv/bin/pip install -r requirements.txtCreate a GitHub OAuth App at github.com/settings/developers. Homepage URL
https://mcp.example.com, callback URL exactlyhttps://mcp.example.com/auth/callback. Leave device flow off.Copy
.env.exampleto/etc/vault-mcp.env, fill it in, and restrict it:chown root:root /etc/vault-mcp.env && chmod 600 /etc/vault-mcp.env.Install
deploy/vault-mcp.serviceas/etc/systemd/system/vault-mcp.service, set the service user and the path, thensystemctl daemon-reload && systemctl enable --now vault-mcp.Get a certificate for the domain and install
deploy/apache-vhost.conf.exampleas a site. Check Anthropic's current address range before you copy the one in the file.Check it from the server itself:
Request
Expected
curl -X POST http://127.0.0.1:8788/mcp401, no token
curl https://mcp.example.com/mcp403, you are outside the allowed range
curl https://mcp.example.com/authorize400, reachable but missing parameters
In Claude on the web: Settings, Connectors, Add custom connector, URL
https://mcp.example.com/mcp, leave the OAuth fields empty. Connect, approve the consent page, and sign in with GitHub. The connector then follows your account to the desktop and phone apps.
To stop it at once: systemctl stop vault-mcp.
Test
.venv/bin/python selftest.pyIt runs without a network or a GitHub account and checks the gate and the visibility rules: no start without auth settings, 401 without a token, only Claude's callback may register, another GitHub login is refused, and hidden folders and sensitive notes stay hidden for the allowed login as well.
Limits, stated plainly
Whatever Claude reads through the connector passes through Anthropic's service, as with any conversation. This server keeps the vault off third-party storage; it does not keep note content out of the conversations you have.
The content filter is a regular expression, not a classifier. Treat it as a second line behind the folder exclusions.
Search is a plain scan of the Markdown files. It is fast enough for a few thousand notes and needs no index.
I run it for one person. More than a handful of users would want per-user scopes, which it does not have.
Tested with FastMCP 2.14.7 behind Apache 2.4 on Ubuntu 24.04.
Licence
MIT, see LICENSE.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
1Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables Claude to read, write, search, and manage Obsidian vault notes with Git-backed sync support for multi-device access and extensible AI workflows.3,971 npm-
- AlicenseNot gradedqualityDmaintenanceConnects Claude Desktop to your Obsidian vault, enabling reading, writing, searching, and organizing notes locally.1MIT
- AlicenseAqualityDmaintenanceConnects Claude Desktop to an Obsidian vault, enabling reading, searching, capturing ideas, and managing notes through natural language.2111 npmMIT
- AlicenseNot gradedqualityCmaintenanceConnects Claude to a local Obsidian vault, enabling listing, reading, searching, and optionally editing notes via natural language, with all operations running locally.3,487 npmMIT