obsidian-mcp
A focused Model Context Protocol server that gives local AI clients controlled filesystem access to an Obsidian vault. It runs over stdio, works without the Obsidian application or a REST plugin, and supports read-only operation.
Use it to: search notes, read Markdown, browse folders, and optionally create, update, move, or delete notes from any stdio-capable MCP client.
Why Obsidian MCP?
- Local by design: no HTTP server, API token, or Obsidian plugin.
- Vault-contained paths: resolved paths and symbolic links cannot escape the configured vault root.
- Read-only mode: one environment variable disables every write tool.
- Small surface area: ten predictable tools backed by ordinary Markdown files.
- Fast search: uses ripgrep when available, with a pure-Python fallback.
Quick Start
Requirements: Python 3.11 or newer and uv.
The package is published to PyPI as trsdn-obsidian-mcp (the PyPI name
obsidian-mcp is taken by an unrelated project). The import name and the
console command stay obsidian_mcp / obsidian-mcp.
export OBSIDIAN_VAULT_PATH="/path/to/your/Obsidian vault"
export OBSIDIAN_READ_ONLY=1
# run without installing
uvx --from trsdn-obsidian-mcp obsidian-mcp
# or install it
pip install trsdn-obsidian-mcp
obsidian-mcp
The server communicates over stdio and is normally started by an MCP client, not from an interactive terminal.
Client Setup
Replace /path/to/your/Obsidian vault in the examples below.
VS Code
Add the server to .vscode/mcp.json:
{
"servers": {
"obsidian": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"trsdn-obsidian-mcp",
"obsidian-mcp"
],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/Obsidian vault",
"OBSIDIAN_READ_ONLY": "1"
}
}
}
}
Claude Desktop
Add the server under mcpServers in Claude Desktop's configuration:
{
"mcpServers": {
"obsidian": {
"command": "uvx",
"args": [
"--from",
"trsdn-obsidian-mcp",
"obsidian-mcp"
],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/Obsidian vault",
"OBSIDIAN_READ_ONLY": "1"
}
}
}
}
From a local checkout
git clone https://github.com/trsdn/obsidian-mcp.git
cd obsidian-mcp
uv sync --locked --no-dev
uv run obsidian-mcp
Restart the client after changing its MCP configuration.
Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
OBSIDIAN_VAULT_PATH |
Yes | None | Absolute path to an existing Obsidian vault |
OBSIDIAN_READ_ONLY |
No | 0 |
Set to 1, true, or yes to disable write tools |
Read-only mode blocks write_note, append_note, move_note, and
delete_note. All paths passed to tools are relative to the configured vault.
Available Tools
| Tool | Access | Purpose |
|---|---|---|
vault_info |
Read | Return vault path, access mode, and Markdown file count |
list_notes |
Read | List Markdown files under a folder |
list_folders |
Read | List subfolders |
read_note |
Read | Read a note |
search_filename |
Read | Match text or a regular expression against note paths |
search_content |
Read | Search note bodies with text or a regular expression |
write_note |
Write | Create or overwrite a note |
append_note |
Write | Append content, creating the note when necessary |
move_note |
Write | Rename or move a note within the vault |
delete_note |
Write | Delete a note |
Security Model
Obsidian MCP trusts the local process that starts it. It does not provide authentication, user-level authorization, sandboxing, or network controls. Path validation keeps MCP tool operations inside the selected vault, but it cannot restrict another local process that already has filesystem access.
For safer operation:
- Use only MCP clients you trust.
- Start with
OBSIDIAN_READ_ONLY=1. - Consider a dedicated vault for AI-assisted workflows.
- Protect the vault with normal operating-system permissions and backups.
See SECURITY.md for the full security policy and private vulnerability reporting process.
Development
uv sync --locked --all-groups
uv run ruff check .
uv run ruff format --check .
uv run pytest --cov=obsidian_mcp --cov-fail-under=85
uv build
Tests use temporary directories and never require a real Obsidian vault. CI runs on Python 3.11, 3.12, 3.13, and 3.14.
Project
Licensed under the MIT License.
Metadata
Release files for trsdn-obsidian-mcp 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| trsdn_obsidian_mcp-0.1.2.tar.gz | 7.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| trsdn_obsidian_mcp-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.7 kB
Release files / trsdn_obsidian_mcp-0.1.2.tar.gz
| Download URL | trsdn_obsidian_mcp-0.1.2.tar.gz |
|---|---|
| Size | 7.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
99c9f2304c046a15895da0c4a2fd8dcd301d9891621806cc8575fef235e8b9ef
|
|
BLAKE2b-256 checksum How to use checksums |
cc0a40710a789ff8d1fed56f574e2dba1e55cfb5bb858beee66aa21c2c3ccb9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 24, 2026.
Transparency logRelease files / trsdn_obsidian_mcp-0.1.2-py3-none-any.whl
| Download URL | trsdn_obsidian_mcp-0.1.2-py3-none-any.whl |
|---|---|
| Size | 8.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
602ac479225471cea6afa6e9b948888d8809e960cf374759bfe89eeac419580d
|
|
BLAKE2b-256 checksum How to use checksums |
b812682dca5d8b82ff40cb64d606a44fa68a49b204c2916b64e4f77792635305
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 24, 2026.
Transparency log