vault-memory
vault-memory is a local-first, agentic knowledge layer over Obsidian vaults, exposing search, memory, graph, document assembly, and task automation capabilities to any MCP-aware AI agent — entirely on your machine with no cloud services or telemetry.
Search & Retrieval
Semantic (embedding/cosine), full-text (BM25/FTS5), hybrid (RRF combining both), and section-level searches across vaults
Options for recency/authority rescoring, cross-encoder reranking, and typed-edge neighborhood expansion
Read full note content by path; list recently modified notes
Note Reading & Writing
Atomically create, overwrite, or delete notes with hash-based safety guards (no blind deletes/overwrites)
Update only a note's frontmatter (set, unset, push, pull) while preserving body
Query notes by YAML frontmatter predicates; get AI-suggested frontmatter fields based on folder conventions and content
Graph Navigation
Explore typed edges (wikilinks, mentions, frontmatter-refs, hyperlinks) via BFS traversal (up to 2 hops)
Community detection (Louvain modularity) over the typed-edge graph
List forward links, backlinks, and find broken links; assemble structured dossiers from anchor documents
Agentic Memory & Provenance
Record observations with full provenance (type, confidence, source, evidence) into labeled MemorySinks — never silently modifying user notes
Recall memory documents filtered by confidence, type, and age
Supersede outdated memory entries, maintaining a forward-only chain
Document Assembly & Briefs
Get navigable section outlines and full document bundles (outline, backlinks, forward links, recent edits)
Compile briefs from source documents using LLM summarization, with automatic staleness tracking and supersede-on-collision
List and retrieve compiled briefs
Task Contracts
Discover, describe, and execute declarative YAML task contracts (e.g., meeting-prep, project-status) for structured agent workflows
Dynamically register contracts as first-class MCP tools
Vault & Index Management
List configured vaults, view vault stats, manage embedding models
Start shadow indexing for model switching, atomically promote shadow models, vacuum orphaned embeddings
View index run history and query the write audit log (filtered by path, operation, and time)
Allows AI agents to query, retrieve, and write to Obsidian notes with provenance tracking, enabling agentic workflows over a local knowledge base.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vault-memoryPull me a brief for tomorrow's 1:1 with Alice."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 servePoint 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); labeledMemorySinkwrite 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 onsearch_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_hybridgains an additiveexpandparam 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, andlist_briefs; per-briefsource_hashesmap; 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 aDEPRECATEDnotice in theirdescription; removal scheduled for v3.0.0). The rawtools/listtherefore 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,backlinksadded 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
Guided install (recommended)
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
contextfitCLI (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 nativebetter-sqlite3dependency 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) + thebge-m3model (~1.1 GB,ollama pull bge-m3). Optional ONNX reranker (bge-reranker-v2-m3, ~570 MB) viabash 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 serveThe 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
Plugin install — docs/v2/plugin/INSTALL.md
Plugin README — docs/v2/plugin/README.md
Migration v1 to v2 — docs/v2/MIGRATION-V1-TO-V2.md
Architecture deep-dive — docs/v2/ARCHITECTURE.md
Memory contract — docs/v2/MEMORY_CONTRACT.md
Agent-agnostic statement — docs/v2/AGENT_AGNOSTIC.md
ADR index — docs/v2/adr/README.md
Changelog — CHANGELOG.md
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 toolsassemble_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).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Candidate key — matches the document's title OR any entry in properties.aliases (D-04) | |
| type | Yes | Exact-match value for properties.type on the anchor document (D-03 — no fuzzy match) | |
| vaults | No | Restrict to these vault names; defaults to all configured |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | ||
| limit | No | ||
| since | No | ||
| vault | Yes | ||
| note_path | No | ||
| is_memory_sink_write | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| query | No | ||
| vault | No | ||
| method | Yes | ||
| query_top_k | No | ||
| seed_doc_ids | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sink | No | Override the default `_memory/_briefs` sink | |
| vault | Yes | Vault name (registered in [vaults] config block) | |
| target | Yes | Stable cross-version handle for the brief (e.g. 'atlas-q3') | |
| purpose | Yes | Free-form purpose; bounded so list_briefs stays scannable | |
| max_tokens | No | Hint for the LLM ladder; default 2000 | |
| prepared_text | No | D-10 tier 3 fallback when no LLM is reachable — verbatim body to stitch in | |
| source_doc_ids | Yes | DocIds the brief is compiled from; deduped, capped at 50 (D-03) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| vault | Yes | ||
| client_id | No | ||
| expected_hash | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Registered contract name (see register_contracts_as_tools) | |
| vault | No | Vault name; omit on single-vault setups |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| hops | Yes | Hop cap (1 or 2). v2.0.0 hard-caps at 2. | |
| direction | No | Edge traversal direction; default 'both'. | both |
| edge_types | No | Optional filter on edge types; default = all four types. | |
| seed_doc_ids | Yes | 1+ opaque DocIds (e.g. obsidian-fs://<vault>/<path>) — seeds of the BFS. | |
| filter_properties | No | Strict-equality predicate on document properties (e.g. {type: 'Project'}). | |
| include_superseded | No | When false (default), docs whose properties.status === 'superseded' are dropped. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
find_broken_linksA
List all wikilinks in a vault that point to non-existent notes.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description implies a read-only operation but doesn't explicitly state non-destructiveness or other behavioral traits beyond listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action and result, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with one parameter and no output schema, description covers core functionality; could mention return format but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single 'vault' parameter is self-explanatory; description adds no extra semantics despite 0% schema coverage. Minimal but adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'list' and resource 'broken wikilinks', distinguishing it from siblings like list_backlinks and list_forward_links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. With many similar sibling tools, context for selection is missing.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault name (registered in [vaults] config block) | |
| target | Yes | Stable cross-version handle for the brief | |
| allow_stale | No | When true, return briefs flagged stale or too_old with annotation rather than null | |
| max_age_days | No | Reject briefs older than this many days unless allow_stale=true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses 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.
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.
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.
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.
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.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Link-walk depth. v2.0.0: only 1 (one-hop). Phase 4 may widen. | |
| doc_id | Yes | Opaque DocId (obsidian-fs://<vault>/<path>) of the anchor document | |
| vaults | No | Optional vault filter; usually omitted (the DocId names a vault) |
TDQS
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.
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.
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.
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.
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.
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | Opaque DocId (obsidian-fs://<vault>/<path>) of the document | |
| vaults | No | Optional vault filter; usually omitted (the DocId names a vault) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| vault | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Registered contract name | |
| vault | No | Vault name; omit on single-vault setups | |
| inputs | No | Contract inputs; validated against the contract's inputZodSchema | |
| sink_overrides | No | Override declared sink handles by handle name. Targets MUST resolve through MemorySinkRegistry (D-A4c). | |
| source_overrides | No | Override declared source handles by handle name |
TDQS
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.
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.
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.
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.
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.
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_backlinksA
Find all notes that link TO a given note. DEPRECATED since v2.0.0 — prefer MCP Resource vault-memory://backlinks/{vault}/{+docId} for agent discovery. The tool remains callable through v2.x; removal scheduled for v3.0.0.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| vault | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It mentions deprecation but does not disclose behavioral traits such as read-only nature, auth needs, rate limits, or what happens upon execution. Basic action is implied but not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second provides deprecation info and alternative. Front-loaded with key info, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks parameter explanations and behavioral details (e.g., read-only vs write, return format). For a simple tool with no output schema and no annotations, the description should be more comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the parameters 'vault' and 'path'. No additional meaning is conveyed beyond the raw schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find all notes that link TO a given note.' It is specific and distinguishes from siblings by focusing on backlinks. The deprecation notice adds context without muddling the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to prefer an alternative ('prefer MCP Resource...') and that the tool remains callable until v3.0.0. Provides clear guidance on 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.
list_forward_linksB
List all wikilinks FROM a given note. Optionally include broken links.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| vault | Yes | ||
| include_broken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It only states the basic function without detailing output format, error handling, or default behavior of the include_broken parameter (defaults to true in schema). The description is minimal and leaves critical behavioral traits undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences. It front-loades the purpose and adds a secondary option. Every word earns its place with no redundancy or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no output schema, and no annotations, and exists among many similar sibling tools, the description is too brief. It fails to explain the vault parameter, output format, or how broken links are represented. An agent would lack important details to use the tool correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description hints at two parameters: 'FROM a given note' implies path, and 'Optionally include broken links' hints at include_broken. However, the vault parameter is not explained, and include_broken's default is not indicated. The description adds some meaning but does not fully compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists forward wikilinks from a note, distinguishing it from sibling tools like list_backlinks (which lists backlinks) and find_broken_links (which finds broken links). The verb 'list' and resource 'wikilinks FROM a given note' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing outgoing links from a note and optionally filtering broken links, but it does not explicitly compare with siblings or state when to use alternatives. No when-not-to or context for exclusion is provided.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| vault | Yes | ||
| where | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| vault | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sink | No | Memory sink name OR full obsidian-fs://… handle. Defaults to all configured sinks. | |
| limit | No | Maximum results AFTER filter+sort; default 20 | |
| query | Yes | Natural-language query; routes through hybrid (semantic + BM25) search | |
| types | No | Restrict to docs whose `type` property is in this set | |
| vaults | No | Restrict to these vault names; defaults to all configured | |
| max_age_days | No | Exclude docs whose `observed_at` is older than this many days | |
| min_confidence | No | Exclude docs whose confidence ordinal is lower than this (direct=3, inferred=2, uncertain=1) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| vault | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sink | No | Memory sink name OR full obsidian-fs://… handle. Defaults to the vault's default sink. | |
| type | Yes | Observation type per the sink contract (e.g. 'observation', 'hypothesis', 'decision') | |
| claim | Yes | Short natural-language statement of the observation (becomes title + body) | |
| vault | Yes | Vault name (registered in [vaults] config block) | |
| evidence | Yes | DocIds or quoted source spans supporting the claim; empty array allowed | |
| confidence | Yes | How the agent arrived at this claim | |
| properties | No | Escape-hatch: contract-allowed extra properties; merged AFTER sugar args (caller wins) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault name; omit to apply to all vaults |
TDQS
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.
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.
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.
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.
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.
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.
searchB
OB1-compatible search adapter. Returns a flat list of {id, title, url, snippet} for connector ecosystems (ChatGPT Custom Connectors, Claude.ai, Deep-Research). Backed by hybrid (semantic+BM25+RRF) search. For richer output use search_hybrid.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
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 search algorithm (hybrid semantic+BM25+RRF) and the output format structure. However, it does not mention safety traits, side effects, or authorization requirements, leaving gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loads the purpose, and each sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of many sibling search tools and no output schema or annotations, the description lacks details on pagination, error handling, return format completeness, and usage context. It is insufficient for an agent to confidently use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning no parameter descriptions in JSON schema. The description does not explain the meaning of 'query' or 'limit' beyond the schema defaults, failing to compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is an OB1-compatible search adapter returning a flat list with specific fields (id, title, url, snippet) for connector ecosystems. It distinguishes itself from search_hybrid by noting that tool provides richer output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions an alternative tool (search_hybrid) but does not provide guidance on when to use this tool versus other sibling search tools like search_text, search_semantic, or search_sections. There is no explicit when-to-use or when-not-to-use advice.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| rrf_k | No | ||
| top_k | No | ||
| expand | No | ||
| rerank | No | ||
| vaults | No | ||
| exclude_paths | No | ||
| half_life_days | No | ||
| recency_weight | No | ||
| authority_weight | No | ||
| frontmatter_boosts | No | ||
| frontmatter_filter | No | ||
| include_superseded | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| vaults | No | ||
| recency_weight | No | ||
| authority_weight | No | ||
| include_superseded | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| vaults | No | ||
| exclude_paths | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| vaults | No | ||
| exclude_paths | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| vault | Yes | ||
| batch_size | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| title | No | ||
| vault | Yes | ||
| content | No | ||
| folder_hint | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | DocId of the document being superseded | |
| reason | Yes | Why the old document is being retired; written to superseded_reason | |
| replacement_doc_id | Yes | DocId of the replacement document |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | ||
| model_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| merge | Yes | ||
| vault | Yes | ||
| client_id | No | ||
| expected_hash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| vault | Yes | ||
| content | Yes | ||
| client_id | No | ||
| frontmatter | No | ||
| expected_hash | No |
TDQS
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.
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.
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.
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.
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.
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 tool update
v2.4.1- Changed
search_hybrid2 fields changed- added
Input schema / properties / frontmatter_boostsAdded value: +{ + "items": { + "properties": { + "key": { + "minLength": 1, + "type": "string" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "key", + "value", + "weight" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / frontmatter_filterAdded value: +{ + "items": { + "properties": { + "key": { + "minLength": 1, + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "key", + "value" + ], + "type": "object" + }, + "type": "array" +}
37 tool updates
v2.0.0-rc.5- First observed
assemble_dossier - First observed
audit_log - First observed
cluster - First observed
compile_brief - First observed
delete_note - First observed
describe_contract - First observed
expand - First observed
fetch - First observed
find_broken_links - First observed
get_brief - First observed
get_document_bundle - First observed
get_outline - First observed
index_runs - First observed
instantiate_contract - First observed
list_backlinks - First observed
list_forward_links - First observed
list_models - First observed
list_vaults - First observed
query_frontmatter - First observed
read_note - First observed
recall - First observed
recent_notes - First observed
record_observation - First observed
register_contracts_as_tools - First observed
search - First observed
search_hybrid - First observed
search_sections - First observed
search_semantic - First observed
search_text - First observed
start_shadow_index - First observed
suggest_frontmatter - First observed
supersede - First observed
switch_active_model - First observed
update_frontmatter - First observed
vacuum_embeddings - First observed
vault_stats - First observed
write_note
TDQS
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.
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.
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.
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
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
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Self-hosted AI-native knowledge workspace with hybrid search, GraphRAG, and MCP.
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for local-first RAG over Obsidian vaults, enabling AI agents to search and ask questions about notes with grounded citations.MIT
- AlicenseNot gradedqualityCmaintenanceLocal-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.1MIT
- AlicenseNot gradedqualityCmaintenanceA 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.1MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to persist, search, and evolve knowledge through a Markdown vault with a typed knowledge graph and MCP interface.14Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/owrede/vault-memory'
If you have feedback or need assistance with the MCP directory API, please join our Discord server