Skip to main content
Glama
alex106

obsidian-secondbrain-mcp

by alex106

obsidian-secondbrain-mcp

A local-only MCP server that turns an Obsidian vault into a working second brain. No network calls, no API keys, no embeddings, no model calls anywhere in this package. Every tool either moves bytes on local disk or hands raw material back to the agent with an explicit next_step — the thinking is the agent's job, and the results come back through the same tools.

Install

cd obsidian-mcp
python -m venv .venv
.venv/Scripts/python.exe -m pip install -e .          # Windows
# .venv/bin/python -m pip install -e .                # macOS/Linux

# register with Claude Code (server -> ~/.claude.json, hooks -> ~/.claude/settings.json;
# both backed up first)
.venv/Scripts/python.exe scripts/install.py --vault "C:/path/to/YourVault"

Then restart Claude Code and run /mcp to confirm obsidian-secondbrain is connected. Add --dry-run to see the config without writing it, --no-hooks to skip automatic session capture.

First thing in a fresh vault: ask the agent to call init_vault.

Related MCP server: brain-mcp

Quick setup: the secbrain-init skill

Copy skills/secbrain-init/ into ~/.claude/skills/, restart Claude Code, and run /secbrain-init in any project. It creates or reuses a vault there, registers the server and hooks for that project, fires the capture hook and verifies it wrote a note, then reports.

The skill drives the CLI below rather than editing config by hand, so setup is tested code and behaves the same every time.

CLI

PY=.venv/Scripts/python.exe    # or .venv/bin/python

$PY -m obsidian_secondbrain.cli detect    --project .   # OS, runtime, which client
$PY -m obsidian_secondbrain.cli doctor    --project .   # what is / isn't set up
$PY -m obsidian_secondbrain.cli init      --project .   # create or reuse the vault
$PY -m obsidian_secondbrain.cli install   --project .   # register server + hooks
$PY -m obsidian_secondbrain.cli test-hook --project .   # fire the hook, verify, clean up

Each prints one JSON object and exits non-zero on failure. init and install are idempotent: existing notes are never touched, config files are backed up before rewriting, unrelated entries are preserved, and re-running replaces this hook rather than stacking duplicates.

Which clients work

The server is plain stdio MCP, so any MCP client can use all 27 tools; the vault is plain markdown that Obsidian itself reads. What differs is the automation around it.

Claude Code

Codex

Copilot / VS Code

Cursor

27 MCP tools

yes

yes

yes

yes

capture_session (manual compact)

yes

yes

yes

yes

MCP prompts

yes

varies

yes

yes

Automatic capture hooks

yes

yes

no

no

/secbrain-init skill

yes

no

no

no

Automatic capture now works on both Claude Code and Codex, but not the same way. Claude Code's hook parses the PreCompact/SessionEnd transcript directly. Codex documents its rollout transcript format as unstable, so its hooks avoid it: UserPromptSubmit/Stop buffer each turn's stable fields (the prompt, the final assistant message) to <vault>/.secondbrain/buffer/<session_id>.jsonl, and PreCompact/SessionEnd turn that buffer into the same kind of inbox note. Codex also skips every hook until it is reviewed and trusted in /hooksinstall and doctor both say so, and re-trust is needed after any re-install that changes a command. Copilot and Cursor have neither event, so capture stays manual there — capture_session is an ordinary tool, so an agent writing its own summary and filing it works anywhere. install --with-instructions writes .github/copilot-instructions.md / .cursor/rules/secbrain.md for those two; Codex gets AGENTS.md by default now, the same way Claude Code gets CLAUDE.md, no flag needed.

Reading the vault at the start of a session

Two mechanisms cover this, and they are deliberately not the same thing.

A SessionStart hook (hooks/session_start.py, Claude Code and Codex) fires unconditionally on every session start/resume/clear/compact and injects a small, passive digest as additionalContext — the undistilled backlog count and the tail of the most recent log. It never searches anything; it can't, because the user's actual request doesn't exist yet at that point.

install also writes a marked block into the project's rule file — CLAUDE.md for Claude Code, AGENTS.md for Codex, with no flag needed for either — whose first instruction is: before acting on the first request of a session, search the vault. This is the active half: a targeted search_notes/find_notes once the request is known, which a hook firing before any user text exists structurally cannot do.

