Skip to main content
Glama

obsidian-mcp

Let Claude (or any MCP client) read, search, edit, and reorganize your Obsidian vault — safely.

A Model Context Protocol server that treats your vault as what it really is: a folder of markdown files. No plugins, no cloud, no database. Obsidian can be closed while Claude works on your notes.

The implementation follows the SDK's current recommended API (McpServer + zod-validated tool contracts) — and pins its protocol behavior with integration tests that speak raw JSON-RPC to the real process, so SDK upgrades can't silently change the wire. If you want to understand what an MCP server actually does beyond npx some-server, start with test/server.test.ts next to the specification.

What you can ask Claude

"How many notes are in my vault, and where are the newest ones?" "Find every note that mentions 'spaced repetition' and summarize the key ideas." "Create research/glossary.md with these ten terms and tag it #glossary." "Rename daily/2026-09-06.md to journal/2026-09-06.md — don't break any links." "Which notes link to my reading list? Show the exact lines." "Research solid-state batteries on the web, then create research/solid-state-batteries.md — summary, key players, open questions, and frontmatter with the sources."

Related MCP server: Obsidian MCP Server

The 11 tools

Tool

What it does

vault_info

Vault path + note count — the "is it alive?" call

list_notes

Browse folders, with sizes and modification dates

read_note

Full markdown content of one note

search_notes

Full-text search (case-insensitive substring or regex), with path:line references

get_frontmatter

A note's YAML properties as JSON — cheaper than reading the whole note

create_note

New note, parent folders auto-created, optional YAML frontmatter generated

edit_note

Append, prepend (after frontmatter), find & replace, or replace a heading section

delete_note

To .trash/never a permanent delete

move_note

Rename/move and repair every link across the vault

get_backlinks

What references this note? (wikilinks, embeds, relative markdown links)

All read-only tools are annotated readOnlyHint: true, so MCP clients can skip approval prompts for them and only ask about writes.

Safety model

Your vault is irreplaceable; the design starts there.

  • No path escapes. Every user-supplied path goes through one guard (safeResolve); ../../../etc/passwd comes back as a contained error, never a read

  • Deletes are reversible. Notes move to the vault's .trash/ (Obsidian's own convention) — never rm

  • No silent clobbers. create_note fails if the note exists, unless you explicitly say overwrite

  • Kernel-atomic where possible. Creates use the wx flag (no check-then-write race); deletes and moves are rename() calls

  • Link-safe moves. Moving a note rewrites inbound links in other notes and rebases the moved note's own relative links — aliases and #anchors preserved

  • Empty-folder cleanup after deletes/moves uses non-recursive rmdir up the tree: the kernel refuses anything non-empty, so cleanup is data-loss-proof by construction

The one rule that makes this work: the vault folder is the only thing this server can touch.

Quick start

Requires Node 20+.

git clone https://github.com/laurentiudanielgi-coder/obsidian-mcp.git
cd obsidian-mcp
npm install && npm run build

Claude Desktop

Edit claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS):

{
  "mcpServers": {
    "obsidian": {
      "command": "/absolute/path/to/node",
      "args": ["/absolute/path/to/obsidian-mcp/dist/index.js"],
      "env": { "OBSIDIAN_VAULT_PATH": "/absolute/path/to/your/vault" }
    }
  }
}

Notes: use which node for the absolute path — GUI apps don't inherit your shell's PATH. Fully quit and reopen Claude Desktop. In Obsidian, set Files & Links → Deleted files → .trash folder so trash semantics match. And back your vault up (git works beautifully) — safety features are seatbelts, not brakes.

Any other MCP client

The server is configured with one environment variable: OBSIDIAN_VAULT_PATH, pointing at the vault root. It speaks JSON-RPC over stdio — the default transport for locally-spawned MCP servers.

How it's built

src/
├── index.ts   — entrypoint: transport wiring; why stdout is the protocol channel
├── server.ts  — protocol layer: handshake, capabilities, tools/list, tools/call
├── config.ts  — env-var config; why clients spawn servers and pass settings via env
└── vault.ts   — the only code that touches files: path guard, trash, links, edits

