Frontmatter has its own read, write and search path, so an assistant can retag or reclassify notes without rewriting bodies — the operation most vault tooling collapses into a full-file edit. Template-based creation and folder creation are on the roadmap rather than in the tool list, so new notes land where you tell them to and nowhere else.
An MCP server that exposes one Obsidian vault as tools. It reads and writes note bodies, manages frontmatter separately from content, lists folders and notes, searches by content or by metadata, follows outgoing links and backlinks, and handles the daily-note conventions. It works on the vault directory directly, so no Obsidian plugin or running app is involved.
- Notes created, edited, appended to and deleted, with frontmatter updated as its own operation — `create_note`, `edit_note`, `append_to_note`, `update_note_metadata`, `delete_note`
- Note bodies and metadata read back individually — `get_note_content`, `get_note_metadata`
- The vault browsed as folders and notes rather than a flat file list — `list_folders`, `list_notes`, `search_folders`
- Search over note bodies and over metadata as separate calls, so a frontmatter query does not have to grep prose — `search_notes_content`, `search_notes_metadata`
- The link graph around a note: what it points at, what points back, and every tag in the vault — `get_outgoing_links`, `get_backlinks`, `get_all_tags`
- Daily notes resolved, created and appended to using your configured location — `get_daily_note_path`, `create_daily_note`, `append_to_daily_note`
No account and no key. Install into a virtual environment with `pip install .` — the pyproject is named `obsidian_mcp_tool`, version 1.0.0 — and launch `obsidian_mcp_server/main.py` with the venv's own Python. `OMCP_VAULT_PATH` is the one required setting and must be an absolute path with forward slashes, even on Windows; `OMCP_DAILY_NOTE_LOCATION` points at the daily-note folder and `OMCP_SERVER_PORT` moves the listener off its default. Settings can live in a `.env` file in the project root, but real environment variables win over it, and passing them in the client's `env` block is the arrangement the README recommends.
