Skip to main content

obsidian-mcp

CI Secret scan Release Python PyPI License

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:

  1. Use only MCP clients you trust.
  2. Start with OBSIDIAN_READ_ONLY=1.
  3. Consider a dedicated vault for AI-assisted workflows.
  4. 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)

Source distribution for trsdn-obsidian-mcp 0.1.2
File Size Uploaded
trsdn_obsidian_mcp-0.1.2.tar.gz 7.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for trsdn-obsidian-mcp 0.1.2
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page