Architecture in one sentence: JSON-RPC messages arrive over a transport (stdio), get dispatched by the protocol layer to tool handlers, which delegate every filesystem operation to the vault layer — the single choke point where safety lives.

Code tour

The codebase doubles as a guided tour:

Concept

Where to look

The initialize handshake, capabilities, wire frames

test/server.test.ts

Tool contracts: descriptions are written for the model; zod schemas

src/server.ts

Tool errors vs protocol errors (two failure channels)

src/server.ts, the guarded wrapper

Server config via env vars (clients spawn servers)

src/config.ts

Stdio framing and the stdout-is-protocol rule

src/index.ts

The traversal guard when an LLM builds the paths

src/vault.ts, safeResolve

Obsidian link resolution & unique-basename rule

src/vault.ts, linkMatches

Raw wire format

test/server.test.ts — speaks JSON-RPC to the real process

Development

npm test          # unit tests against real temp filesystems + wire-level tests speaking raw JSON-RPC
npm run dev       # tsc --watch

Two probe scripts exist for debugging clients against the server:

node scripts/big-create-test.mjs 9000        # create a 9,000-char note, time it
node scripts/create-from-json.mjs note.json  # replay an exact client payload

Roadmap

  • CRUD, search, frontmatter, backlinks, link-repairing moves

  • RAG: heading-aware chunking → local embeddings → sqlite-vec → semantic_search

  • Streamable HTTP transport (same server, new transport — proving the decoupling)

Full decision log and reasoning in PLAN.md.

License

MIT

Available Tools

10 tools
create_noteCreate noteA

Create a new note. Fails if it already exists unless overwrite=true. Parent folders are created automatically. Pass frontmatter to have YAML properties generated; content is the markdown body.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesVault-relative note path (.md optional)
contentYesMarkdown body of the note
overwriteNoReplace an existing note
frontmatterNoOptional YAML properties, e.g. {"tags": ["research"]}

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses duplicate-handling (fails unless overwrite), automatic parent-folder creation, and frontmatter generation. It could add more about return values or the destructive nature of overwrite, but key side effects are transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences. The core action comes first, followed by edge-case behavior and parameter semantics. Every sentence adds useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential facts for a create operation: existence check, overwrite behavior, parent-folder creation, and parameter roles. With no output schema and no annotations, a brief note on return value or error behavior would be a small enhancement, but the current coverage is strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds extra meaning beyond the schema by explaining that parent folders are created automatically for path, that frontmatter gets turned into generated YAML, and that content is the markdown body. These details help the agent pass the correct values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Create a new note.' It also discloses an overriding behavior (fails if exists unless overwrite=true) that distinguishes it from edit_note and other siblings, so there is no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: it is for creating new notes, and the overwrite/fails behavior gives some context. However, it does not explicitly say when to prefer this over edit_note or when not to use it, leaving the routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_noteDelete noteA

Move a note to the vault's .trash folder. NEVER a permanent delete — the note can be restored from .trash. Folders are refused, but folders left empty by the delete are removed automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesVault-relative note path

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so well. It discloses that the operation is a move to .trash, not a permanent delete, that restoration is possible, that folders are refused, and that empty folders are auto-removed. This goes far beyond a simple 'delete' statement and gives the agent important behavioral expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, each adding essential information: the core action, the non-destructive nature, and the folder-handling behavior. No redundant phrasing, and the most important information is front-loaded. This is an efficient, well-structured description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description covers the key operational details: the .trash destination, restorability, folder refusal, and auto-cleanup of empty folders. It does not specify error behavior or the return value, but the critical success and failure conditions for calling this tool are adequately covered. A small gap remains around what happens if the path doesn't exist or isn't a note.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes 'path' as a 'Vault-relative note path' with 100% coverage, so the baseline is 3. The description adds value by explicitly stating 'Folders are refused', clarifying that the path must reference a note and not a folder. This semantic constraint is not present in the schema, raising the score to 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: 'Move a note to the vault's .trash folder', clearly identifying the resource and the operation. It also explicitly distinguishes itself from a permanent delete with 'NEVER a permanent delete', removing ambiguity. This is a clear, non-tautological definition that differentiates from sibling tools like move_note and create_note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (to soft-delete a note) and explicitly excludes folders with 'Folders are refused'. However, it does not name any sibling alternatives or provide when-not-to-use guidance relative to tools like move_note. The usage context is clear but the distinction from alternatives is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_noteEdit noteA

