Skip to main content
Glama

vault-memory

Local-first, source-agnostic-ready agentic knowledge layer over your Obsidian notes, exposed to any MCP-aware agent.

See CHANGELOG.md for release history. Latest: v2.4.1 — additive over v1.x; the 23 v1 tool names + input schemas are preserved byte-identical.

30-second example

Install the CLI from npm, register a vault, and start the MCP server:

npm install -g @owrede/vault-memory
vault-memory add-vault "/path/to/your/obsidian/vault" --name notes
vault-memory serve

Point an MCP-aware client at the vault-memory binary. For Claude Desktop, drop this into ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "vault-memory": {
      "type": "stdio",
      "command": "vault-memory",
      "args": ["serve"]
    }
  }
}

Restart the client. Ask the agent something like: "Pull me a brief for tomorrow's 1:1 with Alice." The agent discovers the bundled meeting-prep task contract via describe_contract, instantiates it with instantiate_contract, and the result — attendees, recent shared notes, last decisions, open action items — is written into your vault's _memory/_briefs/ folder with full provenance. The brief is a regular note; you can read it, edit it, link to it, or delete it.

That is the full agentic-knowledge-layer loop: discover a contract, instantiate it, get a cited document back. Memory writes are labeled and provenance-tracked; user notes are never modified silently.

Related MCP server: Brainstem

What this is

vault-memory turns one or more Obsidian vaults into a queryable, agent-native knowledge layer running entirely on your machine. It indexes your notes with local embeddings (via Ollama), keeps the index live as you edit, and exposes the result to any MCP-aware agent — Claude Code, Claude Desktop, ChatGPT Custom Connectors, the MCP Inspector, or any other client speaking the Model Context Protocol.

v1.0.0 was a strong retrieval substrate: hybrid search (semantic + BM25 + RRF, optional cross-encoder rerank), live indexing, multi-vault, hash-protected writes. v2.0.0 evolves it into a full agentic knowledge layer — memory namespace with provenance, document-tree assembly (bundles, outlines, dossiers), graph-as-retrieval (typed edges, expand, cluster), a compiled-brief layer with a staleness daemon, and a task-contract DSL that any MCP-aware agent can discover and instantiate.

Obsidian is the v2 source connector; the same MCP tool surface backs any future adapter (Notion, Logseq, ...) via the SourceConnector / DeliveryAdapter / ChangeFeed seams introduced in Phase 1. The memory namespace is a non-negotiable safety invariant: agents never write silently into user notes; every agent-authored document carries provenance properties and lives in a labeled MemorySink.

Nothing leaves your machine. No cloud sync, no API keys, no telemetry.

Architecture

One SQLite database per vault under ~/.vault-memory/vaults/<name>.db. Layers L0 through L4 sit on top of an Adapter tier that abstracts the source-of-truth. v2.0.0 ships exactly one adapter implementation (obsidian-fs); v3.0.0 adds notion-api without touching the layers above the seam.

+-----------------------------------------------------------------------------+
|  L4   Compiled briefs + Task contracts                  (Phases 5, 6)      |
|       compile_brief . get_brief . instantiate_contract . staleness daemon  |
+-----------------------------------------------------------------------------+
|  L3   Assembly (bundles, outlines, dossiers, authority + staleness)        |
|       get_document_bundle . get_outline . search_sections .                |
|       assemble_dossier . authority + staleness signals  (Phases 3, 4)      |
+-----------------------------------------------------------------------------+
|  L2   Memory namespace + provenance                     (Phase 2)          |
|       record_observation . recall . supersede . MemoryContract             |
+-----------------------------------------------------------------------------+
|  L1   Graph as retrieval                                (Phase 4)          |
|       typed edges . expand . cluster . backlink walks                      |
+-----------------------------------------------------------------------------+
|  L0   Retrieval substrate (v1, behavior unchanged)                         |
|       hybrid search (semantic + BM25 + RRF + rerank) . chunker             |
+-----------------------------------------------------------------------------+
|  Adapter tier                                           (Phase 1)          |
|       SourceConnector . DeliveryAdapter . ChangeFeed . Registry            |
+-----------------------------------------------------------------------------+
|  Implementations                                                           |
|       obsidian-fs   (v2.0.0)         |   notion-api   (v3, Phase 10)       |
+-----------------------------------------------------------------------------+

The Adapter tier is the only horizontal seam in the stack. Every layer above it consumes canonical Document objects resolved through the registry; no upper layer holds a reference to a concrete adapter module. L0 keeps direct database access because it is substrate, not a consumer of Documents. See docs/v2/ARCHITECTURE.md for the full layer model, the adapter conformance suite, and the read/write data-flow diagrams.

What's new in v2

  • Phase 2 — Memory namespace + provenance. Three new tools (record_observation, recall, supersede); labeled MemorySink write guard; default folder sink at _memory/; superseded-doc handling. See docs/v2/MEMORY_CONTRACT.md.

  • Phase 3 — Assembly + authority/staleness. Four new tools (get_outline, search_sections, get_document_bundle, assemble_dossier); citation packets on every result; recency/authority rescore params on search_hybrid; superseded-doc filtering at SQL level. See docs/v2/PHASE-3-SIGN-OFF.md.

  • Phase 4 — Graph-as-retrieval. Two new tools (expand, cluster); typed edges table (wikilink, mention, frontmatter-ref, hyperlink); search_hybrid gains an additive expand param attaching the typed-edge neighborhood to each hit. See docs/v2/PHASE-4-SIGN-OFF.md.

  • Phase 5 — Compiled brief layer + staleness daemon. compile_brief, get_brief, and list_briefs; per-brief source_hashes map; daemon marks briefs stale when any source's hash drifts. See docs/v2/PHASE-5-SIGN-OFF.md.

  • Phase 6 — Task contract DSL + reference contracts. Declarative YAML contracts under _contracts/<name>.yaml; three new tools (describe_contract, instantiate_contract, register_contracts_as_tools); three reference contracts (meeting-prep, project-status, code-review-brief). See docs/v2/PHASE-6-SIGN-OFF.md.

  • Phase 7 — Obsidian plugin (default OFF). Variant-C visual contract editor, settings tab, secrets via OS keyring, manual reindex + stats panel, peer-MCP connectors. Adds 6 gated tools when enabled. See docs/v2/plugin/README.md.

  • Tool surface delta. 23 v1 tools become 32 canonical tools + 5 DEPRECATED entries in tools/list (the 5 promoted list-style tools remain callable through v2.x with a DEPRECATED notice in their description; removal scheduled for v3.0.0). The raw tools/list therefore returns 37 entries; canonical (non-deprecated) count = 32. Plugin OFF is the baseline; +6 gated tools when enabled.

  • Resources delta. 5 MCP Resources become 10 MCP Resources in v2.0.0 (vaults, models, recent, stats, backlinks added alongside the pre-existing memory/brief/contract resources).

Roadmap

