A collection of tools for working with Obsidian vaults, written in Rust.
| Crate | Docs | Description |
|---|---|---|
obsidian-rs-core |
docs.rs/obsidian-rs-core | Core library — the foundation the other tools build on |
obsidian-rs-cli |
docs.rs/obsidian-rs-cli | Command-line tool for querying and managing vaults |
obsidian-rs-mcp |
docs.rs/obsidian-rs-mcp | MCP server so agents can interact with your vault |
obsidian-rs-lsp |
docs.rs/obsidian-rs-lsp | A language server for vault editing in your IDE |
CLI
Install with Cargo:
The obsidian binary resolves your vault automatically — it walks up from the current directory looking for a folder containing .obsidian/. You can also set OBSIDIAN_VAULT or pass --vault <PATH> explicitly.
Commands
obsidian search Search for notes
obsidian note Work with individual notes
resolve Resolve a note by path, ID, or alias
list List all notes
read Read contents or frontmatter
write Write a new note
backlinks Find notes that link to a given note
merge Merge multiple notes into one
patch Replace one exact string in a note's content
rename Rename a note and update all backlinks
update Update frontmatter metadata fields
obsidian tags Work with tags
list List all tags used across the vault
search Find all occurrences of given tags
obsidian check Vault health check (broken links, duplicate IDs/aliases)
Examples
# Find all notes tagged #project that mention "rust"
# Find notes matching a regex pattern in their content
# List notes sorted by last modified
# Read a note's frontmatter as JSON
# Rename a note and automatically update every backlink
# Find all notes that link to a given note
# List all tags, sorted alphabetically
# Check the vault for broken links and duplicate IDs
MCP Server
Install and register with Claude in one step:
When initialized by an MCP client, the server describes the vault as a collection of Markdown notes and summarizes the safe workflow for consuming agents: discover/read before writing, use exact-match patching for surgical edits, rely on rename tools for backlink updates, and prefer vault-relative paths for writes and renames.
Tools exposed
| Tool | Description |
|---|---|
check_vault |
Report duplicate IDs, duplicate aliases, and broken links in the vault |
list_notes |
List all notes in the vault |
list_backlinks |
List notes that link to a given note, including matching link locations |
read_note |
Read the body and frontmatter of a note |
write_note |
Write a new note |
patch_note |
Replace one exact string in a note |
update_note |
Update frontmatter fields of a note |
search_notes |
Search for notes with filters (tag, title, content, glob, regex) |
rename_note |
Rename a note and update all backlinks |
list_tags |
List all tags used in the vault |
search_tags |
Find all occurrences of given tags |
LSP Server
Install with Cargo:
The obsidian-lsp binary speaks stdio LSP and resolves the vault the same way as obsidian-mcp: --vault <PATH>, then OBSIDIAN_VAULT, then the nearest parent containing .obsidian/.
Current functionality:
- clean LSP initialization and shutdown
- full-document text sync for open buffers
- cached vault state via
obsidian_core::Vault::open_cached(), with open buffers layered on top as authoritative in-memory shadows - diagnostics for broken links, duplicate IDs, and duplicate aliases across the vault
- hover on note links with basic target-note metadata
- document links for wiki and markdown note links, with resolve support
- document symbols for headings, frontmatter keys, aliases, tags, and outbound links
- workspace symbol search across note IDs, titles, aliases, tags, and headings
- references/backlinks for the target of wiki or markdown note links, or for the current note when the cursor is not on a link
- go-to definition for linked notes, including heading anchors and nested sub-anchors
- diagnostics clearing and refresh on open/change/close events, watched Markdown file changes, and workspace file create/rename/delete notifications
- completion for wiki links (
[[) and markdown links ([) with per-note variants (bare ID/title, alias override, and bare alias), plus inline tag completion (#) - quick fixes for broken note links that create missing notes inside the active vault without overwriting existing files, using wiki aliases or markdown link text as the new note's primary alias and heading when available
- quick fixes for duplicate IDs and aliases, wiki-only missing-heading creation, and refactors that convert between wiki and markdown note links
- filename-first note rename via
textDocument/prepareRenameandtextDocument/rename, with backlink updates and automatic frontmatter ID updates when the current ID matches the old filename stem - hover, references, go-to-definition, and rename support for inline and frontmatter tags
Additional explicit refactor modes are still planned.
LSP roadmap
Planned LSP work prioritizes Obsidian-specific editing and refactoring features that generic Markdown language servers cannot provide:
- Rename/refactor follow-ups: add explicit commands or code actions for path-only, ID-only, and forced combined rename modes. Standard LSP rename already defaults to renaming the filename/path; it also renames the frontmatter ID when the current ID exactly matches the old filename stem, and otherwise leaves custom IDs unchanged.
- Quality-of-life configuration: add settings for preferred new-note folder, preferred link style, completion limits, diagnostics toggles, case sensitivity, and tag completion behavior.