Edit an existing note in place. Modes: 'append'/'prepend' content (prepend lands after frontmatter); 'find_replace' all occurrences of find→replace (fails if find is absent); 'replace_section' swaps everything under heading (subsections included) for content.

ParametersJSON Schema
NameRequiredDescriptionDefault
findNoText to find (find_replace)
modeYes
pathYesVault-relative note path
contentNoText for append/prepend/replace_section
headingNoExact heading text (replace_section)
replaceNoReplacement text (find_replace)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden, and it delivers meaningful traits: "Edit an existing note in place" reveals mutation, "prepend lands after frontmatter" flags a placement nuance, find_replace's "fails if find is absent" discloses a concrete failure condition, and "subsections included" reveals destructive scope. It stops short of stating irreversibility or behavior when the path doesn't exist, but the disclosed traits go well beyond what the schema conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in one sentence, followed by a compact semicolon-separated mode breakdown where every parenthetical earns its place. Three sentences fully specify a four-mode editing tool without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, 4-mode tool with no annotations and no output schema, the description covers mode semantics, parameter-mode relationships, a failure condition, and scoping nuances. Minor gaps remain — no explicit statement of what happens if the note doesn't exist, no success/return behavior, and no reversibility note — but the essentials for invoking the tool correctly are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so the baseline is 3, but the description adds real semantic value by mapping parameters to modes: find→replace pairs, content used by append/prepend/replace_section, and heading scoping replace_section. It also clarifies behavioral nuances the terse schema labels miss, such as "all occurrences" for find_replace and frontmatter placement for prepend.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "Edit an existing note in place," which immediately distinguishes it from sibling tools like create_note, delete_note, move_note, and read_note. The four named modes (append, prepend, find_replace, replace_section) further specify exactly what operations are available, leaving no ambiguity about the tool's job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear within-tool mode guidance, such as find_replace "fails if find is absent" and replace_section swapping "subsections included," which helps an agent choose a mode. However, it never explicitly says when to prefer edit_note over siblings or when not to use it — that must be inferred from the tool name and the sibling list rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_frontmatterGet frontmatterA
Read-only

Read a note's YAML frontmatter (its properties: tags, dates, custom fields) as JSON. Cheaper than read_note when you only need metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesVault-relative note path

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description confirms the read-only nature. It adds useful behavioral context by noting the tool is cheaper than read_note and returns JSON, going beyond the annotation's basic safety signal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler. The main action is front-loaded, followed by a brief efficiency comparison with read_note. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description adequately conveys the return format (JSON) and lists common frontmatter fields (tags, dates, custom fields). It handles the essentials for a simple read-only tool, though it could mention edge cases like missing frontmatter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the path parameter is already well-documented as 'Vault-relative note path'. The description adds no extra parameter semantics, so it rests at the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states the specific verb ('Read'), the resource ('a note's YAML frontmatter'), and the output format ('as JSON'). It also clearly distinguishes itself from read_note by emphasizing it's cheaper and focused only on metadata, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Cheaper than read_note when you only need metadata' explicitly gives the condition for using this tool and names the alternative. An agent can immediately decide between reading full note content versus just metadata.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_notesList notesA
Read-only

