Designed with minimal access in mind. Here's exactly what we access and why.
Obsidian MCP follows the principle of least privilege. It only accesses what's strictly necessary to function.
Everything runs on your machine. Your notes never leave your filesystem.
100% open source. Every line of code is auditable on GitHub.
Only essential libraries. No network packages included.
We use a minimal set of dependencies, none of which make network calls:
| Package | Purpose | Network Access |
|---|---|---|
mcp |
MCP protocol implementation | No |
pathlib |
File path handling (stdlib) | No |
json |
Config parsing (stdlib) | No |
subprocess |
Opening obsidian:// URIs (stdlib) | No |
re |
YAML frontmatter parsing (stdlib) | No |
Notable absences: No requests, httpx, urllib.request, aiohttp, or any HTTP client libraries.
Don't take our word for it. Here's how to audit the code:
The full source is available at: github.com/ldraney/obsidian-mcp
No. The MCP only reads files within paths listed in Obsidian's obsidian.json. It cannot access your Documents, Downloads, or any other folders.
No. All processing happens locally between Claude Desktop and your filesystem. The MCP server has no network capabilities.
The subprocess module is used only to open obsidian:// URIs via your system's default handlerβthe same as clicking an Obsidian link in a browser.
When you use Claude Desktop, the content of notes Claude reads is sent to Anthropic's API (that's how Claude works). However, this MCP itself makes no network callsβit only facilitates local file access that Claude Desktop then uses.
Please do NOT open a public issue for security vulnerabilities. Email the maintainer directly (see GitHub profile) and allow time for a fix before public disclosure.