Phase 9 — Pre-Phase-10 premise check (hard gate). Before any v3 code is written, a dedicated phase verifies that the architectural premise for the v3 multi-source line still holds: all Phase 1 CI greps (no chokidar, no gray-matter, no raw paths, no Claude leak, no obsidian:// literal outside adapters) return zero hits on main; an adversarial-review sub-agent confirms ADRs 001-004 remain unviolated by code shipped in Phases 2-8; the stub-adapter conformance suite is green; capability-descriptor test coverage meets the plugin-architecture threshold; the maintainer signs off explicitly. Without that sign-off, no v3 code is written.

v3.0.0 — Notion connector + multi-source proof. Ship the first non-Obsidian source/delivery/change-feed adapter (Notion), promoting the adapter seams from "interfaces with one implementation" to a real plugin architecture. Resolve the 14 open ADRs (005-01x) covering identity stability, link resolution, property equivalence, granularity, write semantics, auth, watch, rate limits, embedding strategy, cross-source memory, caching, sync, Notion sinks, and capability discovery. Tracked requirements: NOT-01 through NOT-07; DMN-01 through DMN-03 (MCP daemon mode, v2.1.x or v3); TPC-01 through TPC-03 (third-party connectors, post-v3). Status: deferred — gated by Phase 9 sign-off.

Beyond v3 (ideas, not commitments). A v3.x postgres-fs storage adapter is sketched in the roadmap for users whose vaults outgrow local SQLite, with explicit non-goals: still single-user-runtime, not a managed service, not pgvector evangelism. A v4.0.0 multi-user direction is anticipated in the roadmap so v2's opaque DocIds, adapter seams, content-stable ChunkIds, and provenance-on-every- agent-write read as deliberate choices in service of that path. Neither is committed work. See .planning/ROADMAP.md for the full phase plan and the v3/v4 deferred sections.

Install and docs

Ask your agent to "install vault-memory" (or run /vmem:install). The installer asks two questions — which retrieval engine, and which vault(s) — then installs every missing dependency for the chosen path, registers the vault(s), builds the index, and wires the MCP server. See docs/v2/CONTEXTFIT-BACKEND.md for the engine comparison.

Choose a retrieval engine

vault-memory supports two engines, selectable per vault:

  • Ollama (vector / embeddings) — best semantic search; needs Ollama + an embedding model resident (GPU recommended).

  • ContextFit (CPU-only) — token-native BM25 + Semantic-IDs; no GPU, no model, ~41 MB deps. Ideal for resource-limited / non-GPU hosts (e.g. a Synology NAS). Requires the contextfit CLI (pipx install contextfit).

Prerequisites

  • Node.js 22–25 (>=22 <26) — runtime for the MCP server (brew install node@22). Node 26+ is not yet supported: the native better-sqlite3 dependency has no prebuild for the new ABI and building from source currently fails.

  • One or more Obsidian vaults; an MCP-aware client.

  • Ollama engine only: Ollama on localhost:11434 (brew install ollama && brew services start ollama) + the bge-m3 model (~1.1 GB, ollama pull bge-m3). Optional ONNX reranker (bge-reranker-v2-m3, ~570 MB) via bash scripts/download-reranker.sh.

  • ContextFit engine only: Python 3.10+ and pipx install contextfit.

Tested on macOS. Linux should work; Windows untested.

Manual install

npm install -g @owrede/vault-memory

# Ollama (default) vault:
vault-memory add-vault "/path/to/your/obsidian/vault"

# OR a CPU-only ContextFit vault (no Ollama/GPU):
vault-memory add-vault "/path/to/your/obsidian/vault" --backend contextfit

vault-memory serve

The add-vault command appends a [[vaults]] block to ~/.vault-memory/config.toml, writes a .mcp.json into the vault root, and runs the initial index. Idempotent — re-running on a known path fills in whatever is missing. Flags: --name <slug>, --backend ollama|contextfit, --write (enable MCP writes; default read-only), --no-index (skip the initial index).

Documentation

SemVer-locked tool API per the v1.0.0 declaration. v2.0.0 is additive: the 23 v1 tool names + input schemas are preserved byte-identical, and the 5 list-style tools promoted to MCP Resources remain callable through v2.x with a DEPRECATED notice in their tool description (removal scheduled for v3.0.0). See CHANGELOG.md for full history.

License

MIT.

Available Tools

37 tools
assemble_dossierA

Resolve a {type, key} pair to an anchor document and walk its backlinks into a structured dossier: { anchor (citation packet), linked_documents (citation packets + relation), property_rollups (linked_count, linked_types, status_distribution) }. Strict properties.type match (D-03). The key matches the candidate's title OR any entry in properties.aliases (D-04). v2.0.0 returns relation:"wikilink" on every linked_documents entry (the v1 wikilinks table is the only edge source); Phase 4 (GRA-04) widens to typed edges. Superseded backlinks are NOT filtered — dossiers show the whole picture (CONTEXT D-04).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesCandidate key — matches the document's title OR any entry in properties.aliases (D-04)
typeYesExact-match value for properties.type on the anchor document (D-03 — no fuzzy match)
vaultsNoRestrict to these vault names; defaults to all configured

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations, the description fully carries behavioral disclosure. It details strict property type matching, key matching to title or aliases, v2.0.0 return format (wikilink relation), and that superseded backlinks are not filtered. It also mentions future Phase 4 changes.

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

Conciseness4/5

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

The description is a single dense paragraph but front-loads the core purpose. It includes version and future-phase details which, while informative, slightly reduce conciseness. Overall efficient.

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

Completeness5/5

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

Given no output schema, the description thoroughly explains the return structure (anchor, linked_documents, property_rollups) and notes the wikilink relation in v2. It covers complex behavior comprehensively.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema by explaining matching rules (D-03, D-04) and default behavior for vaults. This context aids correct parameter usage.

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

Purpose5/5

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

The description clearly states the tool's purpose: resolving a {type, key} pair to an anchor document and walking backlinks into a structured dossier with specific fields (anchor, linked_documents, property_rollups). It includes strict matching rules and version details, distinguishing it from simple backlink tools like list_backlinks.

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

Usage Guidelines2/5

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

The description does not explicitly guide when to use this tool versus siblings such as list_backlinks or compile_brief. It implies usage for comprehensive dossier generation but lacks exclusions or alternative comparisons.

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

audit_logA

Query the write audit trail for a vault. Filterable by note path, operation type, or time. Default limit 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
opNo
limitNo
sinceNo
vaultYes
note_pathNo
is_memory_sink_writeNo

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must disclose behavior. It indicates a read operation ('Query') and a default limit, but omits details like ordering, pagination, error handling, or whether the call is safe. Adequate but minimal.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, every word contributes. No fluff.

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

Completeness2/5

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

With 6 parameters, no output schema, and no annotations, the description is too brief. It lacks details on return values, pagination, filtering behavior, and the is_memory_sink_write parameter. Incomplete for reliable tool selection.

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

Parameters3/5

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

Schema description coverage is 0%, so the description needs to explain parameters. It covers note_path, op, and limit (via default), but misses vault, since, and is_memory_sink_write. Partial but adds value beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Query' and the resource 'the write audit trail for a vault', specifying a distinct purpose among siblings with no overlap.

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

Usage Guidelines3/5

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

Provides implicit usage hints through filterable fields (note path, operation type, time) and default limit, but lacks explicit when-to-use or when-not-to-use guidance versus sibling tools.

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

clusterA

Community detection over the typed-edge graph via Louvain modularity (Blondel et al. 2008) using graphology + graphology-communities-louvain. Deterministic: same input produces byte-identical cluster_id assignment via DocId-sorted node insertion + seeded RNG (vault-memory-cluster-v1). cluster_id = smallest member DocId per community. Hard-capped at 5000 nodes; pass force: true to override. Either query (composes search_hybrid + expand 1-hop) OR seed_doc_ids (uses provided seeds + induced 1-hop neighborhood); not both — passing both returns {ok:false, reason:'both_seeds_and_query'}. On the query path with multiple vaults configured, the vault field is required so search scope is deterministic; single-vault setups may omit it (returns {ok:false, reason:'vault_required'} otherwise). Returns per-cluster {cluster_id, size, members[], summary: {top_types, top_titles, edge_density}}. No LLM enrichment — summary fields are pure-deterministic computations (LLM enrichment is Phase 5 brief layer's job). _memory opacity inherited from expand() (Plan 04-03).

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
queryNo
vaultNo
methodYes
query_top_kNo
seed_doc_idsNo

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses deterministic output, node cap, force override, mutual exclusion of parameters, vault requirement, and that no LLM enrichment is performed. This is comprehensive.

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

Conciseness4/5

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

The description is thorough but each sentence adds value. Slightly longer than necessary, but well-organized and front-loaded with key behavior. Could be structured into clearer sections for parameters.

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

Completeness5/5

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

Given no output schema, the description fully explains return value structure (cluster_id, size, members, summary fields) and the deterministic nature. It also addresses memory opacity inheritance from expand. The tool's role is complete.

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

Parameters5/5

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

Schema has 0% description coverage, but the description explains each parameter in detail: query path, seed_doc_ids path, vault, method (const), query_top_k (default/max), force (default). It adds operational semantics beyond the schema.

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

Purpose5/5

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

The description clearly states it performs community detection via Louvain modularity, with deterministic behavior and specific cluster_id assignment. It distinguishes itself from siblings (like expand, search) by focusing on clustering.

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

Usage Guidelines4/5

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

The description explicitly explains when to use query vs seed_doc_ids, the mutually exclusive constraint, vault requirement in multi-vault setups, and force override for node cap. It does not explicitly name alternatives but provides clear usage context.

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

compile_briefA

Compile a brief from caller-supplied source documents and write it to the briefs sink. Resolves the LLM via the D-10 capability-first ladder (MCP Sampling → local Ollama → caller prepared_text → structured error). Enforces D-11 wikilink emission per source (appends a ## Sources footer when the LLM omits them) and writes through DeliveryAdapter. On target collision, auto-supersedes the prior brief via the Phase 2 supersede chain (D-12).

ParametersJSON Schema
NameRequiredDescriptionDefault
sinkNoOverride the default `_memory/_briefs` sink
vaultYesVault name (registered in [vaults] config block)
targetYesStable cross-version handle for the brief (e.g. 'atlas-q3')
purposeYesFree-form purpose; bounded so list_briefs stays scannable
max_tokensNoHint for the LLM ladder; default 2000
prepared_textNoD-10 tier 3 fallback when no LLM is reachable — verbatim body to stitch in
source_doc_idsYesDocIds the brief is compiled from; deduped, capped at 50 (D-03)

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals several key behaviors: LLM resolution via a defined ladder, automatic wikilink enforcement with a footer, writing through DeliveryAdapter, and auto-superseding on target collisions. This goes beyond a simple 'compile brief' statement and helps the agent anticipate internal processing.

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

Conciseness5/5

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

The description is concise at three sentences. The first sentence clearly states the core action, and subsequent sentences add critical behavioral details without redundancy. Every sentence is informative and earns its place.

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

Completeness3/5

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

Given the tool's complexity (7 parameters, no output schema), the description covers key behaviors like LLM resolution and supersede but fails to mention what the agent should expect as an output or return value. It also doesn't explain error conditions or when to use optional parameters like prepared_text or sink. With 100% parameter schema coverage, some gaps are mitigated, but overall completeness is adequate but not thorough.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add extra parameter-specific meaning beyond what the input schema already provides; it mentions source documents and LLM resolution but doesn't elaborate on individual parameters like vault, target, or purpose.

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

Purpose5/5

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

The description clearly states the tool's purpose: compiling a brief from caller-supplied source documents and writing it to a sink. It uses specific verbs ('compile', 'writes') and resource ('brief'), and includes unique behaviors like LLM resolution and wikilink enforcement that distinguish it from siblings like write_note or assemble_dossier.

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

Usage Guidelines2/5

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

The description does not explicitly state when to use this tool over alternatives like assemble_dossier or write_note. It describes internal mechanisms (LLM ladder, supersede) but lacks guidance on use cases or conditions. No exclusions or prerequisites are mentioned.

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

delete_noteB

Delete a note. Requires write_enabled=true AND expected_hash (no blind deletes).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
vaultYes
client_idNo
expected_hashYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full transparency burden. It indicates that deletion requires a hash to prevent blind deletes, but fails to state that deletion is irreversible, what happens to associated links or indices, or any error conditions. For a destructive tool, this is insufficient.

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

Conciseness5/5

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

The description uses only two sentences, with the primary action front-loaded. Every word serves a purpose: stating the action and key requirement. No redundancy or filler.

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

Completeness2/5

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

Given 4 parameters, no output schema, and 37 siblings, the description is too sparse. It lacks details on return values, error handling, post-deletion effects (e.g., index updates), and prerequisites beyond the hash. A delete operation warrants more complete context.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only adds meaning for 'expected_hash' by linking it to 'no blind deletes', but fails to explain 'vault', 'path', or 'client_id'. Parameters like 'client_id' are completely undocumented, leaving the agent without guidance.

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

Purpose5/5

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

The description clearly states 'Delete a note' as the action, specifying verb and resource. Among siblings like write_note and update_frontmatter, it uniquely identifies the delete operation. The added requirement detail ('Requires write_enabled=true AND expected_hash') further clarifies the tool's purpose.

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

Usage Guidelines3/5

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

The description mentions prerequisites (write_enabled=true and expected_hash) but does not explicitly guide when to use this tool versus alternatives like write_note or vacuum_embeddings. The context is implied through the 'no blind deletes' safety note, but lacks direct comparison to siblings.

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

describe_contractA

Return the input JSON Schema + an auto-generated markdown summary for a contract (Q-DESCRIBE). Pure function — does not execute the contract. Summary lists Inputs / Sources / Sinks / Assembly (numbered) / write_back / Output Shape. Omit vault on single-vault setups; on multi-vault setups, pass vault to disambiguate (returns {ok:false, reason:'ambiguous_vault'} otherwise).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRegistered contract name (see register_contracts_as_tools)
vaultNoVault name; omit on single-vault setups

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses the tool is a pure function, lists the contents of the summary, and specifies error behavior for ambiguous vault. It does not mention error handling for nonexistent contracts, but coverage is good.

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

Conciseness5/5

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

The description is a single paragraph with clear structure: purpose first, then output details, then parameter guideline. Every sentence adds value with no redundancy.

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

Completeness5/5

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

With only two parameters, no output schema, and no annotations, the description covers purpose, detailed output, usage conditions, and error cases. It is sufficiently complete for a read-only description tool.

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

Parameters5/5

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

Schema description coverage is 100%, but the description adds meaningful context: 'name' is a registered contract (with reference to registration tool) and 'vault' usage rules. This goes beyond the schema fields.

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

Purpose5/5

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

The description clearly states it returns the input JSON Schema and an auto-generated markdown summary for a contract, emphasizing it is a pure function that does not execute the contract. This distinguishes it from sibling tools like instantiate_contract.

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

Usage Guidelines4/5

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

Provides explicit guidance on when to include or omit the 'vault' parameter based on single vs multi-vault setups, and describes the error case for ambiguous vault. However, it does not explicitly contrast with alternative tools (e.g., get_brief).

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

expandA

Typed-edge BFS retrieval. Returns the typed-edge neighborhood of one or more seed documents as a flat array of citation packets, each carrying via: {seed_doc_id, hop, edge_type, direction} provenance. Hops hard-capped at 2 (v2.0.0). Default direction = 'both'. Filterable by edge_type and by document properties (strict equality, no operators). Memory-sink documents (_memory/...) surface only when they are already linked from a user note in the result set (per ADR-004 memory-namespace opacity rule). Frontmatter-ref edges are extracted heuristically: [[...]] syntax in any property value OR allowlisted property names (assignee, owner, project, related, parent, child, attendees, superseded_by) matched against note_aliases. include_superseded defaults to false (Phase 2 D-03 forward-only supersede). Unknown seed_doc_ids do not throw — they are returned in a warnings: [{seed_doc_id, reason: 'unknown_doc'}] array. Shortest path wins on dedup; ties broken by (seed_doc_id, edge_type, direction).

ParametersJSON Schema
NameRequiredDescriptionDefault
hopsYesHop cap (1 or 2). v2.0.0 hard-caps at 2.
directionNoEdge traversal direction; default 'both'.both
edge_typesNoOptional filter on edge types; default = all four types.
seed_doc_idsYes1+ opaque DocIds (e.g. obsidian-fs://<vault>/<path>) — seeds of the BFS.
filter_propertiesNoStrict-equality predicate on document properties (e.g. {type: 'Project'}).
include_supersededNoWhen false (default), docs whose properties.status === 'superseded' are dropped.

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations, the description carries full burden and provides extensive behavioral details: hop cap, default direction, filter capabilities, memory-namespace opacity, frontmatter-ref heuristics, superseded handling, error behavior, and dedup rules. This goes well beyond basic mechanism.

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

Conciseness5/5

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

Every sentence provides unique, essential information. The description is dense but not verbose, front-loaded with the main purpose, and efficiently covers all critical aspects without repetition.

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

Completeness5/5

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

Given the tool's complexity (6 parameters, no output schema), the description is remarkably complete. It explains the return format, provenance metadata, error handling, filtering, and edge cases, enabling an agent to use the tool effectively.

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

Parameters4/5

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

Schema coverage is 100% (all 6 parameters described), so baseline is 3. The description adds value by providing context such as version constraints on hops, behavior for unknown seed_doc_ids, and dedup strategy, which are not in the parameter descriptions.

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

Purpose4/5

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

The description clearly states it is a 'Typed-edge BFS retrieval' that returns the typed-edge neighborhood of seed documents. This gives a specific verb and resource, but it does not explicitly distinguish itself from sibling tools like list_forward_links or list_backlinks.

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

Usage Guidelines3/5

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

The description implies usage (for traversing typed edges with hop limit and filtering), but it does not provide explicit when-to-use or when-not-to-use guidance relative to alternatives. Agents must infer applicability from the feature list.

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

fetchB

OB1-compatible fetch adapter. Resolves an opaque id (from search) to {id, title, text, url, metadata}. Backed by read_note.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the output shape and mentions it is backed by read_note, implying a read operation. However, it does not discuss error conditions, authorization needs, or rate limits.

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

Conciseness4/5

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

The description is two sentences, front-loading the key action and output. The term 'OB1-compatible fetch adapter' is jargon but not overly verbose.

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

Completeness3/5

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

Given no output schema and no annotations, the description provides a basic output shape but lacks details on error handling, behavior when id is invalid, and differentiation from closely related siblings like read_note.

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

Parameters4/5

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

The schema has 0% description coverage for the single id parameter. The description adds meaning by explaining it is an 'opaque id (from `search`)', which clarifies the expected source and nature of the id.

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

Purpose4/5

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

The description clearly states it resolves an opaque id to a structured object, and mentions it is backed by read_note. However, it does not explicitly distinguish it from sibling tools like read_note, which might have similar functionality.

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

Usage Guidelines2/5

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

The description implies it should be used after search ('from `search`'), but provides no explicit guidance on when to use it versus alternatives, nor when not to use it.

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

get_briefA

Look up a brief by target slug. D-13 decision tree: staleness dominates; age is independent; follow the supersede chain to the terminal brief. Returns null when the caller MUST recompile (stale + !allow_stale OR too_old + !allow_stale).

ParametersJSON Schema
NameRequiredDescriptionDefault
vaultYesVault name (registered in [vaults] config block)
targetYesStable cross-version handle for the brief
allow_staleNoWhen true, return briefs flagged stale or too_old with annotation rather than null
max_age_daysNoReject briefs older than this many days unless allow_stale=true

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the decision tree logic (staleness dominates, age independent, supersede chain), and explains null return conditions. This is transparent for a lookup tool, though it omits permission or error behaviors.

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

Conciseness4/5

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

The description is two sentences: first sentence states the core purpose, second sentence details the decision logic. It is concise but dense; the phrase 'D-13 decision tree' may be jargon but adds context. No wasted words.

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

Completeness4/5

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

For a lookup tool with no output schema, the description explains the key return behavior (null vs. brief) and the conditions. It covers the main aspects needed to use the tool effectively, though it does not describe the brief structure or error cases.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining how 'max_age_days' and 'allow_stale' interact, and referencing the 'target slug' concept. This enriches understanding of parameter behavior.

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

Purpose4/5

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

The description clearly states 'Look up a brief by target slug' which is a specific verb and resource. However, it does not explicitly differentiate from sibling tools like get_document_bundle or read_note, which share similar lookup semantics.

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

Usage Guidelines4/5

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

The description provides a decision tree (D-13) explaining when the tool returns null, implying usage for scenarios where staleness or age matters. It hints at when to recompile but does not explicitly state when to use this versus alternatives like compile_brief or supersede.

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

get_document_bundleA

Document-tree retrieval. Returns a structured bundle for a single document: { anchor (citation packet + optional status/superseded_by), outline (section tree via buildOutlineTree — same shape as get_outline.root), backlinks (citation packets + property_snippet + relation:"wikilink"), forward_links (same shape; broken links omitted), recent_edits (≤10 most recent audit_log rows mapped to {at, op, client_id, is_memory_sink_write?}) }. Every citation packet is the full 8-field D-01 shape from src/memory/citation-packet.ts. v2.0.0 accepts only depth:1 (one-hop links); the field is zod-pinned to z.literal(1) for forward compatibility. recent_edits is keyed by the anchor's CURRENT note path — pre-rename history is preserved in audit_log but not surfaced here (Phase 4 widens). Unknown doc_id returns { isError: true, error: "doc_not_found", doc_id }.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoLink-walk depth. v2.0.0: only 1 (one-hop). Phase 4 may widen.
doc_idYesOpaque DocId (obsidian-fs://<vault>/<path>) of the anchor document
vaultsNoOptional vault filter; usually omitted (the DocId names a vault)

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: depth pinned to 1, broken links omitted, recent_edits limited to 10, error shape, and version constraints. This is comprehensive and transparent.

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

Conciseness4/5

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

The description is a single paragraph but well-structured, starting with the main purpose. It includes necessary details like version, error handling, and shape of fields. Slightly dense but earns its length.

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

Completeness5/5

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

Given no output schema, the description fully specifies return shapes (anchor, outline, backlinks, forward_links, recent_edits), error handling, constraints, and versioning. It is complete 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.

Parameters4/5

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

Schema descriptions cover parameters, but the description adds context: explains the depth constraint (zod-pinned to 1 for forward compatibility) and the optional nature of vaults. This adds value beyond the schema.

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

Purpose5/5

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

The description clearly states 'Document-tree retrieval' and details the bundled output (anchor, outline, backlinks, forward_links, recent_edits). It distinguishes from sibling tools like get_outline, list_backlinks, list_forward_links by being a composite result.

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

Usage Guidelines3/5

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

Usage context is implied but not explicit. No guidance on when to use this tool vs. alternatives, nor any exclusions. The description mentions error handling for unknown doc_id but not when to prefer this over single-purpose tools.

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

get_outlineA

Return the navigable section tree for a document. Each OutlineNode carries an anchor (the section's citation token), heading_path (root → leaf), heading_text, level, and chunk_ids (v1 chunk-table IDs in that section). Consume anchor + heading_path as the section-level half of the citation packet. Unknown doc_id returns an error response with {error:'doc_not_found', doc_id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYesOpaque DocId (obsidian-fs://<vault>/<path>) of the document
vaultsNoOptional vault filter; usually omitted (the DocId names a vault)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description fully bears the burden of disclosure. It explains input format, output structure (OutlineNode fields), and error response format. It also hints at usage in citation packets, adding valuable context beyond a simple data return.

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

Conciseness5/5

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

The description is concise, with the main purpose in the first sentence followed by structured details about output fields. Every sentence adds value, and the format is easy to parse.

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

Completeness5/5

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

Given no output schema, the description adequately covers the return type (OutlineNode fields) and error case. It provides sufficient information for correct usage, including error handling and citation context.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for both parameters. The description enriches understanding by explaining how parameters relate to the output (e.g., anchor, heading_path). This goes beyond the schema's minimal descriptions.

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

Purpose5/5

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

The description clearly states the tool returns a 'navigable section tree for a document,' specifying the verb and resource. It details the fields of OutlineNode and mentions error handling, making it distinct from sibling tools like search_sections.

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

Usage Guidelines2/5

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

Description lacks explicit guidance on when to use this tool versus alternatives. It mentions error behavior for unknown doc_id but provides no context about trade-offs or preferred use cases relative to sibling tools.

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

index_runsC

List recent index runs for a vault — what was scanned, when, how long, errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
vaultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description should fully disclose behavioral aspects. It mentions 'recent' but does not define recency or ordering. It does not state whether the operation is read-only, if it requires specific permissions, or if it has any 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.

Conciseness3/5

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

The description is a single sentence, which is concise, but it lacks essential details that would justify its brevity. It is not overly verbose, but it could be improved by adding parameter explanations or usage context.

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

Completeness2/5

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

Given the tool has two parameters and no output schema, the description is insufficiently complete. It does not explain the vault parameter, the meaning of 'recent', or the format of the return value. It leaves significant gaps for the agent to infer.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain the parameters. 'vault' is required but not described, and 'limit' has a default and maximum but no explanation of its purpose or effect.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'recent index runs for a vault', and specifies the information returned ('what was scanned, when, how long, errors'). It distinguishes itself from sibling tools by focusing on indexing runs, which is a specific and distinct function.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites, nor does it differentiate from sibling tools like 'start_shadow_index' or 'vault_stats'.

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

instantiate_contractA

Execute a registered contract end-to-end. Zod-validates inputs against the contract's inputZodSchema (additionalProperties:false rejects typos). Resolves source/sink overrides per D-A4b default chain (explicit → config → contract literal → error if required); sinks are MemorySink-only per D-A4c (MEM-05 invariant un-bypassable). Runs each assembly step through verbDispatcher with template resolution + named-binding accumulation. write_back routes through DeliveryAdapter.write() (MEM-05 chokepoint). Returns the Q-OUTPUT bundle {steps, write_back} on success OR a structured InstantiateError envelope (12 sealed reasons per ADR-006 §Decision 7). Omit vault on single-vault setups; multi-vault setups require it (returns ambiguous_vault otherwise).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRegistered contract name
vaultNoVault name; omit on single-vault setups
inputsNoContract inputs; validated against the contract's inputZodSchema
sink_overridesNoOverride declared sink handles by handle name. Targets MUST resolve through MemorySinkRegistry (D-A4c).
source_overridesNoOverride declared source handles by handle name

TDQS

A4.3/5.0
Behavior5/5

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

Discloses Zod validation with additionalProperties false, source/sink override chain, MemorySink-only constraint, assembly steps, write_back routing, and structured error envelope with 12 sealed reasons. With no annotations, the description carries full burden and delivers extensively.

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

Conciseness4/5

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

Dense with information, each sentence adds value. Front-loaded with main purpose. Slightly verbose but necessary given complexity; no fluff.

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

Completeness4/5

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

Covers input validation, overrides, execution flow, and error handling. Returns bundle structure explained. Lacks example of error envelope but sufficient for an execute tool without output schema.

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

Parameters4/5

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

Adds meaning beyond schema: explains validation behavior, override resolution chain, and vault conditions. Schema coverage is 100%, but description enriches understanding of each parameter's role and constraints.

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

Purpose5/5

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

Clearly states 'Execute a registered contract end-to-end,' specifying the verb and resource. Distinguishes from siblings like describe_contract or register_contracts_as_tools.

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

Usage Guidelines3/5

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

Provides context for vault parameter (omit in single-vault, required in multi-vault) but does not explicitly state when to use this tool over alternatives. Implied usage from the execution nature.

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

list_modelsA

List all embedding models registered for a vault, with dim, active flag, and how many chunks have been embedded under each. Use before start_shadow_index / switch_active_model. DEPRECATED since v2.0.0 — prefer MCP Resource vault-memory://models/{vault} for agent discovery. The tool remains callable through v2.x; removal scheduled for v3.0.0.

ParametersJSON Schema
NameRequiredDescriptionDefault
vaultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: lists models with dim, active flag, and chunk counts. It also transparently states deprecation status, that it remains callable through v2.x, and scheduled removal in v3.0.0. No contradictions.

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

Conciseness5/5

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

The description is three sentences, each earning its place: purpose/fields, usage context, deprecation info. Front-loaded with key action and output. No filler or repetition.

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

Completeness5/5

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

For a simple list tool, the description covers return values (dim, active flag, chunk count), usage context, deprecation, and alternative. No output schema exists, so the description adequately describes what the agent can expect. Complete for the tool's complexity.

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

Parameters3/5

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

The only parameter 'vault' has 0% schema description coverage. The description mentions 'for a vault' but does not elaborate on the parameter's format, allowed values, or semantics. It adds minimal value beyond the schema, only implying the vault identifier context. Baseline of 3 for low coverage with limited compensation.

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

Purpose5/5

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

The description clearly states 'List all embedding models registered for a vault, with dim, active flag, and how many chunks have been embedded under each.' It specifies the verb (list), resource (embedding models), scope (for a vault), and output fields. It distinguishes from siblings by mentioning its use before start_shadow_index/switch_active_model.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool: 'Use before start_shadow_index / switch_active_model.' It also provides an alternative for the deprecated function: 'prefer MCP Resource `vault-memory://models/{vault}`.' This gives clear context and guidance.

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

list_vaultsA

List configured vaults with their status (note count, last indexed run). DEPRECATED since v2.0.0 — prefer MCP Resource vault-memory://vaults for agent discovery. The tool remains callable through v2.x; removal scheduled for v3.0.0.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description fully bears the burden of disclosure. It reveals the tool lists vaults with status, and states deprecation status and future removal. However, it does not explicitly mention whether the operation is read-only or safe, or if any authentication is needed.

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

Conciseness5/5

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

Two sentences: the first sentence states purpose and output, the second adds deprecation context. Every word earns its place, and the description is front-loaded with the core functionality.

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

Completeness4/5

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

Given no parameters and no output schema, the description adequately explains what the tool returns (vaults with status including note count and last indexed run). Deprecation information adds useful lifecycle context. Could mention scope (e.g., all vaults accessible to the user) but is sufficient.

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

Parameters4/5

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

The tool has zero parameters and schema coverage is 100%, so no parameter documentation is needed. The description does not add parameter info, but the baseline score for a no-parameter tool is 4.

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

Purpose5/5

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

The description clearly states the tool lists vaults with status details (note count, last indexed run), distinguishing it from sibling list tools by specifying the resource 'vaults' and the output fields. The action verb 'List' is specific and unambiguous.

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

Usage Guidelines5/5

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

Explicitly marks the tool as DEPRECATED and directs agents to use the MCP Resource 'vault-memory://vaults' instead. It also clarifies the tool remains callable through v2.x and removal is scheduled for v3.0.0, providing clear when-to-use and when-not-to-use guidance.

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

query_frontmatterB

Filter notes by their YAML frontmatter. Supports equality, $in, $exists, $contains predicates. Multiple keys are AND-combined.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
vaultYes
whereYes

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description must disclose behavior. It mentions supported predicates and AND logic, which are behavioral traits. However, it does not state whether the tool is read-only (safe), any side effects, performance implications, or the format of the result. This 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.

Conciseness4/5

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

The description is two sentences, efficiently covering purpose and key usage details without fluff. It is front-loaded with the main action and adds necessary details. No wasted words.

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

Completeness2/5

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

Given the complexity of the 'where' parameter (nested objects, multiple predicate types), the lack of an output schema, and no annotations, the description is insufficient. It does not explain the return value, constraints on frontmatter field names, or provide examples. The tool has 3 parameters but only partial description of one.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate. It mentions predicates (relating to 'where') but does not describe the 'vault' or 'limit' parameters. The vault parameter's purpose is implied but not explicit, and limit's meaning is clear from schema but not reinforced.

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

Purpose4/5

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

The description clearly states the action ('Filter notes by their YAML frontmatter') and specifies supported predicates and combination logic. This distinguishes it from sibling tools like read_note or search, but it doesn't clarify the output format (e.g., returns note paths or IDs).

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

Usage Guidelines3/5

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

The description explains how to use the predicates and that multiple keys are AND-combined, which gives usage hints. However, it does not explicitly state when to use this tool versus alternatives (e.g., search tools for full-text search, read_note for reading content). No exclusions or alternatives are mentioned.

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

read_noteB

Read the full content + frontmatter of a note by its vault-relative path.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
vaultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It implies a non-destructive read operation but does not disclose error behavior, permissions needed, or side effects like logging. Basic transparency but incomplete.

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

Conciseness5/5

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

A single, concise sentence that immediately conveys the action and resource. No wasted words, front-loaded with the verb.

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

Completeness2/5

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

Given the complexity (2 parameters, no output schema), the description omits usage guidelines, parameter details, return value format, and differentiation from many similar read tools. It feels incomplete for effective use.

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

Parameters2/5

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

Schema coverage is 0%, so description must compensate. It mentions 'vault-relative path' but does not explain what 'vault' and 'path' mean in detail, format, or allowed values. Adds minimal semantics beyond the schema's type strings.

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

Purpose5/5

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

The description clearly states the verb 'Read', the resource 'full content + frontmatter of a note', and the identifier 'by its vault-relative path'. It effectively distinguishes from siblings like write_note or delete_note.

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

Usage Guidelines2/5

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

No guidance provided on when to use this tool versus the 36 sibling tools (e.g., get_brief, recall). The description lacks any when-to-use or when-not-to-use instructions.

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

recallA

Retrieve memory documents from one or more labeled MemorySinks, filtered by provenance (min_confidence, types, max_age_days) and ranked by recency (observed_at DESC). Returns citation packets (doc_id, source_handle, title, heading_path, mtime, hash, display_url, properties) — the same 8-field shape Phase 3 assembly tools use. Superseded documents are hidden by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinkNoMemory sink name OR full obsidian-fs://… handle. Defaults to all configured sinks.
limitNoMaximum results AFTER filter+sort; default 20
queryYesNatural-language query; routes through hybrid (semantic + BM25) search
typesNoRestrict to docs whose `type` property is in this set
vaultsNoRestrict to these vault names; defaults to all configured
max_age_daysNoExclude docs whose `observed_at` is older than this many days
min_confidenceNoExclude docs whose confidence ordinal is lower than this (direct=3, inferred=2, uncertain=1)

TDQS

A4.2/5.0
Behavior4/5

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

No annotations exist, so the description carries the full burden. It discloses the return shape (8 fields), default hiding of superseded documents, filtering parameters, and ranking by recency. However, it omits details like rate limits, authentication requirements, or error handling.

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

Conciseness5/5

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

Two sentences: the first covers purpose, filtering, and ranking; the second covers return format and default behavior. It is efficiently front-loaded with no wasted words.

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

Completeness4/5

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

For a tool with 7 parameters and no output schema, the description explains the return shape and default behavior. It lacks pagination details beyond the limit parameter and does not mention error handling or empty result behavior.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining ranking by recency (observed_at DESC) and the return shape (citation packets), which are not in the schema. This helps the agent understand the output structure.

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

Purpose5/5

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

The description clearly specifies the verb 'retrieve', the resource 'memory documents from MemorySinks', and details filtering and ranking. It distinguishes from sibling search tools by emphasizing MemorySinks and citation packets.

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

Usage Guidelines3/5

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

The description implies usage for retrieving memory documents but does not explicitly state when to use this tool versus alternatives like search_hybrid or search_text. No when-not-to-use guidance is provided.

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

recent_notesA

List recently modified notes (mtime DESC). Use for agent self-orientation: 'what has the user been working on lately?'. No vector search, just SQL. DEPRECATED since v2.0.0 — prefer MCP Resource vault-memory://recent/{vault} for agent discovery. The tool remains callable through v2.x; removal scheduled for v3.0.0.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceNo
vaultNo

TDQS

A4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses the tool is a simple SQL query, deprecation status, and removal timeline. Lacks details on error handling or rate limits, but sufficient for a read-only list operation.

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

Conciseness5/5

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

The description is three sentences, efficient and front-loaded with the core action. Every sentence adds useful information without redundancy.

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

Completeness3/5

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

The description covers purpose, usage context, and deprecation, but fails to document parameters (vault, limit, since) which are essential for correct invocation given zero schema descriptions. Output schema is absent, but not required for a list operation.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description does not explain any of the three parameters (vault, limit, since). The description adds no value beyond the schema for parameter understanding.

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

Purpose5/5

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

The description clearly states the tool lists recently modified notes with a specific sorting (mtime DESC). It distinguishes from other note tools by focusing on recency, and the deprecation notice provides additional clarity.

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

Usage Guidelines5/5

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

Explicitly gives a use case ('agent self-orientation'), contrasts with vector search, and provides a clear alternative (MCP Resource) along with a deprecation schedule.

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

record_observationA

Record a new memory observation under the labeled MemorySink for a vault. Required provenance properties (source, confidence, evidence, status, observed_at, type, superseded_by) are auto-filled from arguments; properties is an escape hatch for contract-allowed extras and overrides any sugar default (D-02 — caller-last merge). Writes route through DeliveryAdapter.write() and pass through the centralized provenance validator.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinkNoMemory sink name OR full obsidian-fs://… handle. Defaults to the vault's default sink.
typeYesObservation type per the sink contract (e.g. 'observation', 'hypothesis', 'decision')
claimYesShort natural-language statement of the observation (becomes title + body)
vaultYesVault name (registered in [vaults] config block)
evidenceYesDocIds or quoted source spans supporting the claim; empty array allowed
confidenceYesHow the agent arrived at this claim
propertiesNoEscape-hatch: contract-allowed extra properties; merged AFTER sugar args (caller wins)

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must carry full behavioral disclosure. It mentions that writes route through DeliveryAdapter.write() and pass through a centralized provenance validator. It also describes the auto-filling of provenance properties and caller-last merge for properties. However, it does not disclose idempotency, error handling, or whether the operation is synchronous or asynchronous. Some internal details are provided, but gaps remain.

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

Conciseness4/5

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

The description consists of two sentences. The first sentence clearly states the purpose. The second sentence provides important technical details about auto-fill and merging, but is dense and may be confusing. It is concise but could be better structured (e.g., bullet points for clarity). It remains functional without being overly verbose.

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

Completeness3/5

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

Given 7 parameters (5 required), a nested object, no output schema, and no annotations, the description covers purpose, auto-fill logic, routing, and provenance validation. However, it lacks information about return values (e.g., does it return the created observation or just a success status?) and does not mention persistence guarantees. Completeness is adequate but not thorough.

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

Parameters4/5

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

The schema covers all 7 parameters with descriptions, achieving 100% coverage (baseline 3). The description adds significant value by explaining that provenance properties (source, confidence, evidence, status, observed_at, type, superseded_by) are auto-filled from arguments, and that the `properties` parameter is an escape hatch with caller-last merge (D-02 rule). This clarifies the behavior beyond what the schema alone provides.

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

Purpose5/5

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

The description clearly states the action: 'Record a new memory observation under the labeled MemorySink for a vault.' It specifies the resource (memory observation) and the location (labeled MemorySink, vault). This distinguishes it from sibling tools like write_note (which writes a note) and recall (which retrieves memories).

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

Usage Guidelines3/5

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

The description explains how to use the properties escape hatch and that provenance properties are auto-filled, but it does not provide explicit guidance on when to use this tool versus alternatives (e.g., write_note). No exclusions or context for when not to use it are given. Usage is implied but not clearly delineated.

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

register_contracts_as_toolsA

Explicit-control escape valve (D-A1) — scans the per-vault contract registry and updates the dynamic MCP tool list (registers new contracts as vm_ tools, unregisters removed ones) regardless of the [contracts.auto_register_tools] config gate. Always callable. Returns a per-vault diff of {registered, unregistered}. Omit vault to apply to every configured vault.

ParametersJSON Schema
NameRequiredDescriptionDefault
vaultNoVault name; omit to apply to all vaults

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description fully explains behavior: scanning registry, updating tool list, returning a diff. It mentions 'explicit-control escape valve' which implies manual intervention. However, it does not disclose potential side effects like tool duplication or overhead.

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

Conciseness5/5

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

The description is a single sentence that immediately states the core purpose and behavior. It is front-loaded and contains no unnecessary words.

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

Completeness5/5

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

Despite having no output schema, the description specifies the return value (per-vault diff). It covers purpose, usage, parameter behavior, and side effects (config gate override). Given the simplicity of the tool, the description is fully adequate.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter description in the schema is clear. The tool description adds no extra semantics beyond what the schema provides, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool registers/unregisters contracts as dynamic MCP tools, including the vm_<name> naming pattern. It distinguishes itself as an 'escape valve' for explicit control, which differentiates it from sibling tools that handle other operations.

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

Usage Guidelines4/5

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

The description mentions 'Always callable' and explains when to use it ('regardless of the [contracts.auto_register_tools] config gate'). It also clarifies the optional vault parameter. However, it does not explicitly state when not to use it or suggest alternatives.

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

search_hybridA

Hybrid search: combines semantic (embedding) and BM25 (full-text) results via Reciprocal Rank Fusion. Best general-purpose query. Pass expand: {hops: 1} to auto-attach 1–2 hop typed-edge neighbors as expansions[] per hit (preserves ranking; runs after recency/authority rescore).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
rrf_kNo
top_kNo
expandNo
rerankNo
vaultsNo
exclude_pathsNo
half_life_daysNo
recency_weightNo
authority_weightNo
frontmatter_boostsNo
frontmatter_filterNo
include_supersededNo

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description discloses key behavioral traits beyond the schema: it explains the RRF fusion method, and details that expand runs after recency/authority rescore and preserves ranking. This gives useful insight into the tool's internal processing, though it doesn't cover return format or error behavior.

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

Conciseness5/5

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

The description is concise, front-loaded with the core purpose, and every sentence contributes value. The first sentence defines the tool in one line, and the second adds an optional behavior with a clear code example and caveat, with no filler.

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

Completeness2/5

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

The tool is complex (13 params, nested objects) with no output schema and no annotation support. The description covers the core mechanism and one optional feature, but leaves most parameters undocumented, making it difficult for an agent to fully utilize the tool without additional information.

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

Parameters1/5

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

The schema has zero description coverage for 13 parameters. The description only explains the expand parameter in detail and implicitly references the query. All other parameters (rrf_k, top_k, rerank, half_life_days, recency_weight, authority_weight, etc.) remain completely unexplained, failing to compensate for the schema's lack of semantic information.

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

Purpose5/5

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

The description clearly states the tool performs a hybrid search combining semantic and BM25 results via Reciprocal Rank Fusion, naming the specific resource and behavior. It distinguishes itself from sibling tools like search_text and search_semantic by calling it the 'best general-purpose query.'

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('Best general-purpose query') and gives a specific usage tip for the expand parameter. It does not explicitly name alternatives or exclusion criteria, but the guidance is practical and distinct.

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

search_sectionsA

Section-level retrieval. Composes the v1 hybrid (semantic + BM25 + RRF) pipeline with a chunk-to-section promotion step: runs hybrid with an inflated top_k = limit × 5, promotes each chunk hit to its enclosing section, dedupes by (note, section anchor), scores each section as the MAX of its constituent chunks, tie-breaks by chunk_id_first ASC, and returns the top limit sections. Each hit carries an 8-field citation packet (D-01) with a non-empty section heading_path PLUS the section anchor, score, contributing chunk_ids, and an optional snippet from the best-scoring chunk. Use when you want WHOLE-SECTION context, not a chunk window.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
vaultsNo
recency_weightNo
authority_weightNo
include_supersededNo

TDQS

A4/5.0
Behavior5/5

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

No annotations, but description fully discloses the hybrid pipeline, promotion, dedup, scoring, tie-breaking, and citation packet fields, offering thorough 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.

Conciseness3/5

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

Descriptions is verbose with algorithmic detail; front-loaded purpose but contains excess implementation details that could be streamlined.

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

Completeness3/5

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

Lacks output schema, but description covers return format. Missing error handling, permissions, rate limits, and parameter descriptions for completeness.

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

Parameters2/5

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

Schema coverage 0%; description only explains 'limit' indirectly (limit×5) but leaves other 5 parameters (query, vaults, recency_weight, authority_weight, include_superseded) undescribed.

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

Purpose5/5

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

Description clearly states 'section-level retrieval' and contrasts with chunk window context, distinguishing it from sibling search tools.

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

Usage Guidelines4/5

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

Ends with 'Use when you want WHOLE-SECTION context, not a chunk window', providing implicit guidance vs. chunk-based siblings, but lacks explicit when-not-to-use or alternative names.

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

search_semanticB

Semantic search via embedding cosine similarity. Searches all vaults by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo
vaultsNo
exclude_pathsNo

TDQS

B3.3/5.0
Behavior2/5

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 mentions the search method (cosine similarity) and default scope, but lacks details on performance, rate limits, or whether the vaults parameter overrides or filters.

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

Conciseness5/5

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

Two sentences, front-loaded with the core purpose. No extraneous words. Efficient.

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

Completeness2/5

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

With 4 parameters, no output schema, and no annotations, the description is insufficient. It doesn't describe return format, ranking, or parameter behaviors beyond vault defaulting.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. Only the 'vaults' parameter gets some context (default all vaults). No explanation for 'query', 'top_k', or 'exclude_paths'.

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

Purpose5/5

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

The description clearly states the tool performs semantic search using embedding cosine similarity, and it searches all vaults by default. This is specific and distinguishes it from sibling tools like search_text.

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

Usage Guidelines3/5

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

The description implies use for semantic search but does not explicitly state when to use this tool versus alternatives like search_text or search_hybrid. No explicit when-not-to-use guidance.

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

search_textB

Full-text BM25 search via SQLite FTS5. Best for exact-word and phrase matches.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo
vaultsNo
exclude_pathsNo

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose any behavioral traits such as side effects, authentication requirements, or read-only status. For a search tool, it is assumed read-only but not stated.

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

Conciseness4/5

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

The description is a single, front-loaded sentence that conveys core purpose and differentiating context. It is concise, though could benefit from a bit more structure without becoming verbose.

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

Completeness2/5

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

Given four parameters and no output schema, the description is incomplete. It omits parameter formats, return type details, and any conditions or limitations, making it insufficient for an agent to invoke correctly.

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

Parameters1/5

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

The description does not explain any of the four parameters (query, vaults, top_k, exclude_paths). With 0% schema description coverage, the description fails to add meaning beyond the schema field names.

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

Purpose5/5

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

The description clearly states it is a full-text BM25 search via SQLite FTS5, and specifies it is best for exact-word and phrase matches, effectively distinguishing it from sibling search tools like search_semantic or search_hybrid.

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

Usage Guidelines4/5

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

The description implicitly guides usage by stating 'Best for exact-word and phrase matches,' implying it is not suited for semantic or fuzzy searches. However, it lacks explicit when-not-to-use or alternative recommendations.

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

start_shadow_indexA

Backfill embeddings for a secondary (shadow) model over every chunk in the vault. The active model is untouched — search keeps working during the run. Idempotent (resumable). Run switch_active_model once complete to promote the shadow.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
vaultYes
batch_sizeNo

TDQS

A4/5.0
Behavior4/5

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

Without annotations, the description discloses key behaviors: idempotent/resumable, no disruption to active model or search. Does not detail monitoring or resource impact, but sufficient for an agent to understand safety.

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

Conciseness5/5

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

Three sentences, each adding value: main action, reassurance, and follow-up. No redundant information, front-loaded with the core verb and resource.

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

Completeness3/5

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

Describes key behaviors and follow-up, but lacks parameter details and output expectations. Given no output schema and sibling tools like index_runs, some gaps remain for a complete picture.

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

Parameters2/5

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

Schema coverage is 0% and description does not explain parameters (vault, model, batch_size). Names are somewhat intuitive, but no additional context is given, leaving ambiguity about format or allowed values.

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

Purpose5/5

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

The description clearly states the tool's purpose: to backfill embeddings for a shadow model over all chunks in a vault. It specifies 'shadow' and mentions 'active model is untouched', distinguishing it from other tools.

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

Usage Guidelines4/5

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

Provides clear context: active model remains unaffected, search works during run, and a follow-up action (switch_active_model) is suggested. Does not explicitly exclude alternatives but implicitly distinguishes via use case.

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

suggest_frontmatterA

Suggest frontmatter fields for a note based on folder-conventions, wikilink-neighborhood, and title/body content-heuristics. Returns {existing, suggestions, conflicts}. Two input modes: (1) existing note via {path}; (2) draft via {content, folder_hint, title}. At least one of path/content required. Suggestions sorted by confidence DESC; conflicts list disagreements between sources.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
titleNo
vaultYes
contentNo
folder_hintNo

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses the return structure ({existing, suggestions, conflicts}), the sorting of suggestions by confidence, and the meaning of conflicts. While no annotations are provided, the description provides sufficient behavioral insight for a suggestion tool without claiming any destructive actions.

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

Conciseness5/5

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

The description is concise, using only a few sentences to convey the tool's purpose, modes, return values, and sorting. It is front-loaded with the primary function and structured logically.

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

Completeness4/5

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

Given the absence of annotations and output schema, the description provides a good understanding of input modes and output structure. It could mention potential error states or the implicit read-only nature, but it is largely complete for an agent to use correctly.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by explaining that 'path' is for an existing note, while 'content', 'folder_hint', and 'title' are for a draft. It clarifies that at least one of path/content is required. The 'vault' parameter is not explained, but it is a common container parameter.

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

Purpose5/5

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

The description clearly states the tool's purpose: suggesting frontmatter fields for a note, using specific heuristics. It distinguishes itself from sibling tools like 'query_frontmatter' and 'update_frontmatter' by focusing on suggestion rather than querying or updating.

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

Usage Guidelines4/5

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

The description explicitly outlines two input modes (existing note vs. draft) and the required parameters for each. It states that at least one of path or content is required, providing clear usage context. However, it does not mention when to avoid this tool or suggest alternatives among siblings.

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

supersedeA

Mark an existing memory document as superseded by a replacement document. Forward-only — the replacement doc is NOT touched; back-links are derived by the Phase 4 graph layer at query time. Atomic single OCC update on the OLD doc; sets status="superseded", superseded_by, and superseded_reason.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYesDocId of the document being superseded
reasonYesWhy the old document is being retired; written to superseded_reason
replacement_doc_idYesDocId of the replacement document

TDQS

A4.4/5.0
Behavior4/5

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

No annotations exist, so the description carries full burden. It discloses atomic OCC update, status field changes, and forward-only behavior. It does not cover authentication, rate limits, or idempotency, but the key behavioral traits are well covered.

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

Conciseness5/5

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

Three informative sentences, front-loaded with main purpose. No wasted words; each sentence adds critical context.

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

Completeness3/5

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

The description lacks any mention of return values, which is a gap given no output schema. It explains the mutation but not what the agent should expect as a response. Otherwise, it is complete within its scope.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds meaning by explaining the effect: 'atomic single OCC update on the OLD doc; sets status="superseded", superseded_by, and superseded_reason.' This links parameters to the update behavior, adding value beyond schema.

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

Purpose5/5

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

The description clearly states the verb 'mark superseded' and the resource 'existing memory document'. It distinguishes from siblings by noting the forward-only nature and that back-links are derived later, making it distinct from linking tools.

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

Usage Guidelines4/5

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

The description provides context: 'Forward-only — the replacement doc is NOT touched' and mentions back-links are derived at query time, implying when to use this. However, it does not explicitly state when not to use it or name alternatives.

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

switch_active_modelA

Atomically promote a registered model to active. Fails with ok:false / reason:'incomplete' if any chunk is missing a shadow embedding for the target model.

ParametersJSON Schema
NameRequiredDescriptionDefault
vaultYes
model_nameYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses atomicity and a specific failure mode (chunks missing shadow embedding). However, it does not detail success behavior or side effects.

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

Conciseness5/5

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

One sentence covering purpose and a key failure condition. No fluff, front-loaded with action.

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

Completeness3/5

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

For a simple tool with two params and no output schema, the description covers core behavior and a failure condition but omits success returns, prerequisites, and other potential errors.

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

Parameters3/5

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

Schema coverage is 0%, so description must compensate. It implies 'model_name' is the target model to promote but does not explain 'vault' or provide per-parameter details beyond context.

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

Purpose5/5

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

The description clearly states it atomically promotes a registered model to active, which is a specific verb and resource. It distinguishes from siblings like 'list_models' by focusing on the promotion action.

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

Usage Guidelines3/5

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

The description lacks explicit when-to-use or when-not-to-use guidance. It only mentions a failure condition, but no comparison with alternative tools like 'list_models' or 'register_contracts_as_tools'.

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

update_frontmatterA

Modify a note's frontmatter only. The body is preserved bytegenau. Merge DSL: scalar=set, {$unset:true}=delete, {$push:x}=array append, {$pull:x}=array remove.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
mergeYes
vaultYes
client_idNo
expected_hashNo

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that the tool preserves the note body and uses a merge DSL for operations (set, unset, push, pull). However, it lacks details on side effects, atomicity, or permission requirements.

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

Conciseness4/5

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

Two sentences front-load the purpose and then explain DSL. However, 'bytegenau' appears to be a typo (likely 'exactly') which may confuse. Otherwise, concise and structured.

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

Completeness2/5

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

For a mutation tool with 5 parameters (3 required) and no output schema or annotations, the description is too sparse. It omits behavior of vault, path, expected_hash, client_id, and return value. Critical for an agent to use correctly.

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

Parameters2/5

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

Schema coverage is 0%, so description must compensate. It explains the merge DSL in detail but fails to clarify vault, path, expected_hash, and client_id parameters. Only merge gains semantics; others remain opaque.

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

Purpose5/5

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

The description clearly states 'Modify a note's frontmatter only', specifying the exact verb (modify) and resource (frontmatter). It also distinguishes from siblings like write_note that modify entire notes.

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

Usage Guidelines3/5

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

The description implicitly limits usage to frontmatter modifications but provides no explicit guidance on when to use this tool versus alternatives like write_note or query_frontmatter. No when-not-to-use or exclusion criteria are mentioned.

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

vacuum_embeddingsA

Drop orphaned embedding rows whose chunk_id no longer exists in the chunks table. Safe and idempotent; does not touch live data. Useful after migrations from pre-v0.7.0 schemas where chunk deletion did not always cascade to the derived layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
vaultYes

TDQS

A4.2/5.0
Behavior4/5

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

The description clearly states the tool is safe and idempotent, and specifies what it does (drops orphaned rows) and what it does not affect (live data). With no annotations provided, the description carries the burden well, though it omits details about return values or edge cases.

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

Conciseness5/5

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

The description is concise with two sentences: the first states the core purpose, the second adds safety and context. Every sentence adds value and is front-loaded with the key action.

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

Completeness5/5

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

Given the tool's simplicity (one parameter, no output schema), the description fully covers what an agent needs: purpose, safety, and typical usage scenario. It is complete for the task at hand.

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

Parameters2/5

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

The input schema has one required parameter 'vault' with 0% description coverage. The tool description does not explain what 'vault' represents or how to use it, leaving the agent without guidance on this crucial parameter.

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

Purpose5/5

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

The description clearly states the action ('Drop orphaned embedding rows') and the specific condition ('whose chunk_id no longer exists in the chunks table'). It distinguishes this tool from siblings by mentioning safety and idempotence, and the context of post-migration cleanup.

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

Usage Guidelines4/5

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

The description explicitly mentions the use case ('after migrations from pre-v0.7.0 schemas') and assures safety ('does not touch live data'). While it does not name alternative tools, the context makes it clear this is for maintenance, not regular operations.

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

vault_statsA

Vault overview for agent self-orientation: note/word counts, top tags, top frontmatter keys, embedding model, last index run. Omit vault to get all configured vaults. DEPRECATED since v2.0.0 — prefer MCP Resource vault-memory://stats/{vault} for agent discovery. The tool remains callable through v2.x; removal scheduled for v3.0.0.

ParametersJSON Schema
NameRequiredDescriptionDefault
vaultNo

TDQS

A5/5.0
Behavior5/5

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

Full disclosure: describes output contents, deprecation status, and that it remains callable until v3.0.0. No annotations provided, so description carries full burden—no behavioral surprises.

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

Conciseness5/5

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

Two sentences plus deprecation notice, all essential. No wasted words, front-loaded with purpose.

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

Completeness5/5

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

For a tool with one optional param and no output schema, description is fully sufficient: covers usage, output, deprecation, and parameter semantics.

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

Parameters5/5

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

Input schema has 0% description coverage, but description explains the 'vault' parameter: omit for all vaults, specify for a single vault. This adds essential meaning.

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

Purpose5/5

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

Description clearly states verb ('overview') and resource ('vault'), and lists specific data points (note/word counts, top tags, etc.). It distinguishes from siblings like list_vaults and index_runs by focusing on statistical overview.

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

Usage Guidelines5/5

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

Explicitly mentions deprecation and recommends an alternative MCP resource. Also explains behavior when 'vault' is omitted, giving clear usage guidance.

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

write_noteA

Atomically create or overwrite a note. Requires write_enabled=true. Use expected_hash for safe overwrites (read the note first, pass its hash). Omit expected_hash only when creating a new note.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
vaultYes
contentYes
client_idNo
frontmatterNo
expected_hashNo

TDQS

A4.2/5.0
Behavior4/5

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

Without annotations, the description carries the burden of behavioral disclosure. It mentions atomicity, write_enabled requirement, and safe overwrite mechanism via expected_hash. However, it does not describe error conditions, return values, or side effects, but the core behavior is clear.

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

Conciseness5/5

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

The description is concise—two sentences—with no extraneous information. It front-loads the tool's purpose and key usage notes, making it easy to scan.

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

Completeness3/5

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

Given six parameters (three required), no output schema, and no annotations, the description provides essential behavioral context (atomicity, expected_hash) but omits details for four parameters and return value, leaving the tool partially underspecified.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. Only expected_hash is explained; vault, path, content, frontmatter, and client_id are not described, leaving significant gaps for correct parameter usage.

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

Purpose5/5

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

The description clearly states the tool's function: 'Atomically create or overwrite a note.' It uses a specific verb and resource, and distinguishes itself from sibling tools like delete_note and read_note.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: requires write_enabled=true, use expected_hash for safe overwrites, omit expected_hash only for new notes. This distinguishes from alternatives and sets prerequisites.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev2.4.1
    • Changedsearch_hybrid2 fields changed
      • addedInput schema / properties / frontmatter_boosts
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "key": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "value": {
        +        "type": "string"
        +      },
        +      "weight": {
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "key",
        +      "value",
        +      "weight"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / frontmatter_filter
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "key": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "value": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "key",
        +      "value"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  2. 37 tool updatesv2.0.0-rc.5
    • First observedassemble_dossier
    • First observedaudit_log
    • First observedcluster
    • First observedcompile_brief
    • First observeddelete_note
    • First observeddescribe_contract
    • First observedexpand
    • First observedfetch
    • First observedfind_broken_links
    • First observedget_brief
    • First observedget_document_bundle
    • First observedget_outline
    • First observedindex_runs
    • First observedinstantiate_contract
    • First observedlist_backlinks
    • First observedlist_forward_links
    • First observedlist_models
    • First observedlist_vaults
    • First observedquery_frontmatter
    • First observedread_note
    • First observedrecall
    • First observedrecent_notes
    • First observedrecord_observation
    • First observedregister_contracts_as_tools
    • First observedsearch
    • First observedsearch_hybrid
    • First observedsearch_sections
    • First observedsearch_semantic
    • First observedsearch_text
    • First observedstart_shadow_index
    • First observedsuggest_frontmatter
    • First observedsupersede
    • First observedswitch_active_model
    • First observedupdate_frontmatter
    • First observedvacuum_embeddings
    • First observedvault_stats
    • First observedwrite_note

TDQS

A3.6/5.0
Disambiguation4/5

Most tools have distinct purposes, but the five search variants (search, search_hybrid, search_sections, search_semantic, search_text) and multiple note-retrieval tools (get_document_bundle, get_outline, list_backlinks, list_forward_links) create some ambiguity. While descriptions clarify usage, an agent could still misselect between similar tools.

Naming Consistency4/5

The predominant pattern is verb_noun (e.g., read_note, search_hybrid), which is consistent and predictable. However, a few outliers like 'cluster', 'expand', 'fetch', 'recall', 'search', and 'supersede' are single verbs, breaking the pattern slightly. This minor inconsistency prevents a perfect score.

Tool Count3/5

37 tools is high for a single server. While the domain is broad (notes, search, memory, contracts, embeddings, administration), the large number may overwhelm agents and suggests some functions could be consolidated. The count is borderline, falling into the 'too many' category according to the calibration guidelines.

Completeness5/5

The tool set provides comprehensive coverage for a vault memory system: full note CRUD with hash safety, multiple search modalities, backlinks, memory sinks with provenance, contract lifecycle, embeddings management, vault administration, and advanced features like clustering and dossier assembly. No obvious gaps are present for the intended domain.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for local-first RAG over Obsidian vaults, enabling AI agents to search and ask questions about notes with grounded citations.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Local-first knowledge backend for AI agents that connects MCP hosts to an Obsidian-compatible vault with indexed retrieval, token-budgeted memory recall, and secure ingestion.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A local-first RAG, MCP, REST, and CLI bridge for Obsidian vaults that enables AI agents to retrieve cited knowledge from notes without uploading the vault.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/owrede/vault-memory'

If you have feedback or need assistance with the MCP directory API, please join our Discord server