obsidian-modified-mcp-server
Provides tools for managing an Obsidian vault, including reading, writing, searching, appending, and deleting files, as well as graph analytics, semantic search, and periodic notes access via the Obsidian Local REST API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@obsidian-modified-mcp-serverfind notes about project management using semantic search"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Obsidian Modified MCP Server
This is a personal fork of @connorbritain/obsidian-mcp-server by Connor Britain. Its purpose is to mitigate wrapper-side limitations of the Local-REST-API-based MCP server. Concrete changes so far: re-enabled the patch_content tool under a structural-only path validator; added two surgical-read tools (get_heading_contents, get_frontmatter_field); wired the seven graph tools through the dispatcher (they previously advertised schemas but returned Unknown tool at runtime); made delete_file recursive on directory paths with timeout-coherent responses; switched the post-timeout verification query to a direct-path probe (so an upstream auto-prune of the parent directory no longer surfaces a successful delete as outcome undetermined); and exposed the upstream's authoritative tag index via a new list_tags tool that includes both inline and frontmatter tags and excludes tag-shaped strings inside fenced code blocks — more accurate than text or frontmatter search for tag enumeration. Subsequent specs will add similar wrapper-level mitigations as the fork evolves.
Status: Personal fork. External support not guaranteed; use at your own discretion.
TypeScript MCP server for Obsidian with core vault operations, graph analytics, and semantic search.
Features
Core Tools: Read, write, search, append, delete files in your Obsidian vault
Periodic Notes: Access daily, weekly, monthly notes and recent changes
Advanced Search: JsonLogic queries for complex filtering
Graph Tools: Orphan detection, centrality analysis, cluster detection, path finding
Semantic Search: Smart Connections integration for concept-based search
Related MCP server: mcp-markdown-vault
Differences from upstream
Change | Description | Rationale |
| Heading/block/frontmatter PATCH tool is enabled in this fork under a structural-only path validator. | Wraps the same upstream endpoint Connor's fork disabled. The empirically-observed |
| Two new MCP read tools that fetch part of a vault note instead of the whole file. | Avoids round-tripping the entire file through the MCP transport just to read one section or one field; surfaces the upstream Local REST API's surgical-read endpoints ( |
Graph tools wired through dispatcher | The seven graph tools ( | Previously the seven tools advertised JSON schemas at the catalog layer but returned |
| Directory paths are deleted recursively in a single tool call — the wrapper walks contents in upstream listing order, deletes each file and subdirectory, then deletes the outer directory and returns | Upstream |
| New MCP tool that exposes the upstream Local REST API plugin's | The existing text and frontmatter search tools systematically over-count (they hit code-block mentions) and under-count (they miss inline tags when only frontmatter is searched, or vice versa). Sourcing tag enumeration directly from Obsidian's own index is the only way to give an LLM caller a trustworthy starting point for tag-driven navigation, audit, or cleanup. Live contract in |
In flight (design landed, implementation pending)
The following specs have their full design + spike-blocked scaffold landed in this repo, but their tools are intentionally not yet exposed via tools/list — they're awaiting a build-time prerequisite. They appear here so readers can find the design docs without being misled into thinking the tools are usable now.
Spec | Status | Why pending |
| Design + scaffold landed in v0.5.1. The 2026-05-02 T002 feasibility spike confirmed the original Option-A design (dispatching Obsidian's "Rename file" command via | Build-time dependency on a future |
Heading-path discipline (patch_content, get_heading_contents)
To avoid the disambiguation issue tracked in upstream issue
coddingtonbear/obsidian-local-rest-api#146,
this fork applies a structural validator at the MCP wrapper boundary
before any HTTP call is made. The same rule applies to
patch_content's heading targets and to get_heading_contents's
heading argument — there is exactly one definition of the predicate
across the codebase.
Heading targets MUST be path-shaped. At least two non-empty
::-separated segments, full path from the document's H1 downward. Use"About This Vault::Frontmatter Conventions", not"Frontmatter Conventions". Bare names are rejected with an actionable error message that names the rule, quotes the offending value, and shows a corrected example.Headings whose literal text contains
::are unreachable through these tools — the validator treats every::as a path separator and there is no escape syntax. Fall back toget_file_contents+put_content(write side) orget_file_contents+ client-side slicing (read side).Top-level-only headings (i.e., files with no
::-separable nesting) are also unreachable through these tools. Same fallback.patch_content'sblockandfrontmattertarget types pass through to the upstream unchanged.get_heading_contentsreturns just the raw markdown body under the targeted heading — frontmatter, tags, and file metadata are not included. For frontmatter useget_frontmatter_field(single field) orget_file_contents(whole note).Upstream errors propagate verbatim with status code and message preserved (no silent fallbacks). For
get_frontmatter_fieldin particular, a present-but-nullfield value ({"value":null}) is distinct from a missing field (upstream 4xx surfaced asisError).
These limitations are also stated in each tool's MCP description
field, so they are visible to any caller that lists the available tools.
Prerequisites
Node.js 18+
Obsidian with Local REST API plugin installed and enabled
(Optional) Dataview plugin for
get_recent_changes(Optional) Periodic Notes plugin for periodic note tools
(Optional) Smart Connections plugin for semantic search
Installation
From npm
npm install -g @marwansaab/obsidian-modified-mcp-serverFrom source
git clone https://github.com/marwansaab/obsidian-modified-mcp-server.git
cd obsidian-modified-mcp-server
npm install
npm run buildConfiguration
Set the following environment variables:
Variable | Required | Default | Description |
| Yes* | - | API key from Local REST API plugin settings (used when multi-vault JSON is not supplied) |
| No |
| Obsidian REST API host |
| No |
| Obsidian REST API port |
| No |
|
|
| No | - | Path to vault (required for graph tools) |
| No | - | Port for Smart Connections API |
| No |
| Graph cache TTL in seconds |
| No | - | JSON string describing one or more vaults. Overrides the single |
| No | - | Path to a JSON file describing one or more vaults (same shape as |
| No | first defined | Name/ID of the vault to use when a tool call omits |
Multi-vault note: If neither
OBSIDIAN_VAULTS_JSONnorOBSIDIAN_VAULTS_FILEis provided, the legacy single-vault env vars (OBSIDIAN_API_KEY,OBSIDIAN_HOST, etc.) are used to create adefaultvault entry automatically.
Example OBSIDIAN_VAULTS_JSON
[
{
"id": "work",
"apiKey": "work-api-key",
"host": "127.0.0.1",
"port": 27124,
"protocol": "https",
"vaultPath": "C:/Users/you/Obsidian/work",
"smartConnectionsPort": 29327
},
{
"id": "personal",
"apiKey": "personal-api-key",
"vaultPath": "C:/Users/you/Obsidian/personal"
}
]Each tool in the MCP server accepts an optional vaultId argument. When omitted, the server uses OBSIDIAN_DEFAULT_VAULT (or the first defined vault). This allows a single MCP session to read/write multiple vaults just by specifying which vault to target in the tool call.
Multi-Vault Port Configuration
Important: When running multiple Obsidian vaults simultaneously, each vault's Local REST API plugin must listen on a unique port. By default, all vaults use port
27124, which causes conflicts—only one vault can bind to a port at a time, and requests to other vaults will fail with authorization errors.
Step 1: Assign Unique Ports in Obsidian
For each vault, open Settings → Community Plugins → Local REST API and scroll to Advanced Settings:
Set Encrypted (HTTPS) Server Port to a unique value (e.g.,
27124,27125,27126,27127)Toggle the plugin off and back on (or restart Obsidian) to apply the change
Copy the API Key shown in the plugin settings
Step 2: Update Your Vaults JSON
In your obsidian-vaults.json file (or OBSIDIAN_VAULTS_JSON env var), specify the port for each vault to match what you configured in the plugin:
[
{
"id": "vault_one",
"apiKey": "your-api-key-for-vault-one",
"port": 27124,
"vaultPath": "C:/Users/you/Obsidian/vault_one"
},
{
"id": "vault_two",
"apiKey": "your-api-key-for-vault-two",
"port": 27125,
"vaultPath": "C:/Users/you/Obsidian/vault_two"
},
{
"id": "vault_three",
"apiKey": "your-api-key-for-vault-three",
"port": 27126,
"vaultPath": "C:/Users/you/Obsidian/vault_three"
}
]Step 3: Restart Your MCP Client
After updating the JSON file, restart your MCP client (Windsurf, Claude Desktop, etc.) so it reloads the configuration with the new ports.
Verifying Connectivity
You can test each vault's API directly with curl:
# Replace PORT and API_KEY for each vault
curl -k -H "Authorization: Bearer YOUR_API_KEY" https://127.0.0.1:PORT/vault/A successful response returns a JSON object with the vault's file listing. If you receive 40101 Authorization required, the API key doesn't match. If you receive 40400 Not Found, the plugin isn't fully initialized on that port—try toggling it off/on or restarting the vault.
MCP Client Configuration
Using npx (Recommended)
Use npx for the simplest setup:
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "@marwansaab/obsidian-modified-mcp-server"],
"env": {
"OBSIDIAN_API_KEY": "your-api-key-here",
"OBSIDIAN_VAULT_PATH": "/path/to/your/vault",
"OBSIDIAN_VAULTS_FILE": "C:/path/to/vaults.json",
"OBSIDIAN_DEFAULT_VAULT": "work"
}
}
}
}Using Local Build (Development)
If running from source:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/absolute/path/to/obsidian-modified-mcp-server/dist/index.js"],
"env": {
"OBSIDIAN_API_KEY": "your-api-key-here",
"OBSIDIAN_VAULT_PATH": "/path/to/your/vault",
"OBSIDIAN_VAULTS_JSON": "[{\"id\":\"work\",\"apiKey\":\"...\",\"vaultPath\":\"/work\"}]"
}
}
}
}Config File Locations
Client | Config Path |
Claude Desktop (Windows) |
|
Claude Desktop (Mac/Linux) |
|
Windsurf |
|
Cursor |
|
Available Tools
All tools accept an optional vaultId argument. If omitted, the server uses the default vault from your configuration. This lets you read/write multiple Obsidian vaults within the same MCP session.
Path separators: every tool that takes a filepath (or source / target) argument accepts forward-slash, backslash, or mixed separators uniformly across platforms. Forward-slash is the canonical form, but Windows-style backslash paths work without modification. See specs/006-normalise-graph-paths/.
Vault Management
Tool | Description |
| List all configured vaults with their IDs, capabilities, and connection info |
Core File Operations
Tool | Description |
| List all files/directories in vault root |
| List files in a specific directory |
| Read a single file |
| Read multiple files concatenated with headers |
| Delete a file or directory. Directory paths are deleted recursively — the wrapper removes every contained file and subdirectory before deleting the directory itself, in a single tool call. On a transport timeout the wrapper verifies post-condition via a single direct-path query against the deleted target (404 → success, 200 → |
Surgical Read Operations
Tool | Description |
| Read just the raw markdown body under a fully-pathed heading ( |
| Read one frontmatter field's value with its original type preserved (string, number, boolean, array, object, or |
Tag Operations
Tool | Description |
| List every tag in the vault with its usage count, sourced from the upstream's authoritative |
Write Operations
Tool | Description |
| Append to file (creates if missing) |
| Overwrite file content |
| Insert content relative to a heading, block, or frontmatter target. Heading targets must use the full |
| Vault-wide string-replacement across every |
Search
Tool | Description |
| Keyword search across vault |
| JsonLogic query search (glob, regexp support) |
| Regex pattern extraction with context (requires vault path) |
Periodic Notes & Recent Changes
Tool | Description |
| Get current daily/weekly/monthly/quarterly/yearly note |
| Get recent periodic notes with optional content |
| Get recently modified files (requires Dataview) |
Obsidian Integration
Tool | Description |
| Get the currently active file in Obsidian |
| Open a file in Obsidian |
| List all available Obsidian commands |
| Execute one or more Obsidian commands |
Graph Tools (requires OBSIDIAN_VAULT_PATH)
Each graph tool requires OBSIDIAN_VAULT_PATH to be set for the targeted vault. The two per-note tools (get_note_connections, find_path_between_notes) return note not found: <path> when the target note is not present in the vault — distinct from "found but no connections" (success with empty arrays) and "no path between endpoints" (success with path: null). Aggregation tools wrap their primary result in an envelope with skipped and skippedPaths (up to 50 entries) describing files skipped during the build because of read or parse errors. Full I/O contracts live under specs/004-fix-graph-tools/contracts/.
Tool | Description | Contract |
| Overview stats (notes, links, orphans, clusters) | |
| Folder tree structure of vault | |
| Notes with no incoming/outgoing links | |
| Incoming/outgoing links + tags for a note. Returns | |
| Shortest link path between two notes. Returns | |
| Top notes by link count or PageRank | |
| Community detection via graph analysis |
Semantic Tools (requires Smart Connections plugin)
Tool | Description |
| Conceptual search via Smart Connections |
| Find semantically similar notes |
Development
# Watch mode
npm run dev
# Lint
npm run lint
# Type check
npm run typecheck
# Build
npm run build
# Run the test suite (vitest + nock-mocked HTTP, V8 coverage gate)
npm test
# Run tests in watch mode
npm run test:watchSee TESTING.md for the coverage gate's floor, the ratchet procedure, and the AS-IS-vs.-fork-authored test directory convention.
Project Constitution & Spec-Driven Workflow
This repo uses Spec Kit for non-trivial
features. The project constitution (principles every contribution must
honor — modular code, public-tool tests, zod boundary validation, explicit
upstream error propagation) lives in
.specify/memory/constitution.md.
Per-feature specs, plans, contracts, and task lists live under
specs/. Pull requests should confirm that constitution
Principles I–IV were considered.
Attributions
find_and_replace (feature 013)
find_and_replace is composed of three layers, two of which carry attribution to upstream Obsidian-MCP projects:
LAYER 1 — Per-note replacement primitive: algorithm credited to
cyanheads/obsidian-mcp-server'sobsidian_replace_in_notetool (Apache-2.0). The single-pass left-to-right scan over a single note follows that project's pattern; JavaScript's nativeString.prototype.replaceAllandString.prototype.replace(/.../g, ...)provide the actual replacement work. Source-header attribution lives insrc/tools/find-and-replace/pattern-builder.tsandsrc/tools/find-and-replace/replacer.ts.LAYER 2 — Vault-wide composition + dry-run: pattern credited to
blacksmithers/vaultforge'sgrep-subtool (MIT). The dry-run-with-preview concept and the vault-walk strategy are borrowed; the exact preview shape (structured per-match objects with line/column/before/after fields, see FR-015) is this project's own design. Source-header attribution lives insrc/tools/find-and-replace/region-detector.tsandsrc/tools/find-and-replace/preview-formatter.ts.LAYER 3 — Multi-vault dispatch wrapper: original contribution of this project. Wraps LAYER 1 + LAYER 2 with the existing
getRestService(vaultId)plumbing (inherited from Connor Britain's upstream and hardened across multiple configured vaults) so the entire find-and-replace surface routes per-vault by default. None of cyanheads, vaultforge, or MCPVault provides this. Source attribution lives insrc/tools/find-and-replace/walker.ts,src/tools/find-and-replace/response-builder.ts, and thefindAndReplacemethod onsrc/services/obsidian-rest.ts.
The corresponding feature spec, plan, and contracts live in specs/013-find-and-replace/.
License
MIT — see LICENSE. Copyright is held by Connor England (upstream author); this fork's modifications are released under the same MIT terms.
Available Tools
32 toolsappend_contentA
Append content to a file. Creates the file if it does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | The markdown content to append. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepath | Yes | Path to the file (relative to vault root). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It clearly states the mutating action ('append') and the non-destructive create-if-missing behavior, which is valuable context. However, it does not mention return values, permissions, or directory creation, leaving some gaps for a write 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?
Two compact sentences with no filler. The primary action is front-loaded, and the edge-case behavior (creating missing files) is added efficiently. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and the schema covers parameters fully. The description explains the core behavior and an important edge case, which is sufficient for correct invocation. Given no output schema or annotations, a bit more detail on return values could improve it, but it is largely 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 coverage is 100% with all three parameters well-documented. The description adds no additional meaning beyond the schema; it merely restates the append action. Baseline 3 applies because the schema does the heavy lifting.
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 uses the specific verb 'append' and resource 'file', clearly distinguishing it from siblings like put_content (which likely overwrites). The additional clause 'Creates the file if it does not exist' clarifies behavior, making the 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 append semantics imply when to use the tool (add content to a file, create if missing), but there is no explicit comparison to put_content or other alternatives. No exclusions or when-not scenarios are stated, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_get_file_contentsA
Return the contents of multiple files concatenated with headers.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepaths | Yes | List of file paths to read (relative to vault root). |
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 observable behavior of concatenating contents with headers, but does not explicitly state that it is read-only, how errors are handled, or what the header format looks like. The read-only nature is implied but not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core purpose. Every word earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple batch read tool with two well-documented parameters and no output schema, the description covers the essential return formatting (headers, concatenation). It could mention behavior on missing files or an explicit alternative to get_file_contents, but overall it's sufficient for a tool of this 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 100%, with both vaultId and filepaths adequately described in the input schema. The description adds no additional parameter details, which is acceptable given the schema's thoroughness.
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 a specific action ('Return the contents') and resource ('multiple files') with a distinctive behavior ('concatenated with headers'). This differentiates it from sibling tools like get_file_contents, which handles a single 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?
The phrase 'multiple files' implies the tool is for batch reading, which provides some context. However, there is no explicit mention of when to use this instead of get_file_contents or other 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.
complex_searchB
Search using JsonLogic query. Supports glob and regexp operators for pattern matching.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | JsonLogic query object. Example: {"glob": ["*.md", {"var": "path"}]} | |
| vaultId | No | Optional vault ID (defaults to configured default vault). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. It indicates a read operation ('Search') and mentions operator support, but does not describe the return format, potential performance concerns, or search scope (e.g., file names vs. content).
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 main action and followed by a key feature. Every word earns its place; no redundancy or fluff.
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 tool with nested JsonLogic query objects and no output schema, the description is somewhat minimal. It adequately explains purpose and operator capabilities, but lacks information about return values or when to prefer it over simpler search tools, leaving some gap for effective 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?
The schema already covers both parameters with descriptions (100% coverage), so baseline is 3. The description adds value by explicitly mentioning regexp support, complementing the schema's glob example and enriching the query 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 the action ('Search') and the specific query mechanism (JsonLogic), distinguishing it from sibling search tools by mentioning glob and regexp operators. However, it doesn't explicitly state what is being searched (e.g., 'files in vault'), which would make it fully 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?
The description provides no guidance on when to use this tool versus alternatives like 'search', 'pattern_search', or 'semantic_search'. It implies usage through the name and mentions supported operators, but lacks explicit when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileA
Delete a file or directory from the vault. When the path refers to a directory, the deletion is recursive: every contained file and subdirectory is removed before the directory itself is deleted, in a single tool call. The caller does not need to empty the directory beforehand. On a transport-layer timeout the wrapper performs a single direct-path verification query before reporting outcome, so the response always reflects the actual post-condition on the vault.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepath | Yes | Path to the file or directory to delete (relative to vault root). Directories are deleted recursively. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the transparency burden. It discloses recursive deletion, single-call operation, and importantly the timeout verification behavior ensuring the response reflects actual post-condition. This is exemplary given the destructive nature of the 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 concise yet packed with useful information across three sentences, front-loading the primary purpose and adding crucial behavioral details without 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?
For a straightforward delete tool with two parameters and no output schema, the description provides sufficient context: it explains recursion, the single-call nature, and the post-condition guarantee. While it does not cover error cases explicitly, the timeout verification statement implicitly addresses outcome reporting, making it complete for its 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?
The schema covers 100% of parameters, so the baseline is 3. The description reinforces the recursive behavior for filepath but does not add significant new parameter-level details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes a file or directory from the vault, with specific detail on recursive behavior. It effectively distinguishes itself from all sibling tools, none of which perform deletion.
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 context for when to use the tool, especially for recursive directory deletion, and clarifies that no prior emptying is needed. However, it does not explicitly discuss alternatives or when not to use the tool, though no alternative delete tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_note_clustersA
Detect communities/clusters of related notes using graph analysis. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| minClusterSize | No | Minimum notes per cluster (default: 3). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions the required environment variable and graph-analysis approach, but does not disclose whether the operation is read-only, what the return format is, or how failures (e.g., missing vault path) are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the primary action and includes the necessary prerequisite without unnecessary detail. Every part 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 tool with only two optional parameters and no output schema, the description gives the core concept but omits expected return values and edge-case behavior. Given the complexity of graph analysis, additional context about output semantics (e.g., what a cluster looks like) would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions for vaultId and minClusterSize. The description adds no parameter-level information beyond what the schema already provides, so it meets the baseline but does not enhance it.
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 detects communities/clusters of related notes using graph analysis, with a specific verb and resource. It distinguishes itself from sibling tools like find_similar_notes or get_most_connected_notes by focusing on clusters/communities rather than pairwise similarity or ranking.
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 a prerequisite (OBSIDIAN_VAULT_PATH must be set) but provides no explicit guidance on when to use this tool vs alternatives like semantic_search or find_similar_notes. Usage context is implied by the description itself but lacks exclusions or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_commandA
Execute one or more Obsidian commands in order. For commands that operate on notes, open a note first.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| commands | Yes | List of command IDs to execute. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It adds useful context that commands execute in a specific order and that note-operating commands require an open note. However, it does not disclose what happens on failure (e.g., whether execution aborts), whether there are side effects, or any permission requirements. This is a moderate level of 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 two sentences, each serving a distinct purpose: the first states the tool's action and sequencing, the second gives a critical usage tip. It is concise, front-loaded with the verb, and contains no filler 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 there is no output schema and no annotations, the description should explain return behavior and error handling to fully equip an agent. It does not mention what the tool returns (success/failure, results), what happens if a command fails, or whether it requires Obsidian to be running. For a tool that executes potentially side-effectful commands, this is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both vaultId and commands have descriptions. The tool description does not add parameter-level meaning beyond the schema; it merely reiterates that commands are Obsidian commands. Therefore, the baseline of 3 applies, as the schema already documents parameters adequately.
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 'Execute' with resource 'Obsidian commands' and adds 'in order' to clarify sequencing. This clearly distinguishes it from sibling tools like list_commands, which only lists commands, and content-modification tools like put_content or append_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 provides a clear usage condition: 'For commands that operate on notes, open a note first.' This indicates when a prerequisite step is needed and implies that executing such commands without an open note may not work. However, it does not explicitly compare with alternatives, such as using list_commands to discover command IDs, so it stops short of a full when-to-use vs alternatives explanation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_and_replaceA
Find and replace text vault-wide across every .md file in the targeted vault. DESTRUCTIVE: this tool rewrites notes in-place. Run with dryRun: true first to preview matches; commit with dryRun: false. The vault SHOULD be in a clean git working tree (or otherwise backed up) before mutations — dry-run is the safety net. Concurrency posture is last-write-wins: if Obsidian (or a sync plugin) writes a note in the gap between the tool's read and write, the tool overwrites that external edit without warning. Close Obsidian or pause sync plugins before running mutations on important content. pathPrefix matching is case-sensitive on all platforms (including Windows) and is a directory-segment prefix (no glob expansion). Files in dot-prefixed directories (e.g., .obsidian/, .trash/) are excluded; the per-file size cap is 5 MB on both input and output.
| Name | Required | Description | Default |
|---|---|---|---|
| regex | No | When true, `search` is parsed as an ECMAScript regex with flags g+i?+m+u (no s). | |
| dryRun | No | When true, no writes; the response includes structured per-match previews instead. | |
| search | Yes | The literal text or regex pattern to match. Required, non-empty. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| verbose | No | When true, the response includes the per-file array. Default false to keep responses bounded for large vaults. | |
| wholeWord | No | When true, wraps the effective pattern in \b…\b (literal and regex modes). | |
| pathPrefix | No | If set, only files under this vault-relative path-prefix are scoped. Directory-segment match, case-sensitive on all platforms (including Windows), no glob expansion. Trailing slash is normalized away. | |
| replacement | Yes | The replacement text. Honors $1 / $& / etc. capture-group references when regex mode is on. | |
| caseSensitive | No | When false, matching is case-insensitive (ECMAScript Unicode case-folding). | |
| skipCodeBlocks | No | When true, fenced code blocks (CommonMark line-anchored, triple-backtick) are excluded from the search and preserved byte-for-byte. | |
| skipHtmlComments | No | When true, HTML comments (<!-- … -->) are excluded from the search and preserved byte-for-byte. Critical for preserving audit-trail comments during project-name renames. | |
| flexibleWhitespace | No | When true, substitutes any whitespace run in `search` with \s+. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses in-place rewriting, last-write-wins concurrency overwrites, dot-directory exclusions, case-sensitivity, and the 5MB per-file cap. This is far beyond minimal 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 long but each sentence earns its place for a destructive tool. Safety guidance is front-loaded ('DESTRUCTIVE' warning, dryRun first). Minor redundancy with schema text (e.g., pathPrefix case-sensitivity) costs the fifth 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?
The tool has 12 parameters and no output schema, so return behavior must be self-described. The description covers dryRun structured previews and verbose per-file arrays, but does not fully describe the non-dryRun success response or no-match case. Overall it is rich but has a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds operational meaning beyond the schema: dryRun previews, per-file size cap, dot-directory exclusions, and vault-wide scope, which help the agent interpret parameters like dryRun and pathPrefix.
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 opens with 'Find and replace text vault-wide across every .md file', which names a specific verb, resource, and scope. This clearly distinguishes it from read-only siblings like search, patch_content, and append_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 provides strong context: run dryRun first, ensure clean git tree/backup, close Obsidian/pause sync before mutations. It does not explicitly name alternatives like 'use search for read-only queries', so it stops short of a full when/when-not matrix.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_orphan_notesA
Find notes with no incoming or outgoing links. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| includeBacklinks | No | Consider backlinks when determining orphan status (default: true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does describe the tool's core behavior (scanning for notes without links) and the environment requirement, but it does not disclose side effects, return format, pagination, or performance implications. This is moderate transparency but leaves some gaps.
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 primary action. The second sentence adds a necessary environmental precondition. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description should clarify what the tool returns (e.g., note paths, names, counts). While the env var prerequisite and core behavior are mentioned, the lack of return format reduces completeness. The 0 required params make invocation easy, but the output is unspecified.
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 provides full descriptions for both parameters (vaultId and includeBacklinks), so coverage is 100%. The description adds no additional parameter-specific meaning beyond the schema, only reiterating the 'targeted vault' concept. Baseline 3 is appropriate since schema handles 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 the tool finds 'notes with no incoming or outgoing links', which is a specific verb and resource. This differentiates it from siblings like get_note_connections or find_similar_notes, which focus on connections or similarity.
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 an explicit prerequisite (OBSIDIAN_VAULT_PATH must be set), which is helpful context. However, it does not provide guidance on when to use this tool versus alternatives like get_note_connections or detect_note_clusters, nor does it mention exclusions or specific use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_path_between_notesA
Find the shortest link path between two notes. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault. Returns a precondition-style error 'note not found: ' when the target note is not present in the vault — distinct from 'found but no connections'/'no path between endpoints'.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Source note path. | |
| target | Yes | Target note path. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| maxDepth | No | Maximum path length to search (default: 5). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description shoulders the transparency burden. It discloses meaningful behavior: the environment variable requirement and the distinction between a 'note not found' precondition error and a 'no path between endpoints' outcome. It does not, however, describe the success return format or whether there are side effects (likely none).
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-loaded with the primary action, and each sentence contributes distinct information (purpose, prerequisite, error semantics). There is no redundancy or fluff.
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 tool with no output schema and moderate complexity, the description covers purpose, key prerequisites, and error behavior, which is fairly complete. Gaps include the lack of explicit success return shape and precise semantics of 'link path' or maxDepth, though the schema partially addresses maxDepth. Overall, sufficient for an agent to use correctly in most cases.
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 provides descriptions for all 4 parameters (100% coverage), so the baseline is 3. The description adds context about OBSIDIAN_VAULT_PATH that relates to the vaultId parameter, but does not further explain source, target, or maxDepth beyond the schema. The added value is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear and specific action: 'Find the shortest link path between two notes.' This distinguishes it from siblings like get_note_connections (which likely retrieves connections for a single note) by the focus on path-finding between two endpoints. The purpose is immediately transparent.
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 a prerequisite (OBSIDIAN_VAULT_PATH) and contrasts two error conditions, providing some contextual guidance. However, it does not explicitly state when to use this tool versus alternatives like get_note_connections or search, nor does it describe exclusions or fallback scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_similar_notesB
Find notes semantically similar to a given note.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum similar notes to return (default: 10). | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepath | Yes | Path to the source note (relative to vault root). Forward-slash or backslash separators both accepted. | |
| threshold | No | Similarity threshold 0-1 (default: 0.5). |
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 of behavioral disclosure. It only states the core action and does not explain how similarity is computed, return format, sorting, error handling, or that it is a read-only operation. The description lacks meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, directly states the action, and contains no fluff. Every word contributes to understanding the tool's purpose, making it efficiently sized.
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 absence of an output schema and annotations, the description is too brief. It does not clarify the return value, ranking behavior, default thresholds, or error cases. While parameters are well-documented, the overall context for the agent is incomplete.
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 covers 100% of parameters with descriptions for filepath, limit, threshold, and vaultId. The description text adds no parameter-level meaning, so it does not go beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Find') + resource ('notes') + qualifier ('semantically similar to a given note'). It clearly distinguishes from sibling tools like semantic_search by indicating the input is an existing note (filepath) rather than a free-text query.
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?
Usage context is implied: use when you have a note and want to find semantically related notes. However, there is no explicit when-to-use vs alternatives, nor exclusions or comparison to sibling tools like semantic_search or search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_fileA
Get the currently active file in Obsidian.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). |
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 of behavioral disclosure. It only states the action without describing the return format, edge cases (e.g., no active file), or confirming read-only behavior. This leaves significant behavioral ambiguity.
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 does not waste words. It is front-loaded and easy to parse.
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 get tool with one optional parameter and no output schema, the description provides sufficient context for basic invocation. However, it lacks usage guidance and behavioral details, so it's not exhaustive, but adequate for the tool's 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?
The input schema has 100% coverage for the single optional vaultId parameter, which has its own description. The tool description adds no additional parameter semantics, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a clear resource ('currently active file in Obsidian'), which distinguishes it from sibling tools like get_file_contents or open_file. It clearly states what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives. The usage is implied by the name and description, but there are no exclusions or alternative suggestions, making it a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_contentsA
Returns the content of a single file in your vault.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepath | Yes | Path to the file (relative to vault root). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It accurately states the read-only nature ('Returns the content'), but does not disclose edge cases such as missing files, encoding issues, or size limits. It is minimal but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes meaning, making it highly concise and readable.
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 single-file read with two well-documented parameters, the description is largely sufficient. However, the lack of an output schema means the return format (e.g., raw string, text content) is not clarified, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (vaultId and filepath), so the description adds no additional semantic value beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and resource ('content of a single file'), clearly distinguishing it from siblings like batch_get_file_contents or put_content. It is unambiguous about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'single file' implies a distinction from batch operations, but the description offers no explicit guidance on when to use this tool versus alternatives like batch_get_file_contents or get_heading_contents. Context is clear but exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_frontmatter_fieldA
Returns the named frontmatter field's value with its original type preserved — string, number, boolean, array, object, or null. If the field or the note does not exist, the upstream's 4xx error is propagated unchanged. To read all frontmatter fields at once, use get_file_contents.
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | The name of the single frontmatter field to read. Must be non-empty after trimming whitespace. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepath | Yes | Path to the file (relative to vault root). |
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. It discloses key behaviors: type preservation of the return value and propagation of upstream 4xx errors. It doesn't mention auth or rate limits, but those are likely less relevant for a simple getter; the provided disclaimers are valuable.
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 action, and every phrase earns its place. It efficiently conveys the return type, error behavior, and a sibling alternative without 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?
For a simple read tool with well-described parameters and no output schema, the description covers the essential context: what is returned, type preservation, error handling, and an alternative for broader reads. The tool is simple enough that this is 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 coverage is 100% with descriptions for all parameters (filepath, field, vaultId). The description adds no parameter-level semantics beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and identifies the resource ('named frontmatter field's value') with added detail about type preservation. It also distinguishes itself from sibling get_file_contents by noting that tool reads all fields at once.
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 clearly implies when to use this tool (reading a single field) and explicitly recommends an alternative for reading all fields. It does not explicitly say 'use this when you need one field' but the guidance is clear enough to steer the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_heading_contentsA
Returns the raw markdown body content under the targeted heading. Frontmatter, tags, and file metadata are not included — use get_file_contents for the whole note or get_frontmatter_field for individual frontmatter values. Heading targets MUST use the full path of the heading: at least two non-empty segments separated by "::" (i.e., the H1::H2[::H3...] form). Top-level headings (no parent) are unreachable through this tool — use get_file_contents and slice the note client-side. Headings whose literal text contains "::" are also unreachable through this tool (the validator treats every "::" as a path separator and there is no escape syntax) — use get_file_contents in that case as well.
| Name | Required | Description | Default |
|---|---|---|---|
| heading | Yes | Full heading path: at least two non-empty segments separated by '::' (i.e., the H1::H2[::H3...] form). Top-level headings and headings whose literal text contains '::' are unreachable through this tool — fall back to get_file_contents for those cases. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepath | Yes | Path to the file (relative to vault root). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return content (raw markdown body), exclusions (frontmatter, tags, metadata), path constraints, and unreachable cases. This is comprehensive behavioral 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 somewhat long but well-structured, front-loading the action and then providing exclusions and constraints. Every sentence adds value, though the 'unreachable' cases could be slightly more compact. It is appropriately sized for the tool's complexity.
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 tool with significant behavioral constraints (heading path format, unreachable top-level headings, literal '::' limitations), the description covers all necessary context. It explains what is returned, what is excluded, and exactly when to use alternatives. The absence of an output schema is acceptable since the return type (raw markdown body) is implicitly clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the heading format and adds context about when to use fallbacks, but it does not add meaning beyond what the schema already provides. It meets the baseline without exceeding it.
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 function: 'Returns the raw markdown body content under the targeted heading.' It also explicitly differentiates from sibling tools like get_file_contents (whole note) and get_frontmatter_field (frontmatter values), making the 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 provides explicit when-to-use guidance, including exclusions: top-level headings and headings containing '::' are unreachable, with direct fallback instructions to get_file_contents. This is outstanding usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_most_connected_notesA
Get the most connected notes by link count or PageRank. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of notes to return (default: 10). | |
| metric | No | Metric to rank by (default: backlinks). | |
| vaultId | No | Optional vault ID (defaults to configured default vault). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It adds the environment requirement for OBSIDIAN_VAULT_PATH, which is useful. However, it does not explicitly state read-only behavior, return format, or potential side effects, though the verb 'get' implies a safe read operation. The omission of output details is notable since no output schema is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the tool's purpose and a critical environment prerequisite. No redundant wording or filler; every word contributes to the core message.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally viable: it states what the tool does and the environment requirement, but lacks details about the return structure, how metrics are computed, or when to use this tool versus graph-focused siblings. Given the absence of an output schema and annotations, more contextual guidance would improve completeness, yet the core purpose is clear enough for straightforward 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?
The input schema fully describes all three parameters with detailed descriptions and an enum for metric, so the description adds little beyond what is already structured. The description's mention of 'link count or PageRank' actually under-covers the metric parameter by omitting 'backlinks', which is a minor inconsistency. Baseline 3 applies due to high schema 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 tool retrieves the most connected notes and specifies the ranking options as 'link count or PageRank'. This identifies a distinct purpose from sibling tools like get_note_connections, which targets connections for a specific note. However, it does not explicitly differentiate from siblings and omits the 'backlinks' metric from the schema enum.
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 a key prerequisite by noting that OBSIDIAN_VAULT_PATH must be set for the targeted vault. No guidance is given on when to choose this tool over alternatives like get_note_connections or find_path_between_notes, nor are any exclusions mentioned. The usage context is implied but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_note_connectionsA
Get all connections for a note: outgoing links, backlinks, tags. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault. Returns a precondition-style error 'note not found: ' when the target note is not present in the vault — distinct from 'found but no connections'/'no path between endpoints'.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | How many levels of connections to traverse (default: 1). | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepath | Yes | Path to the note (relative to vault root). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses a prerequisite (OBSIDIAN_VAULT_PATH) and a specific error format ('note not found: <path>'), and clarifies the distinction between 'found but no connections' and 'no path between endpoints'. This is substantial behavioral context, though it does not mention rate limits, return structure, or mutation behavior (though 'Get' implies read-only).
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 clause adds value. It is concise without being underspecified.
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 covers the main purpose, prerequisite, and error behavior. There is no output schema, so the description does not reveal the exact response format, but it gives enough for an agent to select and interpret the tool's core behavior. The tool is relatively simple, and the description is complete for typical 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?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds a small amount of meaning by clarifying what 'connections' includes (outgoing links, backlinks, tags), but this is not essential for parameter understanding. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does with a specific verb and resource: 'Get all connections for a note'. It enumerates the types of connections (outgoing links, backlinks, tags) and distinguishes from sibling tools like get_file_contents and find_path_between_notes.
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 context by stating the prerequisite (OBSIDIAN_VAULT_PATH) and by differentiating its error behavior from 'no path between endpoints', which hints at a distinction from path-finding tools. However, it does not explicitly state alternative tools or when-not-to-use conditions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_periodic_noteC
Get the current periodic note for a specified period.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Return type: content only or with metadata (default: content). | |
| period | Yes | The period type. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Get', which implies a read operation, but it does not disclose whether the tool creates a note if missing, what the default return type is (content vs metadata), or any edge-case behaviors. The lack of detail makes side effects unpredictable.
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 succinct sentence with no redundant wording. It is front-loaded with the primary action, but its brevity borders on under-specification for a tool with multiple parameters and a sibling alternative. Still, it earns near-top marks for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, yet the description provides only the basic operation. It omits crucial context such as the distinction between content and metadata returns, how 'current' is determined, and the tool's relationship to get_recent_periodic_notes. This is incomplete for an agent to invoke the tool confidently.
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 provides 100% coverage with descriptions for all three parameters, including enums for type and period. The description adds no extra parameter-level meaning beyond what the schema already offers, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'periodic note', with a specifier for the period. It distinguishes the tool's core function but doesn't explicitly differentiate it from the sibling tool get_recent_periodic_notes, leaving some ambiguity about 'current'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_recent_periodic_notes. There is no mention of exclusions, prerequisites, or specific use cases that would help an agent choose this tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_changesB
Get recently modified files in the vault.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Only include files modified within this many days (default: 90). | |
| limit | No | Maximum number of files to return (default: 10). | |
| vaultId | No | Optional vault ID (defaults to configured default vault). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only states the basic action, omitting defaults (e.g., 90 days, limit 10), sort order, return format, or whether folders are included. This is comparable to the mid-tier 'update_drive' example, which also scored 2 for missing such context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It effectively communicates the core purpose while staying appropriately sized for a simple list tool.
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 annotations and no output schema, the description must supply more context but doesn't. It fails to explain what 'recently modified' means (timeframe, file types), whether it returns paths or content, or how the result is structured. This leaves the agent with significant ambiguity about the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all three parameters have descriptions), so the description doesn't need to add parameter details. Per the baseline rule, a score of 3 is appropriate when the schema fully documents parameters and the tool description doesn't contradict or mislead.
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 'Get recently modified files in the vault' uses a specific verb ('get') and resource ('recently modified files'), clearly distinguishing it from sibling tools like list_files_in_vault or get_vault_structure. The purpose is unambiguous and directly aligns with the tool 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?
There is no guidance on when to use this tool versus alternatives such as search or list_files_in_vault. The description provides no context for choosing this tool, no exclusions, and no mention of use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_periodic_notesB
Get most recent periodic notes for a specified period type.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of notes to return (default: 5). | |
| period | Yes | The period type. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| include_content | No | Whether to include note content (default: false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention the default limit, whether content is included by default, ordering behavior, or what happens when no notes are found. The description is too sparse to convey these important behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the action and resource. It contains no unnecessary words or repetition, making it highly 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 tool has 4 parameters, no output schema, and no annotations, the description is insufficiently complete. It does not explain the return format, default behavior, or how the tool differs from related tools. Agents may not know what 'recent' means or whether metadata vs content is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema; the mention of 'specified period type' merely echoes the 'period' parameter. It does not clarify the semantics of 'most recent' or how 'limit' and 'include_content' 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?
The description clearly states the tool's function: 'Get most recent periodic notes for a specified period type.' The verb 'Get' and the resource 'most recent periodic notes' are specific. It distinguishes from sibling 'get_periodic_note' by indicating multiple recent notes rather than a single note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'get_periodic_note' or 'search'. It merely states what it does, leaving the agent without explicit context on when this tool is the appropriate choice or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vault_statsA
Get overview statistics about the vault: total notes, links, orphans, tags, clusters. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses a key requirement (OBSIDIAN_VAULT_PATH must be set) and the read-only nature of the operation is clear from 'Get'. It does not state performance implications or confirm lack of mutation, but for a stats tool no side effects are apparent. It adds the environment prerequisite which is valuable context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the core purpose, and lists outputs compactly. Every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema, it lists the five statistics returned and the required environment variable. However, it does not specify the output shape (e.g., counts vs arrays), which could be ambiguous for an agent. Still, enough for a basic 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?
The input schema documents the single optional vaultId parameter with a description (100% coverage), so the baseline is 3. The tool description provides no additional parameter semantics beyond the schema, so it neither helps nor hurts.
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 provides overview statistics (total notes, links, orphans, tags, clusters) about a vault. This distinct, specific purpose differentiates it from sibling tools like find_orphan_notes or detect_note_clusters, which focus on individual detailed operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case for high-level vault metrics but does not explicitly contrast with alternatives or mention when to use them. It does provide a clear prerequisite (OBSIDIAN_VAULT_PATH) that helps an agent decide if the tool is usable. However, it lacks explicit 'use this instead of X' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vault_structureA
Get the folder tree structure of the vault. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| maxDepth | No | Maximum folder depth to return (default: unlimited). | |
| includeFiles | No | Include files in the tree, not just folders (default: false). |
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 of behavioral disclosure. It does disclose an environmental requirement (OBSIDIAN_VAULT_PATH), which is useful, but it does not describe the response format, whether files are included by default, or any side effects. Given it is a read operation, the lack of detail is a gap but not critical.
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, consisting of two sentences with no fluff or redundant information. Every word earns its place, and it is front-loaded with the core purpose. This is an example of ideal 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?
There is no output schema, so the description should ideally clarify what the returned tree structure looks like (e.g., nested objects, relative paths). However, for a straightforward 'get structure' tool with optional parameters and a clear prerequisite, the description is adequate for basic usage but lacks completeness regarding return format and edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (vaultId, maxDepth, includeFiles) are already documented in the schema. The description does not add any additional meaning or context beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: getting the folder tree structure of the vault. It uses a specific verb ('get') and resource ('folder tree structure'), which distinguishes it from sibling tools like list_files_in_vault (flat list) and list_files_in_dir (specific directory). However, it does not explicitly name any alternative tools, so it lacks explicit sibling differentiation.
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 a prerequisite (OBSIDIAN_VAULT_PATH must be set) and implies usage for retrieving folder hierarchy, but it does not explicitly state when to use this tool versus alternatives such as list_files_in_vault or list_files_in_dir. There are no exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commandsA
List all available commands in Obsidian. For commands that operate on notes, open a note first.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. 'List' implies a read-only operation, but it does not explicitly state safety, side effects, or return format. The note-opening hint adds context but is more about using the listed commands than the behavior of this 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?
Two sentences front-load the core function and add a practical caveat. No redundant wording, perfectly sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity and no output schema, the description adequately conveys what the tool returns (list of commands) and the necessary precondition. It could mention the format of returned commands, but for a listing tool this is not a critical gap. The sibling context is clear enough from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with vaultId already described as 'Optional vault ID (defaults to configured default vault).' The description adds no additional parameter meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ('List all available commands in Obsidian') and clearly distinguishes it from sibling tool execute_command, which runs commands. The purpose is immediately obvious without 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 second sentence provides a clear prerequisite: 'For commands that operate on notes, open a note first.' While it doesn't explicitly name alternatives, the contrast with execute_command is implied. The guidance is actionable and helpful for the user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_files_in_dirA
Lists all files and directories in a specific directory within your Obsidian vault.
| Name | Required | Description | Default |
|---|---|---|---|
| dirpath | Yes | Path to the directory (relative to vault root). Empty directories are not returned. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the burden of behavioral disclosure. It states the core action but does not mention whether the listing is recursive, how hidden files are handled, or what happens if the path is invalid. The schema's note about empty directories adds some context, but the description itself lacks 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?
The description is a single, concise sentence that effectively states the tool's purpose without unnecessary words. It is front-loaded with the key action and resource.
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, the description is adequate. The schema covers parameter semantics, and the tool's behavior is reasonably clear. However, missing details about recursion or return format prevent a perfect score, as these are common ambiguities for directory listing tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with clear descriptions for both dirpath and vaultId. The description adds no additional parameter-level meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('lists all files and directories') and the target resource ('a specific directory within your Obsidian vault'). It distinguishes this from sibling tools like list_files_in_vault by emphasizing the scoped directory focus.
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 inspecting a single directory, but it does not explicitly state when to choose this over alternatives like list_files_in_vault or get_vault_structure. The context is clear enough to infer, but there are no explicit exclusions or alternative mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_files_in_vaultA
Lists all files and directories in the root of your Obsidian vault.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It correctly implies a read-only operation ('Lists') and non-recursive root-level scope, but it does not clarify details such as whether hidden files are included, the output format, or behavior with an invalid vaultId. It adds basic behavioral context but lacks completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It efficiently conveys the core purpose without wasting tokens.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description is mostly complete. It states what the tool does and the scope. However, without an output schema, it does not describe the return format (e.g., relative vs absolute paths), which is a minor gap. Overall, it is adequate for the tool's 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?
The only parameter (vaultId) is fully described in the schema (100% coverage), so the description need not repeat it. The tool description does not add extra semantic detail about the parameter beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Lists') and the specific scope ('all files and directories in the root of your Obsidian vault'). This distinguishes it from siblings like list_files_in_dir (which targets a specific directory) and get_vault_structure (which implies a broader or recursive tree). The use of 'root' clarifies the non-recursive scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by specifying 'root', but it does not explicitly mention alternatives or exclusions. There is no phrase like 'for subdirectories, use list_files_in_dir'. The usage guidance is only inferred from the scope wording, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsA
List every tag present in the vault, together with its usage count. The result is sourced from Obsidian's own tag index via the Local REST API plugin's GET /tags/ endpoint, so it includes both inline (#tag) and YAML frontmatter tags and excludes tag-shaped strings that appear inside fenced code blocks — making it more accurate than text or frontmatter search for tag enumeration. Hierarchical tags (e.g., work/tasks) contribute counts to every parent prefix (e.g., work), matching how Obsidian's own tag sidebar displays them.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so excellently. It discloses the data source (Local REST API GET /tags), inclusion rules (inline and YAML tags), exclusion rules (fenced code blocks), and hierarchical tag counting 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?
Three sentences deliver a precise definition, source attribution, behavior contrasts, and hierarchical behavior—all without unnecessary filler. The information is front-loaded and each sentence contributes meaningful detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description is remarkably complete. It explains what is returned (tags with counts), how the result is sourced, edge cases (code blocks), and hierarchy behavior, leaving little ambiguity.
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 only parameter (vaultId) is fully described in the schema with 100% coverage, so the description adds no extra parameter-level detail. This meets the baseline for schema-driven parameter clarity.
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 opens with a specific verb and resource: 'List every tag present in the vault, together with its usage count.' It clearly distinguishes this tool from sibling search tools by emphasizing tag enumeration through Obsidian's index.
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 that the tool is more accurate than text or frontmatter search for tag enumeration, giving clear context on when to prefer it. However, it does not explicitly state when NOT to use it or mention alternative scenarios beyond search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vaultsA
List all configured Obsidian vaults with their IDs and capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It communicates that the tool lists all vaults and returns their IDs and capabilities, implying a read-only operation. However, it does not disclose any potential side effects, authentication requirements, or limitations, though the simple nature of the tool likely makes these minimally relevant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the tool's purpose and output. Every word earns its place, with no redundancy or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter tool without an output schema, the description adequately covers what the tool does and what it returns. It mentions IDs and capabilities, which is sufficient for basic invocation. The description is complete enough given the tool's straightforward nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially 100% covered. No parameter descriptions are needed, and the baseline of 4 applies here because there is nothing for the description to add about 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 a specific action ('List all configured Obsidian vaults') with a distinct resource and additional output details ('with their IDs and capabilities'). It distinguishes itself from sibling tools like list_files_in_vault or get_vault_stats by focusing on vaults themselves rather than their contents or statistics.
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 context for when to use this tool: to discover all configured vaults. While it doesn't explicitly state when not to use it or name alternatives, the phrasing and resource specificity make the usage context obvious without needing exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_fileC
Open a file in Obsidian.
| Name | Required | Description | Default |
|---|---|---|---|
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepath | Yes | Path to the file to open (relative to vault root). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state whether opening a file has side effects (e.g., changing the active pane), requires specific permissions, or what the return behavior is. This is a significant transparency 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 with no wasted words. It is maximally concise and avoids redundancy, earning a perfect score for structure.
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 simple nature of the tool, the description still incomplete. It lacks critical context such as what 'open' implies versus 'read', return values, error handling, and how it relates to sibling tools. Without annotations or an output schema, this minimal description is insufficient for an agent 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?
The schema provides 100% description coverage for both parameters, so the baseline is 3. The description itself adds no additional meaning beyond what the schema already defines, but it does not need to compensate for any 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 ('Open') and the resource ('a file in Obsidian'), making it specific and unambiguous. However, it does not explicitly differentiate from sibling tools like get_file_contents, which could lead to confusion about whether 'open' means read or open in the UI.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. It simply states the action without contextual direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_contentA
Insert content relative to a heading, block, or frontmatter in a file. For heading targets, the value MUST be the full path of the heading: at least two non-empty segments separated by "::" (i.e., the H1::H2[::H3...] form). Top-level headings (no parent) are unreachable through this tool — use get_file_contents + put_content for those edits. Headings whose literal text contains "::" are also unreachable through this tool (the validator treats every "::" as a path separator and there is no escape syntax).
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | When targetType is 'heading', the value MUST be a full path: at least two non-empty segments separated by '::'. Top-level headings and headings whose literal text contains '::' are unreachable through this tool. | |
| content | Yes | The markdown content to insert. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepath | Yes | Path to the file (relative to vault root). | |
| operation | Yes | How to insert the content relative to the target. | |
| targetType | Yes | Type of target to locate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It goes beyond basic function by revealing important constraints: the requirement for at least two heading segments, the unreachability of top-level headings and headings with literal '::', and the lack of escape syntax. This gives the agent critical knowledge about edge cases and 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 concise, with three sentences total. It front-loads the main purpose, then addresses constraints with specific examples and an explicit alternative for a common edge case. Every sentence earns its place with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, 2 enums) and the absence of an output schema, the description adequately covers the core behavior and the most important edge cases. It clearly delineates the valid target format and provides an alternative for unsupported targets. No significant information gaps remain for an agent to correctly select and invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds value by providing a concrete example of the heading path format ('H1::H2[::H3...]') and reiterating the critical validator behavior, which slightly exceeds what the schema describes. However, it doesn't add much for other parameters, so it doesn't merit a 5.
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 function: 'Insert content relative to a heading, block, or frontmatter in a file.' This specifies the action (insert), the resource (content in a file), and the context (relative to specific target types), distinguishing it from sibling tools like put_content or append_content which target entire files or append at the end.
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 explicit usage guidance by stating when NOT to use the tool ('Top-level headings (no parent) are unreachable through this tool') and names the alternative ('use get_file_contents + put_content for those edits'). It also warns about a specific edge case (headings containing '::') and explains the path format requirement, giving clear context for when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pattern_searchB
Regex pattern extraction with context. Use for structured data mining, format analysis, content auditing.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| options | No | ||
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| patterns | Yes | Regex patterns to search for. Examples: "\\b\\d{4}-\\d{2}-\\d{2}\\b" for dates, "TODO:.*" for todos. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for disclosing behavior. It mentions 'extraction with context' but does not state whether the tool is read-only, what the return format is, default behavior, or limitations, which is a significant gap for a tool with no 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 two short sentences, with the first stating the core function and the second listing use cases. It is front-loaded and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a moderately complex schema with nested objects and no output schema, so the description should explain expected return values, defaults, and operational context. The terse summary leaves the agent to infer critical behavior from the schema alone.
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 no parameter-level detail beyond the schema. With schema description coverage at 50%, the description should compensate for undocumented parameters, but it does not mention patterns, scope, options, or vaultId at all.
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 ('extraction') and resource ('pattern') with 'Regex' to define what the tool does. The use cases (data mining, format analysis, content auditing) clarify the intended purpose, but it does not explicitly distinguish from sibling search tools such as 'search' or 'complex_search'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Use for...' gives some context on when to use the tool, but it lacks explicit exclusion or comparison with alternative tools. Given the presence of numerous sibling search and extraction tools, missing selection guidance leaves usage somewhat ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_contentA
Overwrite the entire content of a file. Creates the file if it does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | The markdown content to write. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| filepath | Yes | Path to the file (relative to vault root). |
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 destructive 'overwrite entire content' behavior and the create-if-not-exists edge case. However, it does not mention other behavioral aspects such as confirmation prompts, atomicity, or return values, which could be relevant for a write operation.
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 concise sentences, front-loaded with the primary action and followed by a key edge case. Every word contributes meaning, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple file write tool with fully described parameters and no output schema, the description covers the core behavior and the main edge case sufficiently. It lacks usage guidance, but that is captured in a separate dimension, so overall it is complete enough for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (content, vaultId, filepath) adequately described in the schema itself. The tool description adds no extra parameter semantics beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Overwrite' with the resource 'entire content of a file', clearly stating the exact operation. It also notes file creation if missing, which distinguishes it from siblings like append_content and patch_content that imply partial modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit when-to-use guidance or alternatives. It implies use for full replacement but does not mention that append_content or patch_content should be used for partial edits, leaving the agent to infer context from sibling tool names rather than explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchC
Performs a keyword search across all files in the vault.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query. | |
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| contextLength | No | Number of characters of context around each match (default: 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the action and scope, but gives no information about whether the operation is read-only, what the return format looks like, performance characteristics, or any 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 a single, concise sentence that conveys the essential purpose without redundancy. It is appropriately front-loaded and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and annotations, the description should explain more about what the tool returns and any relevant limitations. It lacks usage guidance and result semantics, making it incomplete for a tool with several close siblings.
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 provides 100% coverage with clear descriptions for all three parameters, so the description does not need to add much. It does add the context of 'across all files' and 'keyword' which aligns with the schema, but no additional parameter-level detail is necessary.
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 specifies a clear action ('keyword search') and scope ('all files in the vault'), making the tool's basic function evident. However, it does not explicitly differentiate this from sibling search tools like complex_search, pattern_search, or semantic_search, though 'keyword' implies a simple text query.
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. The description does not mention use cases, prerequisites, or why a user might choose this over complex_search or semantic_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchB
Concept-based search via Smart Connections. Finds conceptually related content using meaning/context similarity rather than keyword matching.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return (default: 10). | |
| query | Yes | Natural language concept query. | |
| filters | No | ||
| vaultId | No | Optional vault ID (defaults to configured default vault). | |
| threshold | No | Similarity threshold 0-1 (default: 0.7). Higher = more precise. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite having no annotations, the description only covers the conceptual approach and does not disclose result format, behavior around threshold/filters, or any side effects. This leaves the agent without critical behavioral context for a search operation.
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, immediately front-loading the core concept ('Concept-based search via Smart Connections') with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the tool has a fairly complex input schema with nested filters and a threshold parameter. The description does not mention these features, return behavior, or how to distinguish this tool from many search-sibling tools, making it incomplete for effective 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?
Schema description coverage is 80% (4 of 5 parameters documented), so the baseline is 3. The description adds no additional parameter semantics, such as how threshold or filters affect the search, so it does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Concept-based search via Smart Connections' and contrasts with 'keyword matching,' giving a specific verb+resource+scope. However, it does not explicitly differentiate from sibling semantic search tools like find_similar_notes, so it falls short of a 5.
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 phrase 'rather than keyword matching' implicitly suggests using this tool for conceptual/semantic queries and others for literal matches, but no explicit when-to-use/when-not-to-use guidance or alternative tool names are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
32 tool updates
v0.6.0- First observed
append_content - First observed
batch_get_file_contents - First observed
complex_search - First observed
delete_file - First observed
detect_note_clusters - First observed
execute_command - First observed
find_and_replace - First observed
find_orphan_notes - First observed
find_path_between_notes - First observed
find_similar_notes - First observed
get_active_file - First observed
get_file_contents - First observed
get_frontmatter_field - First observed
get_heading_contents - First observed
get_most_connected_notes - First observed
get_note_connections - First observed
get_periodic_note - First observed
get_recent_changes - First observed
get_recent_periodic_notes - First observed
get_vault_stats - First observed
get_vault_structure - First observed
list_commands - First observed
list_files_in_dir - First observed
list_files_in_vault - First observed
list_tags - First observed
list_vaults - First observed
open_file - First observed
patch_content - First observed
pattern_search - First observed
put_content - First observed
search - First observed
semantic_search
TDQS
Scored across 32 tools
Each tool targets a distinct resource and operation: file reading/writing, search with different query types, vault graph analysis, commands, and periodic notes. The descriptions clearly differentiate similar-looking tools like search, complex_search, pattern_search, and semantic_search.
Tool names follow a consistent lowercase snake_case convention with a verb-noun structure (put_content, get_file_contents, delete_file, list_tags). Even compound names like batch_get_file_contents and find_and_replace fit the pattern, and search variants share a common suffix.
With 32 tools, the server exceeds the typical well-scoped range (3-15) and enters the 'too many' category (25+). While each tool is distinct, the sheer number could overwhelm agents, and some tools could be parameterized to reduce count.
The surface covers CRUD, search (keyword, regex, semantic, JsonLogic), graph analysis, periodic notes, tags, and command execution. Minor gaps include rename/move operations and explicit folder creation, but the core workflows are well covered.
Maintenance
Related MCP Connectors
A TypeScript MCP server for Home Assistant, enabling programmatic management of entities, automati…
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Personal knowledge base MCP server with semantic search, auto-categorization, metadata extraction
Related MCP Servers
- AlicenseAqualityAmaintenanceThe most feature-complete MCP server for Obsidian vaults. 23 tools and 3 resources for search, read, write, tags, link analysis, graph traversal, and canvas support.4148 npm30MIT
- AlicenseBqualityCmaintenanceHeadless semantic MCP server for Obsidian, Logseq, Dendron, Foam, and any markdown folder. Features built-in hybrid semantic search, surgical AST editing, template scaffolding, zero-config local embeddings, and workflow tracking.556 npm11MIT
- AlicenseAqualityAmaintenanceLocal-first MCP server for working with an Obsidian vault. No API key required1714MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for Obsidian that exposes tools for reading/writing notes, managing frontmatter and tags, querying Tasks, semantic search, and interacting with Obsidian Bases, with shared local caching and support for various runtime modes.39Apache 2.0