List markdown notes in the vault (or a subfolder), newest info included. Returns vault-relative paths — use those in read_note.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderNoOptional subfolder to list, vault-relative (e.g. 'projects')

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint already declaring safety, the description adds behavioral context by specifying the return contract: vault-relative paths to be used with read_note. It also mentions 'newest info included', though this phrase is somewhat ambiguous; overall it goes beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the main action and scope, then provides a useful return-value pointer. The phrase 'newest info included' is slightly unclear and could be tightened, but there is no wasted verbiage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter and no output schema, the description covers the key facts: what is listed, where it can be scoped, what is returned, and how to use the result. It could be more precise about ordering/recursion, but it is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'folder' is already fully documented in the schema as optional and vault-relative, and the description only echoes this with 'or a subfolder'. It adds no new semantic detail about folder formatting or default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('List markdown notes') and a clear scope ('vault or a subfolder'), and it names what the caller receives ('vault-relative paths'). It does not explicitly contrast itself with search_notes, but the verb and resource are concrete enough to identify the tool's role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives context for listing by optional subfolder and tells the caller to feed returned paths into read_note. However, it does not say when to prefer list_notes over search_notes or whether listing is recursive, so the when-to-use guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_noteMove noteA

Move or rename a note (folders created automatically) and automatically update all links across the vault that pointed at its old location: wikilinks, embeds and relative markdown links. Emptied source folders are pruned. Prefer this over create+delete for renaming.

ParametersJSON Schema
NameRequiredDescriptionDefault
to_pathYesNew vault-relative path
from_pathYesCurrent vault-relative path

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral disclosure burden. It discloses important side effects: folders are created automatically, all link types are updated (wikilinks, embeds, relative markdown links), and emptied source folders are pruned. It does not mention what happens if the destination path already exists, which is a notable gap for a mutating move operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler. The core action and primary side effects are front-loaded, and the usage preference is a concise final sentence that earns its place by aiding tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, key side effects, and an explicit usage alternative. For a tool with no annotations and no output schema, it provides enough for an agent to call it correctly in the common case. It could be more complete by stating behavior when the destination already exists, but overall it is nearly sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters as vault-relative paths. The description adds minor context (folders created automatically) but does not elaborate on path format, edge cases, or conflict behavior. Baseline 3 is appropriate because the schema handles parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Move or rename') with a clear resource ('a note') and explains the full scope: automatic folder creation, link updates across the vault, and pruning of emptied folders. This distinguishes it from siblings like create_note, edit_note, and delete_note without needing to inspect their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Prefer this over create+delete for renaming,' giving the agent a direct decision rule for when to choose this tool over an alternative. This is clear usage guidance for the main scenario (move/rename) and names the relevant alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_noteRead noteA
Read-only

Read the full markdown content of one note. path is vault-relative (from list_notes), e.g. 'projects/alpha.md'. The .md suffix is optional.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesVault-relative note path

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint already tells the agent this is non-destructive, and the description reinforces it by saying 'Read'. It adds that the full markdown content is returned, but doesn't describe error behavior or what happens for missing or invalid paths. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no fluff. The core action is front-loaded, and the path-format details are packed efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with readOnlyHint set and complete schema coverage, the description covers everything needed to call it correctly. The absence of an output schema is compensated by 'full markdown content', which makes the return value obvious.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents path with 100% coverage, so the baseline is 3. The description adds useful meaning: a concrete example, the source of the path (from list_notes), and the fact that .md is optional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Read'), the resource ('one note'), and the scope ('full markdown content'). This distinguishes it from siblings like get_frontmatter (metadata only) and search_notes (search behavior).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear practical guidance: path comes from list_notes and the .md suffix is optional. It does not explicitly name alternatives or when-not-to-use, but for a simple read tool this context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_notesSearch notesA
Read-only

