obsidian-mcp
Wraps the Obsidian CLI to allow an LLM agent to interact with a running Obsidian instance, enabling read/write notes, search, manage frontmatter, navigate links, run plugins, and more.
Click on "Install 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-mcpsearch my vault for notes tagged 'meeting'"
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.
obsidian-mcp
MCP server that wraps the official Obsidian CLI so an LLM agent can drive a running Obsidian instance — read/write notes, search, manage frontmatter, navigate links, run plugins, and more.
This server is a thin, comprehensive wrapper. Every tool maps 1:1 to an obsidian CLI command.
Prerequisites
Obsidian must be running. The CLI talks to the live app over IPC; it does not read the vault on disk directly.
Register the CLI binary. In Obsidian: Settings → General → Command line interface → Register CLI. Obsidian will add
obsidianto yourPATH.Verify:
obsidian versionprints the CLI version.
Related MCP server: Obsidian MCP Server
Install
Two paths depending on whether you want to build it yourself or grab a pre-published version from npm.
Option A — Clone & build (works today)
Clone the repo and build locally, then point Claude Code at the built file:
git clone https://github.com/yuchichang/obsidian-mcp.git
cd obsidian-mcp
npm install
npm run buildRegister it with Claude Code (one command):
# Add (user scope — available across all projects)
claude mcp add -s user obsidian -- node /absolute/path/to/obsidian-mcp/dist/index.js
# Remove
claude mcp remove obsidian
# List configured servers
claude mcp list-s user registers it for your whole user account. Use -s project to commit it to the repo's .mcp.json instead, or -s local for the current project only (default).
Or write it into .mcp.json manually:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/absolute/path/to/obsidian-mcp/dist/index.js"]
}
}
}Option B — Install from npm (zero-build)
Prerequisite: the package must already be published to npm. The maintainer publishes once via
npm publish; all subsequent users get it vianpxautomatically. If you forked this repo and want this flow under your own scope, changenameinpackage.jsonto@<your-npm-username>/obsidian-mcp, thennpm publish.
Once published, no clone or build needed:
claude mcp add -s user obsidian -- npx -y @yuchichang/obsidian-mcpOr in .mcp.json / Claude Desktop's claude_desktop_config.json:
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "@yuchichang/obsidian-mcp"]
}
}
}Override the CLI path
If obsidian isn't on PATH, set the OBSIDIAN_CLI env var. Works with either install path:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/absolute/path/to/obsidian-mcp/dist/index.js"],
"env": {
"OBSIDIAN_CLI": "C:/Users/you/AppData/Local/Obsidian/obsidian.cmd"
}
}
}
}Tools
Vault & files
Tool | Wraps |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Frontmatter properties
Tool | Wraps |
|
|
|
|
|
|
Search
Tool | Wraps |
|
|
|
|
Tags & links
Tool | Wraps |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Daily notes
Tool | Wraps |
|
|
|
|
|
|
Plugins
Tool | Wraps |
|
|
|
|
|
|
|
|
Developer / advanced
Tool | Wraps | Notes |
|
| ⚠️ Runs arbitrary JS inside Obsidian. Treat as destructive. |
|
| Returns base64 PNG. |
|
| |
|
|
Meta
Tool | Wraps |
| reports the persistent topic → folder map for a vault |
| binds a topic to a folder (no prompt) |
| removes a topic from the persistent store |
| lists root-level notes with preview for bulk-organize |
| validates + applies a routing plan (dry-run supported) |
|
|
|
|
Conventions
Targeting a note — file-targeting tools accept either:
file— wikilink-style note name (e.g."My Note"), orpath— vault-relative file path (e.g."Folder/My Note.md").
Multi-vault setups — every tool accepts an optional
vaultparameter. When omitted, the most recently focused vault is used.Output format — list/search/metadata tools default to JSON for easy machine parsing.
Sensitive operations & user confirmation
The following tools are gated behind a user-confirmation step:
Tool | Reason |
| Removes data (especially with |
| Renames + rewrites wikilinks across the vault. |
| Removes frontmatter data. |
| Bulk-rewrites tags across every note. |
| Grants a community plugin code execution. |
| Runs arbitrary JavaScript inside Obsidian. |
How the gate works:
MCP elicitation (preferred). If the connected client supports the
elicitationcapability (Claude Code does), the server sends anelicitation/createrequest and the client shows the user a Proceed? prompt with the action and target spelled out. Onlyaccept + confirm: trueproceeds.Explicit
confirm: trueparameter. Every sensitive tool's input schema includes an optionalconfirm: boolean. Passingconfirm: trueskips the elicitation prompt — use this only when the caller has already obtained user approval.Refusal fallback. If the client doesn't support elicitation and
confirm: truewas not provided, the tool returns anisErrorresult that names the action and instructs the caller to retry withconfirm: true.
Bypass for batch / automation
OBSIDIAN_MCP_AUTO_CONFIRM=1Set this env var (in your MCP client's env block) to skip every confirmation prompt. Use only in fully-trusted automation contexts.
Topic → folder routing (vault-aware, persistent)
The MCP runs a per-vault topic store at ~/.obsidian-mcp/<vault>/topic-map.json. It learns where each topic of note belongs and reuses that decision next time.
Agent: create_note(path="kungpao.md", topic="recipe-chinese", vault="MyVault")
↓
MCP: is "recipe-chinese" already in the store?
├── yes → use the stored folder, increment usage, write
└── no → scan vault for similar folders ("Recipes/Chinese", "食譜/中式" …)
→ MCP elicits the user: "Where should 'recipe-chinese' notes live?
Suggestions: ..."
→ user types or picks a folder
→ MCP records the route, then writesWhat lives where, and why:
The persistent store, not env vars, is the source of truth — the MCP is the only thing that sees vault state across sessions, so storing the conventions there is what gives this layer its leverage.
The user is asked once per topic; subsequent notes for the same topic land silently.
Folders are auto-created by the Obsidian CLI as deep as needed — no
mkdirfrom the MCP.
Resolution order
Condition | Action | |
1 |
| Used as-is, topic ignored. |
2 |
| Reuse stored folder, increment usage. |
3 |
| Treat as pre-decided; record in store. |
4 |
| Scan vault, prompt user, record answer. |
5 |
| Auto-create |
6 | No topic, no folder | Write at vault root. |
Topic-store tools
Tool | What it does |
| Show the learned map for a vault, sorted by usage. |
| Bind |
| Forget a topic from the store (existing notes untouched). |
Theory pointers
Faceted folder routing here is the simplest slice of a much larger idea. Worth reading if you want to push further:
Ranganathan, S.R. (1933) Colon Classification — PMEST facets
Ranganathan, S.R. (1931) Five Laws of Library Science
Tiago Forte (2022) Building a Second Brain — PARA method (actionability axis)
Niklas Luhmann (1981) "Kommunikation mit Zettelkästen" — graph-over-tree
Bates, M.J. (1989) "The design of browsing and berrypicking"
Bulk organize root notes
When the vault root accumulates loose .md files, a caller LLM can sweep them into the right subfolders in three steps:
Scan — list root notes with metadata + body preview:
// tool: obsidian_scan_root { "ignore": ["Daily/*", "*.excalidraw.md"] }Classify (caller side) — the LLM reads each preview and proposes a routing plan:
[ { "path": "WebRTC 連線建立流程.md", "target_folder": "webrtc", "topic": "webrtc", "reason": "covers signaling/SDP/ICE" }, { "path": "舊筆記.md", "target_folder": "Notes", "topic": "misc" } ]Apply — dry-run first to preview, then call again with
dry_run: false:// tool: obsidian_organize_apply { "plan": [...], "dry_run": true } // → { "summary": { "will_move": 2, "will_create_folders": 1, ... }, "items": [...] } { "plan": [...], "dry_run": false, "confirm": true } // → moves files, creates new folders as needed, registers topic→folder mappings
Per-entry failure isolation: a single move failure marks that entry status: "failed" without aborting the rest of the batch. Successful moves with a topic field are recorded in the persistent topic store, so future single-note writes for that topic auto-route.
Long content & argv limits
The Obsidian CLI does not (yet) support reading parameter values from stdin or from files — every value travels on the command line. That collides with platform limits:
Platform | Practical command-line limit |
Windows (cmd.exe) | ~8,191 chars total |
macOS / Linux |
|
To stay safe, the server automatically chunks long writes:
Tool | Chunking strategy |
| First chunk via |
| Sequential |
|
|
| Resolves the daily note path, then chunked append. |
| Not chunked — JS can't be split. Returns an error suggesting the script-via-note workaround. |
Splits happen at line boundaries when possible; oversized single lines fall back to UTF-8-safe character boundaries. Reassembled content is byte-identical to the original.
Configure the per-call byte threshold (defaults: 6,000 on Windows, 100,000 elsewhere):
OBSIDIAN_MCP_MAX_ARG_BYTES=4000If a chunk in the middle of a multi-chunk write fails, the server returns isError with a clear message stating which chunks made it to disk so the caller can recover.
Develop
npm run dev # tsc --watch
npm run inspect # launch MCP Inspector against the built server
node scripts/smoke-test.mjs # initialize + tools/list smoke testHow it works
runObsidian() (src/exec.ts) shell-quotes arguments, invokes the obsidian binary via child_process.exec, and parses stdout. Most read-style tools request format=json; results are parsed to structuredContent for clients that consume structured tool output, while still returning a text representation in content.
Tool registry lives in src/tools.ts — adding a new wrapped command is a single entry there.
Reference
Obsidian CLI: https://obsidian.md/help/cli
MCP spec: https://modelcontextprotocol.io
Available Tools
34 toolsobsidian_append_noteAppend to a noteA
Appends markdown content to the end of an existing note.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. | |
| content | Yes | Markdown content to append. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutability (readOnlyHint=false) and non-destructiveness (destructiveHint=false). The description adds basic behavioral context (appends to end) but does not disclose edge cases or return behavior beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundancy, front-loaded with purpose. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the core action. However, it omits any mention of return values or behavior when the note does not exist, which could be helpful for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with clear descriptions. The description adds no additional parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('appends') and resource ('existing note'), clearly distinguishing it from siblings like obsidian_create_note and obsidian_prepend_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs alternatives. The purpose implies appending to existing notes, but no when-not-to-use or comparison to other tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_create_noteCreate a new noteB
Creates a new note. name is the path (relative to the vault root), with or without the .md extension.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| name | Yes | Note path/name relative to the vault root. | |
| content | No | Initial markdown content to write into the note. | |
| template | No | Template name to apply (mutually exclusive with content). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose important behavioral traits such as whether creating a note with an existing name overwrites or errors. Annotations indicate it is not destructive, but the description fails to elaborate on actual behavior, which is crucial for a modification tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the core purpose, and contains no superfluous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks critical context such as what happens if a note with the same path already exists, and does not mention the mutual exclusivity of content and template. Given no output schema, more completeness is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds value beyond the input schema by clarifying that the name parameter can be with or without the .md extension. Since schema coverage is 100%, baseline is 3, and this additional detail for a key parameter justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'creates' and the resource 'new note', and the tool name itself is descriptive. Among siblings like obsidian_append_note and obsidian_read_note, this tool's purpose to create a new note is distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as obsidian_append_note or obsidian_prepend_note. It only states what it does, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_daily_appendAppend to today's daily noteA
Appends content to today's daily note (creates it if missing).
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| content | Yes | Markdown content to append. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so the description carries the burden. It discloses the creation behavior and implies mutation (append), adding value beyond annotations. No further details on response or error handling, but adequate for the tool's simplicity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 12 words, front-loaded with the action and resource. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, no output schema, and sibling tools, the description adequately covers the core functionality. It could briefly mention the vault parameter's optionality, but the schema already handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3 applies. The description does not add extra meaning beyond the schema; it mentions 'content' but not 'vault', which is already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Appends content'), the specific resource ('today's daily note'), and a key behavior ('creates it if missing'). This distinguishes it from siblings like obsidian_append_note, which appends to a specified note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for daily notes and notes creation, but does not explicitly contrast with siblings like obsidian_append_note or obsidian_create_note. However, the context is clear enough for an agent familiar with the domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_daily_pathGet today's daily note pathARead-only
Returns the file path of today's daily note.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, confirming it is a safe read operation. The description adds no further behavioral context (e.g., what happens if the note does not exist, whether it creates the note or returns an error). With annotations covering the safety profile, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It is front-loaded with the core purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, read-only), the description is mostly complete. However, it could mention whether the note must exist or if it creates one if missing, but this is a minor gap. No output schema exists, but the return value is implied to be a string path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already fully describes the single optional parameter 'vault'. The description does not add any extra meaning about the parameter; it relies entirely on the schema. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns the file path of today's daily note. It uses a specific verb ('returns') and a clear resource (today's daily note path), and it is distinct from sibling tools like obsidian_daily_append or obsidian_daily_read which perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description implies usage for obtaining the path of today's daily note, but it does not mention when it should be preferred over other tools or what prerequisites exist (e.g., note must exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_daily_readRead today's daily noteARead-only
Returns the content of today's daily note.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already informs the agent that this operation is safe. The description adds no additional behavioral context beyond what the annotation provides, such as what happens if the daily note does not exist or if there are multiple daily notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly states the tool's function. There is no unnecessary information, and it is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description does not cover edge cases or behavior details beyond the basic function. For example, it doesn't explain what happens if today's note doesn't exist or how the content is formatted. Given the readOnlyHint and no output schema, a bit more context would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single optional parameter 'vault' with its purpose and default behavior. The description does not add any extra meaning beyond the schema. With 100% schema coverage, baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns the content of today's daily note. It uses a specific verb ('Returns') and resource ('content of today's daily note'). This distinguishes it from siblings like obsidian_read_note (reads any note) or obsidian_daily_append (appends to daily note).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that this is a convenience for accessing the daily note without needing its path, nor does it exclude it for other cases. No explicit or implicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_delete_noteDelete a noteADestructive
Moves a note to the system trash. Set permanent: true to bypass trash and delete immediately (irreversible).
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. | |
| permanent | No | When true, deletes immediately instead of moving to trash. | |
| confirm | No | Set to true to skip the interactive confirmation prompt. Use only when the caller has already confirmed with the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: it explains the trash behavior, the irreversibility of permanent deletion, and the confirm parameter to skip confirmation. Annotations only indicate destructiveness; description fills in the details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action, then optional detail. No superfluous text. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but descriptions of behavior and confirm parameter are adequate. Could mention error handling (e.g., note not found), but for a delete tool this is sufficient. Context signals show moderate complexity (5 params), and description covers key behavioral aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds value by explaining the effect of 'permanent' (irreversible) and 'confirm' (skip confirmation). This goes beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool moves a note to trash or permanently deletes it. The verb 'delete' and resource 'note' are specific, and it distinguishes from siblings like obsidian_create_note or obsidian_append_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 delete notes) and provides options (permanent vs trash). It does not explicitly exclude scenarios or mention alternatives, but the context is clear enough given sibling tools are mostly different operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_dev_consoleGet console outputARead-only
Returns recent console messages from Obsidian DevTools.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a read operation. The description adds 'recent console messages' but does not define what 'recent' means or describe any side effects (e.g., does it clear the console?). The behavioral context is adequate but not detailed 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is direct and front-loaded. Every word contributes to the purpose. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 optional parameter, no output schema, read-only annotation), the description provides sufficient context. A minor improvement would be to hint at the output format, but it is not severely lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% as the only parameter (vault) has a clear description. The tool description does not add further semantic context for the parameter beyond what the schema already provides. Per guidelines, baseline is 3 when coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Returns') and the resource ('recent console messages from Obsidian DevTools'). It specifies the output type and scope, distinguishing it from siblings like obsidian_dev_errors which focus on errors, and obsidian_dev_screenshot which captures visuals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving console output but does not explicitly state when to use this tool over others, nor does it mention when not to use it. No alternatives are named, so the agent must infer context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_dev_errorsGet JavaScript errorsARead-only
Returns recent JS errors from the Obsidian DevTools console.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the description accurately reflects read-only behavior. However, it adds little context beyond stating 'recent' without specifying how recent or any limits. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded and directly states the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no output schema, but the description could be more complete by hinting at the format of the returned errors or mentioning any filtering (e.g., limit). It meets the minimum for a straightforward read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The one parameter 'vault' is fully documented in the input schema with description coverage at 100%. The tool description does not add any additional meaning or context beyond what is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns recent JS errors from the Obsidian DevTools console, specifying the verb 'Returns' and the resource. It distinguishes from siblings like obsidian_dev_console which likely returns all console output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as obsidian_dev_console for general logs or obsidian_dev_screenshot for visual debugging. The description does not mention exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_dev_screenshotCapture Obsidian screenshotARead-only
Returns a base64-encoded PNG screenshot of the running Obsidian window.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. Description adds no new behavioral context beyond what annotations provide, aligning with them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 10 words, front-loaded with primary action. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (1 optional param, no output schema), description completely covers what the tool does and returns. No missing details evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameter descriptions. The only parameter 'vault' is fully described in schema; description adds no extra semantics beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool returns a base64-encoded PNG screenshot, specifying verb and resource. It distinguishes from sibling tools such as obsidian_dev_console and obsidian_dev_errors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Description is self-explanatory but lacks explicit context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_disable_pluginDisable a pluginBIdempotent
Disables a community plugin by id.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and readOnlyHint=false, so the description's simple 'Disables' is consistent but adds no extra behavioral context beyond the schema and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 5 words, no redundancy. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter and no output schema, the description is functionally adequate but omits details like error handling or id format. Could be more helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: 'vault' has a description, but 'id' lacks schema description. The description mentions 'by id' but doesn't clarify what constitutes a valid id or where to find it, providing only minimal compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Disables') and resource ('community plugin by id'), clearly distinguishing it from siblings like obsidian_enable_plugin and obsidian_list_plugins.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., obsidian_uninstall_plugin is not present, but no context about prerequisites or when not to disable given).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_enable_pluginEnable a pluginAIdempotent
Enables a community plugin by id.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| id | Yes | Plugin id (e.g. 'dataview'). | |
| confirm | No | Set to true to skip the interactive confirmation prompt. Use only when the caller has already confirmed with the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and idempotentHint=true. The description adds no behavioral context beyond what annotations provide, missing details like potential side effects or confirmation behavior (though the schema covers the confirm parameter).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no unnecessary words, directly communicating the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with no output schema, the description combined with full schema coverage provides sufficient information for an AI agent to understand and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description only mentions 'by id', which adds no extra meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Enables'), the target ('community plugin'), and the method ('by id'), making it easy to understand what the tool does and distinguishing it from siblings like 'disable_plugin' or 'list_plugins'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as when to use 'reload_plugin' or prerequisites like needing the plugin to be installed. The use case is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_evalEvaluate JavaScript in ObsidianADestructive
Runs arbitrary JavaScript inside the running Obsidian instance with access to the app object. DANGEROUS: can read/modify any vault data and execute side effects. Use only when no narrower tool fits.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| code | Yes | JavaScript code to evaluate. | |
| confirm | No | Set to true to skip the interactive confirmation prompt. Use only when the caller has already confirmed with the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description warns that the tool 'can read/modify any vault data and execute side effects,' which aligns with annotations (destructiveHint=true, openWorldHint=true). It adds context about the `app` object beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences: one for purpose and one for usage guidance. It is front-loaded with the core action and achieves maximal information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of output schema, the description covers purpose, danger, and usage guideline. It could mention return value format, but it remains fairly complete for a powerful tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for all three parameters. The description does not add significant detail beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool evaluates arbitrary JavaScript in Obsidian with access to the `app` object. It distinguishes itself from siblings by the verb 'runs' and the unique capability of code execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use only when no narrower tool fits,' providing clear guidance on when to use this tool versus alternatives. It does not list specific sibling tools, but the context implies caution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_files_with_tagList files with a tagARead-only
Lists every note tagged with the given tag.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| tag | Yes | Tag name. Include the leading '#' (e.g. '#project'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses it lists every note with the tag, consistent with readOnlyHint. Adds context that it returns all matching notes, though lacks detail on scope (e.g., subfolder depth) or performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, zero wasted words. Front-loaded with the core action and filtering condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple list tool, but missing description of return format (e.g., list of file paths) especially since no output schema exists. Would benefit from specifying output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters; description adds formatting guidance for tag parameter (include '#'), which helps agents. Vault default behavior is documented in schema but not repeated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists notes filtered by tag, distinguishing it from sibling tools like obsidian_list_files and obsidian_search. Verb and resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives are provided. While the purpose is clear, there is no guidance on when not to use this tool or mention of alternatives like obsidian_search for more complex queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_get_backlinksGet backlinksARead-only
Returns notes that link to the target note.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description is consistent. The description adds minimal extra behavioral context beyond 'returns notes that link' – it does not disclose output format, pagination, or scope (e.g., all vault notes). Given annotation coverage, the burden is partially met.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no superfluous words. It is front-loaded and conveys the core purpose immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple read query with readOnlyHint annotation and no output schema, the description is sufficient to understand the basic purpose but lacks details about the return format (e.g., note names, paths, or full content) and any limitations such as number of results. This leaves some ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for all three parameters. The description does not add any new meaning beyond the schema's parameter descriptions. Per rubric, baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'returns' and clearly identifies the resource: 'notes that link to the target note'. This distinguishes it from sibling tools like obsidian_get_links (which returns links from a note) and obsidian_search (full-text search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or context in which get_backlinks is preferred over siblings like get_links or search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_get_linksGet outgoing linksARead-only
Returns the outgoing wikilinks from a note.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true (safe read) and openWorldHint=false (deterministic). The description adds no extra behavioral context beyond stating the output. With annotations present, a score of 3 is appropriate—it does not contradict but also does not add value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence without any redundant information. It is front-loaded and contains every word is necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description and schema cover the input parameters, it lacks information about the return format (e.g., whether links are resolved or unresolved, or the structure of the output). Given no output schema, more detail would be beneficial for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with descriptions (100% coverage). The tool description adds no additional meaning beyond what is already in the input schema, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns outgoing wikilinks from a note, using a specific verb and resource. It distinguishes well from sibling tools like obsidian_get_backlinks (incoming links) and obsidian_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Does not mention that for backlinks one should use obsidian_get_backlinks, nor does it provide context on prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_get_metadataGet note metadataARead-only
Returns metadata for a note (frontmatter, tags, links, file stats) as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint: true. The description confirms a read operation without adding extra behavioral context such as side effects, auth needs, or rate limits. The description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence, front-loaded with the core purpose, and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, full schema coverage, and no output schema, the description sufficiently covers what the tool does and what it returns (metadata as JSON including specific fields).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for its 3 parameters (vault, file, path). The description adds no further meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Returns', the resource 'metadata for a note', and specifics: 'frontmatter, tags, links, file stats' and format 'as JSON'. It distinguishes itself from siblings like obsidian_read_note (content) and obsidian_get_properties (only properties) by listing the full metadata scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lacks explicit guidance on when to use this tool versus alternatives like obsidian_get_properties or obsidian_get_links. It implies usage by listing what it returns, but does not state exclusions or provide context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_get_propertiesGet note frontmatter propertiesARead-only
Returns the YAML frontmatter properties of a note as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safe read. The description adds that it returns JSON, but does not mention edge cases like missing frontmatter. With good annotations, the description adds minimal extra behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with key information, and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool, the description is adequate. It specifies the return format (JSON). However, it does not address edge cases or behavior when frontmatter is absent, which would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear descriptions for each parameter. The description does not add any additional meaning beyond what the schema already provides, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Returns', the resource 'YAML frontmatter properties of a note', and the format 'as JSON'. It distinguishes from siblings like obsidian_read_note and obsidian_get_metadata by specifying frontmatter specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It implies usage for getting frontmatter, but no when-not or selection criteria between file and path parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_helpShow CLI helpARead-only
Shows the underlying obsidian help output — useful when a command behaves unexpectedly.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Pass --all to include hidden commands. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's behavioral contribution is minimal. It adds that output is from 'obsidian help', which is expected. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loads purpose and usage context. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple help tool with one optional parameter and no output schema, the description is complete enough to inform agent behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter ('all') with full schema coverage. Description does not add meaning beyond the schema's boolean description. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it shows 'obsidian help' output, with a clear verb ('shows') and resource. It distinguishes from sibling tools which are all about notes, plugins, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Says 'useful when a command behaves unexpectedly', providing clear context for use. No explicit exclusions or alternatives, but siblings don't offer help, so it's sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_list_filesList notes in vaultARead-only
Lists every note in the vault. Returns JSON by default. Useful as a first step to discover what exists.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| format | No | Output format. Defaults to JSON. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the description carries a lower burden. It adds that results return JSON by default, which is behavioral context, but does not detail other traits like pagination or performance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, no filler, and front-loaded with the core action. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with annotations and well-described schema, the description covers the basic purpose and default output format. However, it lacks details on the structure of returned data (e.g., whether it returns paths or titles) and does not clarify if the listing is recursive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for both parameters, so the baseline is 3. The description adds no additional parameter meaning beyond what the schema provides, only reiterating the default format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists every note in the vault, with a specific verb and resource. However, it does not explicitly differentiate from sibling listing tools like obsidian_files_with_tag or obsidian_search, which may also list notes under certain criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions being useful as a first step for discovery, implying a use case, but does not specify when not to use it or name alternative tools for filtered or targeted listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_list_foldersList folder treeARead-only
Displays the vault folder structure as a tree.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| format | No | tree |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds no new behavioral context beyond stating the basic output, which is sufficient and consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence efficiently conveys the core purpose, but could include a brief note about format options without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description does not mention the format parameter's options (tree, paths, json) or the vault default behavior, leaving the agent unaware of alternative output formats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with descriptions for both parameters provided in the schema. The description adds no additional meaning beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool displays the vault folder structure as a tree, which distinguishes it from siblings like obsidian_list_files (files) and obsidian_list_tags (tags).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit usage guidance is provided; it's implied to use when you need to see folder structure, but no mention of when to prefer it over alternative formats or sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_list_orphansList orphan notesARead-only
Finds notes that have no incoming wikilinks.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the agent knows it's a safe read operation. The description adds that it finds notes without incoming links, which specifies the exact behavior beyond the annotation. No contradictions or missing behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that directly states the tool's purpose with no extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no output schema, one optional parameter), the description is largely complete. However, it could briefly mention the return format (e.g., a list of note names) to improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single optional parameter 'vault,' and its description in the schema is sufficient. The tool description does not add any additional semantic meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Finds' and a clear resource 'notes that have no incoming wikilinks.' It distinguishes itself from siblings like 'obsidian_get_backlinks' (returns backlinks for a specific note) and 'obsidian_list_unresolved' (lists broken links).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for identifying orphan notes but does not explicitly state when to use it over alternatives. No guidance on when not to use or context for choosing between this and 'obsidian_get_backlinks' or 'obsidian_search.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_list_pluginsList installed pluginsARead-only
Lists installed community + core plugins with enabled state.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only. The description adds that it lists both community and core plugins with enabled state, which is useful behavioral context beyond what annotations provide. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the action and resources. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter, the description is complete. It covers what is listed and the included state information. No output schema is needed given the straightforward nature of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for its single optional parameter. The description adds no additional parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: lists both core and community plugins along with their enabled state. This clearly distinguishes it from sibling tools like obsidian_disable_plugin or obsidian_enable_plugin, which are for managing plugins, not just listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives (e.g., before enabling/disabling a plugin). The context is clear, but no when-not-to-use or alternative suggestions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_list_tagsList all tagsARead-only
Lists every tag used in the vault, with usage counts.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only (readOnlyHint: true). The description adds value by disclosing that it returns usage counts, providing more behavioral context. It does not contradict annotations or introduce missing warnings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb and resource, and contains no wasted words. It efficiently conveys the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description sufficiently explains the return value ('with usage counts'). It could be more explicit about output format (e.g., list of tag-count pairs), but is adequate for a read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the vault parameter already well-documented (optional, defaults to most recent vault). The tool description adds no further parameter semantics, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Lists every tag used in the vault, with usage counts.' It specifies the resource ('tags'), scope ('vault'), and additional detail ('usage counts'), distinguishing it from siblings like obsidian_files_with_tag which lists files for a specific tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., obsidian_files_with_tag, obsidian_search). It lacks explicit when-to-use, when-not-to-use, or mentions of sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_list_unresolvedList unresolved linksARead-only
Finds wikilinks that point to non-existent notes.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds behavioral context by specifying what the tool finds (unresolved wikilinks). It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words, earning its place efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 adequately conveys the tool's purpose without missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the single 'vault' parameter with high coverage (100%). The tool description adds no further parameter details, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Finds' and clearly defines the resource 'wikilinks that point to non-existent notes.' This distinguishes it from siblings like obsidian_list_orphans or obsidian_get_links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for identifying broken wikilinks but provides no explicit guidance on when to use versus alternatives like obsidian_get_links or obsidian_list_orphans.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_move_noteMove or rename a noteADestructive
Moves or renames a note. Wikilinks across the vault are updated automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. | |
| to | Yes | Destination path (vault-relative). Include filename. | |
| confirm | No | Set to true to skip the interactive confirmation prompt. Use only when the caller has already confirmed with the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds value by noting automatic wikilink updates, providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the primary action. No unnecessary words; every sentence is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core behavior well. Lacks mention of return value or confirmation prompt behavior, but schema covers the confirm parameter. Adequate for a state-modifying tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description adds no additional parameter-level details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool moves or renames a note and automatically updates wikilinks. Distinguishes from sibling tools like obsidian_create_note and obsidian_delete_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for moving/renaming notes, but no explicit guidance on when to use vs alternatives like obsidian_create_note or obsidian_delete_note. No when-not scenarios mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_prepend_notePrepend to a noteA
Inserts content near the top of a note (after frontmatter, if present).
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. | |
| content | Yes | Markdown content to prepend. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false). The description adds the specific behavioral detail of inserting after frontmatter. While not exhaustive, it provides useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that is concise and devoid of filler. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the core behavior. However, it does not address what happens if the note does not exist, which could be important given siblings like obsidian_create_note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so schema already documents each parameter. The description does not add additional meaning to parameters beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'inserts' and the resource 'note', with positional detail 'after frontmatter'. This distinguishes it from sibling tools like obsidian_append_note and obsidian_create_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for adding content near the top of a note, but does not explicitly contrast with siblings or mention prerequisites/exclusions. Usage guidance is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_read_noteRead note contentARead-only
Returns the full markdown content of a note.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that it returns 'full markdown content,' which clarifies the output format beyond just 'content.' No other behavioral traits are disclosed, but the annotations lower the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that conveys the essential purpose without any wasted words. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, good schema descriptions, and annotations, the description is sufficiently complete. It explains the return value (full markdown content) without needing an output schema. No additional context is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add any extra meaning beyond the schema's explanations for `vault`, `file`, and `path` parameters. No clarification on how wikilink resolution works or the default for vault.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Returns') and resource ('full markdown content of a note'). It effectively distinguishes itself from siblings like obsidian_append_note and obsidian_delete_note, which modify or delete content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving full note content but provides no explicit guidance on when to use it versus alternatives like obsidian_get_properties or obsidian_search. No exclusion criteria or use-case examples are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_reload_pluginHot-reload a pluginAIdempotent
Reloads a plugin's code (useful during plugin development).
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the tool is not read-only and is idempotent. The description adds the development context, implying that reloading refreshes code changes without persisting data. It discloses the intended use without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and context. Every word adds value, with no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a straightforward reload action with no output schema and two parameters, the description is minimal yet functional. However, it omits details like prerequisites (e.g., plugin must be enabled) or side effects (e.g., disrupts current behavior), which a developer might find useful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has two parameters: 'vault' (documented) and 'id' (only minLength, no description). The description does not mention either parameter, so it fails to compensate for the 50% schema coverage. The agent gets no additional guidance on parameter meaning beyond the schema's sparse documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('reloads') and the resource ('a plugin's code'), and adds context ('useful during plugin development'). It distinguishes well from sibling tools like obsidian_enable_plugin and obsidian_disable_plugin, which are about toggling plugin state rather than code reloading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions 'useful during plugin development,' giving clear context for when to use the tool. However, it does not provide explicit guidance on when not to use it or suggest alternatives, leaving room for slight ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_remove_propertyRemove a frontmatter propertyCDestructiveIdempotent
Removes a frontmatter property from a note.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. | |
| name | Yes | Property name to remove. | |
| confirm | No | Set to true to skip the interactive confirmation prompt. Use only when the caller has already confirmed with the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds no further behavioral context (e.g., that the change is permanent, or what happens if the property doesn't exist). It simply restates the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, making it very concise. However, it could benefit from a brief note about idempotency or the confirm parameter without adding much length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations and rich schema, the description provides minimal context. It does not explain return values (none) or the effect of the confirm parameter, but the essential operation is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add meaning beyond what the schema provides for parameters like 'vault', 'file', 'path', 'name', and 'confirm'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'removes' and the resource 'frontmatter property from a note', making the action unambiguous. However, it does not differentiate from sibling tools like obsidian_set_property, though the name itself distinguishes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., obsidian_set_property for setting/updating). The description lacks context about prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_rename_tagBulk rename a tagBDestructive
Renames a tag across every note in the vault.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| old | Yes | Existing tag name (e.g. '#old'). | |
| new | Yes | New tag name (e.g. '#new'). | |
| confirm | No | Set to true to skip the interactive confirmation prompt. Use only when the caller has already confirmed with the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond what annotations already provide (destructiveHint=true, readOnlyHint=false). It does not mention the confirmation prompt or potential merging behavior. With annotations covering the safety profile, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It conveys the essential purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 4 parameters and being a destructive tool, the description is minimal and lacks details on the confirm parameter behavior, tag formatting, or side effects. Given no output schema, the description should provide more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all four parameters having descriptions. The description does not add additional meaning beyond the schema, meeting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool renames a tag across every note in the vault, specifying the action (rename) and the resource (tag) with a clear scope (across every note). This distinguishes it from sibling tools like obsidian_files_with_tag or obsidian_list_tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as checking existing tags with obsidian_list_tags or previewing changes with obsidian_files_with_tag. No prerequisites, exclusions, or recommendations are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_searchFull-text searchARead-only
Full-text search across the vault. Returns matching files.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| query | Yes | Search query string. | |
| limit | No | Maximum number of results to return. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint. The description adds minimal behavioral detail (e.g., 'returns matching files') but does not disclose pagination, performance, or return specifics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded action. Every word adds value; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the basic purpose, it lacks detail on return format (e.g., paths, snippets). Given no output schema, the description should hint at output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have descriptions in the schema covering 100% of coverage. The description does not add additional semantic meaning beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full-text search across the vault. Returns matching files.' It uses a specific verb ('search') and resource ('vault'), and distinguishes from sibling tools like tag search or backlinks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like obsidian_files_with_tag or obsidian_search_context. The description simply states functionality without use-case context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_search_contextSearch with surrounding contextARead-only
Full-text search that returns surrounding lines of context for each hit.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| query | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only; description adds context about returning lines, but lacks details on what is not done (e.g., formatting, sorting).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal; it does not explain what 'surrounding lines' means, how many lines, or the result format, leaving significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%), and the description does not clarify the 'query' format or 'limit' meaning, providing minimal added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs full-text search and returns surrounding lines of context, distinguishing it from sibling tools like obsidian_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives, but the name and description imply it's for searches needing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_set_propertySet a frontmatter propertyBIdempotent
Sets a frontmatter property on a note. Creates the frontmatter block if missing.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name to target. Optional — defaults to the most recently focused vault. | |
| file | No | Note name resolved as a wikilink (e.g. 'My Note'). Provide either `file` or `path`. | |
| path | No | Vault-root-relative path to the note (e.g. 'Folder/My Note.md'). Provide either `file` or `path`. | |
| name | Yes | Property name (key). | |
| value | Yes | Property value (string). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true, so description's note about creating frontmatter block if missing adds value. However, it doesn't clarify behavior when property already exists (overwrite?) or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, very concise. Could be slightly more structured with a brief usage context, but no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, and description fails to mention return value. With 5 parameters and no behavioral details on property updates, the description is insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions. Description adds no additional parameter-specific semantics beyond what schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool 'Sets a frontmatter property on a note' with a specific verb and resource, and distinguishes from siblings like 'obsidian_remove_property'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives (e.g., obsidian_append_note or obsidian_create_note). Does not mention when not to use it or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
obsidian_versionGet Obsidian CLI versionARead-only
Returns the version of the Obsidian CLI binary in use.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, fully covering the behavioral safety. The description adds that it returns a version string but provides no further behavioral context (e.g., format, potential errors). With annotations handling safety, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that conveys the exact purpose with no unnecessary words. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's trivial complexity (no parameters, no output schema, simple read operation), the description is complete enough. It fully addresses what the tool does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100% (empty object). The description adds meaning by specifying the return value (version). With no parameters to document, this is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the Obsidian CLI version, with a specific verb ('Returns') and resource ('version'). It distinguishes from siblings that perform diverse operations on notes, files, plugins, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the version is needed, and there are no alternative tools for this purpose. However, it does not explicitly state when not to use it, but given the simple nature, this is adequate.
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. Dates show when Glama detected each change.
34 tool updates
v1.0.0- First observed
obsidian_append_note - First observed
obsidian_create_note - First observed
obsidian_daily_append - First observed
obsidian_daily_path - First observed
obsidian_daily_read - First observed
obsidian_delete_note - First observed
obsidian_dev_console - First observed
obsidian_dev_errors - First observed
obsidian_dev_screenshot - First observed
obsidian_disable_plugin - First observed
obsidian_enable_plugin - First observed
obsidian_eval - First observed
obsidian_files_with_tag - First observed
obsidian_get_backlinks - First observed
obsidian_get_links - First observed
obsidian_get_metadata - First observed
obsidian_get_properties - First observed
obsidian_help - First observed
obsidian_list_files - First observed
obsidian_list_folders - First observed
obsidian_list_orphans - First observed
obsidian_list_plugins - First observed
obsidian_list_tags - First observed
obsidian_list_unresolved - First observed
obsidian_move_note - First observed
obsidian_prepend_note - First observed
obsidian_read_note - First observed
obsidian_reload_plugin - First observed
obsidian_remove_property - First observed
obsidian_rename_tag - First observed
obsidian_search - First observed
obsidian_search_context - First observed
obsidian_set_property - First observed
obsidian_version
TDQS
Most tools have distinct purposes, but there is some potential confusion between obsidian_search and obsidian_search_context, and between obsidian_get_backlinks and obsidian_get_links. Overall, descriptions are clear enough for an agent to differentiate.
All tools follow a consistent 'obsidian_verb_noun' snake_case pattern, making it predictable and easy to infer function from name.
With 34 tools, the server is over-scoped for typical MCP usage. While it covers many aspects of Obsidian, the high number suggests potential for splitting into specialized servers, and many tools (e.g., development utilities) may be unnecessary for most agents.
The tool set covers core note operations, search, tags, links, and daily notes well, but lacks explicit tools for creating folders, deleting tags, or handling attachments, leaving notable gaps in domain coverage.
Maintenance
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
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Obsidian vaults for creating, reading, searching, and managing notes, daily notes, TODOs, session reports, and backlinks through both stdio and HTTP/SSE transports.103,4684MIT
- FlicenseCqualityFmaintenanceProvides 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-
- AlicenseAqualityAmaintenanceStandalone MCP server for Obsidian vaults - hybrid search (FTS5 + vector + cross-encoder reranking), images and PDFs in agent-readable form, Kanban-aware tasks (Tasks-plugin + Dataview formats), structured memory with topic recall, fine-grained read/write tools for optimal token efficiency, and link graph support. Run locally, self-host, or one-click deploy for remote access. OAuth 2.1.43375316MIT
- AlicenseAqualityCmaintenanceProvides AI agents with Obsidian vault operations via the official CLI, including reading, writing, searching notes, and managing files, with security and concurrency protections.7MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yuchi-chang/obsidian-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server