Every client gets the rule, Claude Code and Codex included, because a capture hook only writes the vault when a session ends — without the rule (or, on top of the hook's passive digest), the vault only ever fills up, and a session starts by re-deriving what is already written down. doctor reports project_rules.has_session_start_rule and hooks.missing (which lists any of PreCompact/SessionEnd/SessionStart not yet registered, plus UserPromptSubmit/Stop on the Codex path), and --no-instructions opts out of the rule file specifically.

detect identifies the client from evidence and distinguishes an agent signal (we are running as it) from a host signal (it is merely the editor hosting the terminal) — Claude Code inside a VS Code terminal makes both look active.

$PY -m obsidian_secondbrain.cli install   --project . --client codex  --scope user
$PY -m obsidian_secondbrain.cli install   --project . --client vscode --with-instructions
$PY -m obsidian_secondbrain.cli install   --project . --client all
$PY -m obsidian_secondbrain.cli test-hook --project . --client codex
$PY -m obsidian_secondbrain.cli doctor    --project . --client codex

test-hook and doctor default to --client claude; pass --client codex to check the Codex-side wiring (hooks.json, the turn buffer, AGENTS.md) instead. Neither command can see whether Codex has actually trusted the hooks in /hooks — that state lives only in Codex, keyed by each hook's hash — so both report the caveat explicitly rather than implying a passing check means capture is live.

Config shapes are not interchangeable, and a wrong shape is silently ignored with no error: VS Code uses root key servers and requires "type": "stdio"; Claude Code, Copilot and Cursor use mcpServers; Codex uses TOML [mcp_servers.NAME]. The Codex writer patches only its own table so comments and other servers survive.

install --scope project (default) writes .mcp.json plus .claude/settings.local.json — hooks go in the local file because they embed absolute machine paths. --scope user registers one vault globally instead.

test-hook is the one that matters: it writes a synthetic transcript, runs the command exactly as registered with OBSIDIAN_VAULT stripped from the environment — what a real session gives a hook — asserts seven properties of the note it produced, then restores the vault byte-for-byte.

That last detail is not pedantry. A hook does not inherit the env block of an MCP server config, so a hook registered without --vault finds no vault, exits 0 and silently writes nothing. install therefore passes the vault on the command line, and test-hook runs the registered command under a stripped environment so a no-op hook cannot pass.

Configuration

Exactly one input: the OBSIDIAN_VAULT environment variable, set in the MCP server config. Everything else — folder names, date formats, the frontmatter key that marks a note distilled — lives in <vault>/.secondbrain/config.json, created by init_vault. Reshape the method by editing that file; no code changes needed.

{
  "folders": {
    "inbox": "00-Inbox", "log": "10-Log", "sessions": "20-Sessions",
    "notes": "30-Notes", "maps": "40-Maps", "archive": "90-Archive"
  },
  "daily_note_format": "%Y-%m-%d",
  "distilled_key": "distilled",
  "exclude": [".obsidian", ".trash", ".git", ".secondbrain"]
}

The method

Raw capture is append-only and never rewritten. Distillation is a separate, deliberate pass that turns raw material into atomic notes — one idea each, titled as a claim, linked into the existing graph. Review fights the write-only vault.

INJECT   →  the SessionStart hook (Claude Code, Codex) + the context-first rule
CAPTURE  →  log_entry, append_to_note, the PreCompact/SessionEnd hooks
COMPACT  →  capture_session   (agent writes the summary, server files it)
DISTILL  →  distill_queue → create_concept_note → mark_distilled
REVIEW   →  vault_health, resurface_notes, related_notes, stale_notes

Tools (27)

Vaultvault_info, init_vault, list_notes, read_note, create_note, append_to_note, patch_section, update_frontmatter, move_note, archive_note

Find & searchfind_notes (by name/glob), search_notes (inside content, literal or regex), search_by_tag (nested tags match), search_frontmatter, backlinks, related_notes (scored graph neighbours with reasons), recent_notes

Session capturecapture_session, log_entry, read_daily_log

Distillation & reviewdistill_queue, create_concept_note, mark_distilled, vault_health, build_map, resurface_notes, stale_notes

Prompts

compact_to_vault · distill · review_brain — surfaced as slash commands in Claude Code once the server is connected.

Session capture, and why the hook files raw text

capture_session is the /compact step: the agent writes the durable summary (what, why, decisions, open questions, artifacts) and the server files it as a session note marked undistilled, plus a pointer in the day's log.

The PreCompact/SessionEnd hook runs outside the model, so it cannot summarise anything. It files raw material — user prompts and assistant text only, no tool spam, most recent ~20k chars — into the inbox as an undistilled note. On Claude Code that material is the transcript at transcript_path. On Codex, whose transcript format is documented as unstable, it is instead whatever hooks/codex_turn_buffer.py already appended from UserPromptSubmit.prompt and Stop.last_assistant_message — two fields Codex does treat as stable — to <vault>/.secondbrain/buffer/<session_id>.jsonl; the buffer is consumed (deleted) once its note is written, so a PreCompact capture followed by a SessionEnd capture never files the same turns twice. The next distill_queue call hands the note to the agent, which does the thinking. Automatic capture without ever needing a model behind the server's back.

The SessionStart hook (hooks/session_start.py) is the same idea run in reverse: it can't summarise either, so it just counts and quotes — the undistilled backlog size and the tail of the latest log — and hands that back as additionalContext. Injection without a model in the hook, same as capture.

Every hook always exits 0. A failed capture never blocks your session. On Codex this matters doubly: SessionEnd gets 1 s by default and 3 s at the hard ceiling, so its capture only ever has to rename a buffer file into a note — the actual buffering already happened earlier, in UserPromptSubmit and Stop, where there's no shared time budget to blow.

Safety

Every path is resolved and checked against the vault root, so ../ escapes are refused. archive_note moves rather than deletes; nothing in this package deletes a note. Tool errors come back as {"error": ..., "message": ...} data so the agent can recover instead of the call blowing up.

Layout

src/obsidian_secondbrain/
  config.py    vault path + data-driven taxonomy
  vault.py     safe paths, frontmatter, read/append/patch, wikilinks
  search.py    content, tag and frontmatter search
  ops.py       find by name, move/archive, related, recent/stale/resurface
  capture.py   daily log, session notes
  distill.py   distill queue, concept notes, health, maps
  server.py    MCP tool + prompt surface
  cli.py       detect / doctor / init / install / test-hook bootstrap
  environment.py  evidence-based OS + client detection
  clients.py      per-client config writers (json / toml shapes)
hooks/capture_session.py    PreCompact / SessionEnd raw capture (Claude Code + Codex)
hooks/session_start.py      SessionStart digest injection (Claude Code + Codex)
hooks/codex_turn_buffer.py  Codex UserPromptSubmit / Stop: buffers each turn's stable fields
hooks/_common.py            shared vault resolution + the Codex buffer path, for all hook scripts
scripts/install.py          user-scope registration (~/.claude.json + settings.json)
skills/secbrain-init/       Claude Code skill: /secbrain-init
tests/test_lifecycle.py     34 assertions over a real stdio MCP client
tests/test_hook_wiring.py   proves test-hook rejects an env-only hook
tests/test_clients.py       pins each client's config shape
tests/test_codex_hooks.py   install/test-hook/doctor --client codex, end to end

Available Tools

27 tools
append_to_noteA

Append to a note, creating it if absent.

The append-only primitive: prefer this over rewriting raw capture notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
textYes
headingNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses the non-destructive append-only nature and the create-if-absent behavior, which are key traits. It does not detail heading behavior or return values, but the core side effects are clearly conveyed.

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

Conciseness5/5

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

The description is two tight sentences with no filler. The core behavior is front-loaded and the usage policy follows naturally, making it easy for an agent to parse quickly.

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

Completeness3/5

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

The description covers the essential append behavior and preferred use case, but it omits heading semantics, path details, and any return or error behavior. Since there are no annotations or output schema, these gaps leave the tool only partially specified for an agent.

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

Parameters2/5

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

Schema description coverage is 0%, and the description adds little parameter-level meaning. It implies text is appended to a note identified by path, but the optional heading parameter and path format are left entirely unexplained, so the description does not compensate for the schema gap.

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

Purpose5/5

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

The description states a specific verb and resource ('Append to a note') and adds a defining behavior ('creating it if absent'). It also positions the tool as 'the append-only primitive,' distinguishing it from generic rewrite or write tools.

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

Usage Guidelines4/5

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

The description gives clear guidance to prefer this tool over rewriting raw capture notes, which is a useful policy. It does not explicitly contrast with sibling tools like patch_section or create_note, but the append-only framing provides enough context for basic selection.

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

archive_noteA

Move a note into the archive folder. Nothing is ever deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden of behavioral disclosure. It does disclose a key trait — that nothing is ever deleted — which is valuable. However, it does not mention required permissions, reversibility, what happens to the original file, or any side effects. For a simple move operation, this is adequate but not rich.

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

Conciseness5/5

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

The description is two concise sentences with no fluff. The purpose is front-loaded ('Move a note into the archive folder'), and the non-deletion guarantee adds important context without redundancy.

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

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description covers the core operation and a key guarantee. It does not explain the path parameter or mention prerequisites or error conditions, which would improve completeness. Given the low complexity, it is mostly sufficient but leaves minor gaps.

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

Parameters1/5

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

The schema has one required parameter 'path' with no description, and schema description coverage is 0%. The description does not elaborate on the format, scope, or meaning of the path (e.g., absolute vs. relative, file name vs. full path). The description fails to compensate for the schema gap, leaving the agent uncertain how to specify the path.

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

Purpose5/5

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

The description states a specific verb ('Move'), a resource ('a note'), and a destination ('into the archive folder'). It is unambiguous and easily distinguished from the broader 'move_note' sibling. The added phrase 'Nothing is ever deleted' reinforces the tool's non-destructive purpose.

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

Usage Guidelines3/5

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

The description implies usage (you use this when you want to archive a note) but does not explicitly state when to prefer it over alternatives like 'move_note'. There are no exclusions, alternative names, or conditions provided; the guidance is merely inferred from the name and purpose.

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

build_mapB

Write a Map-of-Content index note over notes you have curated.

ParametersJSON Schema
NameRequiredDescriptionDefault
introNo
topicYes
note_pathsYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must carry the behavioral disclosure burden, but it only restates the write intent. It does not disclose whether an existing MOC gets overwritten, whether a new file is created, or how the 'topic' relates to the generated note, so an agent gets no side-effect or safety information.

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

Conciseness5/5

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

The description is one sentence, front-loaded with the action and object, and contains no filler. It is as concise as the available information allows.

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

Completeness2/5

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

For a 3-parameter tool with no annotations and no output schema, this is too thin: an agent is not told what a Map-of-Content index note looks like, what happens to existing notes, what the result is, or how the parameters shape the output. The description fails to compensate for the missing structured context.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not define topic, note_paths, or intro, nor even mention them by name. The phrase 'notes you have curated' weakly hints at note_paths but adds no semantic detail, so the schema titles are all an agent has to go on.

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

Purpose5/5

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

The description names a specific verb ('Write') and a specific resource ('Map-of-Content index note'), and the phrase 'over notes you have curated' clearly ties it to a curated note set. This distinguishes it from generic note-creation siblings like create_note or append_to_note, so an agent can understand the tool's role.

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

Usage Guidelines3/5

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

It implies a workflow ('notes you have curated') but never states when to choose this over create_note or create_concept_note, nor any exclusions. The context is suggestive but not explicit enough to route an agent reliably.

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

capture_sessionA

Persist the current session into the vault -- the /compact step.

YOU write the summary; this tool only files it. Before calling, compact the session yourself into: what was being done and why, decisions taken with their reasons, what is still open, which files/artifacts were touched. Write durable facts, not a transcript -- a reader six months from now should not need the conversation.

Creates a note in the sessions folder marked undistilled, and drops a pointer into today's log.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
titleYes
projectNo
summaryYes
artifactsNo
decisionsNo
session_idNo
open_questionsNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does it well: it reveals that the tool only files the summary, creates a note marked undistilled, and drops a pointer into today's log. It also warns against transcript-style content, giving the agent a clear boundary on what the persisted artifact should be. It does not cover deeper concerns like authentication or reversibility, but the disclosed side effects are the key ones here.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then gives actionable guidance in compact, high-density sentences. Each sentence earns its place: purpose, division of labor, content expectations, and side effects. There is no filler or repetition of the schema.

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

Completeness4/5

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

For a tool with 8 parameters, no annotations, and no output schema, this description is unusually complete. It tells the agent what to prepare, what content the summary must contain, and what physical effects to expect in the vault. A small gap is the lack of guidance on how the optional session_id, tags, and project parameters relate to the overall capture workflow.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate; it does for the most important parameters. It tells the agent that the summary should contain what was being done and why, and it explicitly maps the content categories to decisions, open questions, and artifacts. Tags, project, and session_id remain only schema-explained by name and type, which is a minor gap for optional fields.

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

Purpose5/5

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

The description clearly states the action: 'Persist the current session into the vault -- the `/compact` step.' It goes further by explaining the concrete result: a note in the sessions folder marked undistilled and a pointer in today's log. This distinguishes it from generic note-creation siblings like create_note.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use context ('the /compact step') and detailed before-calling instructions: the agent must compact the session into durable facts covering what/why, decisions, open questions, and artifacts. It does not explicitly name alternatives or say when not to use the tool, so it stops short of a 5.

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

create_concept_noteA

Write one atomic note: one idea, stated as a claim.

title should read as an assertion you could disagree with, not a topic label. claim is the idea in one or two sentences. links are titles of existing notes -- call find_notes or search_notes first so you link into the graph instead of creating an island.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
tagsNo
claimYes
linksNo
titleYes
sourcesNo
overwriteNo

TDQS

A3.9/5.0
Behavior3/5

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

The description discloses the core behavior: writing one atomic concept note and linking into the graph. However, no annotations are provided, and the description does not mention what happens when overwrite is true, whether an existing note is replaced, or what the tool returns. Given the overwrite parameter, this is a meaningful transparency gap.

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

Conciseness5/5

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

The description is four short, front-loaded sentences with no filler. Every line earns its place by explaining what the note should contain and how to prepare links.

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

Completeness3/5

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

For a create tool with 7 parameters, no annotations, and no output schema, the description covers the core workflow well but omits overwrite behavior and optional field semantics. It is adequate for basic use but not fully complete for safe handling of the overwrite case.

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

Parameters3/5

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

Schema description coverage is 0%, so the prose must carry parameter meaning; it does for title, claim, and links with unusually specific semantics. However, body, tags, sources, and especially overwrite are left unexplained, so it only partially compensates for the complete lack of schema descriptions.

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

Purpose5/5

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

The description states a specific verb and resource: 'Write one atomic note: one idea, stated as a claim.' The title and claim guidance ('assertion you could disagree with, not a topic label') clearly differentiates this from generic create_note and other note-related siblings.

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

Usage Guidelines4/5

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

It gives clear procedural guidance: links must be titles of existing notes, so the agent should call find_notes or search_notes first to avoid creating an island. It does not explicitly say when to prefer this tool over create_note or append_to_note, but the intended use case is strongly implied.

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

create_noteC

Create a note. Refuses to clobber an existing note unless overwrite=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
pathYes
overwriteNo
frontmatterNo

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations present, the description must carry behavioral weight. It does disclose that existing notes are not clobbered unless overwrite=true, an important safety behavior. However, other meaningful behavior—error handling, idempotency semantics beyond overwrite, path constraints, or required permissions—is left undocumented.

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

Conciseness4/5

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

The description is brief and front-loads the core action, then provides one meaningful nuance. It avoids fluff, but the first sentence is largely redundant with the tool name, so it does not quite earn the top score for maximally efficient use.

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

Completeness2/5

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

Given the absence of an output schema and annotations, this description leaves the agent without several critical call details: how frontmatter should be formatted, whether directories are created, what happens on conflicts beyond a terse 'refuses', and what the return value indicates. It is sufficient for a basic call but under-specified for reliable use.

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

Parameters2/5

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

Schema description coverage is 0% and the description only adds meaning for overwrite ('unless overwrite=true'). path, body, and frontmatter receive no additional semantics, and frontmatter in particular is an open object that would benefit from explanation. Schema coverage zero, so the description does not bear the full load.

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

Purpose4/5

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

The description states the action clearly ('Create a note.') and hints at non-destructive behavior. However, it does not explicitly distinguish create_note from sibling tools like create_concept_note, capture_session, or log_entry, so an agent must infer which creation-scope tool to pick.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as append_to_note, patch_section, or create_concept_note. The clobber behavior is a safety note, not usage direction, so the agent receives no explicit context for selecting it.

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

distill_queueA

Raw captures not yet distilled, oldest first, with their content.

This is the core loop and it is YOUR job, not the server's: read each item, pull out the ideas that will still matter later, write each one as a single atomic note via create_concept_note (linking to existing notes with [[Title]]), then call mark_distilled on the source listing what you produced. Skip anything ephemeral -- mark it distilled with an empty produced list.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
include_bodyNo

TDQS

A4.1/5.0
Behavior4/5

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

Since no annotations are present, the description must carry the behavioral burden. It does: it states this is only the queue view and that the actual distillation is 'YOUR job, not the server's', implying the call is read-only and no items are consumed. It does not explicitly mention 'does not modify state' or return format, but the workflow statement is sufficient to avoid misusing the tool as a distiller itself.

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

Conciseness4/5

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

The description is moderately sized and front-loaded with the core purpose before diving into instructions. Each sentence adds value; the only potential redundancy is the slightly long procedural second paragraph, but it is instructional and not filler. It balances brevity with the needed workflow.

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

Completeness3/5

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

The tool is a simple queue listing with two parameters and no output schema, so the description is mostly sufficient for a correct call. However, it does not describe the shape of each raw capture item (e.g., ID, body, metadata) or what `include_body=false` affects, which an agent might need to know when calling `mark_distilled` on the correct source.

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

Parameters2/5

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

With schema description coverage at 0%, the description must compensate, but it does not. There is no mention of `limit` or `include_body` by name; the only hint is 'with their content,' which loosely maps to `include_body` default (true). An agent has no explicit guidance on how to control batch size or whether setting `include_body=false` changes the returned object shape, which is a meaningful gap.

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

Purpose5/5

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

The opening line, 'Raw captures not yet distilled, oldest first, with their content,' precisely states the resource, the ordering, and the payload. It clearly distinguishes distill_queue from list_notes and others in the sibling set by scoping it to undistilled raw captures and tying it to the distillation workflow.

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

Usage Guidelines5/5

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

The description goes beyond when to use it by providing an explicit end-to-end invocation guide: read each item, distill into `create_concept_note` with [[Title]] links, then `mark_distilled` with the produced list. It also covers the edge case of ephemeral items (mark with empty list), leaving no ambiguity about how to handle the response.

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

find_notesA

Find notes by NAME or path. */? globs work; a bare word matches any name containing it.

Use this when you know roughly what a note is called. Use search_notes when you need to look inside the content.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
folderNo
patternYes

TDQS

A4.4/5.0
Behavior4/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It does this well by explaining matching semantics: globs work and bare words match substrings. It doesn't cover folder/limit behavior or ordering, but it clearly communicates the core matching behavior without contradiction.

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

Conciseness5/5

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

The description is short and front-loaded. It states the core behavior first, then adds matching syntax, then closes with usage guidance. Every sentence earns its place and there is no filler.

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

Completeness4/5

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

For a relatively simple 3-parameter finder tool, the description covers the primary usage scenarios and the essential pattern semantics. The main gaps are the behavior of folder and limit, but the tool's scope and decision context are clear enough for correct invocation in most cases.

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

Parameters3/5

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

The required pattern parameter is well explained with concrete matching rules: '*'/'?' globs and bare-word substring matching. However, the other two parameters, limit and folder, have no description enrichment, and schema description coverage is 0%. Their semantics remain inferred from names and defaults alone.

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

Purpose5/5

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

The description states a specific verb and resource: 'Find notes by NAME or path'. It also distinguishes itself from search_notes by clarifying that this tool searches names/paths, not content. This makes it easily separable from siblings like list_notes, search_by_tag, and search_frontmatter.

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

Usage Guidelines5/5

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

It explicitly says when to use this tool: 'when you know roughly what a note is called.' It also names the alternative, search_notes, and the condition for choosing it: 'when you need to look inside the content.' This gives the agent clear decision logic.

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

init_vaultA

Create the folder taxonomy and config file in an empty or new vault.

Idempotent: existing folders and notes are left untouched.

ParametersJSON Schema
NameRequiredDescriptionDefault
seed_readmeNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It meaningfully discloses that the operation is idempotent and that existing folders and notes are left untouched. It does not clarify config-file conflict behavior or what happens if the vault is not empty, but the core safety property is covered.

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

Conciseness5/5

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

Two short sentences with no filler. The main purpose is front-loaded, and the idempotence guarantee is stated separately and clearly.

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

Completeness3/5

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

The description covers the core function and the most important behavioral trait for a low-complexity tool with one optional parameter. However, it omits the effect of seed_readme and gives no indication of what a successful initialization produces, which matters because there is no output schema.

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

Parameters2/5

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

The only parameter, seed_readme, is undocumented in the schema and receives no explanation in the description. The name hints at its purpose, but the agent gets no explicit information about what seeding a readme entails or how it affects the vault.

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

Purpose5/5

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

The description states a specific action, 'Create the folder taxonomy and config file', and clearly scopes it to 'an empty or new vault'. This distinguishes it from note-level siblings like create_note and build_map without ambiguity.

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

Usage Guidelines4/5

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

The description clearly scopes when the tool should be used: on an empty or new vault. It does not explicitly name alternatives or tell the agent what to do for existing vaults, but the idempotence note reinforces the intended setup context.

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

list_notesB

List note paths, optionally restricted to one folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
folderNo
with_frontmatterNo

TDQS

B3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. The 'list' verb and 'paths' output convey a read-only, lightweight behavior, which is useful context. But it does not disclose limit-based pagination, the effect of with_frontmatter, recursion behavior, or path format.

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

Conciseness5/5

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

A single, tight sentence with no filler. It is front-loaded and every word earns its place; the brevity costs are accounted for in other dimensions.

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

Completeness2/5

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

With no output schema and no annotations, this description is too thin. It omits what limit does, what with_frontmatter changes, the path format, and any relationship to sibling tools, making correct invocation uncertain.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only hints at the folder parameter via 'optionally restricted to one folder.' The limit and with_frontmatter parameters are entirely unexplained, so the description fails to compensate for the schema's lack of descriptions.

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

Purpose4/5

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

The description uses a specific verb ('list') and resource ('note paths'), so the core operation is unambiguous. However, it does not explicitly differentiate this tool from siblings like find_notes or search_notes, which also retrieve note-related data.

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

Usage Guidelines2/5

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

No guidance is given about when to use list_notes versus any of the 26 sibling tools. An agent cannot determine whether to reach for this, search_notes, or recent_notes, and there are no exclusions or alternative references.

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

log_entryA

Append a timestamped entry to the day's append-only log.

For in-flight capture: a fact, a link, a half-formed idea. Never rewrite the log -- it is the raw stream distillation feeds on.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
textYes
sourceNomanual

TDQS

A3.5/5.0
Behavior4/5

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

Annotations are absent, so the description fully carries the burden. It discloses the most important behavioral trait: append-only, timestamped, never rewrites, and the log's role as a raw stream for distillation. This is substantial transparency for an otherwise annotation-free mutation tool.

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

Conciseness5/5

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

Three punchy, front-loaded sentences: the verb+resource come first, followed by use-case context and the rewrite prohibition. Every sentence earns its place and there is no filler.

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

Completeness3/5

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

The core behavioral contract is clear, but for a 3-parameter tool the description omits the meaning of optional parameters and prerequisites like vault initialization. Given no output schema and no annotations, an agent could invoke the tool incorrectly around date/source semantics.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not compensate. It gives the text' semantic hint ('a fact, a link...') but leaves date and source completely unexplained. An agent cannot know that a null date likely means today, or what values source accepts beyond the default 'manual'.

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

Purpose4/5

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

Names a specific verb ('Append') and resource ('the day's append-only log'), which clearly distinguishes it from read-only sibling tools like read_daily_log or list_notes. It does not explicitly name a competing sibling, but the append-only log resource makes the purpose specific.

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

Usage Guidelines3/5

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

Provides a strong context sentence — 'For in-flight capture: a fact, a link, a half-formed idea' — and a behavioral exclusion ('Never rewrite the log'). It does not explicitly say when to use this tool versus append_to_note or capture_session, so the routing remains implied rather than fully explicit.

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

mark_distilledA

Mark a raw capture as distilled, recording which notes came out of it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
producedNo

TDQS

A3.7/5.0
Behavior3/5

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

The description discloses the core behavior: a state transition on a raw capture and recording of produced notes. With no annotations, however, it does not mention reversibility, idempotency, or what happens to previously recorded produced notes, so behavioral coverage is only partial.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and adds the relationship detail without redundancy. Every word contributes meaning.

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

Completeness4/5

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

For a simple two-parameter state-marker tool, the description sufficiently covers what the tool does and what the parameters represent. It lacks explicit workflow cues and return-value expectations, but the low complexity keeps the gap minor.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the semantic weight. It clarifies that path refers to the raw capture and produced refers to the notes that came out of it, which goes well beyond the bare parameter names. It stops short of describing formats or constraints.

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

Purpose4/5

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

The description states a specific verb ('mark') on a clear resource ('raw capture') and records the relationship to produced notes. It is clear and distinguishable from creation/reading siblings, though it does not explicitly name an alternative tool.

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

Usage Guidelines3/5

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

The phrasing 'mark a raw capture as distilled' implies it is used after distillation has occurred, but there is no explicit guidance on when to use it versus related tools like distill_queue or create_concept_note. The usage context is implied rather than stated.

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

move_noteC

Move or rename a note inside the vault.

ParametersJSON Schema
NameRequiredDescriptionDefault
srcYes
destYes
overwriteNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries full responsibility for disclosing side effects. It reveals that the tool mutates the vault, but it does not mention overwrite behavior, whether links/backlinks are updated, or what happens when the destination already exists.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. Every word contributes to the core purpose, making it appropriately concise.

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

Completeness2/5

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

For a mutating tool with no annotations, no output schema, and three undocumented parameters, the description is too thin. An agent lacks enough detail to predict overwrite semantics, return values, or how renaming interacts with the vault.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain src or dest path formats or the meaning of overwrite. The parameter names are suggestive, but the overwrite default and rename semantics are left undocumented.

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

Purpose4/5

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

The description uses a specific verb ('Move or rename') and a clear resource ('a note inside the vault'), so an agent knows the core operation. It does not explicitly differentiate from siblings like archive_note, but the action is unambiguous.

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

Usage Guidelines2/5

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

No guidance is given about when to use move_note versus a sibling like archive_note or patch_section, or how moving differs from renaming in practice. The description states what it does but leaves tool selection entirely to inference.

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

patch_sectionA

Insert text at the end of the section under heading, adding the section at the end of the note if it is missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
textYes
headingYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does disclose key behavior: text is inserted at the end of an existing section, and a missing section is appended to the note. It explains the mutation and fallback clearly, though it omits return/error behavior.

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

Conciseness5/5

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

A single, well-structured sentence with no filler. The primary action and conditional fallback are front-loaded, and every word earns its place.

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

Completeness3/5

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

For a simple three-parameter mutating tool with no annotations or output schema, the description covers the main workflow and fallback behavior. However, it leaves the path parameter implicit and does not mention heading-matching caveats, making it adequate but not fully complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It clarifies heading and text semantics well, but 'path' is only implied by 'the note' and not explicitly defined. Meaning is added for two of three required parameters.

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

Purpose5/5

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

The description names a concrete action ('Insert text') and a specific target ('section under heading'), including fallback behavior when the section is missing. This clearly differentiates it from note-level siblings like append_to_note.

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

Usage Guidelines3/5

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

Usage is implied rather than explicit: an agent can infer this tool is for adding text under a heading, and that a missing section will be created. However, there is no when-not guidance or explicit distinction from append_to_note and similar tools.

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

read_daily_logB

Read one day's log (ISO date, default today).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

TDQS

B3.1/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden of describing behavior. It mentions the date default (today) and the ISO format, but does not disclose whether the tool returns an empty result if no log exists, whether it creates a log if missing, or any side effects. The behavior is simple, though, so a 3 is reasonable.

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

Conciseness4/5

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

The description is a single sentence that is concise and front-loaded: states the action (read), the resource (one day's log), and key constraints (ISO date, default today). No wasted words, but it could include a bit more detail without bloating, so a 4.

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

Completeness2/5

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

For a tool with one parameter and no output schema, the description is thin. It doesn't specify the return format, whether it handles missing dates gracefully, or how it relates to log_entry (sibling). Given the simple scope, it meets minimum viability but leaves gaps that could cause mis-calls when agents need to retrieve logs vs. create entries.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the 'date' parameter. It only specifies ISO format and default today, but lacks details on timezone handling, acceptance of datetime vs date-only, or whether null is allowed (though the schema allows null). This is minimal, so a 2 is appropriate.

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

Purpose4/5

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

The description clearly states the tool reads a day's log with an optional ISO date, defaulting to today. This is specific and distinct from siblings. However, it does not explicitly differentiate from related tools like log_entry or recent_notes, though the action and resource are clear.

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

Usage Guidelines3/5

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

The context is implied: use when you need to retrieve a daily log, with date format and default behavior mentioned. No explicit guidance on when not to use it or how it compares to alternatives like log_entry or recent_notes, but the description gives enough for basic selection.

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

read_noteB

Read one note: frontmatter, body, tags and outgoing links.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

B3.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden of explaining behavior. It clearly signals a non-mutating read operation and lists the returned components, including outgoing links as distinct from backlinks. It does not discuss failure modes, but for a simple read tool this is sufficient.

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

Conciseness5/5

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

The description is a single efficient sentence that front-loads the action and immediately lists the returned content. There is no filler or redundancy.

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

Completeness3/5

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

For a one-parameter read tool with no output schema, the description covers the main outcome and returned fields. However, it omits path semantics and usage guidance, so the definition is minimally viable but not fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate by explaining the 'path' parameter. It does not mention path at all, leaving the format (vault-relative, extension, etc.) unspecified. The single parameter is self-named and required, which slightly mitigates the gap.

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

Purpose4/5

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

The description states a clear verb and resource: 'Read one note', and enumerates what is returned (frontmatter, body, tags, outgoing links). It distinguishes itself from list-oriented siblings by emphasizing a single note, though it does not explicitly name any alternative tool.

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

Usage Guidelines2/5

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

There is no guidance about when to choose read_note over siblings like search_notes, list_notes, backlinks, or related_notes. The singular 'one note' hints at the intended use, but no exclusion criteria or alternative routing is provided.

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

recent_notesC

Notes modified in the last N days, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
limitNo
folderNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses the time window and ordering but doesn't mention whether the result is limited to a folder, how the 'days' filter interacts with the 'folder' parameter, whether deleted or archived notes are excluded, or what the return format looks like. For a read tool, this is a moderate gap.

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

Conciseness4/5

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

The description is a single concise sentence that front-loads the core behavior (recency filter) and ordering. It earns its place with no filler, though it could add a brief note about the folder parameter without becoming verbose.

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

Completeness2/5

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

With no annotations, no output schema, and 0% schema description coverage, the description is too thin. An agent cannot tell whether 'folder' is a filter or a target, what the default behavior is (though defaults exist in the schema), or what the response shape is. For a tool with three parameters, this is incomplete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It explains 'days' (time window) and 'limit' (implicitly via 'newest first' but not explicitly), but it doesn't explain the 'folder' parameter at all. The description adds some meaning for 'days' but leaves 'folder' and 'limit' semantics unclear.

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

Purpose4/5

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

The description states a specific verb ('modified') and resource ('notes') with a clear time window ('last N days') and ordering ('newest first'). It distinguishes itself from siblings like list_notes and stale_notes by focusing on recency, though it doesn't explicitly name an alternative.

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

Usage Guidelines3/5

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

The description implies a use case: retrieving recently modified notes. However, it doesn't explicitly state when to use this tool versus alternatives like list_notes, find_notes, or search_notes, nor does it mention any exclusions or prerequisites.

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

resurface_notesC

Random notes pulled up for re-reading -- the anti-write-only-vault move.

Re-read them, then either link them somewhere new, sharpen the claim, or archive them if they no longer hold.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
folderNo
with_bodyNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description must disclose behavioral traits. It mentions the purpose and subsequent actions but does not explain important behaviors: how random selection works, whether it modifies any state (e.g., marks as reviewed), or if there are any side effects. It does not contradict annotations (none exist), but it fails to disclose potential state changes or selection logic.

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

Conciseness4/5

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

The description is concise and front-loads the core purpose. It is a single sentence for the purpose plus a brief directive on next steps. It is efficient, but the lack of parameter details and depth on usage makes it slightly under-informative for a 3-parameter tool.

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

Completeness2/5

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

Given the complexity (3 optional params, no output schema, no annotations), the description is incomplete. It misses parameter semantics, any behavioral details like selection randomness or side effects, and doesn't clarify how it differs from related tools like `stale_notes` or `recent_notes`. An agent would struggle to call it correctly.

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

Parameters1/5

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

Schema description coverage is 0% and the description provides zero explanation of the parameters (count, folder, with_body). The agent has no information on what these control, their formats, or defaults beyond the bare schema. The description's mention of 'Random notes' and linking doesn't connect to the parameters, so the agent is left to guess.

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

Purpose4/5

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

The description clearly states the action ('Random notes pulled up for re-reading') and indicates it is about resurfacing notes for review, distinct from tools like `list_notes` or `stale_notes`. The purpose—revisiting notes to link, sharpen, or archive—is clear, though it doesn't explicitly name alternatives, but the unique framing distinguishes it from siblings.

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

Usage Guidelines3/5

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

The description gives guidance on when to use it: when you want to revisit random notes and take actions (link, sharpen, archive). However, it does not explicitly contrast with siblings like `related_notes` or `distill_queue`, so usage context is implied rather than explicit. It could be clearer about when not to use it, e.g., for targeted searches or when you need specific notes.

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

search_by_tagB

Find notes carrying a tag (frontmatter tags or inline #tag). Nested tags match: ml also matches ml/rl.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYes
limitNo

TDQS

B3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose that nested tags match (e.g., 'ml' matches 'ml/rl'), which is a useful behavior. However, it doesn't mention case sensitivity, whether the search is exact or partial, or that it's a read-only operation. Given the lack of annotations, more behavioral disclosure would be expected.

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

Conciseness5/5

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

Two sentences, both dense with information. The main action is front-loaded, and the nested-tag nuance is appended without bloat. No filler words.

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

Completeness2/5

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

Given the presence of multiple sibling search tools and no output schema or annotations, this description is insufficient. It doesn't describe return format, sorting, or how it differs from other search tools. It also leaves parameter semantics partially unexplained.

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

Parameters2/5

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

Schema coverage is 0% as the description does not explain the parameters. It does partially explain the 'tag' parameter by mentioning frontmatter and inline tags, but doesn't specify format (e.g., with or without '#'). The 'limit' parameter is entirely unexplained, despite having a default.

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

Purpose4/5

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

The description states a specific verb ('Find') and resource ('notes') with a clear condition (carrying a tag). It distinguishes from siblings by focusing on tag-based search, but doesn't explicitly differentiate from similar tools like search_notes or find_notes, so it's not a 5.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives like search_notes, search_frontmatter, or find_notes. The description doesn't mention any criteria for selection.

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

search_frontmatterA

Find notes by a frontmatter key, optionally matching an exact value.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
limitNo
valueNo

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not reveal whether the search is case-insensitive, whether it only matches exact keys, or what happens when 'value' is null (e.g., finds all notes that have the key regardless of value, or only those with null value). It also doesn't specify the return format or pagination behavior, which is a gap for a search tool.

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

Conciseness5/5

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

The description is one sentence, extremely concise, and front-loads the main action ('Find notes') and the key concept ('frontmatter key'). It avoids any redundancy or fluff, and every word contributes to understanding the tool's primary functionality.

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

Completeness3/5

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

Given the complexity (3 parameters, search behavior) and that there is no output schema, the description is somewhat minimal. It covers the basics but misses important details like the behavior when 'value' is null, whether the search is exact-case sensitive, and how results are sorted or limited. For a search tool where precision matters, this is a gap, but it is not fatally incomplete.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. The description effectively explains the 'key' and 'value' parameters (key is the frontmatter key to search, value is an optional exact value to match). It implicitly suggests that 'value' being null might mean 'any value', but it doesn't explicitly define the behavior for null or the 'limit' parameter (though 'limit' is self-explanatory). This adds meaningful context beyond the schema's basic type definitions.

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

Purpose4/5

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

The description states a specific verb ('Find') and resource ('notes'), and clarifies the core behavior: searching by a frontmatter key, with an optional exact value match. This clearly distinguishes it from siblings like 'search_notes' (full-text search) and 'search_by_tag' (tag-based search), though it doesn't name them explicitly.

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

Usage Guidelines3/5

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

The description implies when to use this tool: when you need to find notes based on a specific frontmatter key, potentially with an exact value. However, it does not explicitly state when NOT to use it or mention alternatives such as 'search_notes' for content search or 'search_by_tag' for tags. There is also no guidance on limitations like case-sensitivity or partial matching.

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

search_notesA

Literal or regex search across note CONTENT, with surrounding lines.

Plain text matching, no embeddings. Read the excerpts, judge relevance yourself, then read_note the ones that matter.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
regexNo
folderNo
case_sensitiveNo

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It discloses that matching is literal/regex-based ('Plain text matching, no embeddings'), that results include 'surrounding lines,' and that results are excerpts requiring the agent to judge relevance. These details add meaningful behavioral context beyond the schema. It stops short of describing pagination, limits, or error behavior, but the essentials are present.

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

Conciseness5/5

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

The description is two sentences with no filler. The first sentence front-loads the core function and output, and the second sentence adds a practical workflow instruction. Every word earns its place.

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

Completeness2/5

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

Given five parameters, no schema descriptions, no output schema, and no annotations, the description is incomplete. It explains the search type and points to read_note for follow-up, but it does not explain parameter meanings, result format details beyond 'surrounding lines,' or edge cases. An agent would still need to guess at folder scoping and case sensitivity behavior, making the description insufficient for a fully informed call.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it only mentions 'Literal or regex,' which maps to the regex parameter. It does not explain query, limit, folder, or case_sensitive, leaving the agent to infer their meanings from names and defaults. This is a significant gap given the lack of schema descriptions.

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

Purpose5/5

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

The description states a specific verb ('search'), a specific resource ('note CONTENT'), and the method ('Literal or regex'), which clearly differentiates it from sibling tools like search_frontmatter and search_by_tag. It also indicates the output includes surrounding lines, making the tool's purpose unmistakable.

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

Usage Guidelines3/5

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

The description implies usage by saying 'Read the excerpts, judge relevance yourself, then `read_note` the ones that matter,' which gives a clear workflow. However, it does not explicitly state when to use this tool versus alternatives like search_frontmatter or search_by_tag, nor does it provide exclusions or conditions. The 'Plain text matching, no embeddings' line hints at a limitation but does not offer a direct alternative.

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

stale_notesC

Notes untouched for N+ days, oldest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
limitNo
folderNo

TDQS

C2.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does state that results are ordered 'oldest first,' which is a behavioral trait, but it does not explicitly indicate that the operation is read-only, describe the output format (e.g., list of note IDs/titles), or mention any side effects or prerequisites. This is a minimal disclosure.

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

Conciseness2/5

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

The description is only seven words, which is concise but under-specified. It lacks a complete sentence and omits essential details about the tool's operation and parameters. It is not front-loaded with the most critical information; it simply gives a fragment that could be interpreted in multiple ways.

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

Completeness1/5

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

Given the tool has three parameters, no output schema, and no annotations, the description is severely incomplete. It fails to explain any parameter, describe the return value, or provide usage context. An agent would have insufficient information to know how to call the tool correctly or what to expect.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must explain the parameters. It does not. The phrase 'N+ days' loosely corresponds to the 'days' parameter, but it never explicitly names or explains 'days', 'limit', or 'folder'. The schema itself is the only source of parameter meaning, and the description adds no clarification.

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

Purpose4/5

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

The description 'Notes untouched for N+ days, oldest first' clearly identifies the tool's purpose: it retrieves notes that have not been modified for a specified number of days, sorted by age. The term 'untouched' and the ordering criterion effectively distinguish it from siblings like recent_notes or list_notes, though it lacks an explicit verb such as 'list' or 'retrieve'.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool over alternatives. The name and description imply it is for finding stale notes, but no comparison to recent_notes or other query tools is provided, and there is no mention of appropriate contexts or exclusions.

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

update_frontmatterB

Merge keys into a note's YAML frontmatter.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
updatesYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. 'Merge' usefully communicates that the operation is additive/updating rather than wholesale replacement of the frontmatter. However, it does not disclose whether frontmatter is created if absent, how nested updates are handled, or what side effects or return values should be expected.

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

Conciseness5/5

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

A single short sentence with no filler. The verb ('Merge') and resource ('YAML frontmatter') are front-loaded, and every word earns its place.

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

Completeness2/5

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

For a mutation tool with no annotations, no output schema, and zero schema description coverage, the context is too thin. An agent must infer critical details about the updates object, path resolution, return values, and failure modes.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It implies that updates is the payload of keys to merge and path identifies the note, but it never explicitly defines the path format, the requirement for updates to be an object of key-value pairs, or merge semantics for nested keys.

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

Purpose4/5

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

The description states a specific action—'Merge keys'—and a precise target: 'a note's YAML frontmatter.' This clearly separates it from content-focused siblings like append_to_note and patch_section, though it does not explicitly name alternatives, so it falls just short of a 5.

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

Usage Guidelines3/5

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

There is no explicit guidance about when to use this tool versus alternatives such as create_note, patch_section, or append_to_note. The description implies its niche (frontmatter editing) but provides no exclusions or routing.

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

vault_healthA

Where the graph is fraying: undistilled backlog, orphan notes, unresolved [[links]], most-connected hubs, per-folder counts.

Use it to pick the next maintenance job -- an unresolved link is usually a note worth writing; an orphan is usually a note worth linking.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It communicates a read-only diagnostic purpose by listing what the report contains and by framing the output as an aid for choosing maintenance work, not performing it. It does not explicitly state 'read-only' or describe return format, but for a zero-argument health overview the implied behavior is clear.

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

Conciseness5/5

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

Two sentences deliver a concise list of report contents and an actionable use case. The opening metaphor is vivid but immediately followed by concrete metrics, and every word earns its place.

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

Completeness5/5

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

For a no-input tool with no output schema, the description fully covers what the report contains and what decision it should inform. An agent can correctly select and invoke vault_health without needing additional context.

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

Parameters4/5

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

The input schema has zero parameters, so there are no parameter semantics for the description to clarify. The baseline of 4 for no-parameter tools applies, and the description does not introduce any conflicting or confusing parameter-related claims.

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

Purpose4/5

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

The description names the resource (vault graph health) and enumerates the specific diagnostic categories: undistilled backlog, orphan notes, unresolved links, most-connected hubs, and per-folder counts. It is clear how this differs from siblings like list_notes or stale_notes, though it lacks an explicit imperative verb such as 'show' or 'report'.

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

Usage Guidelines4/5

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

The second sentence gives an explicit usage context: 'Use it to pick the next maintenance job.' This tells the agent when to call the tool. It does not name alternatives or provide exclusions, but the health-report focus is distinct enough to guide selection.

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

vault_infoA

Describe the vault: root path, folder taxonomy, note counts, method.

Call this first in a session so you know the structure you are writing into. The taxonomy is data (.secondbrain/config.json), not code.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of telling an agent what the tool does. 'Describe' strongly implies read-only behavior, and the description helpfully notes the taxonomy is data in .secondbrain/config.json rather than code. However, it does not explicitly state that the call has no side effects, does not mention performance, or clarify how 'method' is derived. The config location is a useful disclosure, but some behavioral traits are left implicit.

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

Conciseness5/5

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

The description contains only two sentences: the first defines exactly what the tool returns, the second gives usage guidance and a crucial data-source architectural note. Every sentence earns its place, and the guidance is front-loaded before the caveat. No filler or redundancy.

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

Completeness4/5

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

The scenario is a zero-parameter read-only info tool with no output schema. The description is complete enough: it states what will be returned, when to call it, and where the taxonomy lives. It could add that the call is non-mutating, but that is reasonably inferable from 'describe' and from the strong usage direction, so this counts as a minor omission.

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

Parameters4/5

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

The tool has zero parameters, so the input schema already covers everything. The description adds no parameter-specific semantics, but none are needed. Per the rubric, a zero-param tool gets a baseline of 4, and the description gives enough via the output content to keep it at that level.

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

Purpose5/5

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

The description uses a specific verb ('Describe') and resource ('the vault') and enumerates distinct outputs: root path, folder taxonomy, note counts, method. This clearly separates it from sibling tools like vault_health, which likely focuses on health checks, and from note/crud tools that operate on notes rather than vault structure.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use guidance: 'Call this first in a session so you know the structure you are writing into.' This tells the agent to invoke it before mutations show up. It does not name any alternative tool, but none of the siblings serve the same purpose, so the lack of explicit exclusions is not a significant gap.

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.

  1. 27 tool updatesv0.1.0
    • First observedappend_to_note
    • First observedarchive_note
    • First observedbacklinks
    • First observedbuild_map
    • First observedcapture_session
    • First observedcreate_concept_note
    • First observedcreate_note
    • First observeddistill_queue
    • First observedfind_notes
    • First observedinit_vault
    • First observedlist_notes
    • First observedlog_entry
    • First observedmark_distilled
    • First observedmove_note
    • First observedpatch_section
    • First observedread_daily_log
    • First observedread_note
    • First observedrecent_notes
    • First observedrelated_notes
    • First observedresurface_notes
    • First observedsearch_by_tag
    • First observedsearch_frontmatter
    • First observedsearch_notes
    • First observedstale_notes
    • First observedupdate_frontmatter
    • First observedvault_health
    • First observedvault_info

TDQS

B3.4/5.0

Scored across 27 tools

Disambiguation5/5

Every tool targets a distinct operation: listing paths vs. searching by name/content/tag/frontmatter, editing via distinct primitives (create/append/patch/frontmatter), and graph-specific tools (related, backlinks, stale, recent). The search tools are clearly separated by what they search (name vs. content vs. tag vs. frontmatter), minimizing confusion. Even the distillation workflow tools (capture_session, log_entry, distill_queue, mark_distilled) each have non-overlapping responsibilities.

Naming Consistency4/5

Most tools follow verb_noun snake_case (create_note, move_note, search_notes, build_map). A few are noun-first (vault_info, vault_health, backlinks) and one adjective_noun (distill_queue). The convention is predominantly consistent, and any deviations are clear from context. The minor inconsistency keeps it from a perfect score.

Tool Count4/5

At 27 tools, this exceeds the typical 15-tool threshold, but the server manages a full Personal Knowledge Management system: CRUD, multiple search modes, graph analytics, session capture, distillation workflow, health checks, and map building. Each tool addresses a distinct need, so the count feels justified rather than bloated. It is on the heavy side but appropriate for the scope.

Completeness5/5

The tool surface is remarkably complete for a second-brain vault: full note lifecycle (create, read, append, patch, move, archive without deletion), comprehensive search (name, content, tag, frontmatter), graph operations (backlinks, related, stale, recent), a distillation pipeline (capture, log, distill, mark_distilled), and maintenance utilities (health, map, resurface). The only missing operation is permanent deletion, which is a deliberate design choice. This is a fully realized workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Turns your Obsidian vault into an MCP-enabled workspace with tools for reading/writing notes, managing folders, running semantic searches, and maintaining long-term memory—all while keeping data local to your vault.
    149,900 npm
    153
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A private, local AI second brain for Markdown notes, providing hybrid search and read/write tools for MCP-compatible AI clients like Claude and Cursor.
    6
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Enables local hybrid search over Obsidian and Markdown vaults via MCP, combining vector retrieval, full-text search, reranking, graph navigation, and safe CRUD while keeping data local.
    43
    MIT