MCP Obsidian CLI
Save chat notes from Claude Desktop to your vault — MCP on Obsidian CLI.
Connector by stonematt · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/stonematt-mcp-obsidian-cli
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 13 read · 9 write · 1 delete
- Secrets
- None asked for
- Install scripts
- Not scanned yet
- Runs as
- Node.js package
Tools by what they do 23
Read from the source code; the running server may list different tools.
Read 13 · Look things up without changing anything.
obsidian_backlinksobsidian_daily_pathobsidian_daily_readobsidian_filesobsidian_helpobsidian_historyobsidian_outlineobsidian_propertiesobsidian_readobsidian_recentsobsidian_searchobsidian_tasks
Show 1 more tools
obsidian_template_read
Write 9 · Create, change, send or run things.
obsidianobsidian_commandobsidian_createobsidian_create_from_templateobsidian_daily_appendobsidian_moveobsidian_property_setobsidian_renameobsidian_tags
Delete 1 · Delete, drop, revoke or wipe things.
obsidian_delete
Secrets and settings it asks for
Other settings (environment variables or headers).
OBSIDIAN_CLI_PATHOBSIDIAN_TIMEOUT_MSOBSIDIAN_VAULT
Files it touches
- Any path the agent passes to its tools
Tools (23)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
obsidianRun any Obsidian CLI command. Pass the full command string exactly as you would on the terminal (minus the leading 'obsidian' binary name). Leading `vault=NAME` overrides the active vault and is cached for subsequent calls. Intent -> verb cheatsheet. Use the canonical verb on the right; the convenience tools (`obsidian_*`) wrap the same verbs with typed args. PUT put new note from template -> templater:create-from-template template=… file=… create plain note -> create path=… content=… append to today's daily -> daily:append content=… GET read note …
obsidian_backlinksList backlinks to a note. Parameters: file (optional) — note name (wikilink resolution) path (optional) — exact file path Examples: obsidian_backlinks({ file: "Project Plan" }) obsidian_backlinks({ path: "Ideas/brainstorm.md" })
obsidian_commandExecute an Obsidian command by its canonical command ID. Wraps the CLI's `command` Verb. Triggers any core or plugin command exactly as the user would from the command palette — identified by its stable command ID (e.g. 'editor:toggle-bold', 'app:go-back', 'daily-notes'). Discovering IDs: run the generic `obsidian` tool with the `commands` verb to list every available command ID, or `commands filter=<prefix>` to narrow by prefix (e.g. 'commands filter=editor:'). Parameters: id (required) — the command ID to execute Examples: obsidian_command({ id: "editor:toggle-bold" }) obsidian_com…
obsidian_createCreate a new PLAIN note (no Templater expansion). This wraps the CLI's `create` verb. It does NOT expand Templater placeholders like `<% tp.date.now() %>` — if your template contains placeholders, use `obsidian_create_from_template` instead, which routes to `templater:create-from-template`. Parameters: name (optional) — file name for the new note path (optional) — vault-relative path content (optional) — initial markdown content (literal, no placeholder expansion) Examples: obsidian_create({ name: "Meeting 2026-04-03", content: "# Meeting Notes\n\n- Attendees: ..." }) obsidian_cre…
obsidian_create_from_templateCreate a new note from a Templater template, expanding placeholders. This wraps the CLI's `templater:create-from-template` verb. Use this whenever the template contains Templater placeholders such as `<% tp.date.now() %>`, `<% tp.file.title %>`, or any other `<% ... %>` expression — those are evaluated by Obsidian's Templater plugin and substituted into the output. For plain notes with no placeholder expansion, use `obsidian_create`. Parameters: template (required) — vault-relative path to the Templater template (e.g. "Templates/daily.md") file (required) — vault-relative output path for…
obsidian_daily_appendAppend content to today's daily note. Parameters: content (required) — markdown text to append at the end of today's daily note Examples: obsidian_daily_append({ content: "- Meeting with team at 3pm" }) obsidian_daily_append({ content: "> [!tip] Remember\n> Review PR before EOD" })
obsidian_daily_pathGet the file path of today's daily note. Returns the vault-relative path (e.g. 'Daily/2026-04-03.md'). Useful for constructing paths for other tools.
obsidian_daily_readRead today's daily note contents. Returns the full markdown content of today's daily note. Returns an error if no daily note exists for today.
obsidian_deleteDelete a note, selecting it by file name or exact path. Wraps the CLI's `delete` Verb. DESTRUCTIVE: by default the note is moved to the system trash (recoverable). Pass `permanent: true` to skip the trash and delete irrecoverably — there is no undo for a permanent delete. Parameters: file (optional) — note name using wikilink resolution (e.g. 'My Note') path (optional) — exact vault-relative path (e.g. 'folder/My Note.md') permanent (optional) — true to skip trash and delete permanently (irreversible) One of file or path is required. Examples: obsidian_delete({ file: "Old Draft" }…
obsidian_filesList files in the vault or a specific folder. Parameters: folder (optional) — filter by folder path ext (optional) — filter by file extension (e.g. 'md', 'canvas') Examples: obsidian_files({}) obsidian_files({ folder: "Projects/", ext: "md" })
obsidian_helpGet Obsidian help: a live verb index from the CLI, or reference docs by slug. Parameters: topic (optional) — a verb name (e.g. "read", "daily:append", "property:set") OR a reference-doc slug (cli, markdown, bases, canvas) Behavior: - No topic — returns the live, category-grouped verb index parsed from the CLI's `help` output (Read, Write, Edit, Discover, Tasks, Daily, Properties, Plugins, Dev, Eval). - Verb name — returns that verb's description and flag list from the live manifest. - Doc slug — returns the Kepano-derived reference prompt (markdown / bases / canvas / cli syntax). -…
obsidian_historyList the saved file-history versions of a note, selecting it by file name or exact path. Wraps the CLI's `history` Verb. Returns the version history (snapshots/sync revisions) recorded for a single note — not a list of recently-modified notes. Provide one of file or path to select the note. Parameters: file (optional) — note name using wikilink resolution (e.g. 'My Note') path (optional) — exact vault-relative path (e.g. 'folder/My Note.md') One of file or path is required. Examples: obsidian_history({ file: "Project Plan" }) obsidian_history({ path: "Daily/2026-05-20.md" })
obsidian_moveMove or rename a note, selecting it by file name or exact path. Wraps the CLI's `move` Verb. Provide one of file or path to select the note, and `to` for the destination. Setting `to` to a new name in the same folder renames the note. Parameters: file (optional) — note name using wikilink resolution (e.g. 'My Note') path (optional) — exact vault-relative path (e.g. 'folder/My Note.md') to (required) — destination folder or vault-relative path One of file or path is required. Examples: obsidian_move({ file: "My Note", to: "Archive/" }) obsidian_move({ path: "Inbox/idea.md", to: "…
obsidian_outlineList the heading outline of a note, selecting it by file name or exact path. Wraps the CLI's `outline` Verb. Provide one of file or path. Optional `format` controls the output shape; optional `total` returns just the heading count. Parameters: file (optional) — note name using wikilink resolution (e.g. 'My Note') path (optional) — exact vault-relative path (e.g. 'folder/My Note.md') format (optional) — output format: 'tree' (default), 'md', or 'json' total (optional) — true to return the heading count instead of the outline One of file or path is required. Examples: obsidian_out…
obsidian_propertiesList or read frontmatter properties. Parameters: file (optional) — note name for wikilink resolution path (optional) — exact file path name (optional) — specific property name to read (requires file or path) Examples: obsidian_properties({}) — list all properties with counts obsidian_properties({ file: "My Note" }) — properties of a specific note obsidian_properties({ file: "My Note", name: "status" }) — read one property
Show 8 more tools
obsidian_property_setSet a frontmatter property on a note. Parameters: name (required) — property name value (required) — property value (see type for multi-valued props) type (optional) — property type: text (default) | list | number | checkbox | date | datetime file (optional) — note name (wikilink resolution) path (optional) — exact file path One of file or path is required. Multi-valued properties (tags, aliases, Links, etc.): You MUST pass type="list" AND a JSON-array string as value. Without type="list" the value is written as a single scalar string — a comma-separated value is NOT split into…
obsidian_readRead a note by file name (wikilink-style) or exact path. Parameters: file (optional) — note name using wikilink resolution (e.g. 'My Note') path (optional) — exact vault-relative path (e.g. 'folder/My Note.md') One of file or path is required. Examples: obsidian_read({ file: "Meeting Notes" }) obsidian_read({ path: "Projects/todo.md" })
obsidian_recentsList recently opened files. Returns the most recently opened files in the vault, ordered by last access time.
obsidian_renameRename a note, selecting it by file name or exact path. Wraps the CLI's `rename` Verb. Provide one of file or path to select the note, and `name` for the new file name. Renaming changes only the name within the same folder; use obsidian_move to relocate a note to a different folder. Parameters: file (optional) — note name using wikilink resolution (e.g. 'My Note') path (optional) — exact vault-relative path (e.g. 'folder/My Note.md') name (required) — the new file name One of file or path is required. Examples: obsidian_rename({ file: "Draft", name: "Final" }) obsidian_rename({ …
obsidian_searchFull-text search across the vault with line context. Parameters: query (required) — search terms, supports Obsidian query syntax path (optional) — restrict results to a folder path limit (optional) — max number of files to return Examples: obsidian_search({ query: "meeting notes" }) obsidian_search({ query: "project status", path: "Work/", limit: 5 })
obsidian_tagsList tags in the vault with counts. Returns structured JSON content (an array of { tag, count } objects) alongside the text form, so clients can consume it without re-parsing. Parameters: sort (optional) — 'name' or 'count' (default: name) Examples: obsidian_tags({}) obsidian_tags({ sort: "count" })
obsidian_tasksList tasks from vault notes. Returns structured JSON content (an array of task objects with status, text, file, and line) alongside the text form, so clients can consume it without re-parsing. Parameters: daily (optional) — true to show only today's daily note tasks todo (optional) — true to show only incomplete tasks done (optional) — true to show only completed tasks path (optional) — filter by file path Examples: obsidian_tasks({ daily: true }) obsidian_tasks({ todo: true, path: "Projects/" })
obsidian_template_readRead the content of a template by name from the vault's templates folder. Wraps the CLI's `template:read` Verb. Returns the raw template text. Set `resolve` to expand the template's variables (e.g. Templater placeholders) instead of returning them literally; pass `title` to supply the title used during that variable resolution. Parameters: name (required) — template name (as it appears in the templates folder) resolve (optional) — true to resolve/expand template variables title (optional) — title used for variable resolution (with resolve) Examples: obsidian_template_read({ name: "d…
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 7
- Last commit
- Sep 5, 2026 (1 month ago)
- Last release
- Sep 8, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.stonematt/mcp-obsidian-cli- Version
- 2.1.0
- Auth
- No auth
- Packages
- npm mcp-obsidian-cli
- License
- MIT
- Repository
- github.com/stonematt/mcp-obsidian-cli
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
MCP Obsidian CLI. Agent Mart. https://agentmart.dev/connectors/stonematt-mcp-obsidian-cli (last updated 2026-10-24)