loading…
Search for a command to run...
loading…
Local-first Obsidian vault MCP server for Codex, Claude Desktop, and other MCP clients. Works directly with markdown files, no Obsidian plugin, API key, cloud s
Local-first Obsidian vault MCP server for Codex, Claude Desktop, and other MCP clients. Works directly with markdown files, no Obsidian plugin, API key, cloud service, or running Obsidian app required. Includes read-only mode, backup-on-write, path isolation, and setup examples.
CI Python MCP Obsidian Codex Local first License: MIT
Local-first MCP server for working with an Obsidian vault.
This is for people who want MCP clients to work directly with markdown files on disk.
Independent open-source project. Not affiliated with Obsidian, Anthropic, OpenAI, or any MCP client.
It lets MCP clients work with your vault to:
All directly against your local markdown files.
There are already a handful of Obsidian MCP servers. Many depend on the Obsidian Local REST API plugin or run as an Obsidian plugin. This project is intentionally simpler:
| Need | This project |
|---|---|
| Use Obsidian with Codex | Yes, with ~/.codex/config.toml examples |
| Use Obsidian with Claude Desktop | Yes, with JSON config examples |
| Require an Obsidian plugin | No |
| Require an API key | No |
| Require Obsidian to be open | No |
| Read/write markdown files directly | Yes |
| Work over a remote HTTP API | No, local stdio MCP only |
Designed to be useful without being reckless:
configure_vault - set or change the vault pathget_note - read one markdown note by vault-relative pathcreate_note - create a new markdown note with optional metadataupdate_note - update note content and/or frontmatterdelete_note - delete a markdown notelist_notes - list notes in the vault or a foldersearch_notes - search note title, content, and tagsget_all_tags - list unique tags from frontmatter and inline tagsget_backlinks - find notes that link to a noteget_note_links - extract wikilinks from a notecreate_folder - create a folder inside the vaultget_folder_structure - return the vault folder treeShort launch clip:
Useful follow-up demos to record:
Requirements:
git clone https://github.com/dot-RealityTest/obsidian-codex-mcp.git
cd obsidian-codex-mcp
python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip
.venv/bin/python -m pip install -r requirements.txt
Verify against your vault:
OBSIDIAN_VAULT_PATH="/absolute/path/to/your/vault" .venv/bin/python test_server.py
Add this to ~/.codex/config.toml and restart Codex:
[mcp_servers.obsidian]
command = "/absolute/path/to/obsidian-codex-mcp/.venv/bin/python"
args = ["/absolute/path/to/obsidian-codex-mcp/server.py"]
enabled = true
[mcp_servers.obsidian.env]
OBSIDIAN_VAULT_PATH = "/absolute/path/to/your/obsidian-vault"
OBSIDIAN_READ_ONLY = "false"
OBSIDIAN_BACKUP_ON_WRITE = "true"
For a safer read/search-only setup:
OBSIDIAN_READ_ONLY = "true"
Add this to claude_desktop_config.json:
{
"mcpServers": {
"obsidian": {
"command": "/absolute/path/to/obsidian-codex-mcp/.venv/bin/python",
"args": ["/absolute/path/to/obsidian-codex-mcp/server.py"],
"env": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/your/obsidian-vault",
"OBSIDIAN_READ_ONLY": "false",
"OBSIDIAN_BACKUP_ON_WRITE": "true"
}
}
}
}
| Variable | Required | Default | Description |
|---|---|---|---|
OBSIDIAN_VAULT_PATH |
yes | none | Absolute path to the vault folder. |
OBSIDIAN_READ_ONLY |
no | false |
When true, create/update/delete/folder creation tools refuse writes. |
OBSIDIAN_BACKUP_ON_WRITE |
no | false |
When true, copies existing notes into .obsidian-mcp-backups/ before update/delete. |
OBSIDIAN_VAULT_PATH.../ path traversal are rejected.OBSIDIAN_READ_ONLY=true..obsidian-mcp-backups/ before update/delete with OBSIDIAN_BACKUP_ON_WRITE=true.Run the local test script:
OBSIDIAN_VAULT_PATH="/absolute/path/to/your/vault" .venv/bin/python test_server.py
Start the MCP server:
OBSIDIAN_VAULT_PATH="/absolute/path/to/your/vault" .venv/bin/python server.py
Generate a daily project status report from your vault:
OBSIDIAN_VAULT_PATH="/absolute/path/to/your/vault" .venv/bin/python scripts/daily_status_report.py --folder "Projects"
Write the report back into Obsidian:
OBSIDIAN_VAULT_PATH="/absolute/path/to/your/vault" .venv/bin/python scripts/daily_status_report.py \
--folder "Projects" \
--write "Codex/Daily Project Status.md"
The script reports recent notes, markdown checkbox tasks, and top tags. It uses backup-on-write when updating an existing report note.
See docs/common-workflows.md for practical examples:
Copyable Obsidian note templates live in docs/templates:
This repo includes lightweight agent workflow skills:
skills/obsidian-vault-workflow/SKILL.md
skills/release-note-captain/SKILL.md
Use them as guidance for agents that work with this MCP server. They cover safe vault exploration, editing discipline, daily status reports, vault triage, project catch-up prompts, and release-note capture after a project ships.
Yes. It is a local MCP server for Obsidian vaults. It exposes tools for notes, tags, backlinks, wikilinks, folders, search, and optional writes.
Yes. The main setup path is Codex-first and uses ~/.codex/config.toml.
No. It reads and writes markdown files directly from the vault folder.
No. Because this server works on local files, Obsidian does not need to be open.
Yes. Set OBSIDIAN_READ_ONLY=true to allow search and inspection while refusing create, update, delete, and folder creation tools.
MIT
Run in your terminal:
claude mcp add dot-realitytest-obsidian-codex-mcp -- npx pro tip
Just installed dot-RealityTest/obsidian-codex-mcp? Say to Claude: "remember why I installed dot-RealityTest/obsidian-codex-mcpand what I want to try" — it'll save into your Vault.
how this works →Security
Low riskAutomated heuristic from public metadata — not a security guarantee.