obsidian-ts-mcp
obsidian-ts-mcp is an MCP server that lets AI agents read, write, search, and manage notes inside an Obsidian vault via the official Obsidian CLI. It provides 37 tools across these areas:
Note Management: Create, read, append, and prepend content to notes; move or rename files (with Obsidian auto-updating internal links)
Daily Notes: Get, create, read, append, or prepend to today's daily note
Search & Discovery: Full-text search using Obsidian's query syntax (with folder scoping and result limits); list files filtered by folder/extension; retrieve vault metadata (name, path, file/folder counts, size)
Tags & Links: List all tags with occurrence counts; find backlinks to a note; list all outgoing links from a note
Note Structure: Get the heading outline of a note (tree or markdown format)
Frontmatter & Metadata: Set, read, list, or remove frontmatter properties (supporting text, list, number, checkbox, date, and datetime types)
Task Management: List tasks with filters (by file, completion status, or daily note); toggle task checkboxes on or off
Templates: List available templates and read their contents
Bases: Query an Obsidian Base for structured results
Project Management: Create and list projects; read overviews, load full context, generate activity summaries, view a cross-project dashboard; manage structured backlogs (add, read, complete, prioritize, and reorder items)
Requires the Obsidian desktop app running with the CLI enabled and a Catalyst license. Compatible with VS Code, Claude Desktop, and other MCP clients.
Wraps the official Obsidian CLI to enable reading, writing, searching, and managing notes, tags, frontmatter properties, and tasks within an Obsidian vault.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@obsidian-ts-mcp search my vault for notes about machine learning"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
This project is deprecated and superseded by DevJournal. DevJournal is a standalone CLI tool (written in Zig) that covers the journaling workflow (backlogs, daily notes, sessions, ADRs) and includes an MCP server. No further development will happen here. Existing documentation is preserved below for reference.
obsidian-ts-mcp
A Model Context Protocol (MCP) server that wraps the official Obsidian CLI, letting AI agents in VS Code (and any other MCP client) read, write, search, and manage notes inside an Obsidian vault.
Prerequisites
Requirement | Minimum version |
Node.js | 18 |
Obsidian desktop app | 1.12 (with CLI enabled) |
Obsidian Catalyst licence | Required for CLI access |
The Obsidian desktop app must be running when the MCP server is in use.
The obsidian binary must be available on your PATH.
Related MCP server: Obsidian MCP Server
Installation
git clone https://github.com/dickiedyce/obsidian-ts-mcp.git
cd obsidian-ts-mcp
npm install
npm run buildConfiguration
VS Code (user-level MCP)
Add the following to your VS Code MCP configuration:
OS | Path |
macOS |
|
Linux |
|
Windows |
|
{
"servers": {
"obsidian": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/obsidian-ts-mcp/dist/server.js"],
"env": {
"OBSIDIAN_VAULT": "My Vault"
}
}
}
}Claude Desktop
Add to claude_desktop_config.json
(~/Library/Application Support/Claude/claude_desktop_config.json on macOS,
%APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/absolute/path/to/obsidian-ts-mcp/dist/server.js"],
"env": {
"OBSIDIAN_VAULT": "My Vault"
}
}
}
}Set OBSIDIAN_VAULT to the name of the vault you want to target. The name
must match exactly what Obsidian shows in the vault switcher.
Environment variables
Variable | Description |
| Default vault name appended to every CLI call. |
| Absolute filesystem path to the vault root. Used by direct filesystem operations; if unset, the path is resolved via the CLI. |
Available tools
The server exposes 41 tools organised into eleven groups.
Core -- note management
Tool | Description |
| Create a new note, optionally from a template. Supports a |
| Read the full markdown contents of a note. |
| Append content to the end of a note. |
| Prepend content after the frontmatter of a note. |
| Full-text search with Obsidian query syntax. |
| Get or create today's daily note. |
| Append content to today's daily note. |
Discovery and context
Tool | Description |
| Vault name, path, file/folder counts, size. |
| List files, optionally filtered by folder or extension. |
| List all tags with occurrence counts. |
| Find notes that link to a given note. |
| Heading structure of a note. |
Properties and metadata
Tool | Description |
| Set a frontmatter property on a note. |
| Read a frontmatter property value. |
Tasks
Tool | Description |
| List tasks, with filters for status, file, or daily note. |
| Toggle a task checkbox on or off. |
Daily notes (extended)
Tool | Description |
| Read the contents of today's daily note. |
| Prepend content after the frontmatter of the daily note. |
Templates
Tool | Description |
| List all available templates in the vault. |
| Read the contents of a template, optionally resolved. |
Links
Tool | Description |
| List all outgoing links from a note. |
Properties (extended)
Tool | Description |
| List all frontmatter properties used across the vault. |
| Remove a frontmatter property from a note. |
Tags (extended)
Tool | Description |
| Get detailed info about a specific tag and its files. |
File management
Tool | Description |
| Move or rename a file; Obsidian updates internal links. |
Bases
Tool | Description |
| Query an Obsidian Base and return structured results. |
Project management
Tool | Description |
| Create a new project with overview and backlog files. |
| List all projects in the vault. |
| Read a project's overview metadata. |
| Load full project context: overview, backlog, recent sessions. |
| Generate a summary of project activity over a date range. |
| Cross-project dashboard with status, activity, and backlog counts. |
| Add an item to a project's backlog. |
| Read a project's backlog. |
| List open backlog items and backfill missing open-item IDs. |
| Mark a backlog item done by unique ID or text, with timestamp. |
| Mark multiple backlog items done in a single call. |
| Move a backlog item (by ID or text) to a specific position. |
| Reorder multiple backlog items (by IDs or text) in one call. |
| Sweep all done items into an |
Backlog entries created by backlog_add include a stable [#<id>] marker.
Prefer matching by ID over substring text matching where possible -- IDs survive
edits to item text.
Project structure
src/41
cli.ts -- Low-level Obsidian CLI wrapper (exec, arg building, errors).
fs-ops.ts -- Direct filesystem operations (mkdir, read, write) for exact path control.
tools.ts -- MCP tool definitions (names, descriptions, JSON schemas).
handlers.ts -- Dispatches tool calls (39 tools) to CLI commands or filesystem ops.
server.ts -- MCP server entry-point (stdio transport, error handling).
validation.ts -- Input validation against tool schemas.
tests/
cli.test.ts -- Unit tests for argument building and error types.
fs-ops.test.ts -- Unit tests for filesystem operations.
runObsidian.test.ts -- Tests for CLI execution, timeouts, vault targeting.
handlers.test.ts -- Tests for all 37 tool handlers (CLI and fs-ops are mocked).
tools.test.ts -- Schema validation for every tool definition.
validation.test.ts -- Input validation tests (types, enums, required fields).
server.test.ts -- Server factory, error formatting, version checks.Development
npm run dev # Watch-mode TypeScript compilation
npm test # Run the test suite once
npm run test:watch # Run tests in watch mode
npm run test:coverage # Run tests with coverage report
npm run build # One-shot compilation
npm run lint # Run ESLint
npm run format:check # Check Prettier formatting
npm start # Start the MCP server on stdioHow it works
An MCP client (VS Code, Claude Desktop, etc.) launches the server over stdio.
The client calls
tools/listand receives the 37 tool definitions fromsrc/tools.ts.When the client invokes a tool,
src/server.tsroutes the call tohandleTool()insrc/handlers.ts.handleTool()validates input against the tool schema, then either usesbuildArgs()andrunObsidian()fromsrc/cli.tsto execute the correspondingobsidianCLI command, or uses direct filesystem operations fromsrc/fs-ops.tswhen exact path control is needed (e.g. creating notes in subdirectories, project management).The CLI output is returned to the client as a text content block.
Testing
Tests use Vitest and mock the CLI layer so they never invoke the real Obsidian binary. Run:
npm testSecurity considerations
Full vault access. The server has read/write access to every note in the targeted vault. Limit
OBSIDIAN_VAULTto vaults you are comfortable exposing to AI agents.No authentication. The stdio transport has no built-in auth. Access control depends entirely on who can launch the server process.
Input validation. All tool inputs are validated against their declared schemas before execution. The server uses
execFile(notexec) to avoid shell injection, but note that file/path values are passed directly to the Obsidian CLI.Environment inheritance. The child process inherits the parent's environment variables. Avoid storing secrets in env vars visible to the server process.
Troubleshooting
Symptom
: obsidian: command not found
Cause: CLI binary not on PATH
Fix: Ensure Obsidian 1.12+ is installed and the CLI is enabled in Settings > General
Symptom
: Command timed out after 15000ms
Cause: Obsidian desktop app not running
Fix: Start the Obsidian app before using the MCP server
Symptom
: vault not found
Cause: Vault name mismatch
Fix: Check that OBSIDIAN_VAULT matches the exact name in Obsidian’s vault switcher
Symptom
: Catalyst licence required
Cause: Missing licence
Fix: The Obsidian CLI requires a Catalyst licence — purchase one at obsidian.md
Symptom
: Server exits immediately
Cause: Node.js version too old
Fix: Ensure Node.js >= 18 (node --version)
Licence
Available Tools
16 toolsappend_to_noteA
Append content to the end of an existing note. Useful for adding session logs, tasks, or follow-up notes to an existing document.
Inputs: content (required), file, path.
create_noteB
Create a new note in the Obsidian vault. Supports optional content and templates. Use this when you need to record a new session, decision, or piece of documentation.
Inputs: name (required), content, template, overwrite.
daily_appendA
Append content to today's daily note. Creates the daily note if it doesn't exist. Useful for logging tasks, session summaries, or quick entries.
Inputs: content (required).
daily_noteA
Get today's daily note path, creating it if it doesn't exist. Returns the file path of the daily note.
Inputs: no named parameters.
get_backlinksA
List all notes that link to a given note (backlinks/incoming links). Provide at least one of 'file' or 'path' to identify the note.
Inputs: file, path.
get_outlineB
Get the heading structure/outline of a note.
Inputs: file, path, format.
get_tagsA
List all tags in the vault with their occurrence counts. Always returns all tags with counts included.
Inputs: sort.
get_vault_infoB
Get information about the Obsidian vault: name, path, file count, folder count, and size.
Inputs: info.
list_filesB
List files in the vault. Can filter by folder and/or file extension.
Inputs: folder, ext, total.
list_tasksB
List tasks from notes. Can filter by file, completion status, or show tasks from the daily note.
Inputs: file, path, all, daily, +3 more.
prepend_to_noteB
Prepend content after the frontmatter of a note. Useful for adding a summary or status update at the top of an existing document.
Inputs: content (required), file, path.
read_noteA
Read the full contents of a note. Returns the markdown content including frontmatter. Provide at least one of 'file' or 'path' to identify the note.
Inputs: file, path.
read_propertyB
Read a frontmatter property value from a note.
Inputs: name (required), file, path.
search_vaultA
Search the vault for text. Returns matching files and context. Use Obsidian's full search syntax (supports operators, tags, paths).
Inputs: query (required), path, limit, format.
set_propertyC
Set a frontmatter property on a note. Supports text, list, number, checkbox, date, datetime types.
Inputs: name (required), value (required), type, file, +1 more.
toggle_taskA
Toggle a task's completion status. Identify the task by 'ref' (path:line) or by 'file' and 'line' together.
Inputs: ref, file, line.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Most tools have distinct purposes, but there is some overlap between 'append_to_note' and 'prepend_to_note' (both modify note content), and 'daily_append' and 'append_to_note' (both append content, but to different targets). Descriptions help clarify these differences, but an agent might occasionally confuse them when deciding between appending to a specific note versus the daily note.
All tool names follow a consistent verb_noun pattern with snake_case, such as 'append_to_note', 'create_note', and 'get_backlinks'. There are no deviations in naming conventions, making the set predictable and easy to parse.
With 16 tools, the server is well-scoped for managing an Obsidian vault, covering operations like note creation, reading, updating, searching, and task management. Each tool serves a specific function without redundancy, fitting the domain's complexity appropriately.
The tool set provides comprehensive coverage for Obsidian vault management, including CRUD operations for notes (create, read, update via append/prepend), property handling, search, backlinks, tags, tasks, and vault info. There are no obvious gaps; agents can perform full workflows from note creation to organization and retrieval.
Maintenance
Related MCP Connectors
Hosted MCP server for Obsidian Sync vaults: read, search, edit notes. Not affiliated with Obsidian.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Related MCP Servers
- AlicenseBqualityFmaintenanceA Model Context Protocol server that enables AI assistants to read, write, and manipulate notes in your Obsidian vault through a standardized interface.53,512 npm4ISC
- FlicenseCqualityDmaintenanceProvides LLM agents with comprehensive access to Obsidian vaults via the official Obsidian CLI bridge. It enables users to read, search, and modify notes, tasks, properties, and plugins while the Obsidian desktop app is running.5416-
- AlicenseNot gradedqualityDmaintenanceA local MCP server that wraps the Obsidian CLI to give AI assistants direct access to read, edit, and manage notes within an Obsidian vault. It enables advanced operations such as frontmatter property management, context-aware searching, and the execution of internal Obsidian commands.2MIT
- AlicenseAqualityFmaintenanceA Model Context Protocol (MCP) server that provides AI assistants with secure access to Obsidian vaults. Enables reading, writing, searching, and managing notes without requiring Obsidian to be running.507,397 npmApache 2.0