Full-text search across all notes. Default is case-insensitive substring matching; set regex=true to treat query as a regular expression. Returns path, line number and the matching line, capped at 50 hits.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesText to search for
regexNoTreat query as a regular expression
folderNoOptional subfolder to restrict the search

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds substantial behavioral detail beyond that: default case-insensitive substring matching, regex opt-in, the return format (path, line number, matching line), and the 50-hit cap. This gives the agent an accurate expectation of what the tool does and returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The core purpose is front-loaded, and the behavioral details follow naturally. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description responsibly explains the return shape and limit. It covers search scope, matching semantics, regex behavior, folder restriction, and result contents. An agent has enough to invoke this tool correctly without ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes further by explaining the default matching behavior ('case-insensitive substring matching') and the implication that regex is opt-in, which adds meaning beyond the schema's brief parameter descriptions. Folder restriction is not expanded, but the overall parameter semantics are well supported.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Full-text search across all notes', which names a specific verb and resource and clearly distinguishes it from sibling tools like list_notes or read_note. The mention of substring matching and regex further clarifies the exact operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes when to use this tool: when you need to find matching content across notes, with optional folder restriction. It does not explicitly name alternatives or exclusion criteria, but the context is clear enough that an agent can infer this is the content-search tool rather than a metadata or note-management tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_infoVault infoA
Read-only

Report the vault root path and how many markdown notes it contains. Use this first to confirm the vault is mounted and readable.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes this as a read-safe operation, and the description reinforces this by framing the tool as a confirmation/read rather than a mutation. It adds useful context about what the tool reports (root path and note count) and how to interpret it as a readiness check, going beyond the raw annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler or repetition. The first sentence states the core function, and the second provides a clear usage directive, making the description maximally efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only vault status tool, the description covers what it returns and when to call it. The sibling list confirms all other tools operate on notes, so there is no missing context or potential confusion.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema is empty and there is nothing for the description to compensate for. The baseline of 4 applies here; the description appropriately says nothing about parameters because none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses 'Report' as a specific verb with 'vault root path' and 'number of markdown notes' as the resource, making the tool's function immediately clear. It naturally distinguishes itself from sibling tools that operate on individual notes rather than the vault itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to 'Use this first to confirm the vault is mounted and readable,' giving a clear when-to-use directive. It does not mention exclusions or alternatives, but since no sibling tool serves the same vault-level purpose, this is sufficient and not misleading.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.5.0
    • First observedcreate_note
    • First observeddelete_note
    • First observededit_note
    • First observedget_backlinks
    • First observedget_frontmatter
    • First observedlist_notes
    • First observedmove_note
    • First observedread_note
    • First observedsearch_notes
    • First observedvault_info

TDQS

A4.3/5.0

Scored across 10 tools

Disambiguation5/5

Each tool maps cleanly to a distinct resource/action: note content, frontmatter, backlinks, vault info, and file operations. Even close pairs like get_frontmatter vs read_note are explicitly differentiated by cost and scope.

Naming Consistency4/5

Most tools follow a consistent verb_noun snake_case pattern (read_note, create_note, delete_note, move_note). vault_info is a minor outlier since it lacks a get_ or other verb prefix, but the overall pattern remains predictable and readable.

Tool Count5/5

Ten tools is well-scoped for an Obsidian vault server. Each tool covers a distinct core operation with no redundancy or unnecessary bloat.

Completeness5/5

The toolset provides complete note lifecycle coverage: create, read, update, delete, move, search, plus Obsidian-specific needs like frontmatter and backlinks. Folder handling is implicit in move/create, so there are no obvious dead ends for the implied domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables MCP clients to interact with Obsidian vaults via filesystem operations and optional REST API integration for advanced UI commands. It features multi-vault auto-discovery, concurrent-safe file handling, and comprehensive tools for searching, reading, and managing vault content.
    12
    6,584
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes an Obsidian notes vault as MCP services, enabling AI assistants to search, read, create, update, and delete notes and folders.
    25
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides read-only access to an Obsidian vault, enabling file listing, content reading, and text search across notes via MCP.
    4
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to list, read, search, create, update, rename, and delete markdown notes in a local Obsidian vault via an HTTP MCP endpoint.
    7
    MIT