Obsidian Native MCP
Provides tools for reading, searching, and surgically editing notes in Obsidian vaults with hash-based concurrency safety, structural awareness, and multi-vault support.
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 Native MCPapply a patch to my weekly review to add the new goals"
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.
LLM-optimized MCP server for Obsidian vaults Surgical edits, hash-based concurrency safety, no whole-file rewrites.
A Model Context Protocol server that gives AI assistants (Claude Desktop, Cursor, Rovo Dev, etc.) direct, safe, context-efficient access to your Obsidian vaults.
Two ways to use it:
Obsidian plugin — 1-click install, auto-discovers vaults, settings UI for per-tool toggles, runs inside Obsidian over HTTP/SSE with a bearer token.
CLI — standalone Node binary, configured via env var or config file, speaks JSON-RPC over stdio with Content-Length framing.
Why Obsidian Native MCP
The defining design goal is minimize how many bytes the LLM has to push around per edit. Every read returns content plus cryptographic hashes; every write declares the precondition hash it expects. The result: most edits become tiny str_replaces or unified-diff patches instead of full file rewrites.
Feature | Obsidian Native MCP | Typical Obsidian MCP server |
Edit model |
| Read whole file → write whole file |
Concurrency safety | Cryptographic preconditions ( | None — silent clobbering |
Structural awareness | mdast-AST: code-fenced "headings" never treated as headings | Regex hacks that corrupt code blocks |
Frontmatter | Real YAML parser with nested key paths | Hand-rolled line matching |
Atomicity | Multi-file | None |
Permissions | Read-only mode + per-tool toggle + per-vault subdir allow/deny | All-or-nothing |
Audit trail | JSONL log with content hashes before/after every mutation | None |
Multi-vault | First-class | Usually one vault |
Related MCP server: obsidian-codex-mcp
Installation
Obsidian plugin (recommended)
Open Obsidian → Settings → Community Plugins → Browse
Search for "Native MCP" and install
Enable in Community Plugins
Open plugin settings: select which vaults to expose, optionally toggle per-tool permissions, copy the MCP URL
CLI (standalone)
npm install -g obsidian-native-mcpBuild from source
git clone https://github.com/usrivastava92/obsidian-native-mcp.git
cd obsidian-native-mcp
npm install
npm run buildConfiguration
Plugin
Auto-discovers all your Obsidian vaults from Obsidian's own config. Pick which to expose in plugin settings. Plugin also surfaces a bearer token and the MCP URL.
A Performance budgets section in plugin settings lets you cap long-running operations. All limits default to 0 = unlimited — raise or lower them freely without restriction.
Setting | Description |
Max files scanned | Max |
Max bytes read | Max raw bytes of file content read per call |
Max bulk ops | Max ops accepted by a single |
Deadline (ms) | Wall-clock time limit for long-walk tools (best-effort; checked once per file) |
CLI
Either an env var or a config file.
# Single vault
export OBSIDIAN_VAULT_PATHS=/Users/me/my-obsidian-vault
# Multiple vaults (semicolons on all platforms)
export OBSIDIAN_VAULT_PATHS=/Users/me/personal;/Users/me/workConfig file at ~/.config/obsidian-native-mcp/vaults.json:
{
"vaults": {
"personal": "/Users/me/personal-notes",
"work": "/Users/me/work-vault"
}
}Optional flags:
obsidian-native-mcp --read-only # all write tools disabled
obsidian-native-mcp --vault notes=/path # ad-hoc named vault
obsidian-native-mcp --config ./my.json # explicit config filePerformance budget env vars
All default to 0 (unlimited). Set any to a positive integer to cap that resource:
MCP_MAX_FILES_SCANNED=500 # files per search.content / vault.info call
MCP_MAX_BYTES_READ=10000000 # raw bytes per call (~10 MB)
MCP_MAX_BULK_OPS=50 # ops per bulk.apply call
MCP_DEADLINE_MS=30000 # wall-clock ms ceiling for long-walk toolsThese are defaults — they are never enforced as hard system limits. Set them to whatever makes sense for your vault and workflow.
Usage
Obsidian plugin
Add the URL from plugin settings to your claude_desktop_config.json:
{
"mcpServers": {
"obsidian-native-mcp": {
"url": "http://127.0.0.1:9789/sse?token=YOUR_TOKEN"
}
}
}CLI
{
"mcpServers": {
"obsidian-native-mcp": {
"command": "obsidian-native-mcp",
"env": {
"OBSIDIAN_VAULT_PATHS": "/Users/me/my-obsidian-vault"
}
}
}
}Tools
All tools accept an optional vault parameter; with a single vault configured, it's inferred. Every read returns hashes used by writes as preconditions.
Read tools
Tool | What it returns | Notes |
| All configured vaults | — |
| Stats per vault |
|
| Paged file listing |
|
| Find files by name | exact / substring / glob / regex |
| Full file content + | Use freely — guidelines/AGENTS.md/etc. |
| Line range + | Cheaper for big files |
| Heading skeleton + | Sub-KB even for 5000-line files |
| All matches (line, level, | Returns all — caller disambiguates |
| Block ref location + | Structural-type aware (list/table/paragraph) |
| Whole frontmatter or single nested key | YAML-aware |
| Tags from frontmatter + body | Code-fence aware |
| Outlinks, backlinks, or both | Typed: wiki/embed/header/block/markdown |
| Frontmatter + headings + tags + links + hashes | One-shot context dump |
| Paged full-text matches with per-line hashes |
|
Write tools — surgical primaries
Tool | Shape | Why |
|
| The default editing verb — quote what you see |
| Unified diff | Multi-hunk edits in one shot; context lines act as preconditions |
|
| Multi-edit, atomic per file |
Write tools — structural (when you have the address)
Tool | Notes |
| Requires |
| Optionally update wiki-link references |
| Requires |
| Renames a |
| Nested key path; YAML-safe round-trip |
| Nested key path |
| Requires |
| Insert at line N |
Write tools — whole-file & metadata
Tool | Notes |
| Create-only — errors if file exists |
| Whole-file rewrite — heavy, requires |
| Cheap, no read needed |
| Default |
| Defaults to |
Power & batch
Tool | Notes |
| Multi-file, multi-op batch. |
| Two-step: server returns proposal token + diff → caller confirms |
| Diff between two |
Per-call budget overrides (_budget)
vault.info, search.content, and bulk.apply all accept an optional _budget object that overrides the server-level config for that single call only. This lets an AI agent tighten or relax limits based on what it knows about the task:
{
"tool": "search.content",
"arguments": {
"query": "important term",
"directory": "Projects/",
"_budget": {
"maxFilesScanned": 200,
"maxBytesRead": 5000000,
"deadlineMs": 10000
}
}
}Field | Applies to | Description |
|
| Max |
|
| Max raw bytes to read this call (0 = unlimited) |
|
| Wall-clock limit in ms for this call (0 = no limit) |
|
| Max ops for this batch (0 = unlimited) |
When a budget is hit, the tool returns truncated: true with a hint and (for search.content) a nextOffset the agent can use to resume pagination. No error is thrown — the agent gets partial results and can decide what to do next.
Prompts
Place markdown in any vault's Prompts/ folder with mcp-tools-prompt in the frontmatter; Templater-style <% tp.mcpTools.prompt(name, hint) %> placeholders become MCP prompt arguments automatically.
Concurrency safety
Every read returns one or more hashes. Every write that operates on an existing range requires the matching expected_*_hash. If the file changed underneath you (a human edit in Obsidian, a parallel tool call, etc.), the write returns:
{
"ok": false,
"error": {
"code": "STALE_PRECONDITION",
"current_content_hash": "sha256:…",
"current_section_hash": "sha256:…"
}
}The model refreshes from the new hash and retries. No silent clobbering.
Permissions
Read-only mode — plugin toggle or CLI
--read-onlyflag disables every write tool.Per-tool toggle — disable individual tools (e.g., turn off
file.deletefor less-trusted clients).Per-vault subdir allow/deny — limit a client to a vault subtree.
Audit log
Every mutating call appends one JSONL line to <vault>/.obsidian/plugins/native-mcp/audit.log:
{
"ts": "2026-05-21T13:00:00Z",
"tool": "str_replace",
"vault": "notes",
"file": "Daily/2026-05-21.md",
"args_hash": "sha256:…",
"before_hash": "sha256:…",
"after_hash": "sha256:…",
"dry_run": false,
"ok": true
}Long-walk tools (search.content, vault.info) also emit telemetry fields:
{
"ts": "2026-05-21T13:00:01Z",
"tool": "search.content",
"vault": "notes",
"duration_ms": 412,
"files_scanned": 347,
"bytes_read": 2891024,
"truncated": true,
"abort_reason": "budget"
}Field | Description |
| Wall-clock time for the operation in milliseconds |
| Number of |
| Raw bytes of file content read before mdast parsing |
|
|
|
|
Rotates at 5 MB by default.
Security
Runs locally only — loopback (
127.0.0.1) for HTTP, stdio for CLI.HTTP transport requires a startup-generated bearer token in the SSE URL.
Origin header allowlist enforced; CORS is not
*.Request bodies capped at 5 MB; max-sessions and idle TTL applied.
Path-traversal protection on every vault-relative path.
Only vaults you explicitly select are accessible.
License
Available Tools
32 toolsapply_editsA
Apply a batch of str_replace edits to a single file in one round-trip. Edits applied in order against the running in-memory text; atomic (rolled back in memory if any edit fails).
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| edits | Yes | ||
| vault | No | ||
| dry_run | No | ||
| expected_content_hash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses atomicity, in-memory processing, and rollback on failure. Missing details on auth requirements or side effects beyond memory, but substantial behavior is covered.
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, front-loaded with key purpose and behavior. Every word 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?
With 5 parameters, no output schema, and no annotations, the description leaves many parameters unexplained. It is inadequate for a tool of this complexity, lacking details on return values, auth, and parameter semantics.
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 0% and description does not explain individual parameters like vault, dry_run, expected_content_hash. Only infers that edits are str_replace objects. Insufficient compensation for missing 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?
Description clearly states it applies a batch of str_replace edits to a single file atomically. It distinguishes from siblings like str_replace (single edit) and bulk.apply (presumably multiple files).
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?
Mentions atomic and in one round-trip, implying efficiency. However, does not explicitly state when not to use or provide alternatives like apply_patch for complex patches. Still provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_patchA
Apply a unified diff to a file. Context lines (' ' prefix) are validated verbatim per hunk — the diff IS the content precondition. expected_content_hash is optional belt-and-suspenders. Use this for multi-hunk surgical edits.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| patch | Yes | ||
| vault | No | ||
| dry_run | No | ||
| expected_content_hash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the key behavioral trait that context lines are validated verbatim per hunk, and notes that the diff serves as a content precondition. It also clarifies that expected_content_hash is optional, adding transparency beyond what annotations (none) provide. However, it doesn't detail potential failure modes or 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?
The description is concise at three sentences, each serving a distinct purpose: stating the primary action, highlighting the critical validation behavior, and recommending usage. No redundant or excessive content.
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 captures the core functionality and an important behavioral aspect, but lacks details about vault, dry_run, return values, and error conditions. Given no output schema, more information about what the tool returns 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?
With 0% schema description coverage, the description must compensate for all 5 parameters. It only explains expected_content_hash ('belt-and-suspenders') and implies the role of file and patch. Vault and dry_run are not described, leaving significant gaps for the agent.
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 applies a unified diff to a file, specifies the validation of context lines, and indicates it's for multi-hunk surgical edits, which distinguishes it from simpler tools like file.replace or str_replace.
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 recommends using this tool for multi-hunk surgical edits, providing guidance on when to use it. It does not explicitly mention when not to use or name alternative tools, but the context from sibling tools helps infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
block.findB
Find a block-reference (^id) in a file. Returns line/structuralType/blockHash so block.replace can be called with the precondition.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| blockId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses return fields (line, structuralType, blockHash) but does not state side effects, read-only nature, error cases, or required permissions. Incomplete.
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 purpose, no wasted words. Efficient and to the point.
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 3 parameters, no output schema, and no annotations, description lacks details on blockId format, file path conventions, vault meaning, and error conditions. Inadequate for complexity.
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 0% and description adds no meaning to parameters. Does not explain 'file', 'vault', or 'blockId' beyond schema. Fails to compensate for missing schema 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?
Clearly states verb 'Find' and resource 'block-reference (^id) in a file'. Explains output purpose as precondition for block.replace. Distinguishes from siblings like 'file.find' and 'block.replace'.
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?
Implies usage before block.replace, but no explicit when-to-use or when-not-to-use. No mention of alternatives among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
block.renameB
Rename a block reference (^old → ^new) on the same line, preserving line content.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| newId | Yes | ||
| vault | No | ||
| blockId | Yes | ||
| dry_run | No | ||
| expected_block_hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description partially discloses behavior: it renames a reference, preserves line content, and implies mutation. However, it omits details like error conditions, concurrency handling (expected_block_hash), and 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?
The description is a single, concise sentence with no redundant words. However, it could be structured to highlight key aspects like operation scope and preservation constraints more clearly.
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 6 parameters (4 required) and no output schema, the description is too minimal. It does not explain return values, the role of expected_block_hash, or how vault and dry_run affect behavior. More detail is needed for a complete understanding.
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 0% (no parameter descriptions). The description only mentions 'rename a block reference' but does not explain the roles of file, blockId, newId, expected_block_hash, vault, or dry_run. Critical parameter expected_block_hash is left unexplained.
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: renaming a block reference (^old → ^new) on the same line while preserving line content. It is specific and distinguishes from siblings like block.replace or heading.rename.
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 block.replace or apply_edits. There is no mention of prerequisites or context for selection among many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
block.replaceA
Replace the structural block referenced by ^id (paragraph/list-item/table-row/etc.) preserving the ^id marker. Requires expected_block_hash from block.find.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| blockId | Yes | ||
| content | Yes | ||
| dry_run | No | ||
| expected_block_hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses mutation behavior, preserving ^id, and hash requirement. Lacks details on failure modes, permissions, or side effects beyond the basic workflow.
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 no superfluous information. First sentence defines purpose and behavior, second gives a critical prerequisite.
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, so description should hint at return value but does not. Missing explanation of dry_run and other parameters. Core behavior is covered, but several contextual details are omitted.
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 has 0% description coverage with 6 parameters. Description explains blockId as ^id reference and expected_block_hash as from block.find, but does not clarify file, vault, content format, or dry_run behavior.
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 it replaces a structural block (paragraph/list-item/table-row/etc.) referenced by ^id and preserves the marker. Distinguishes from siblings like file.replace and block.find by specifying the target is a structural block.
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?
Explicitly requires expected_block_hash from block.find, indicating a prerequisite workflow. Mentions preserving ^id marker, but does not provide explicit when-not-to-use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk.applyA
Execute a batch of write operations. With atomic=true (default), all ops are first validated in dry-run mode against in-memory snapshots; the actual writes happen only if every op would succeed. If any post-validation write fails, best-effort restore is attempted.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | ||
| vault | No | ||
| atomic | No | ||
| _budget | No | Optional per-call budget override. maxBulkOps overrides the server default for this call only. 0 = unlimited. | |
| dry_run | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description carries full burden and reveals key traits: atomic validation, dry-run mode, and best-effort restore. It could be improved by detailing the restore mechanism or potential 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?
Two sentences, front-loaded with the main purpose, no wasted words. Efficiently structured.
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 main flow but lacks details on dry-run response format, restore semantics, and parameter descriptions. Adequate but with gaps for a complex batch 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 coverage is 20% (only _budget has a description). The description adds meaning only for 'atomic', leaving ops, vault, and dry_run unexplained. Much overhead remains on 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's purpose: executing a batch of write operations with atomicity. It distinguishes itself from sibling tools by focusing on batch execution and validation behavior.
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 explains the default atomic behavior and the dry-run validation process, implying use cases for batch operations. However, it does not explicitly mention when to use this tool versus alternatives like apply_edits or apply_patch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file.appendA
Append text to a file (creating it if missing). Cheap: no read of existing content required.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| content | Yes | ||
| dry_run | No | ||
| ensureTrailingNewline | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description provides behavioral context: it is cheap and does not require reading existing content. It also indicates it creates the file if missing. 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 extremely concise at two sentences, front-loading the core purpose and a key behavioral trait. 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 5 parameters, no parameter descriptions, and no output schema, the description is incomplete. It does not cover important context like the purpose of 'vault', 'dry_run', or 'ensureTrailingNewline', which could lead to misuse.
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 only indirectly references the 'content' and 'file' parameters but does not explain 'vault', 'dry_run', or 'ensureTrailingNewline'. With 0% schema coverage, the description fails to compensate, leaving key parameters underspecified.
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 (append text to a file) and includes the additional behavior of creating the file if missing, which distinguishes it from siblings like file.create or file.replace.
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 suggests when to use this tool by noting it's 'cheap' and requires no read, implying it's preferred for simple appends without prior content checks. However, it does not explicitly contrast with alternatives or specify when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file.createA
Create a NEW file with the given content. Errors if the file already exists; use file.replace for overwrite.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| content | Yes | ||
| dry_run | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behaviors. It states the core behavior (creates new file, errors if exists) but lacks information on side effects, permissions, or what happens with optional parameters like 'vault' or 'dry_run'. Adequate but minimal.
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 purpose, no filler. Extremely efficient.
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 (2 required) and no output schema, the description covers only the tool's primary action and error condition. Missing parameter explanations and return value information leave the agent under-informed for correct invocation.
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 0%, and the description provides no information about parameter meanings, formats, or constraints. The agent cannot determine what values to use for 'file', 'vault', or 'dry_run'.
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 creates a new file with given content, and distinguishes itself from 'file.replace' by noting it errors on existing files. The verb 'create' and resource 'file' are explicit.
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?
Explicitly mentions when to use this tool (new files) and when not (if file exists, use file.replace). Does not cover other siblings, but the guidance for the primary alternative is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file.deleteA
Delete a file. Default trash=true → moved to /.obsidian/trash. Hard delete (trash=false) requires expected_content_hash.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| trash | No | ||
| vault | No | ||
| dry_run | No | ||
| expected_content_hash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the default trash behavior, the destination folder, and the hash requirement for hard delete. It does not mention if the operation is synchronous or potential side effects, but provides adequate transparency for a delete 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 extremely concise with two sentences, no filler, and front-loads the primary action. Every word 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?
No output schema or annotations exist. The description covers core behavior but omits details on other parameters, return value, error handling, and prerequisites (e.g., file existence). It is adequate for a simple delete but leaves 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?
The description adds meaning for 'trash' (default and destination) and 'expected_content_hash' (required for hard delete), but does not explain 'file', 'vault', or 'dry_run'. With 0% schema description coverage, the description should cover all parameters; it covers only 2 out of 5 partially.
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 'delete a file' and specifies the resource. It distinguishes between soft delete (trash) and hard delete, which is a key behavioral distinction that differentiates this tool from siblings like file.move or file.create.
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 clear guidance on when to use trash vs hard delete, including the requirement for expected_content_hash with hard delete. However, it does not explicitly mention when to use this tool over alternatives, though the sibling list shows no other delete tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file.diffB
(planned) Diff a file against a prior content_hash. Stubbed for v1.0 — requires history cache; returns NOT_FOUND until enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| toHash | No | ||
| fromHash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It honestly discloses that the tool is planned, stubbed, requires a history cache, and returns NOT_FOUND until enabled. This is transparent about its current limitations.
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 essential purpose and status. However, it could be slightly more structured with separate status and parameter details.
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 that the tool is planned and stubbed, the description adequately covers its current state, requirements, and expected return value. However, it lacks details about the diff output format or behavior when enabled, and there is 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 coverage is 0% and the description does not explain any of the four parameters (file, vault, toHash, fromHash). The only hint is 'prior content_hash' relating to fromHash, but no details are given about file or 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 explicitly states 'Diff a file against a prior content_hash', which is a specific verb and resource, clearly distinguishing it from sibling tools like apply_patch or file.read.
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 notes that the tool is stubbed and requires a history cache, but does not provide guidance on when to use this tool versus alternatives such as apply_edits or apply_patch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file.findC
Find files by name (exact / substring / glob / regex).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| limit | No | ||
| query | Yes | ||
| vault | No | ||
| offset | No | ||
| directory | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions modes but omits critical behavior: recursion depth, case sensitivity, what happens on no matches, or whether it returns full paths or just names. Parameters like vault, directory, limit, offset are not addressed.
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?
Extremely concise (one short sentence), but at the cost of completeness. While no fluff exists, the description lacks crucial information that could be front-loaded.
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 6 parameters, no output schema, and no annotations, the description is insufficient. It does not cover return format, filtering behavior, or prerequisites, severely limiting the agent's ability to 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 0%. The description adds no meaning to any parameter beyond the mode hint. It fails to explain query, limit, vault, directory, or offset, leaving agents to guess their purpose.
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's purpose: finding files by name with specific matching modes (exact, substring, glob, regex). It effectively distinguishes from sibling tools like search.content (content search) or file.list (listing files).
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., search.content for content, file.list for listing). The description only lists capabilities without usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file.listC
List files/directories in the vault, optionally recursively, with optional glob filter.
| Name | Required | Description | Default |
|---|---|---|---|
| glob | No | picomatch glob, matched against vault-relative path | |
| limit | No | ||
| vault | No | ||
| offset | No | ||
| directory | No | Vault-relative directory | |
| recursive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description carries full burden. It states 'List files/directories' but does not disclose traits like read-only nature, sorting order, pagination behavior, or the effect of missing parameters. The description adds little beyond the schema.
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 that is front-loaded with the primary action. No redundant words or information. Very compact and efficient.
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 complexity (6 parameters, no output schema, no annotations), the description is insufficient. It does not explain the return format, pagination using limit/offset, the necessity of vault parameter, or how glob matching works relative to directory. Users are left guessing important 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?
Schema has 6 parameters with only 33% description coverage (glob and directory have descriptions). The description mentions 'glob filter' and 'recursively' but these are already evident from the schema. It does not clarify the meaning of limit, offset, vault, or how they interact.
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 verb 'List' and resource 'files/directories in the vault'. It mentions optional recursion and glob filter, which clarifies scope. However, it does not explicitly distinguish from sibling tools like vault.list or search.content, but their purposes are different enough.
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. The phrase 'optionally recursively' hints at usage but lacks context like 'use file.find for content search' or 'vault.list for vault properties'. No exclusions or prerequisites provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file.moveA
Move or rename a file. Defaults to on_conflict='error' — never silently overwrites.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| from | Yes | ||
| vault | No | ||
| dry_run | No | ||
| on_conflict | No | ||
| update_links | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses the default conflict behavior and that silent overwrites are prevented. However, it lacks details on reversibility, permissions, effects on links (though a parameter exists), and return value. Partial disclosure.
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?
Description is two sentences, front-loaded with the action, and every word adds value. No fluff or repetition.
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 6 parameters, no output schema, and no annotations, the description is too minimal. It fails to explain critical parameters like 'vault' and 'dry_run', and the overall behavior beyond conflict handling is vague.
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?
With 0% schema description coverage and 6 parameters, the description only adds meaning for 'on_conflict' by stating its default. Parameters like 'to', 'from', 'vault', 'dry_run', and 'update_links' are left unexplained, requiring inference from names.
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 'move or rename a file', providing a specific verb and resource. It also distinguishes the tool from siblings by highlighting the default conflict behavior, which is unique among file operations. No ambiguity.
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 (to move/rename files) but does not explicitly state when not to use or mention alternatives among siblings. The behavior note about conflict handling guides parameter choice but not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file.readA
Read a file's full content. Returns content + content_hash + totalLines so subsequent surgical edits can use the hash as a precondition.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return values and explains that content_hash enables precondition for surgical edits, providing behavioral context. With no annotations, this carries the full burden and does so well.
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: first states purpose, second adds return value details and use case. No superfluous 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?
Covers core functionality and return values, but omits explanation of 'vault' parameter, file path expectations, or any limitations. Adequate for a simple tool but incomplete given missing parameter info.
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?
Description adds no meaning beyond the input schema for parameters 'file' and 'vault'. Schema coverage is 0% and description does not explain parameter roles or formats.
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 'Read a file's full content' and enumerates return values (content, content_hash, totalLines), distinguishing it from siblings like file.read_range that read partial 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?
Implied usage for reading full file content, but no explicit guidance on when to use this versus alternatives like file.read_range or file.diff among the 30+ sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file.read_rangeA
Read a line range from a file (1-based, inclusive). Returns the slice + rangeHash + contentHash for surgical follow-ups.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| file | Yes | ||
| from | Yes | ||
| vault | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It states return values (slice, rangeHash, contentHash) and implies read-only behavior. However, it does not disclose error handling for out-of-bounds ranges or missing files.
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 of 18 words, no redundancy. Front-loaded with the core action and immediately followed by specifics.
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 no output schema, the description adequately explains what is returned and the range semantics. It could be improved by mentioning error states or why this tool exists alongside file.read, but it is mostly 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?
Schema has 0% coverage for parameter descriptions. The description clarifies 'file', 'from', and 'to' as 1-based inclusive line range. However, the optional 'vault' parameter is left unexplained, which is a gap.
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?
Clear verb 'Read' and specific resource 'line range from a file' with details (1-based inclusive, returns slice and hashes). Distinguishes from siblings like file.read which likely reads entire file.
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 like file.read or lines.replace. The phrase 'for surgical follow-ups' hints at use but is vague and does not provide decision rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file.replaceA
HEAVY: replace the entire content of a file. Prefer str_replace / apply_patch / heading.replace_body / block.replace / frontmatter.set / lines.replace for surgical edits. Requires expected_content_hash unless create_if_missing is true and the file does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| content | Yes | ||
| dry_run | No | ||
| create_if_missing | No | ||
| expected_content_hash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses the operation as 'HEAVY' and mentions hash requirement, implying destructive potential. However, it lacks details on error handling, idempotency, or permissions, which would enhance transparency.
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 concise with two sentences, front-loading the 'HEAVY' warning. Every sentence adds value: operation, alternatives, and a condition. No redundancy.
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 6 parameters, no output schema, and no annotations, the description provides only basic context. It doesn't detail return values, error states, or all parameter behaviors, leaving the tool somewhat incomplete for first-time use.
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?
With 0% schema coverage, the description should explain all 6 parameters but only covers expected_content_hash and create_if_missing. It omits 'file', 'vault', 'content', and 'dry_run', leaving significant gaps in understanding parameter semantics.
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 replaces the entire content of a file, a specific verb and resource. It distinguishes itself from sibling tools by listing surgical alternatives, showing awareness of the tool's heavy nature.
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 advises against use for surgical edits and lists alternative tools. It also specifies the requirement for expected_content_hash unless create_if_missing is true and file doesn't exist, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frontmatter.deleteA
Delete a (possibly nested) key from the file's frontmatter. No-op if key absent. Requires expected_frontmatter_hash when frontmatter exists.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| dry_run | No | ||
| keyPath | Yes | ||
| expected_frontmatter_hash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the no-op behavior and the hash requirement, but does not mention write implications, permissions, or error handling. Adequate but not comprehensive.
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, no extraneous information. Every part contributes to understanding the tool's purpose and key behaviors.
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 5 parameters with 0% schema coverage, no output schema, and no annotations, the description is insufficient. It explains only a small part of the tool's behavior and leaves parameter details and return value unexplained.
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 0% and the description only explains expected_frontmatter_hash briefly. The other four parameters (file, vault, dry_run, keyPath) are not described, leaving the agent without meaning for their usage.
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 'Delete a (possibly nested) key from the file's frontmatter,' providing a specific verb (delete) and resource (key in frontmatter). This distinguishes it from sibling tools like frontmatter.set and frontmatter.get.
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?
Includes useful usage notes: 'No-op if key absent' and 'Requires expected_frontmatter_hash when frontmatter exists.' However, it does not explicitly guide when to use this tool over alternatives, though the verb and context implicitly differentiate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frontmatter.getB
Read the frontmatter (or a nested key via dot-notation) from a markdown file.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| keyPath | No | Dot-notated key path, e.g. 'status.priority' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must fully convey behavior. It only says 'read', but does not disclose error handling (e.g., missing file, invalid keyPath), whether it modifies state, or what happens with empty frontmatter.
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 filler, directly communicates the tool's purpose and a key feature (dot-notation).
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 tool with no output schema, the description is adequate but omits details on return format and error states. Given sibling complexity (30 tools), more context on when this tool is appropriate 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 coverage is 33% (only keyPath described). The description adds the concept of dot-notation for keyPath, but does not explain file or vault beyond the schema. Some added value, but incomplete for low coverage.
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 ('Read'), resource ('frontmatter from a markdown file'), and adds specificity about dot-notation support. It distinguishes from siblings like frontmatter.delete and frontmatter.set by indicating this is a read operation.
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 such as metadata.read or file.read. No prerequisites or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frontmatter.setA
Set a (possibly nested via dot-notation) key in the file's frontmatter. Creates the frontmatter block if absent. Requires expected_frontmatter_hash unless file has no frontmatter yet.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| value | Yes | ||
| vault | No | ||
| dry_run | No | ||
| keyPath | Yes | ||
| expected_frontmatter_hash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It discloses that frontmatter block is created if absent and requires expected_frontmatter_hash unless file has no frontmatter. However, it does not explain overwrite behavior, return values, or potential 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?
The description is three sentences, front-loading the primary purpose and nesting capability. 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 6 parameters, no output schema, and no annotation support, the description is incomplete. It omits return behavior, parameter details for most fields, and error conditions.
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 0%, requiring the description to explain parameters. Only expected_frontmatter_hash is clarified. The required parameters file, keyPath, value, and optional parameters vault, dry_run are not described, leaving the agent with minimal guidance.
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 (set), resource (key in frontmatter), and scope (possibly nested via dot-notation). It distinguishes from sibling tools like frontmatter.get and frontmatter.delete.
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 setting frontmatter values but does not explicitly compare with alternative tools like apply_edits or file.replace. It mentions a precondition (expected_frontmatter_hash) but lacks when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
heading.findA
Find headings by leaf text OR by full Parent::Child::Leaf path. Returns ALL matches; surgical-edit tools require disambiguation when count > 1.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| heading | Yes | ||
| delimiter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states it returns all matches but does not confirm it is read-only, lacks side-effect disclosure, or mention what happens on failure (e.g., no matches).
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 with no fluff: first sentence states purpose and modes, second sentence adds critical usage nuance about disambiguation. Front-loaded and efficient.
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 4 parameters (2 required) and no output schema, the description covers the search modes and disambiguation need. Minor omission: no mention of return format or behavior when no matches found.
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 0%, so the description must add meaning. It explains the 'heading' parameter can be leaf text or a path, and implies the delimiter parameter, but does not clarify 'file' or 'vault' meaning.
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 finds headings using leaf text or a full path, and distinguishes it as a search-only tool distinct from surgical-edit siblings like heading.rename or block.replace.
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 mentions that surgical-edit tools require disambiguation when multiple matches are found, implying when this tool is needed, but does not explicitly state when to use it vs alternatives like block.find or search.content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
heading.renameA
Rename a heading's text in place. Errors on missing/duplicate. Preserves heading level. Does NOT update backlinks (use bulk.apply for that).
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| dry_run | No | ||
| heading | Yes | ||
| newText | Yes | ||
| delimiter | No | ||
| expected_section_hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses key behaviors: in-place modification, error on missing/duplicate, preserves level, and does not update backlinks. However, it omits whether the operation is destructive, auth needs, or concurrency semantics.
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?
Extremely concise: four clauses in two sentences covering purpose, error conditions, preservation, and alternative. No fluff, front-loaded with the core action.
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 7 parameters, no output schema, and a complex operation, the description is too brief. It lacks explanations for critical parameters like expected_section_hash and delimiter, and does not describe return values or side effects.
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 0%, so description must explain parameters. It fails to describe any of the 7 parameters (file, vault, dry_run, heading, newText, delimiter, expected_section_hash), leaving agents without necessary context.
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 verb 'rename' and resource 'heading's text', distinguishes from siblings by mentioning error conditions on missing/duplicate and preserving heading level, and explicitly contrasts with bulk.apply for backlink updates.
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?
Provides explicit context for when to use (rename heading text in place), notes that it errors on missing/duplicate, and directs to use bulk.apply for backlink updates, offering an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
heading.replace_bodyA
Replace the BODY beneath a heading (not the heading line itself). Errors if heading missing or path is ambiguous. Requires expected_section_hash from heading.find/outline.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| content | Yes | ||
| dry_run | No | ||
| heading | Yes | ||
| delimiter | No | ||
| expected_section_hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses error conditions and the need for a precomputed hash, but does not mention whether the operation is destructive, reversible, or requires specific permissions. It also doesn't clarify the return behavior.
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 three sentences, all relevant and front-loaded. No filler or redundant information. 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?
Given 7 parameters, no output schema, and no annotations, the description is insufficient. It omits details about return values, most parameter semantics, and examples, making it incomplete for an agent to use effectively.
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 0%, but the description only addresses the 'expected_section_hash' parameter and implies 'content'. The other parameters (file, vault, dry_run, heading, delimiter) are not explained, leaving the agent underinformed.
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 'Replace the BODY beneath a heading (not the heading line itself)', using a specific verb and resource. It distinguishes from sibling tools like heading.find or heading.rename by focusing on body replacement rather than the heading line.
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 mentions error conditions ('Errors if heading missing or path is ambiguous') and a prerequisite ('Requires expected_section_hash from heading.find/outline'). This provides clear guidance on when to use the tool, though it does not explicitly mention when not to use it compared to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lines.insertA
Insert content before line N (1-based). Use line=totalLines+1 to append. No hash precondition required.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes | ||
| vault | No | ||
| content | Yes | ||
| dry_run | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that insertion is line-based, supports appending via line=totalLines+1, and requires no hash. However, it does not explain behavior for invalid line numbers (beyond schema min=1), whether the operation is destructive, or what the tool returns. Partial disclosure.
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 action, and contains no fluff. Every sentence adds value: the first states purpose, the second adds behavioral nuance.
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 5 parameters (3 required), no output schema, and no annotations, the description covers the basic insertion scenario but omits explanations for 'vault' and 'dry_run', and doesn't specify return value or side effects. Adequate for simple use but not fully complete for a parameter-rich 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 0%, so the description must compensate. It explains 'line' (1-based, append trick) and implies 'content' is the text to insert, but does not clarify 'file', 'vault', or 'dry_run'. For 5 parameters, only 2 are partially covered, leaving significant gaps.
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: 'Insert content before line N (1-based).' It distinguishes itself from sibling tools like 'lines.replace' by specifying insertion before a line, and even handles appending with 'Use line=totalLines+1 to append.' This provides a specific verb and resource, making purpose 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?
The description gives explicit usage for inserting and appending, and notes that 'No hash precondition required,' which tells users they don't need a hash. However, it does not explicitly contrast with alternative tools (e.g., when to use lines.insert vs lines.replace) or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lines.replaceB
Replace a contiguous line range (1-based, inclusive). Requires expected_range_hash returned by file.read_range or outline (section_hash).
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| file | Yes | ||
| from | Yes | ||
| vault | No | ||
| content | Yes | ||
| dry_run | No | ||
| expected_range_hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits fully. It mentions the hash requirement, implying it is safe against conflicts, but does not clarify if the operation is destructive, what permissions are needed, or how hash mismatches are handled. This is insufficient given the lack of annotation coverage.
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 sentences, front-loaded with the core purpose, and every word adds value. No fluff or repetition. It is appropriately terse for a tool that is a simple line replacement.
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 (7 parameters, no output schema, no annotations), the description is incomplete. It does not explain return values, error scenarios, how to use dry_run, or the role of the vault parameter. An agent would likely need to consult external documentation or risk misuse.
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 zero description coverage for its 7 parameters. The description only adds meaning to expected_range_hash (requires it and explains its origin) and implies the line range is 1-based inclusive. Other parameters like dry_run, vault, and content are not explained, leaving the agent to infer their roles from names alone. The description fails to compensate for the schema's gaps.
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 replaces a contiguous line range with 1-based inclusive indexing, which is a specific verb and resource. It distinguishes from other line operations like insert and file-level replaces, albeit implicitly. The purpose is 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?
The description provides context by mentioning the required expected_range_hash and its sources (file.read_range or outline), indicating when this tool is appropriate for conflict-safe replacements. However, it does not explicitly state when not to use it or compare to sibling tools like file.replace or apply_edits, leaving room for misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
links.getA
Return outlinks (from the given file) and/or backlinks (vault-wide search for refs targeting the file's basename).
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only states what the tool returns, without mentioning side effects, authentication needs, edge cases (e.g., missing file), or vault scope. This is insufficient for a tool with no additional 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 with no redundancy. It front-loads the purpose and is well-structured for easy reading.
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 has 3 parameters and no output schema, the description is adequate for a simple retrieval tool but misses details about vault parameter usage, return format, and error handling. It covers the core functionality but has 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 description coverage is 0%, so the description must add meaning. It explains the 'direction' parameter's enum values (outlinks/backlinks/both) and implicitly defines 'file' as the source file. However, it does not explain the 'vault' parameter at all, and 'file' lacks format details. Partial value added.
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 returns outlinks from the given file and/or backlinks from the vault. It uses specific verbs ('return') and resources ('outlinks', 'backlinks'), and distinguishes itself from sibling tools that focus on editing or searching 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 explains when to use each direction (outlinks vs backlinks), implying usage for link retrieval. However, it does not explicitly state when not to use this tool or mention alternatives, though sibling tools are primarily for editing or searching, not link retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
metadata.readA
Read structural metadata for a file: frontmatter, headings, tags, link counts, total lines, content_hash.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explicitly lists the returned metadata fields, indicating it is a read-only operation with no side effects. Additional transparency on auth or rate limits would raise the score.
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 effectively communicates the tool's purpose and output. No unnecessary words or repetition.
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 specifies the return fields but omits parameter details and does not differentiate from closely related siblings. Given the lack of output schema and annotations, more context on usage 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 coverage is 0%, so the description must compensate for parameter meaning. It mentions 'file' only implicitly and does not explain the 'vault' parameter or their format, failing to add value beyond the raw 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 ('Read') and the resource ('structural metadata for a file'), and lists specific attributes (frontmatter, headings, tags, etc.), which distinguishes it from sibling tools like file.read or frontmatter.get.
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 reading metadata but does not provide explicit guidance on when to use this tool versus alternatives like frontmatter.get or tags.list. No exclusion criteria or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlineA
Return the heading tree of a markdown file. Each entry includes path, level, line, end_line, section_hash, children_count, and (when applicable) duplicate_of[]. Use this to navigate large notes without reading them.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| vault | No | ||
| maxDepth | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses output structure but doesn't mention read-only nature, performance characteristics, or any side effects beyond returning data.
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, first stating primary purpose, second listing output fields and use case. 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?
With no output schema and moderate complexity (3 params), description covers main purpose and output fields but omits parameter details and behavior like default maxDepth or vault usage.
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 0% with 3 parameters (file, vault, maxDepth). Description adds no information about parameter semantics, leaving the agent to infer from the schema alone.
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 returns the heading tree of a markdown file, specifies output fields, and differentiates from siblings like file.read by focusing on structure rather than full 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?
Explicitly says 'Use this to navigate large notes without reading them,' providing a clear use case. Lacks explicit when-not-to-use or alternative tools, but the guidance is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search.contentA
Substring search across markdown files. Returns hits with surrounding context and per-line hashes (each hit can be surgically rewritten with str_replace).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| vault | No | ||
| offset | No | ||
| _budget | No | Optional per-call budget overrides. Each field overrides the server default for this call only. 0 = unlimited. | |
| directory | No | ||
| contextLines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must cover behavioral traits. It discloses that the tool performs substring search and returns hits with context and per-line hashes. It also hints at compatibility with str_replace. However, it does not mention if the operation is read-only, any side effects, authorization needs, or rate limits. Basic transparency but lacking depth.
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 that are front-loaded with purpose and key details about output and downstream use. No filler; 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?
Given 7 parameters, no output schema, and no annotations, the description covers the core functionality and output shape but omits details like the scope of search (vault/directory), the meaning of contextLines, and behavior with large results. It is adequate for a simple search tool but lacks completeness for complex usage.
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 only 14% (only _budget has a description). The description compensates by explaining the purpose of the tool (substring search with context) and the output format (hits with surrounding context), which indirectly clarifies parameters like query, contextLines, etc. However, it does not explain the role of vault, directory, limit, or offset beyond their self-explanatory names.
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 'substring search across markdown files' with a specific verb (search) and resource (markdown files). It also describes the output format (hits with context and per-line hashes) and hints at a downstream use (str_replace). This distinguishes it from sibling tools like block.find (which searches for blocks) and file.find (which finds files by name).
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 substring search with rewriting capability ('surgically rewritten with str_replace'), but does not explicitly state when to use this tool vs. alternatives like block.find for structural searches or file.list for file enumeration. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
str_replaceA
Surgical edit: replace a literal substring in a file. Default occurrence='unique' (errors on >1 match). Tiny payload in/out; preferred over file.replace for any edit smaller than the whole file.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| find | Yes | ||
| vault | No | ||
| dry_run | No | ||
| replace | Yes | ||
| occurrence | No | ||
| expected_content_hash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that occurrence defaults to 'unique' and errors on >1 match, and that the payload is tiny. However, it does not detail potential side effects, error behavior for missing files or unmatched strings, or any permissions or atomicity guarantees.
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 efficient sentences with no waste. The first sentence defines the core action, the second provides critical usage guidance. 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?
Given the complexity (7 parameters, no output schema, no annotations), the description is too brief. It does not explain return values or behaviors for edge cases like file not found or unmatched string. The phrase 'tiny payload in/out' is vague and insufficient.
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 0% description coverage across 7 parameters. The description only adds meaning to the 'occurrence' parameter by explaining its default. It does not explain 'dry_run', 'expected_content_hash', 'vault', or the return behavior. This is insufficient for an agent to correctly invoke all parameters.
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 performs a surgical replacement of a literal substring in a file. It distinguishes itself from sibling tool file.replace by noting it is preferred for edits smaller than the whole file, and mentions the default occurrence behavior.
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 advises when to use this tool over file.replace (for any edit smaller than the whole file) and explains the default 'occurrence=unique' behavior that errors on multiple matches. It does not explicitly list when not to use it, but provides sufficient context for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tags.listB
List tags found in a single file (when 'file' is supplied) or aggregated across the vault.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | ||
| vault | No | ||
| prefix | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the basic behavior (listing tags with two scopes) but lacks important details such as tag format, case sensitivity, whether nested tags are included, or any 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?
The description is a single focused sentence that conveys the core functionality immediately, 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 fails to explain the return format (expected because no output schema) and leaves two of three parameters unexplained. For a tool with 3 parameters and no schema descriptions, this is insufficient for correct invocation.
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 0%, and the description only explains one parameter ('file') partially. The 'vault' and 'prefix' parameters are completely unexplained, leaving the agent without sufficient semantic guidance beyond parameter names.
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 ('List') and resource ('tags'), and clearly distinguishes two modes: single file when 'file' is supplied, or aggregated across the vault. This differentiates it from sibling tools like 'file.list' or 'search.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 when to use each mode (with or without 'file') but does not provide explicit guidance on when to prefer this tool over alternatives, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault.infoC
Get statistics for a single vault.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | ||
| _budget | No | Optional per-call budget overrides. Each field overrides the server default for this call only. 0 = unlimited. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. The description states 'Get statistics' implying a read-only operation, but it does not disclose any potential side effects, authentication requirements, rate limits, or other behavioral traits. For a simple read operation, the lack of explicit transparency is a gap.
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, concise and to the point. It contains no extraneous information. However, given the tool's simplicity, some additional context could be added without losing 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?
With no output schema, no annotations, and an undocumented 'vault' parameter, the description is insufficient for an AI agent to fully understand the tool's usage and behavior. It provides only the bare minimum of what the tool does, 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 description coverage is 50% (only '_budget' has a description). The tool description adds no extra meaning for the 'vault' parameter, leaving its format or semantics unexplained. The description does not clarify what 'vault' refers to (e.g., name, ID), failing to compensate for the missing schema 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 verb 'Get' and resource 'statistics for a single vault', distinguishing it from the sibling tool 'vault.list' which lists vaults. However, it does not specify what kind of statistics are returned, such as size or item count, limiting specificity.
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 usage guidelines are provided. The description does not indicate when to use this tool versus alternatives like 'vault.list'. The context implies that this is for obtaining stats for a known vault, but no explicit when-to-use or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault.listA
List all configured vaults by name.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits beyond the basic listing action. It fails to state that the operation is read-only, idempotent, or whether it requires any privileges. With no safety cues, the agent has limited behavioral insight.
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 five words, perfectly concise with no superfluous information. It is front-loaded and 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?
For a simple listing tool with no parameters and no output schema, the description is largely complete. However, it could mention the output format or scope (e.g., 'returns a list of vault names') to be fully self-contained.
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?
There are zero parameters, and schema coverage is 100%. The description implies no input is needed, which matches the schema. While it adds no extra parameter details, the baseline for zero-param tools is 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 'list' and resource 'configured vaults by name', differentiating it from siblings like 'vault.info' which likely deals with a specific vault. It is 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 guidance on when to use this tool versus alternatives like 'vault.info' or 'search.content'. The description is adequate for a simple list tool, but lacks contextual tips or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose. File operations, surgical edits, metadata queries, and vault management are all well-separated. Overlapping tools like multiple find functions are differentiated by target (e.g., block.find vs heading.find) or scope.
Most tools follow a domain.verb pattern (e.g., file.create, frontmatter.set). A few outliers like apply_edits or str_replace use a different convention, but they are still descriptive and do not cause confusion.
32 tools is on the higher side, but the Obsidian domain is rich: file management, frontmatter, headings, blocks, links, tags, search, vault info. Each tool serves a specific need, making the count reasonable for a full-featured MCP server.
The tool surface covers CRUD for files, frontmatter, headings, and blocks, plus querying for links, tags, and vault metadata. Planned features like file.diff are minor gaps; the server is highly comprehensive for Obsidian note management.
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
Cloud-hosted MCP server for durable AI memory
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityBmaintenanceFilesystem first MCP server for Obsidian vaults with an LLM-Wiki layer on top.663057Apache 2.0
- AlicenseAqualityAmaintenanceLocal-first MCP server for working with an Obsidian vault. No API key required1713MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that implements Karpathy's LLM Wiki pattern for Obsidian vaults, enabling persistent knowledge storage and BM25 search across AI sessions.141MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that provides controlled read/write tools for managing local-first research memory in an Obsidian vault, enabling AI agents to maintain project context across sessions.111MIT
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/usrivastava92/obsidian-native-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server