Skip to main content
Glama

Ontology Atlas

The current Ontology Atlas macOS app with the Online Store project selected: the domains it contains named around it, everything unrelated receding, and the right inspector showing the project record, its code-evidence state, and the offer to connect a code folder


In 30 seconds

AI agents change a codebase faster than a person can review every line. A Git diff records which lines moved; the agent's summary is its own claim. Neither preserves which product capability the code serves, why its boundaries exist, or what the change can affect.

Atlas keeps those answers in an atlas/ folder of Markdown inside the repository, so meaning is cloned, branched, and reviewed with the code. Each file's frontmatter declares what it is — project, domain, capability, element, or a linked document — and what it points at. That folder is the whole database.

Because the kinds and relation types are a small fixed set, the folder is not just readable but computable. Atlas compiles it and answers what a notes tool cannot: what breaks if I change this, what is this capability's blast radius, which paths connect these two things, what is disconnected, what is stale. Your agent asks over MCP; you read the same answers as a map. An agent's write is not accepted meaning — it lands as Markdown and a Git diff a person can correct, reject, or keep, and the answers stay bounded: observed capabilities are never treated as exhaustive and unknown coverage is never shown as green. The five-kind discriminator and the standards boundary live in the vault specification.

Related MCP server: devrecall

Status — read this before installing

The download page is the release authority: a generated record of the published tag, real asset sizes, checksums, platforms, and signing state. This README pins no tag, so it cannot contradict the files you are about to install. GitHub Releases is the second direct source.

  • The unsigned Windows beta is a real risk, not a formality. SmartScreen may warn about an unknown publisher, and a managed work PC may refuse the installer outright. Security states what is and is not promised.

  • Installing the desktop app installs the agent surface. Both bundles carry the compiled MCP server. There is no npm package; every other platform runs the browser app, the CLI and MCP server from a source checkout, or the MCP server as an .mcpb bundle or a container image (channels).

  • A -rc.N build walks the same signing, notarization, installer, and updater checks as a final one — what it lacks is a wide run behind it. The in-app updater reads a fixed Pages manifest staged from the newest non-draft release, release candidates included, and every archive must pass the bundled signature check before installation.

  • Screenshots demonstrate the product journey, not release availability.

Where it stands

Not a roadmap. This summarizes behavior documented in the feature inventory, the specification, and the decision ledger.

Working today

  • A Markdown folder is the whole database — read and written in place, with no import step, no index to build, and no account.

  • The macOS app, Developer ID signed and notarized, with the compiled MCP server inside its bundle, and the hosted web app as a no-install gateway.

  • MCP over stdio for Claude Code, Cursor, VS Code, Codex, and any other client, typed and advertised through tools/list. Agent guide.

  • One-button agent setup that ends in a real proof — paths shown before writing, then an agent restart and mcp-verify. File presence is never presented as a live connection.

  • A CLI with the same authority as the agent — scaffold, validate, dry-run writes, traversal, blast radius, commit preflight, agent handoff. CLI reference.

  • Every surface reads that one folder — Map, Architecture, Docs, Library, Insights, Projects, Agents, MCP, and Git History.

  • Versioned AI analysis kept as local Markdown, with its evidence and selectable history, and measured violations instead of an invented maintainability score. Analysis records.

  • Documents of any format gather in the Library, kept byte for byte, with wiki pages required to cite their source on every fact.

  • External MCP servers attach to the in-app chat — one switch per server, off by default, tokens only in the keychain. Atlas never sits in that path.

  • JSON-LD and GraphML export off the same deterministic compile artifact, so the vault opens in rdflib, Protégé, Gephi, Cytoscape, NetworkX, or Neo4j.

  • init installs the agent's procedures where the agent runs, and prints the one sentence to paste into your own CLAUDE.md or AGENTS.md. Atlas does not edit files you wrote.

Shipping, not settled

  • Windows x64 is an intentionally unsigned public beta — same folder and MCP surface as macOS, no signature.

  • The vault format is v2.0-rc, an RFC open for comment that documents behavior already enforced by contract tests here and carries its own kill criterion. Specification §0.

  • Linux has no packaged build — the browser app or a source checkout, same vault, fewer screens.

  • Web and desktop do not promise the same screens, and that is not a backlog. Git history and offline work are desktop capabilities; the web cannot run git or native bridges.

What we decided not to build is What this is not.

The journey

1. Open a folder

Point the app at a directory of Markdown and it reads it in place. Ask it to start from your code instead, and it creates exactly one folder inside the project you picked:

your-repo/
├── src/
├── package.json
└── atlas/                 ← the whole ontology, and nothing else
    ├── project.md         one project document
    ├── domains/           what the product is made of
    ├── capabilities/      what each area can do
    ├── elements/          the implementation pieces they work with
    ├── architecture/      reviewed role and dependency profiles, when you have one
    ├── sources/           the documents around the code, kept exactly as they arrived
    ├── wiki/              one page written from those sources, each fact cited
    └── .ontology-atlas/   gitignored, local only: bindings, audit log, activity

That location is a decision, not a default. A map kept outside the repository travels on one laptop, and the change to the code lands in a pull request while the change to its meaning does not. Inside, the two move together in one diff — so commit atlas/, push it, or copy it to another machine, and the map goes with it. The exact path is shown before anything is written, and an existing atlas/ is reused and reported rather than overwritten.

Every screenshot below reads samples/storefront, an example folder in this repository; node cli/src/index.mjs overview samples/storefront prints its current census.

The current Docs workspace in the installed macOS app, with the vault tree open on the capabilities folder, the Checkout document beside it, its expanded frontmatter, word count and source date, its backlinks, and a link back to the same node on the map

Docs is the same folder without the canvas: preview or edit Markdown, inspect the frontmatter that becomes the graph, follow backlinks, and jump back to the map. There is no imported copy to synchronize.

2. Connect your agent

The current Agents screen in the installed macOS app, listing the three coding tools found on this computer with their readiness, Open a chat with this tool and Check connection for the two that can run inside Atlas, the note on which tools can pause writes for review, and the option to show the other 36

Agents finds the coding tools already installed on this computer and opens a conversation beside the map. MCP holds the folder's own connection, the setup for each client, and the Connectors that attach external servers to that conversation.

The current MCP screen in the installed macOS app, with Share this folder open: how many connection files are ready and which file comes next, one connect button each for Claude Code, Codex, Cursor and Antigravity, the note that the server runs only while a conversation needs it, and the two later steps to restart the agent and confirm the connection

  • Connect once, with visible scope. The flow names the folder and config it will change, and writes plain text you can inspect. Claude Code, Codex, Cursor and Antigravity get one button each; any other client uses the snippet.

  • Then prove it from the agent's folder. mcp-verify starts the bundled server, reads the active vault, and reports the real result or failure.

  • The conversation does not stop at the first map. Up to three next steps derived from the current vault appear under a completed answer; choosing one fills the composer for review and never sends or writes on its own.

  • Nothing stays running. The server speaks stdio, opens no port, and makes no network request (Security).

3. Read the map

The current map with the Orders domain selected: unrelated concepts recede, the concepts it contains are named on the canvas, and the right inspector lists contains, used by, leans on, and belongs to beside Ask the agent, Edit, and full detail

Selecting a node dims everything unrelated and opens its record without hiding the node behind the inspector — a visual hierarchy for a person and typed parents, evidence and actions for an agent, from the same fact. Recent changes can narrow the map while keeping project and domain context, and Footprints record the order in which you opened concepts.

The current 3D picker in the installed macOS app, offering Flat for the ordinary 2D map, Cone for containment drawn as nested cones, and Cloud for clustering by what relates to what

Three spatial readings stay explicit rather than mixed: Flat is the normal 2D map, Cone hangs each parent's children on a cone with height as the containment tier, and Cloud lets relations determine all three axes. Changing the view never changes the graph.

4. Gather the documents in the Library

The current Library in the installed macOS app: the Sources 3 and Wiki 1 tabs over Add files, Find documents and Bring from a service, three gathered documents with their format, byte size and either a not-compiled badge or a written-up check, the line saying two are not written up yet, and beside them the Gather, Compile and Read stages with Gather done, Compile next on the two waiting sources, and Read offering the one page that exists

A codebase's meaning is rarely only in the codebase. The plan, the spreadsheet, the handover note, the page somebody wrote on a wiki — the Library keeps those exactly as they arrived, under sources/, and nothing is parsed on arrival. Each row carries only what a folder listing can say: format, byte size, and whether it has been written up. Open one and Atlas says so in as many words — it has never read the file, and the hash it shows exists because a page claimed the source.

What is written from them is the other half, and the counts stay honest about it: two of these three are not written up yet, and the folder says so rather than presenting one page as coverage. A wiki page cites its source on every fact, from the same template whether a person or the in-app agent writes it, and wiki-validate names the lines that do not carry a citation rather than grading the page. Compile starts one conversation that reads the sources and writes the page; the traffic goes from your coding agent straight to its own provider, which the screen states instead of implying that Atlas sits in the middle.

Library also works without code or ontology nodes. Keep a question and its cited answer, inspect source changes, request an updated draft through Claude Code or Codex ACP, and compare before saving a new revision. Earlier answers remain available. Local Compile has its own read and approval path. See retained answers.

5. Plan against reviewed architecture

The current Architecture screen in the installed macOS app, comparing the seven reviewed roles of this repository, numbered from Routes down to Shared foundation with what each role is in two lines, against the imports observed in code beside each one, a check in the Delta column where they agree, every stroke stating its rule as a sentence and the measured crossing with its import count, and the reviewed structure and inspection receipt named above with Re-inspect source and Roles and rules

Architecture stays separate from the map. It sets what a person reviewed beside what an agent observed in the code, one role per row, with the difference in the middle; every stroke states its own sentence, and the same profile always draws the same picture. Findings & history keeps every inspection receipt. Pattern names such as Feature-Sliced Design, Hexagonal or Clean Architecture are reviewed declarations: conformance is derived from source evidence, never inferred from folder names.

6. Review a relation beside its node

The current relation review beside the map, showing the source, relation type, target and the reason typed for it, then what the concept depends on as a Now list and an After list and the connection reason that will be written, above Keep editing and Confirm and write

Atlas shows a directional preview on the map, then a compact review of the source, type, target, reason, and exact frontmatter fields. Confirm and write is the only point that changes the file.

7. Review the change, then record it

The current History screen in the installed macOS app, showing one unsaved concept change, the exact Markdown diff of the dependencies and relation_notes lines, the current branch and its remote with Fetch, Pull and Push, earlier vault commits, and the explicit save action

Whatever wrote — you, the map editor, the CLI, or an agent over MCP — lands here first as a diff you read before it becomes history. Above is the change confirmed in step 6: two frontmatter lines, still unsaved. Git is scoped to the vault, and files outside the folder you picked are never touched.

The CLI writes the same two lines, says what it would do before touching a file, and refuses a dependency nobody explained ($ATLAS is the entrypoint set in Running from source):

$ node $ATLAS relate capabilities/order-cancel capabilities/refund dependencies ./storefront --dry-run \
    --why "Cancelling a paid order has to give the money back, so cancellation cannot finish without refund processing."

capabilities/order-cancel --dependencies--> capabilities/refund
  verdict matches_existing_schema · exists no
  schema  capability --dependencies--> capability
  pattern count 53 · resolved 53 · external 0 · unresolved 0
  recommendation safe_to_add · No exact or inverse edge found; capability --dependencies--> capability is an existing schema pattern.

dry-run would write dependencies on capabilities/order-cancel → capabilities/refund (no file changed)

Drop the --why and it stops rather than guessing one. An edge in a shape the vault has never used comes back as new_schema_pattern · review_new_schema, so a drifting agent is visible before it writes.

8. Keep it healthy

The current Analysis screen in the installed macOS app, with four measurements above the tabs (concepts by kind, relations by type, health in words, the last four weeks), the Do next, Not held, Inventory, Connections, Boundaries, Growth, Recent changes, Structure and Flow tabs, and the things to fix grouped by kind with the first group open on a pair whose names overlap

Insights opens on four measurements: concepts by kind, relations by type, the folder's health in words rather than a score, and the last four weeks of change. Do next is one row per kind of finding, and the counts add up to the title, always. Where a missing back-link can be repaired from two facts already on disk, one sheet names each file it would touch and nothing is written until you apply.

Growth replays the folder's own Git history week by week and stores nothing — the numbers are recomputed from commits each time the tab opens. A folder with no commits is told there is no history to show rather than drawn as a row of zeroes, because a zero would claim the folder was empty.

9. See the shape of the whole project

The current Projects screen in the installed macOS app, showing the Online Store project, its derived capability, element, domain, document and relation totals, nine aligned domain composition rows, and routes back to details and the map

Nothing here is maintained by hand. Frontmatter has no project: key — the runtime walks the containment graph from each project root and derives coverage from how the documents link to each other.

What your agent gets

Ask what breaks if I change this? and Atlas follows only approved dependency declarations. It does not turn folder structure into causal confidence:

$ node $ATLAS blast-radius capabilities/mcp-server docs/ontology --depth 2
capabilities/mcp-server — blast radius (depth 2, incoming)
  risk unknown · 1 node · 1 relation · 0 cross-domain

impact certainty unknown · declared 1 · rationale 0 · source-backed 0
Counts below follow declared depends_on only. Use reachability/subgraph for structure;
do not read unknown as low risk.
  • Focused context, not a repository dump. A brief carries the project, domain, evidence, impact boundary, first tools, and stop conditions; for a task that only reads, OATLAS_READ_ONLY=1 returns one compact batch.

  • Typed answers. Paths and reachability explain structure, blast radius follows declared dependencies only. No graph database, no hosted memory.

  • Writes that survive review. Analysis is side-effect free by default, destructive operations dry-run first, renames repair backlinks, and mtime guards protect concurrent human edits.

The CLI carries the same authority for sessions that cannot attach a connector: MCP guide · CLI reference.

What we measured, and the mistake we found in it

A paired benchmark gives two sides the same source and question — one with a prepared vault, one with nothing. The first run looked like a large win, 0.25 against 0.875, until re-scoring showed most of that gap was not a comparison: the answer key mostly required Atlas's own concept names, which exist only inside the vault. We had published, in part, a vocabulary test that only one side could sit.

Subject

The part both sides could earn

The part only Atlas could earn

What we published before

Greenfield fixture

0.75 → 1.00

0 → 0.83

0.25 → 0.875

Brownfield fixture

0.75 → 1.00

0 → 0.57

0.28 → 0.74

Each cell reads without Atlas → with Atlas. The control side named 100% of the source files it should have named in every run, and the gap left over rests on one word: the key wanted excludes, and an answer saying "explicitly outside it" scored zero.

So the honest status is that we have not yet measured a difference in answer quality, and Atlas was slower — a median of 17 and 33 seconds here, 28.2 and 51.1 in a separate run that carried one change through code, tests, commit, merge and cleanup on both sides. What it does show is narrower: only the Atlas side returned names you can look something up by. capabilities/checkout is an address a person or an agent can resolve next session, in another tool, months from now; "the checkout feature" is not. The re-scoring found a bug on our side too — the Atlas run dropped its own concept names in a third of the harder cases. Blind human grading is next; a stronger claim waits on unfamiliar repositories, that grading, and the measured cost of maintaining a vault. Method and every raw answer: paired findings · the correction · change-flow run · benchmark log.

Why not just use a notes tool

Local Markdown, git diffs, and MCP are table stakes; notes tools such as Basic Memory already provide them. Atlas adds a product ontology and a workbench where people and agents judge the same facts. If you only need an agent to remember conversations, a notes tool is lighter.

Notes with MCP

Hosted graph memory

Ontology Atlas

Store

Markdown you own

Vendor database

Markdown you own

Structure

Freeform notes and links

Vendor-defined types

Project → domain → capability → element, documents, typed relations

Graph questions

Note traversal

Graph engine

Blast radius, reachability, cycles, paths, centrality, health

Evidence from code

Hand-authored

Corpus ingestion

Bounded read-only proposals; nothing lands until approval

Human surface

Notes app

Vendor console

Local Map, Architecture, Docs, Library, Insights, Projects, Agents, MCP, History

The argument and its sources are in Foundations.


A vault is just files

Everything below is the contract rather than the tour: how the folder is stored, what Atlas will never do, and how to run and verify it from source.

One Markdown file is one node. Frontmatter is the machine-readable record; the body is the explanation a person judges.

---
uid: 71890f3e-7b5d-4c0a-8f14-123456789abc   # permanent identity, kept through renames
slug: capabilities/token-issue
kind: capability
title: Token issue
domain: domains/auth
path: src/auth/token-service.ts          # a path — code evidence
elements:
  - elements/jwt-signer                  # a slug — an implementation-role node
dependencies:
  - capabilities/session-refresh         # a slug — another node
---

Issues access and refresh tokens for authenticated users.

A path points at code; a slug points at a node. Mixing them is the most common first mistake, and node $ATLAS validate reports it as a dangling reference. uid is the permanent identity, minted once and kept through a rename; the slug is the readable current address; a source location belongs in path:, never in a slug. Relations sit on the declaring file the same way, one frontmatter line from which Atlas derives the edge and its backlink — dependencies directed, relates symmetric, so the map never turns similarity into causality.

The reading spine is small on purpose — project → domain → capability → element, with document describing concepts anywhere on it — and an artifact earns a node only when it helps someone understand a capability, trace impact, or run the right proof. Curated, not exhaustive. There is no cap on how many nodes a vault holds: a wide hub is a review signal, not a limit, an analyzer's packet bound keeps one proposal readable and is never a graph bound, a bridge node has to earn its layer, and an external field trial's ontology is never merged into this product's vault. Each rule's authority is the quality authority map, and the practical test is what becomes a node?.

Three kinds of file share the folder, and only one is the graph:

Kind

Where

What makes it that

In the graph?

Raw source

sources/**

any format, kept exactly as it arrived

no — only .md reaches the parser

Wiki page

wiki/**.md

Markdown with no kind:

no — kind: is what makes a node

Ontology node

anywhere else

kind: in frontmatter

yes, and only these

Inside wiki/, _template.md is the shape every page is held to and _log.md records each compile or check; _-prefixed files are furniture, not pages. The folder is always named atlas/ (step 1), fixed so a teammate can say it and an agent's config can point at it without guessing, and init --documents writes the same folder without the node starters for people who have documents and no code. Full contracts: the relations guide and the vault specification.

Local-first, by construction

  • Your disk is the database. Frontmatter is the graph, confirmed writes go back to the folder you picked, and Git is the history. There is no other store.

  • No Atlas backend, account, or telemetry. The web app is a static export; the desktop app checks the public updater manifest once a day and uploads no vault content. A connected coding agent talks to its own provider only when you ask.

  • Two ways in, one folder. The hosted web app can open a local folder through the File System Access API. The desktop app uses a Tauri bridge to your selected folder and keeps it open as a workspace.

  • The Tauri macOS shell is a shell, not a silo. MCP and CLI still read the selected folder directly, and the bundled server is a file your agent launches itself, so it keeps working when the app is closed.

What this is not

  • Not a general-purpose ontology editor. The ontology describes a codebase; a business concept belongs there when it explains what that codebase builds, why a boundary exists, or what a change can affect. The Library takes general sources and wiki pages with no code nodes at all.

  • Not a code index, and not an IDE. Grep, language servers, AST indexes and CodeGraph answer where a symbol lives and what calls it; Atlas replaces none of them and answers why that artifact matters, which capability it serves, and what to verify before changing it. An IDE for codebase meaning is the useful analogy, and it stops there: Atlas does not edit, build, run, or debug code.

  • No automatic acceptance of generated knowledge. Saving a wiki page or answer preserves it for review; it does not make its claims true or promote it into accepted ontology meaning.

  • Not an RDF, OWL, SKOS, or SHACL implementation. The export is a bounded graph shape; the vault is not an RDF serialization, the validator is not a SHACL processor, and the query engine is not a reasoner. A persisted relation is a declared claim, never an entailment; an absent one is a visible gap, never a negative fact. Specification §5.2.

  • Not a service, and not on npm. No backend, account, telemetry, daemon, or port; npx ontology-atlas is a 404 and not a future feature. The MCP server still reaches the ecosystem's registries as a release bundle or a container image, neither of which is a package registry.

  • Not extensible by running other people's code. There will be no third-party plugin runtime. Extension happens through MCP tools, agent skills, and files in your own vault — things a git diff shows you before they run.

  • Not finished. Every public build so far is a release candidate.

Running from source

Linux and every other platform without a packaged build run the browser app, or the CLI and MCP server from a source checkout: Node.js 24 and pnpm, one clone outside the project you are describing, then init inside your own repository and mcp-verify to prove the live connection. The exact commands, the two required installs, and the reason init refuses to run inside the Atlas clone are in set up from a source checkout.

Documentation

Use it: hosted guide · features · MCP setup · CLI reference Model a vault: what becomes a node? · relations · v2 specification · quality authority map Understand it: product direction · foundations · architecture · security · decisions

Contributing

Issues and pull requests are welcome, and the most valuable report today is pointing Atlas at a real repository and showing where the proposed meaning, the agent handoff, or the validation falls short.

Read CONTRIBUTING.md first — external pull requests come from forks, and that is a security boundary rather than a formality. Inside this repository AGENTS.md is canonical for people and agents alike, and product decisions route through pnpm po:route -- --help from change facts rather than a self-declared risk.

Verification starts with pnpm checks:changed, which picks the focused gates for the files you changed; -- --run executes every recommendation and stops at the first failure, and it is the last command before a pull request.

Command

What it answers

pnpm checks:changed

Which gates this change actually needs

pnpm docs:check

Docs gates, including pnpm docs:language, pnpm source:language, pnpm changelog:check, pnpm dev-checks:check

pnpm knip

Dead files, exports and types across every scope

pnpm decisions:find <terms> · pnpm decisions:check

The decision record to cite or overturn, and whether this change owes one

pnpm harness:report · pnpm harness:outcomes

What the agent hooks caught, and whether that lane still earns its place

Development checks is the full gate reference, one entry per area; map testability owns canvas performance, readability, contrast, and instrumentation.

License

MIT

Available Tools

38 tools
absorb_documentA
Destructive

Slice 0 (PRODUCT-PLAN-2026-07.md §4/§9) — the "absorption tool". Converts a CLAUDE.md/AGENTS.md-style markdown file into typed vault nodes so a tech lead's existing agent-instruction file stops needing dual maintenance. Splits the file by ## sections and classifies each:

  • rule/policy/decision sections → kind: document nodes with a role: policy frontmatter extra.

  • architecture/component sections → element/capability SUGGESTIONS only — never auto-written; review and land with add_concept if useful.

  • sections matching an injection-suspect pattern (Tier 1 — imperative instruction-hijack phrasing, shell/SQL fragments) are excluded from absorption regardless of category and reported for human review. The file body is always treated as untrusted data; parsing never executes or evaluates its content. Two-stage safety, same shape as delete_concept:

  1. Without confirm: true the call is a dry-run — returns the classification plan per section, no writes.

  2. With confirm: true, absorbed sections are written as document nodes, the source file is backed up to <file>.pre-absorb.bak, then rewritten into a "slim pointer" that reproduces every non-absorbed section (suggested, unclassified, or injection-suspect) verbatim — content is never destroyed. Throws instead of overwriting an existing backup file. The canonical source path must be inside repoRoot; outside paths (including symlink escapes) require an reviewed dry-run plus explicit allowOutsideRepo:true.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoActually write when true. Omit or false for a dry-run (plan only, no writes).
filePathYesPath to the CLAUDE.md/AGENTS.md-style markdown file to absorb (absolute, or relative to the MCP server cwd).
allowOutsideRepoNoExplicit destructive opt-in required only when filePath resolves outside repoRoot. Dry-run reports outsideRepo and keeps canConfirm:false without it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
titleNo
dryRunYes
changedNo
messageYes
summaryYes
writtenNo
filePathYes
sectionsYes
backupPathNo
canConfirmYesTrue only when repeating the call with confirm:true can perform the previewed change without another explicit safety opt-in.
outsideRepoYes
sourceLabelYes
wouldChangeYesTrue only when the dry-run predicts a disk or Git change.
previewReadyYesTrue only when this response is a complete dry-run preview that an agent can review.
blockedReasonsYesMachine-readable human explanations for every condition currently blocking confirmation.
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark it destructive, but the description goes well beyond that by disclosing the two-stage confirm/dry-run flow, backup creation, slim-pointer rewrite, throw-on-existing-backup behavior, never-destroys-content guarantee, and outside-repo restrictions. There is no contradiction with the annotations.

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 long but densely packed: the primary purpose is front-loaded, and each subsequent sentence covers a distinct safety or classification rule essential to correct invocation. No filler or repetition of schema boilerplate.

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 complex mutation tool with an output schema and annotations, the description covers the full decision surface: classification, dry-run vs confirmed execution, backup/replacement behavior, injection-suspect handling, and path-safety constraints. An agent has enough to invoke it correctly and predict side effects.

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

Parameters5/5

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

Although the schema documents the three parameters at 100% coverage, the description adds substantive semantics: confirm's dry-run vs write behavior, the review requirement and allowOutsideRepo for outside paths, and the canonical-path-inside-repoRoot constraint. This meaningfully helps an agent set parameters correctly.

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 sentence identifies a specific verb ('converts') and resource ('CLAUDE.md/AGENTS.md-style markdown file') with a concrete output ('typed vault nodes'), and the classification rules further distinguish it from related tools like add_concept. It is not a tautology and gives an agent a precise job description.

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 intended input is explicit and the description tells the agent how to route suggestions ('review and land with add_concept if useful') and which sections to exclude. It falls short of a 5 because it does not explicitly state when to prefer this over other conversion/indexing tools or list negative conditions beyond injection-suspect sections.

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

add_conceptA

Create a new ontology node (.md file). Call when an AI agent finds a new capability / element / project from code analysis. Throws if the slug already exists — use patch_concept in that case. The frontmatter is normalized per kind (project gets domains/capabilities/elements empty arrays; capability gets elements: []; capability/element should also set domain: so the tree has a parent — missing extras come back as warnings in the response, not as an error. If another node already has the same title, a near-duplicate warning is included too — prefer patch_concept on the existing node over forking a duplicate. Successful writes return compact postWriteMaintenance (maintenance_plan) with count-safe byPhase / bySeverity / byKind queue buckets, action score, executable proposedAction, and current-page nextExecutableAction / nextReviewAction pointers so agents can immediately see graph cleanup / relation suggestions after the new node lands. For bulk creation (e.g. bootstrap flow with 5+ nodes) use add_concepts({concepts: [...]}) (batch, max 50, partial result) — saves K-1 round-trips. When kind is element: an element names a CONCEPT a capability uses (e.g. "jwt-token"), not a file. If your title is a bare path or ends in a source extension, you are describing evidence, not the concept — rename title to the role and put the path in path:, or if 3+ siblings under the same parent already look like this, call get_concept on the parent and consider patch_concept on an existing sibling instead of adding another file-mirror node. The same rule binds the slug: flat under the kind folder (elements/<role-name>), never a code path (elements/src/views/home is rejected) — path-style slugs collide the moment two files share a basename and the graph silently merges distinct nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoMarkdown body (optional). When omitted a kind-specific starter body is written so the file is self-explanatory in the editor.
kindYesproject / domain / capability / element / document. (vault-readme is reserved for the auto-generated README.md and should not be set by agents.)
pathNoOne canonical implementation entrypoint for a capability or element (repo-relative file or directory). Preserved as evidence and checked by validate_vault path drift.
slugYesVault-relative slug (omit the .md extension), flat under the kind folder — e.g. "elements/jwt-token", "capabilities/token-issue". A slug is the node's name, never a code path: "elements/src/views/home" is rejected (put the file location in path: instead).
titleYesDisplay title for the node.
domainNoParent domain slug. Strongly expected for kind=capability and kind=element — without it the node floats orphaned in the tree.
labelsNoPer-locale display names, e.g. { "ko": "결제", "en": "Payments" }. Written as `display_ko` / `display_en` frontmatter keys; `title` stays the single source for search/matching. Fill BOTH locales the vault serves — a single-locale entry comes back as a warning.
elementsNoElement slugs this node uses (project / capability).
capabilitiesNoCapability slugs this node owns (project / domain).

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
slugYes
changedYes
filePathYes
warningsNo
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only convey readOnly=false, openWorld=false, idempotent=false, destructive=false. The description adds substantial context beyond those: 'Throws if the slug already exists', missing extras return as warnings not errors, frontmatter normalization per kind, path-style slug rejection and silent graph-merging risk, and the postWriteMaintenance response shape. All consistent with annotations (idempotent=false matches the throw-on-exists).

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

Conciseness3/5

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

Every sentence carries real information and the first sentence front-loads the core purpose, but the body is a single dense wall of text with no paragraph breaks or bullet structure. Given the 9-parameter complexity some length is justified, yet it would benefit from scannable structure for a tool this rich.

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?

Exceptionally complete for a complex tool: covers when to call, alternatives, error semantics, normalization per kind, bulk path, slug/title constraints, and the response's postWriteMaintenance queue fields. The output schema exists so return values are covered structurally. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% so baseline is 3, but the description adds genuine semantic value beyond the schema: the title-vs-path rule ('a bare path or ends in a source extension' = evidence, rename to role), the slug flat-folder rule ('elements/src/views/home' rejected), and kind-specific element meaning ('names a CONCEPT a capability uses, not a file'). This materially helps correct parameter selection.

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?

Opens with a specific verb+resource: 'Create a new ontology node (.md file).' Immediately distinguishes from siblings by naming patch_concept (for existing slugs) and add_concepts (for bulk). An agent can tell what this does and how it differs from the surrounding tools without opening schemas.

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?

Gives explicit when-to-use ('Call when an AI agent finds a new capability / element / project from code analysis'), explicit exclusions ('use patch_concept' if slug exists, 'use add_concepts' for 5+ nodes), and even a near-duplicate rule (prefer patch_concept over forking a duplicate). No inference needed.

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

add_conceptsA

Batch-create multiple nodes in one call — same per-row shape as add_concept. Use after analyze_repo_structure or another reviewed proposal flow when the agent has K accepted candidates from the user — replaces K×add_concept round-trips. Each row is processed independently: existing-slug / invalid-kind / missing-required-fields / non-object row shape / unknown row fields surface as { slug, ok: false, error } rows whose errors include a concepts[n] row label, single unknown-field rows include receivedField plus one-row unknownFields, multi unknown-field rows report every unknown field with nearest hints and Received fields: ..., and duplicate input slugs report the later concepts[n] row plus first-seen concepts[m] with structured rowName / firstSeenAt; the rest still land. A row whose normalized title matches an earlier landed row in the same batch still lands but carries a near-duplicate warningpatch_concept the earlier node instead of forking the same concept (duplicates are the #1 growing-vault failure mode). concepts[] order in the response matches the input. Cap = 50 per call (split into multiple batches for larger sets). NO atomic rollback — if you need all-or-nothing semantics use single add_concept calls. Invalid-only batches return no row-level write metadata and no top-level postWriteMaintenance. When at least one row changes the vault, the response includes one compact postWriteMaintenance (maintenance_plan) with count-safe byPhase / bySeverity / byKind queue buckets, action score, executable proposedAction, and current-page nextExecutableAction / nextReviewAction pointers for the final graph. Rows whose title is a bare file path follow the same rule as add_concept above. Prefer one capability node covering a directory plus a short elements: list over one row per file, unless each file's role differs in a stated sentence.

ParametersJSON Schema
NameRequiredDescriptionDefault
conceptsYesArray of concept specs (max 50). Each row uses the same shape as `add_concept` input.

Output Schema

ParametersJSON Schema
NameRequiredDescription
conceptsYes
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses an exhaustive set of behaviors beyond what annotations provide: per-row independent processing, detailed error formats with row labels, duplicate-slug handling with `rowName`/`firstSeenAt`, near-duplicate warnings, non-atomicity, cap of 50, response ordering, postWriteMaintenance semantics, and the bare-file-path rule. None of this is implied by the annotations (`readOnlyHint: false`, etc.), and there is no contradiction.

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 long but densely packed with necessary operational detail; every sentence earns its place. It is front-loaded with purpose and usage before diving into error handling and edge cases. Slightly verbose, but justified given the complexity of the batch operation.

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 complex mutation tool with 1 parameter but many edge cases, the description covers everything an agent needs to invoke correctly: accepted input shape, error propagation, duplicate handling, caps, atomicity, response contents, and best-practice guidance (prefer capability nodes). The presence of an output schema further reduces the burden, but the description still exceeds what is structurally implied.

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 schema already provides 100% coverage: the `concepts` parameter is fully described with an array of objects, each field documented (slug, kind, title, body, path, labels, elements, capabilities) including patterns and max items. The description's 'same per-row shape as add_concept' adds marginal value, but the schema carries the semantic load. Baseline 3 is appropriate for this schema-rich situation.

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 opens with a specific verb+resource ('Batch-create multiple nodes') and explicitly contrasts with its singular sibling `add_concept`, making its scope and distinction unmistakable. It also states the input shape mirrors `add_concept`, so an agent understands exactly what this tool does without opening the schema.

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 specifies exactly when to use it ('Use after `analyze_repo_structure` or another reviewed proposal flow... when the agent has K accepted candidates'), when to prefer the alternative ('if you need all-or-nothing semantics use single `add_concept` calls'), and even provides batching guidance for >50 items. This fully disambiguates usage from siblings.

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

add_relationA
Idempotent

Add a semantic relation between two nodes. Appends to the matching frontmatter graph key (domains / capabilities / elements / dependencies / relates / contains / describes); domain sets the source node's inline parent domain. The relation type picks which key receives the entry. A new depends_on relation requires a nonblank why; an already-existing edge remains an idempotent read even if legacy data has no rationale. R11: optional expected_mtime — pass the source-side mtime from a prior get_concept so concurrent external edits throw VaultConflictError. Invalid relation type is rejected before endpoint slug resolution with a closest-value hint and structured valueName / receivedValue / suggestion / allowedValues repair fields in structuredContent, with no changed, alreadyExists, or postWriteMaintenance write metadata. Changed writes return compact postWriteMaintenance (maintenance_plan) with count-safe byPhase / bySeverity / byKind queue buckets, action score, executable proposedAction, and current-page nextExecutableAction / nextReviewAction pointers so agents can immediately see graph cleanup / relation suggestions after the edge lands. For multiple already-approved semantic edges use add_relations({relations: [...]}) (batch, idempotent, max 50). infer_imports.moduleEdges require exact-evidence review, a semantic rationale, and human approval first.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget slug.
whyNoOne-line rationale for this relation ("A leans on B because ..."). Stored in the SAME frontmatter write as the ref (relation_notes map) — write it whenever you know the reason; a graph edge without a why is a mind-map line, not an ontology claim.
fromYesSource slug.
typeYesRelation type.
expected_mtimeNoOptional conflict guard for the source slug. If the source mtimeMs differs at write time, the call throws.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
toYes
keyNo
fromYes
typeYes
changedNo
alreadyExistsNo
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.8/5.0
Behavior5/5

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

It goes well beyond the idempotentHint annotation by stating specifically that an existing edge remains an idempotent read even when legacy data lacks a rationale. It also discloses expected_mtime conflict behavior, VaultConflictError, rejection-before-endpoint-resolution, and rich postWriteMaintenance return behavior, while not contradicting the annotations.

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?

This is a long, dense paragraph, and it would benefit from stronger visual structure, but every sentence adds a distinct and relevant behavior. The purpose is front-loaded and the sibling routing appears near the end, after the important technical details.

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

Completeness5/5

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

Given the tool's high complexity, an explicit output schema, and many sibling tools, the description covers the operation, conflict handling, failure-mode details, and batch alternatives. It even explains behavior that the output schema might not, such as the contents of `postWriteMaintenance` and the conditions for using the batch endpoint.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics: `depends_on` requires a nonblank `why`, `domain` sets the source node's inline parent domain, `type` determines the frontmatter key, and `expected_mtime` comes from a prior `get_concept` and acts as a concurrent write guard.

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 first sentence names a specific operation, 'Add a semantic relation between two nodes', and the description spells out the frontmatter keys it writes to. It also distinguishes itself from the sibling `add_relations` by naming the batch variant as the preferred tool for multiple edges.

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

Usage Guidelines5/5

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

The description explicitly says to use `add_relations` for multiple already-approved edges and that `infer_imports.moduleEdges` require human approval first, giving clear when-to and when-not-to guidance. This directly orients the agent toward the correct tool selection.

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

add_relationsA
Idempotent

Batch-add multiple relations in one call — same per-row shape as add_relation. Use after analyze_repo_structure or another review flow when the agent has K semantic edges accepted by the user — replaces K×add_relation round-trips. Inferred module edges are not accepted merely because imports exist; review exact evidence and include the required nonblank why for every new depends_on. Each row is processed independently and idempotently: existing edges return {ok: true, alreadyExists: true}; missing source/target slugs / unknown type / non-object row shape / unknown row fields surface as {ok: false, error} with a relations[n] row label and structured rowName; unknown type rows include a closest-value hint with structured valueName / receivedValue / suggestion / allowedValues; single unknown-field rows include receivedField plus one-row unknownFields; multi unknown-field rows report every unknown field with nearest hints, allowedFields, receivedFields, and Received fields: .... relations[] order in the response matches the input. Cap = 50 per call. NO atomic rollback — for all-or-nothing semantics use single add_relation calls. Tip: avoid expected_mtime in batch when multiple rows share the same from slug — the first row mutates that file so the second would see a stale mtime. Invalid-only batches return no row-level changed / alreadyExists write metadata and no top-level postWriteMaintenance. When at least one row changes the vault, the response includes one compact postWriteMaintenance (maintenance_plan) with count-safe byPhase / bySeverity / byKind queue buckets, action score, executable proposedAction, and current-page nextExecutableAction / nextReviewAction pointers for the final graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
relationsYesArray of relation specs (max 50). Each row uses the same shape as `add_relation` input.

Output Schema

ParametersJSON Schema
NameRequiredDescription
relationsYes
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare idempotentHint=true, readOnlyHint=false, destructiveHint=false, and the description adds substantial context beyond these: idempotency detail (alreadyExists responses), non-atomicity with no rollback, the 50-call cap, response ordering, the expected_mtime staleness pitfall, and detailed error-shape semantics. No contradiction with annotations — idempotentHint matches the 'processed ... idempotently' claim.

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

Conciseness3/5

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

Front-loaded with purpose and usage, and every sentence carries real information. However, it is very long and dense — the error-handling enumeration (unknown type, single/multi unknown-field rows, receivedValue/suggestion/allowedValues) is verbose and partly duplicates what an output schema should convey. It is information-dense but less scannable than it could be with a more structured layout.

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 complex batch tool with idempotency, non-atomicity, varied error shapes, and a maintenance-plan output, the description is remarkably complete: use context, exclusions, limits, error semantics, ordering guarantee, and postWriteMaintenance structure are all covered. An output schema exists, yet the description still clarifies return behavior beyond it. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds genuine value beyond the schema: the 'required nonblank why for every new depends_on' emphasis (schema has this too, so partly redundant), the per-row shape reference to add_relation, and the expected_mtime tip about same-from-slug staleness. The added context justifies one point above baseline.

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?

States a specific verb+resource ('Batch-add multiple relations') and immediately distinguishes from the sibling add_relation by noting the 'same per-row shape' but batch semantics. An agent can clearly tell this from add_relation without opening either schema.

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

Usage Guidelines5/5

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

Explicitly says when to use it ('after analyze_repo_structure or another review flow when the agent has K semantic edges accepted by the user') and when NOT to use it ('NO atomic rollback — for all-or-nothing semantics use single add_relation calls'). Names the exact alternatives (add_relation, analyze_repo_structure) with selection conditions. Nothing is left to inference.

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

analyze_repo_structureA
Read-only

R16 (autonomous ingest base) — analyze a code repository and propose ontology node candidates. side effect 0 (vault frontmatter NOT modified). Returns deterministic candidates the agent must turn into an evidence-backed proposal and move through the construction lifecycle before any exact batch-writer rows are released. Repository structure is implementation evidence, not automatic business meaning: extractionContract and proposedBusinessOntology make that uncertainty explicit. Detects:

  • package.json name → project candidate

  • README.md first H1 → project title fallback

  • README.md H2 sections (skipping generic "Usage"/"Installation"/etc) → domain candidates

  • src/features|entities|widgets|views/* (FSD) → capability/element candidates

  • src/* depth-1 folders (generic) → capability candidates + index entry → element

  • apps/* and packages/* members with package.json → implementation element candidates

  • README.rst + bounded static setup.py → Python project/package evidence without execution

  • mixed current and future/negated/deprecated README prose → exact current candidate excerpt plus bounded line-scoped reviewRequiredEvidence; review units stay visible but cannot support a proposal claim

  • selected safe README sections share the existing 1,200-character budget deterministically; no document, heading, or excerpt cap grows

  • root Python packages plus at most 12 import-connected implementation boundaries → direct modules plus up to 2 exact security/policy/risk file anchors; unused files are not mirrored and no capability is inferred from imports

  • bounded root Cargo package or repo-contained literal direct workspace members → typed feature declaration + literal cfg/cfg_attr source provenance; predicates are not evaluated and no runtime/import/semantic dependency is inferred

  • a complete proposal may select at most 4 additional exact TypeScript, JavaScript, Python, or Rust file endpoints already observed by infer_imports for distinct navigation roles; exact dependency direction is validated and these files never become automatic candidates

  • an element proposal may keep an ordinary citation and append reviewed navigation:primary|supporting|test:<path>#<symbol> evidence strings (limits 1/1/3); the server verifies only those named current files, renders human-readable Evidence bullets, and rejects missing, ambiguous, unsafe, or task-inferred coordinates without treating them as behavior proof

Optionally pass a complete proposal to validate project/domain/capability/element definitions, typed relations, citations, risk controls, domain placement, implementation paths, confidence, and typed competency answers with resolvable concept/relation/evidence/path witnesses. Partial or visible-gap answers remain warnings instead of disappearing behind findings 0. A unqualified-project-exclusion warning is an exact human-acceptance gap, while an evidence-limit exclusion remains an error. Source-hidden review may leave exact source-body detail partial; source-aware citation verification decides support before evidence provenance can pass. A mandatory non-gap warning blocks the first review before qualification begins. For a bounded first pass, freeze claim id, statement, and proposalRefs before isolated source-hidden and source-aware lanes run in parallel; separately audit material Definition, Includes, Excludes, and Uncertainty assertions even when several claims share one proposal ref. Join sealed receipts without mutation before human acceptance. A passing validation first returns a deterministic non-writing reviewPlan, planDigest, sourceDigest, and eight-phase construction lifecycle. An independent evaluator must measure the approved competency questions and source-hidden task, then a human may declare acceptance bound to that exact plan digest/revision and every visible gap. Pass the resulting constructionQualification:v1 packet as qualification; only a current, admissible packet releases the exact reviewed rows as writePlan. The lifecycle also reports a shadow-only admission tier; self_qualified is an observation, not a write permission. Declared approval provenance is not identity authentication. Do not call write tools unless proposalValidation.canWrite is true and a writePlan is present; write every concept row successfully before writing relations.

Use this once when a user asks "이 codebase 분석해줘" / "bootstrap the ontology". Single source of truth preserved — only the user (via your subsequent add_concept calls) writes to the vault.

ParametersJSON Schema
NameRequiredDescriptionDefault
ignoreNoExtra folder names to skip (added to defaults: node_modules, .git, dist, build, …).
maxDepthNoNon-negative integer folder walk depth (default 2, max 10). Higher → more elements.
proposalNoOptional business ontology proposal to validate against repository evidence before any write call. Python proposals may select at most 4 exact observed import endpoints beyond the analyzer candidates.
rootPathNoRepository root to analyze. Defaults to the MCP server cwd.
qualificationNoOptional independent evaluation and declared human acceptance bound to the exact planDigest, planRevision, and sourceDigest returned for this proposal. Omit it on the first review call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
domainsYes
projectNo
skippedYes
elementsYes
rootPathYes
frameworkYes
meaningGateYes
capabilitiesYes
semanticEvidenceYes
extractionContractYes
proposalValidationYes
suggestedRelationsYes
configurationEvidenceYes

TDQS

A4.1/5.0
Behavior5/5

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

Discloses side-effect-free behavior ('side effect 0 (vault frontmatter NOT modified)') and deterministic output semantics. It also reveals server-side validation behavior (verifies only named current files, rejects missing/ambiguous/unsafe coordinates) and the requirement to convert candidates into an evidence-backed proposal before any write. These traits go beyond the readOnlyHint/destructiveHint annotations and add significant operational context.

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

Conciseness1/5

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

The description is an enormous, unstructured wall of text lacking paragraph breaks or coherent organization. It mixes the tool's core purpose, detailed detection heuristics, validation policy, and agent workflow instructions into one dense block. Many sentences are tangential (e.g., about 'declared approval provenance' and 'identity authentication'), making it poorly scannable and not appropriately sized for an MCP description.

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 of this complexity, the description covers the key aspects: what the tool does, the optional inputs (proposal, qualification), the return values (deterministic candidates, reviewPlan, planDigest, sourceDigest), and the critical constraint that writes must not occur until a writePlan is present. No obvious information needed for correct invocation is missing, though the verbosity dilutes it.

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 description adds meaning for the complex parameters by explaining that a 'proposal' can be passed to validate definitions and that a 'constructionQualification:v1' packet is passed as 'qualification'. It also explains the effect of proposal validation. Since schema coverage is 100%, the baseline is 3; the added guidance for these two parameters lifts it to 4.

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 opens with a clear action: 'analyze a code repository and propose ontology node candidates.' It also states the output is 'deterministic candidates' and clarifies the tool has no side effect on vault frontmatter. It does not explicitly contrast with sibling tools like infer_imports or inspect_architecture, but the core purpose is unambiguous.

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

Usage Guidelines5/5

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

Provides an explicit trigger: 'Use this once when a user asks "이 codebase 분석해줘" / "bootstrap the ontology".' It also gives a strong negative condition: 'Do not call write tools unless proposalValidation.canWrite is true and a writePlan is present.' This clearly tells the agent when to invoke the tool and what to avoid.

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

compile_ontologyA
Read-only

Compile the whole markdown vault into a deterministic graph artifact: canonical nodes, edges, aliases, graph issues, graph-array canonicalization actions, and optional adjacency indexes. This is the compiler-style read path for graph-database-like use: call it before advanced reasoning, indexing, export, or non-developer-friendly graph views. Includes a stable semantic graphHash and maxMtime for cache invalidation. side effect 0. Large vaults (100+ nodes) can exceed the MCP token cap with the default full payload — use summary: true for cheap polling (counts + graphHash, no arrays), or nodesLimit/nodesOffset / edgesLimit/edgesOffset to slice arrays. The response includes nodesPagination / edgesPagination meta with {offset, limit, total, returned, hasMore, nextOffset} when sliced.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryNoWhen true, omit `nodes` / `edges` / `aliases` / `ambiguousAliases` / `canonicalizationActions` / `indexes` arrays — return only `graphHash`, `maxMtime`, counts (`nodeCount`/`edgeCount`/`aliasCount`/...), and aggregate `byKind`/`byDomain` as counts. Cheap polling for cache invalidation and graph-size assessment.
edgesLimitNoPositive integer max edges to return. Pair with `edgesOffset` to paginate. Max 500.
nodesLimitNoPositive integer max nodes to return. Pair with `nodesOffset` to paginate. Omit for unlimited (backward compat), max 500 when provided.
edgesOffsetNoNon-negative integer starting index in the sorted edges array. Defaults 0.
nodesOffsetNoNon-negative integer starting index in the sorted nodes array. Defaults 0.
includeIndexesNoWhen true, include indexes `{out, in, byKind, byDomain, edgeById, aliasToSlug, uidToSlug, slugToUid, mergedUidToSlug}`. Graph traversal remains slug-based; UID indexes provide exact identity resolution. Defaults false to keep payload smaller.

Output Schema

ParametersJSON Schema
NameRequiredDescription
edgesNo
nodesNo
byKindYes
issuesNo
aliasesNo
indexesNo
summaryNo
versionYes
byDomainYes
maxMtimeYes
edgeCountYes
graphHashYes
nodeCountYes
aliasCountYes
issueCountYes
edgesPaginationNo
nodesPaginationNo
ambiguousAliasesNo
externalEdgeCountYes
resolvedEdgeCountYes
ambiguousAliasCountYes
unresolvedEdgeCountYes
canonicalizationActionsNo
canonicalizationActionCountYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description correctly adds 'side effect 0' and explains determinism and the stable graphHash/maxMtime for cache invalidation. It also warns about token cap and explains pagination behavior, which are useful beyond the annotations. No contradiction with annotations.

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, well-structured paragraph that front-loads the core purpose, then provides usage details on pagination and summary. Every sentence contributes new information; there is no fluff. It's a bit long but justified given the tool's complexity.

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 complex tool with 6 parameters and an output schema, the description covers all critical aspects: purpose, usage timing, token cap mitigation, pagination, summary mode, and side effects. It explains the response meta and cache invalidation, so an agent has enough context to call it correctly without missing critical details.

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 100%, so the schema already documents each parameter. The description adds value by explaining usage patterns such as 'use summary: true for cheap polling' and how to slice arrays with nodesLimit/nodesOffset. It also mentions the pagination meta in the response, which is not in the schema. This goes beyond the schema and helps the agent choose parameters appropriately.

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 ('Compile'), a resource ('whole markdown vault'), and the resulting artifact ('deterministic graph artifact' with nodes, edges, aliases, etc.). It clearly distinguishes itself from sibling tools by calling itself 'the compiler-style read path' and describing its intended use case, so an agent can easily tell it apart from query or get tools.

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

Usage Guidelines4/5

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

The description provides explicit context for when to use the tool: 'call it before advanced reasoning, indexing, export, or non-developer-friendly graph views.' It also explains how to handle large vaults with summary and pagination options, giving practical guidance. It doesn't explicitly name alternatives or exclusions, but the context is clear enough to guide an agent.

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

connection_infoA
Read-only

Return the exact active vault root and code-repository root used by this MCP process, including how each root was resolved. Call first when a client may have stale configuration or multiple workspaces. Root changes require restarting the MCP process.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
serverYes
repoRootYes
sameRootYes
vaultRootYes
repoResolutionYes
vaultResolutionYes
restartRequiredForRootChangeYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark this readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it returns the active process-level roots, explains how each was resolved, and warns that root changes require restarting the MCP process. This goes beyond the annotations without contradicting them.

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, each earning its place: the first defines the exact output, and the second gives actionable usage context plus an operational caveat. No filler or redundancy.

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

Completeness5/5

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

For a parameterless, read-only diagnostic tool with an output schema, this description is complete. It tells the agent what the tool returns, when to call it, and an important limitation (root changes need a restart). Nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

The tool has zero parameters and the schema is fully self-explanatory with 100% coverage. The description does not need to elaborate on parameter semantics, and the baseline 4 for a parameterless tool is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource: 'Return the exact active vault root and code-repository root used by this MCP process, including how each root was resolved.' This clearly identifies the tool's purpose and differentiates it from siblings like git_history or list_concepts, which serve different diagnostic or data operations.

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

Usage Guidelines4/5

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

The description gives explicit guidance: 'Call first when a client may have stale configuration or multiple workspaces.' It also explains the restart constraint. It lacks an explicit when-not-to-use or named alternatives, but the provided context is specific enough to guide tool selection.

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

connect_project_sourceA

Bind a project node to the local code folder it describes, measure it, and write the source receipt. This is what nextAction: connect_source (and repair_source_binding / measure_source / remeasure_source) asks for. Omit rootPath and the server infers it: the git repository enclosing the vault wins, otherwise the nearest ancestor folder carrying a project manifest. Without confirm: true nothing is written — you get the proposed folder, how many declared path: claims actually land in it, and the exact confirming call. Re-running with a different rootPath replaces the binding; disconnect_project_source removes it. The absolute root stays in the local gitignored sidecar .ontology-atlas/project-sources.json and never enters the receipt, the graph markdown, or any handoff.

ParametersJSON Schema
NameRequiredDescriptionDefault
repairNoDiscard a malformed .ontology-atlas/project-sources.json instead of refusing to write over it.
confirmNoRequired to write. Default false returns the proposal and changes nothing.
rootPathNoAbsolute local folder holding the code. Omit to auto-infer, or to re-measure an existing binding.
projectSlugYesExact project node slug (or an unambiguous vault alias) to bind.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
modeYes
undoNo
remedyNo
bindingYes
changedYes
contractYes
nextCallNo
confirmedYes
inferenceNo
projectSlugYes
projectSourceNo
previewReceiptNo
previousBindingCountNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the description's job is to add context beyond those flags. It does so richly: nothing is written without confirm:true, re-running replaces the binding, the absolute root is stored in a gitignored sidecar and never enters the receipt or graph markdown, and repair discards a malformed sidecar. This is exactly the kind of behavioral context an agent needs.

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 dense but every sentence earns its place: purpose, trigger context, inference rule, dry-run behavior, replacement semantics, and sidecar storage are each covered in one or two clauses. It is front-loaded with the core action and routes to alternatives early. No filler or repetition of schema text.

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

Completeness5/5

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

For a tool with 4 parameters, an output schema, and annotations, the description covers all the non-obvious context: the dry-run default, the inference fallback, the replacement behavior, the sidecar location, and the privacy boundary (absolute root never enters receipt/graph/handoff). An agent has everything needed to call it correctly and to interpret the proposal response.

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 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains that omitting rootPath triggers auto-inference (git repo enclosing the vault, else nearest ancestor with a project manifest), that confirm:true is required to write, and that repair handles a malformed sidecar. It doesn't add detail on projectSlug beyond the schema, but the added rootPath and confirm semantics justify a 4.

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

Purpose5/5

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

The description opens with a specific verb phrase — 'Bind a project node to the local code folder it describes, measure it, and write the source receipt' — and immediately distinguishes the tool from siblings by naming the exact nextAction values and related tools it fulfills. It also contrasts with disconnect_project_source, so an agent can tell them apart without opening schemas.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('This is what nextAction: connect_source ... asks for'), what happens when confirm is omitted, how rootPath inference works, and how re-running with a different rootPath behaves. It also names the sibling that removes the binding, giving clear when-to-use and when-not-to-use guidance.

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

delete_conceptA
Destructive

⚠ DESTRUCTIVE — permanently deletes the vault .md file. Two-stage safety: Both preview and confirmed responses identify the node by permanent uid plus current slug. 1. Without confirm: true the call is a dry-run — returns a backlinks preview without deleting. 2. If any backlinks exist the call throws — refuses while other nodes still reference this slug. Pass force: true to delete anyway (the referrers become dangling). Successful deletion returns the frontmatter + body so a user who deleted by mistake can recreate the node via add_concept. Directories are left untouched. Pass expected_mtime to guard against concurrent external edits — throws if the file changed on disk since you read it. Confirmed deletes return compact postWriteMaintenance (maintenance_plan) with count-safe byPhase / bySeverity / byKind queue buckets, action score, executable proposedAction, and current-page nextExecutableAction / nextReviewAction pointers for the final graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesVault-relative slug (omit the .md extension).
forceNoDelete even when backlinks exist (referrers become dangling). Defaults to false.
confirmNoActually delete when true. Omit or false for a dry-run (backlinks preview, no delete).
expected_mtimeNoOptional conflict guard — file mtimeMs at read time. If it differs at delete time, the call throws.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
uidYes
slugYes
dryRunYes
forcedNo
changedNo
messageNo
capturedNo
filePathYes
backlinksNo
canConfirmYesTrue only when repeating the call with confirm:true can perform the previewed change without another explicit safety opt-in.
wouldChangeYesTrue only when the dry-run predicts a disk or Git change.
previewReadyYesTrue only when this response is a complete dry-run preview that an agent can review.
blockedReasonsYesMachine-readable human explanations for every condition currently blocking confirmation.
backlinksAtDeleteNo
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only supply destructiveHint=true, but the description adds substantial behavioral detail: permanent file deletion, dry-run without confirm, refusal when backlinks exist, dangling referrers with force, exception on mtime mismatch, directories left untouched, and a return payload that enables recovery. Nothing in the description contradicts the annotations.

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 front-loaded with an explicit danger warning and organized into a numbered two-stage safety flow. It is dense and scannable; however, the lengthy postWriteMaintenance detail is likely redundant given that an output schema exists, so it could be trimmed without losing essential guidance.

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 destructive, multi-conditional delete operation, the description covers the full call flow: prerequisites, dry-run vs. confirmed behavior, failure modes, force escalation, concurrency protection, side effects, and recovery. The output schema provides the structured return contract, so the description is complete enough for an agent to invoke the tool correctly.

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

Parameters5/5

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

Although the schema already documents all parameters, the description enriches them with conditional semantics: confirm controls whether deletion actually happens, force deliberately overrides the backlink safety check, and expected_mtime throws if the file changed. It also clarifies the dry-run default, which is not obvious from the schema 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 opens with 'DESTRUCTIVE — permanently deletes the vault .md file', giving a specific verb, resource, and consequence. It clearly distinguishes deletion from sibling mutation tools like patch_concept or rename_concept by detailing the two-stage dry-run/confirm flow and the effect on backlinks.

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

Usage Guidelines4/5

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

The description provides strong usage context: omit confirm for a dry-run, pass force to override backlink refusals, and pass expected_mtime to guard against concurrent edits. It even points to add_concept as a recovery path)Skip does not explicitly contrast when to choose delete_concept over related siblings such as patch_concept or reclassify_concept, 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.

disconnect_project_sourceA
Destructive

Remove a project node's local source binding and its receipt. The reversal of connect_project_source — use it when the wrong folder was bound, or to stop measuring. Without confirm: true it only reports what would be removed. Other projects' bindings are never touched, and no ontology markdown changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoRequired to write. Default false lists the binding that would be removed.
projectSlugYesProject node slug whose source binding should be removed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
remedyNo
changedYes
removedYes
bindingsYes
contractYes
nextCallNo
confirmedYes
projectSlugYes
projectSourceNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, and the description adds meaningful behavioral context: it removes both the binding and its receipt, requires confirm:true to write, defaults to a dry-run report, and explicitly scopes the blast radius to the single project. The only minor gap is that it doesn't describe the output schema's contents, but the output schema exists and the description covers the key behavioral traits.

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

Conciseness5/5

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

Three sentences with zero waste. The core action is front-loaded, the inverse relationship is stated, usage conditions are given, and safety scope is clarified. Every sentence 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 destructive mutation tool, the description covers the action, the prerequisite (confirm:true), the dry-run behavior, the scope limitation, and the non-effect on ontology markdown. The output schema exists, so return values don't need to be described. Nothing an agent needs to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description adds the crucial semantic that confirm:true is required to write and defaults to listing what would be removed, which enriches the confirm parameter's meaning. However, it doesn't add much beyond that, so a baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Remove'), a specific resource ('a project node's local source binding and its receipt'), and explicitly names its inverse sibling (connect_project_source). This clearly distinguishes it from siblings like delete_concept or remove_relation, and the 'reversal of connect_project_source' framing makes the tool's role unambiguous.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'use it when the wrong folder was bound, or to stop measuring.' It also explains the safety behavior without confirm:true, and states what is never touched ('Other projects' bindings are never touched, and no ontology markdown changes'). This is strong usage guidance that an agent can act on directly.

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

finalize_project_meaningA

Finalize the current project competency Markdown after concept/relation writes, vault validation, and a complete project compile. The server derives the current body digest, project graph hash, source fingerprint, and witness inventory itself; callers cannot submit or restamp those values. This writes only a small provenance receipt to .ontology-atlas/project-meaning.json. It never stores raw answers, witness text, absolute source roots, or remote coordinates. ok: true means the receipt was written, not that source currentness is verified; read meaningAssessment or a fresh agent_brief for the fail-closed categorical result.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectSlugYesExact project node slug (or an unambiguous vault alias) whose current Competency answers section should be finalized.
expected_mtimeYesRequired conflict guard. Pass the project node mtime from get_concept; any intervening human or agent edit blocks finalization.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
changedYes
contractYes
graphHashYes
bodyDigestYes
measuredAtYes
projectSlugYes
meaningAssessmentYes
sourceFingerprintYes

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses precise write behavior: it writes only a small provenance receipt to `.ontology-atlas/project-meaning.json` and explicitly lists what it never stores. It also explains the semantic meaning of `ok: true`, which prevents a common misinterpretation. These details complement the sparse annotations significantly.

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 dense but every sentence contributes: sequencing, caller constraints, write scope, exclusions, and result interpretation are all covered without repetition. It is appropriately sized for a tool with subtle semantics.

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

Completeness5/5

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

For a tool with only two parameters and non-trivial side effects, the description fully covers when to call it, what it writes, what it refuses to write, what the result flag means, and where to get the actual assessment. Nothing essential is left to inference, and the output schema is referenced through `meaningAssessment`/`agent_brief`.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents both parameters well. The description adds important semantic value by explaining that `expected_mtime` is a conflict guard and that callers cannot submit or restamp server-derived values, reinforcing the role of `projectSlug` and `expected_mtime`.

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 ('Finalize') and a specific resource ('current project competency Markdown'), and it distinguishes the action from related operations by specifying the exact sequence it must follow. It also clarifies the tool's narrow scope: writing a provenance receipt, not compiling or validating.

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

Usage Guidelines4/5

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

The description explicitly says to use this tool after concept/relation writes, vault validation, and a complete project compile, which gives clear contextual conditions. It also warns that `ok: true` does not verify source currentness and directs callers to `meaningAssessment` or `agent_brief` for the fail-closed result. It does not name alternative sibling tools, but the sequencing is specific 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.

find_evidenceA
Read-only

Find vault docs that mention a given concept by title. Useful when an AI agent asks where a capability is realized in code or docs. Each match includes a prose excerpt (max 200 chars, headings/tables/code skipped) so agents see what the matching doc says without an extra get_concept call. Matches are RANKED by a deterministic relevance score (title match > frontmatter ref > body, plus a title token-overlap tiebreaker), then by whether the doc is a graph node, then slug — best-first. A vault holds ordinary markdown too (meeting notes, memos, drafts have no kind: and are not graph nodes); every row says which it is via isNode, non-nodes rank below nodes of equal relevance, and nodesOnly: true filters them out. Do not cite a non-node as graph evidence without saying so. Pass limit for the top-N. When zero docs mention the title, the response includes a growthHint — near-titled vault nodes to check first, or an add_concept scaffold if the concept looks genuinely new.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoReturn only the top-N highest-scoring matches. Omit for all matches (still ranked).
titleYesConcept title to search for (case-insensitive substring match).
nodesOnlyNoReturn only graph nodes (docs with a `kind:`). Default false — ordinary markdown in the same folder is included and marked `isNode: false`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
matchesYes
bodyHintNoOnly present when at least one match returned a partial excerpt — names the get_concepts({ body: "full" }) call that returns the rest.
growthHintNoOnly present when matches is empty — near-titled vault node(s) to check, or an add_concept scaffold, derived from the real vault title set.
nonNodeHintNo

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotation's readOnlyHint: true, the description discloses substantial behavioral details: it produces ranked matches with a deterministic score formula (title match > frontmatter > body, plus tie-breakers), includes prose excerpts up to 200 chars avoiding certain blocks, distinguishes nodes vs non-nodes, and clarifies the growthHint on zero matches. This is genuinely useful behavioral context not present in any other structured field.

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 organized so the core purpose and use case lead, followed by the ranking rules, node semantics, and the limit/growthHint behaviors. The length is justified because of the tool's complexity, but it is dense and could lose agents scanning quickly. Still, every sentence 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?

The description, combined with the fully enumerated input schema and an existing output schema, leaves few important gaps. It covers purpose, use context, matching and ranking behavior, node/non-node semantics, the limit option, and the zero-result growthHint, so it is effectively complete for correct invocation and result interpretation.

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

Parameters3/5

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

Schema_description_coverage is 100%, so the baseline is 3. The description references limit, nodesOnly, and the title's substring semantics, but these largely duplicate what the schema already says (e.g., 'Return only the top-N highest-scoring matches' and the nodesOnly default flag). It adds no fundamentally new parameter-level meaning.

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

Purpose5/5

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

The description opens with 'Find vault docs that mention a given concept by title,' a specific verb+resource+scoping statement. It clearly positions the tool for the 'where is this capability realized' use case, and the emphasis on title-based mention matching differentiates it from sibling tools like find_backlinks, find_neighbors, and get_concept.

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 is explicit about when to use it: 'Useful when an AI agent asks where a capability is reified in code or docs.' It also explains it can avoid an extra get_concept call. However, it does not explicitly state exclusions (e.g., 'for backlink relationships use find_backlinks'), leaning on implied differentiation rather than naming alternative siblings.

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

find_neighborsA
Read-only

Return the one-hop graph neighborhood around a node. Unlike find_backlinks, this is graph-frontmatter only and can include outgoing, incoming, or both directions. Returns canonical edges plus neighbor node summaries so agents can inspect a local subgraph in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesCenter node slug, unique tail slug, or frontmatter `slug` alias.
limitNoPositive integer max edges to return. Defaults to 100, max 500.
typesNoOptional relation types/frontmatter keys to include, e.g. ["domain", "depends_on", "contains"]. Public add_relation types are normalized to stored graph keys.
directionNoEdge direction to include. Defaults to both.
includeNodesNoWhen true (default), include neighbor node summaries for resolved edges.

Output Schema

ParametersJSON Schema
NameRequiredDescription
edgesYes
nodesNo
typesNo
centerYes
limitedYes
directionYes
requestedYes
totalEdgesYes

TDQS

A4.2/5.0
Behavior4/5

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

With readOnlyHint=true and destructiveHint=false, the safety profile is already covered. The description adds meaningful behavioral context beyond annotations: it specifies the graph-frontmatter-only scope, supports outgoing/incoming/both directions, and describes the return composition (canonical edges plus neighbor node summaries). This is useful and consistent with the annotations.

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. It front-loads the core purpose, distinguishes the tool from a sibling, and then describes the return value compactly. Every sentence earns its place.

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

Completeness4/5

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

Given the five-parameter schema and output schema, the description covers the important contextual pieces: graph scope, direction flexibility, and output composition. It could have added a bit more explicit guidance on when to choose this over find_backlinks, but the overall definition is sufficiently complete for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already documented in the schema. The narrative description adds a bit of related context around direction options and output shape, but it does not materially explain individual parameters beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a precise verb ('Return') and identifies a specific resource ('the one-hop graph neighborhood around a node'). It also explicitly contrasts itself with find_backlinks, making the tool's role clear relative to a likely sibling.

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

Usage Guidelines4/5

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

The description explicitly names find_backlinks as an alternative and states the key distinguishing factor: this tool is graph-frontmatter only. This effectively tells an agent when this tool applies, but it stops short of giving an explicit 'when not to use' condition or direct guidance for other sibling tools.

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

find_orphansA
Read-only

List orphan nodes — docs that no other node references via any frontmatter array key. Useful as a cleanup starting point or to answer "which nodes are unused?". Same matching policy as find_backlinks (full slug or final segment). Root/sentinel kinds like project and vault-readme are excluded by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoRestrict to one kind (e.g. capability). Omit for all kinds.
excludeKindsNoKinds to exclude from results. Defaults to ['project', 'vault-readme']. Pass [] to include every kind. Typos fail with nearest-value hints.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
orphansYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral details beyond that: the default exclusion of root/sentinel kinds and the specific matching policy (full slug or final segment). This enriches the agent's understanding without contradicting the annotations.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the core purpose, and every sentence adds value: the definition, the use cases, and the matching policy plus default exclusions. There is zero waste 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?

For a read-only list tool with a full output schema, the description covers the essential purpose, use cases, matching policy, and default exclusions. It doesn't describe the output format, but that is handled by the output schema. The only minor gap is that it doesn't explicitly mention pagination or performance, but these are not critical for a tool like this.

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

Parameters3/5

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

Schema description coverage is 100% – both 'kind' and 'excludeKinds' have descriptive text in the schema, including the default value for excludeKinds. The tool description reinforces the default exclusion but does not add new parameter-specific meaning beyond what the schema already provides. Given the high schema coverage, the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'List orphan nodes' and defines exactly what an orphan node is ('docs that no other node references via any frontmatter array key'). It also distinguishes itself from the sibling find_backlinks by referencing the same matching policy, so an agent can differentiate them without inspecting schemas.

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 a clear use case ('cleanup starting point' and 'which nodes are unused?') and explicitly notes that the matching policy is shared with find_backlinks, which implicitly tells an agent that find_backlinks is the counterpart for finding referenced nodes. However, it doesn't explicitly state when not to use this tool or name alternative tools for different scenarios, so it's slightly 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.

find_pathA
Read-only

Shortest path between two nodes (undirected BFS). Returns { from, to, hops: [slug...], nodes: [{uid, slug, kind, title, domain?}], edges: [{from, to, via, rationale?}] } where each via is the frontmatter key (domains / domain / capabilities / elements / dependencies / relates / contains / describes) that linked the two slugs and rationale is the one-line relation_notes sentence the declaring document stores for that pair (present only when one is stored) — so the agent sees not just that A and B are connected but by which key and, when someone wrote it down, why. Returns { found: false } when no path is found within maxHops, plus a growthHint — a concrete add_relation (both endpoints exist) or add_concept (an endpoint is missing) example so the unanswered question becomes a vault-growth signal instead of a dead end. maxHops defaults to 5 and is capped at 20.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget slug.
fromYesSource slug.
maxHopsNoNon-negative integer maximum hop count (default 5, max 20).

Output Schema

ParametersJSON Schema
NameRequiredDescription
toYes
fromYes
hopsNo
edgesNo
foundYes
nodesNo
reasonNo
hopCountNo
growthHintNoOnly present when found=false — a candidate add_relation (both endpoints exist) or add_concept (an endpoint is missing) suggestion, derived from the real vault, not invented.

TDQS

A3.7/5.0
Behavior5/5

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

The description goes far beyond the annotations (readOnlyHint=true, destructiveHint=false) by detailing the exact output structure: nodes with uid/slug/kind/title/domain, edges with from/to/via/rationale, the meaning of via as a frontmatter key, and the fallback { found: false } with a growthHint. It also discloses the undirected BFS algorithm, maxHops default (5) and cap (20). This is rich behavioral disclosure that fully informs the agent without contradicting annotations.

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 dense but well-organized: it leads with the core purpose, then details the output shape, then explains the fallback and maxHops. Every sentence carries useful information; there is no filler. It is slightly long, but the complexity of the output justifies the length. It is front-loaded with the essential action.

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

Completeness5/5

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

Given that an output schema exists and the annotations already cover read-only safety, the description is complete. It explains the return structure in detail, the failure mode with growthHint, and the algorithm constraints. There is nothing an agent needs to know about invoking this tool that is missing.

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 input schema already provides descriptions for all three parameters (from, to, maxHops) with 100% coverage. The description adds the default (5) and cap (20) for maxHops, which is also stated in the schema, and clarifies that from/to are slugs (already in schema). It does not introduce new meaning beyond what the schema provides, so it sits at the baseline of 3.

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 opens with a clear, specific statement of what the tool does: 'Shortest path between two nodes (undirected BFS).' This unambiguously names the verb (find path) and resource (nodes in a graph). However, it does not explicitly differentiate from sibling tools like find_neighbors or find_backlinks, though the purpose itself is distinct enough that an agent could infer when to use it.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It describes behavior and output in detail but never states conditions like 'Use this when you need the shortest path' or 'For direct neighbors, use find_neighbors instead.' The mention of growthHint implies a use case for exploring gaps, but that is implicit and not framed as selection criteria.

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

get_conceptA
Read-only

Fetch one node by exactly one selector: slug (canonical slug or unique alias) or immutable uid. Successful responses always carry both the permanent uid and current canonical slug; graph relations and graph-operation inputs remain slug-based. Returns frontmatter, body, direct graph neighbors, outgoingEdges (each {to, via, rationale?}, the rationale being the stored relation_notes sentence when one exists), and mtime. By default you get excerpt — the first prose paragraph only. The node body is where the construction rules put definition, evidence, confidence, and in-scope/out-of-scope, so pass body: "full" whenever you are reading a node to answer a question rather than just to identify it. bodyInfo always reports totalChars / returnedChars / truncated, so a partial read is never silent. For K specific selectors in one call use get_concepts({slugs: [...]}) or get_concepts({uids: [...]}). When a slug does not resolve, structured growth guidance remains available.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidNoExact permanent node UID. Use instead of `slug`, never together with it.
bodyNo`excerpt` (default) returns the first prose paragraph as `excerpt`. `full` returns the entire markdown body as `body` and omits `excerpt`. Use `full` when the answer depends on what the node actually says — evidence paths, confidence, scope boundaries.
slugNoVault-relative slug (e.g. projects/auth-platform), unique tail slug, or frontmatter `slug` alias. Omit the .md extension.

Output Schema

ParametersJSON Schema
NameRequiredDescription
uidYesPermanent immutable node identity.
bodyNoEntire markdown body. Present only when the caller passed `body: "full"`.
slugYes
mtimeYes
excerptNoFirst prose paragraph. Present only when `body` is `excerpt` (the default).
bodyInfoYesHow much of the body this response carries — always present, so truncation is never silent.
warningsNo
neighborsYesDirect graph neighbor buckets.
frontmatterYesResolved markdown frontmatter.
outgoingEdgesYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint and destructiveHint annotations, the description discloses critical behaviors: successful responses always include both uid and slug, graph relations are slug-based, and the default excerpt truncation is always accompanied by bodyInfo metrics so partial reads are never silent. This is rich context that the annotations alone do not convey, and it does not contradict them.

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 dense and front-loaded with the core selector logic, then builds to return details and usage notes. The bold key phrases help scanning, and every sentence carries information; however, it is on the longer side for a single-tool definition, so a 4 reflects the trade-off between completeness and brevity.

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?

Even though an output schema exists, the description still enumerates the return fields (frontmatter, body, neighbors, edges, mtime) and explains the excerpt/bodyInfo mechanism, making the tool fully understandable without opening the schema. It also covers the error case and points to the plural variant, so an agent has everything needed to invoke it correctly.

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

Parameters4/5

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

The input schema already documents all three parameters with 100% coverage, so the baseline is 3. The description adds value by stating the exclusivity rule between uid and slug (which the schema implies but does not state globally) and reinforcing the body parameter's usage semantics, though it largely repeats the schema's own guidance. This pushes it above baseline but not to 5.

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 opens with a specific verb-resource pair ('Fetch one node') and immediately clarifies the two selectors (slug or uid), making the tool's purpose unmistakable. It also distinguishes itself from the sibling get_concepts by explicitly routing bulk lookups there, so an agent can tell them apart without reading schemas.

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 gives explicit when-to-use guidance for the body parameter ('use full when you are reading a node to answer a question rather than just to identify it') and names the alternative for multi-selector calls ('For K specific selectors in one call use get_concepts'). It also hints at error behavior ('When a slug does not resolve, structured growth guidance remains available'), leaving little to inference.

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

get_conceptsA
Read-only

Fetch multiple nodes by exactly one selector array: slugs (canonical slugs or unique aliases) or immutable uids. Same per-row shape as get_concept; successful rows always return permanent uid plus current canonical slug. Order matches the selected input array. Missing or invalid slug rows return partial {slug, ok:false, error, ...repairFields} rows, so later valid slugs still resolve; UID misses likewise return {uid, ok:false, error, ...repairFields} without aborting the batch. Graph relations and graph-operation inputs remain slug-based.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoApplies to every row. `excerpt` (default) returns the first prose paragraph per row; `full` returns the entire markdown body per row and caps the batch at 20 slugs.
uidsNoExact permanent node UIDs. Use instead of `slugs`, never together with it. Max 50 (max 20 with body `full`).
slugsNoVault-relative slugs, unique tail slugs, or frontmatter `slug` aliases (e.g. ["capabilities/x", "elements/y"]). Omit the .md extension. Max 50 per call (max 20 when body is `full`).

Output Schema

ParametersJSON Schema
NameRequiredDescription
conceptsYes

TDQS

A4.4/5.0
Behavior5/5

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

The description adds significant behavioral detail beyond the readOnlyHint annotation: it explains partial failure handling (missing rows return {ok:false, error, ...repairFields} without aborting the batch), guarantees successful rows always return permanent uid and current canonical slug, and states ordering matches input. It also clarifies that graph relations remain slug-based. This thoroughly discloses error behavior and output guarantees, exceeding annotation coverage.

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

Conciseness4/5

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

The description is four sentences, front-loaded with the main purpose, then error handling, and a note about graph operations. It is dense with useful information but could be slightly more concise; each sentence adds value, and the structure is logical.

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 batch-fetch tool with partial failures, the description covers all essential aspects: selector choice, per-row shape, ordering, error behavior, and graph-operation implications. It also references get_concept for output consistency. The batch limits and body effect are in the schema, so the description is complete enough for an agent to invoke correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters including the mutual exclusivity of slugs and uids ('never together') and the batch limits. The description reinforces 'exactly one selector array' and 'immutable uids' but adds no new parameter-specific meaning beyond what the schema provides. With full schema coverage, the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool fetches multiple nodes by exactly one selector array (slugs or uids), with a specific verb ('Fetch') and resource ('nodes'). It distinguishes from the sibling get_concept by noting 'Same per-row shape as get_concept', implying a batch vs single-node usage. The purpose is unambiguous and differentiates well.

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 implies usage for fetching multiple nodes at once, contrasting with get_concept for single nodes, and explicitly notes 'exactly one selector array' to avoid mixing slugs and uids. It also explains the order matches the input array and that graph operations remain slug-based, giving context for when to use this tool. However, it doesn't explicitly state 'use get_concept for a single node' or enumerate alternatives, leaving some inference to the agent.

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

git_historyA
Read-only

Read commit history scoped to the active vault path only. Returns bounded newest-first hashes, subjects, and authored timestamps plus limited/hasMore, shallow-repository state, and historyComplete so agents do not mistake a truncated or shallow view for complete evidence. Commits that touched only files outside the vault are excluded. Read-only; never initializes, fetches, pulls, commits, or pushes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum newest-first vault commits to return. Defaults to 20; maximum 100.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
headNo
countNo
limitNo
branchNo
reasonNo
commitsNo
hasMoreNo
limitedNo
shallowNo
repoRootYes
operationYes
vaultRootYes
vaultPathspecNo
historyCompleteNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description goes well beyond that by detailing behavioral nuances: it returns bounded newest-first results, includes limited/hasMore, exposes shallow-repository state, and provides historyComplete so agents don't mistake truncated or shallow views for complete evidence. It also explicitly states it never performs mutation actions. This is rich, additive behavioral disclosure that significantly aids correct agent reasoning.

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 that are dense with information yet free of filler. It front-loads the core purpose in the first sentence, then packs behavioral and scoping details into the second. Every clause adds value, with no wasted words.

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

Completeness5/5

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

Given that the tool has an output schema (implied by context signals) and a single documented parameter, the description covers all critical aspects: the scope, the return semantics (hashes, subjects, timestamps, limited/hasMore, shallow state, historyComplete), the exclusion rule, and the read-only guarantee. An agent would have everything needed to call and interpret the tool correctly without missing crucial information.

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 input schema fully documents the single optional 'limit' parameter with its default and maximum, achieving 100% schema coverage. The description does not add any additional meaning or nuance about the parameter itself; it focuses on the return format and behavior. Since the schema already does the heavy lifting, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Read'), resource ('commit history'), and scope ('scoped to the active vault path only'). It also adds the exclusion of commits touching files outside the vault, which clearly delineates what the tool provides. This is a crisp purpose statement that distinguishes it from other Git-related tools like git_snapshot or git_status without naming them, but the specificity is sufficient.

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 context for when this tool is appropriate: only vault-scoped history, and explicitly states what it does NOT do ('never initializes, fetches, pulls, commits, or pushes'), which helps an agent avoid misuse. However, it does not name sibling alternatives or provide explicit 'use X instead' conditions, which would make the routing guidance even stronger.

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

git_snapshotA
Destructive

Create a local, vault-scoped Git checkpoint. Dry-run by default and returns exact expectedHead, files, validation, risk, and the shared previewReady/canConfirm/wouldChange/blockedReasons safety contract. confirm:true requires that expectedHead, blocks validator errors and Git operations in progress, commits only the vault pathspec, leaves outside files untouched, and never pushes.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoDefault false. Set true only after reviewing the dry-run preview and its risk/validation fields.
messageNoOptional local commit subject, one line and at most 200 characters. A deterministic ontology snapshot subject is generated when omitted.
expectedHeadNoRequired with confirm:true. Copy the exact expectedHead returned by the immediately preceding dry-run; this prevents committing after a concurrent HEAD change.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
headNo
riskNo
filesNo
branchNo
countsNo
dryRunYes
reasonNo
subjectNo
repoRootYes
committedYes
operationYes
vaultRootYes
canConfirmYesTrue only when repeating the call with confirm:true can perform the previewed change without another explicit safety opt-in.
commitHashNo
pushReasonNo
validationNo
wouldChangeYesTrue only when the dry-run predicts a disk or Git change.
detachedHeadNo
expectedHeadNo
previewReadyYesTrue only when this response is a complete dry-run preview that an agent can review.
previousHeadNo
commitSummaryNo
pushSupportedNo
vaultPathspecNo
blockedReasonsYesMachine-readable human explanations for every condition currently blocking confirmation.
stagedOutsideVaultNo
operationInProgressNo

TDQS

A4.3/5.0
Behavior5/5

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

Even though annotations already mark destructiveHint:true, the description adds valuable behavioral detail: confirm commits only the vault pathspec, leaves outside files untouched, never pushes, and blocks on validation errors or Git operations in progress. It also explains the dry-run return contract and expectedHead requirement, giving the agent meaningful insight beyond the annotation flags.

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 compact and front-loaded, with the core purpose in the first sentence. The second sentence packs many safety clauses, but its run-on grammar and list-like structure ('requires that expectedHead, blocks validator errors...') make it slightly harder to parse. Still, no filler is present and every clause earns its place.

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

Completeness4/5

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

Given the tool complexity, an output schema exists, and annotations already flags destructive behavior, the description provides enough context for safe invocation: dry-run flow, confirm semantics, expectedHead, vault-only commits, and no push. It doesn't describe exact return structure, but that is covered by the output schema, and it omits no critical invocation step.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description clarifies the interaction between confirm and expectedHead and mentions the deterministic auto-generated message, adding some cross-parameter meaning. However, it does not go deeply beyond what the schema already says; the schema itself already documents the dry-run-first confirm requirement and the expectedHead copy instruction.

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 a local, vault-scoped Git checkpoint') and clearly distinguishes it from sibling tools by emphasizing local, vault-scoped, and 'never pushes.' An agent can tell git_snapshot apart from git_status or git_history because the purpose includes scope, local-only behavior, and checkpoint creation.

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 workflow guidance: dry-run by default, review the returned preview/risk fields, then set confirm:true. It also states behavioral preconditions such as blocking on validator errors and active Git operations. It does not explicitly name alternative tools or say 'use X instead', which keeps this from a 5, but the usage context is unmistakable.

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

git_statusA
Read-only

Inspect local Git state for the active vault only. Returns HEAD/branch, vault files, outside-vault change counts, staged-outside-vault warnings, and in-progress operation risk. Read-only; never initializes, stages, commits, or pushes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
headNo
riskNo
filesNo
branchNo
countsNo
dryRunNo
reasonNo
subjectNo
repoRootYes
committedNo
operationYes
vaultRootYes
commitHashNo
pushReasonNo
validationNo
detachedHeadNo
expectedHeadNo
previousHeadNo
commitSummaryNo
pushSupportedNo
vaultPathspecNo
stagedOutsideVaultNo
operationInProgressNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description goes further by enumerating specific non-actions ('never initializes, stages, commits, or pushes') and flagging 'in-progress operation risk', which is valuable behavioral context not present in the structured metadata.

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 with no filler. The core purpose and return contents are front-loaded, followed by explicit non-behaviors. Every clause 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?

The output schema documents the return shape, so the description only needs to convey invocation-relevant details. It covers scope ('active vault only'), key return categories, and behavioral constraints. Nothing an agent needs to call it correctly is missing.

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 there is nothing to document; schema coverage is trivially 100%. The description correctly avoids inventing parameters, satisfying the baseline for parameterless tools.

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 ('Inspect') and names the exact resource ('local Git state for the active vault'). It enumerates distinct return items (HEAD/branch, change counts, staged-outside-vault warnings, risk) that clearly differentiate it from sibling tools like git_history and git_snapshot.

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 scope is clearly stated ('active vault only') and the read-only nature is explicit, giving an agent solid context for when this tool is safe to invoke. However, it does not explicitly name sibling alternatives or state when to prefer this over git_history/git_snapshot, so it stops short of full exclusion guidance.

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

index_projectA
Read-only

Project ontology indexing plan — run analyze_repo_structure + infer_imports + validate_vault in one read-only call. Use for large or already-existing projects where the agent needs a resumable ontology indexing checkpoint before writing. Its extractionContract treats source facts as observed evidence, README/folder meanings as proposals, and only persisted ontology meanings as shared; it also returns competency questions, uncertainty, approval gates, and whether active-vault validation actually applies to the analyzed project. The plan distinguishes raw candidates into existing, ambiguous-alias review, and genuinely new buckets, then returns exact reviewCalls for retrieving full rows. side effect 0: this tool never writes markdown. CLI index --apply may write analyzer-proposed concepts and containment, but inferred imports remain review-only and are never auto-promoted to depends_on.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxDepthNoFolder walk depth forwarded to analyze_repo_structure (default 2, max 10).
maxFilesNoFile cap forwarded to infer_imports (default 5000, max 50000).
rootPathNoRepository root to index. Defaults to the active resolved repository root from connection_info.
thresholdNoOptional module-edge count threshold for the returned import relation plan.
skipImportsNoWhen true, skip infer_imports and return an analyze + validate plan only.

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
nextYes
planYes
analyzeYes
importsYes
rootPathYes
vaultRootYes
sideEffectYes
validationYes
meaningGateYes
semanticEvidenceYes
extractionContractYes
configurationEvidenceYes

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint annotation by detailing the extraction contract (source facts as evidence, README meanings as proposals), categorization of candidates into existing/ambiguous/new buckets, return of reviewCalls, and explicit 'side effect 0: this tool never writes markdown.' It also explains that inferred imports are never auto-promoted, adding behavioral nuance not captured by annotations. No contradiction.

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 long but well-structured: the first sentence gives purpose, the second usage, then behavioral details. Every sentence conveys necessary information for a complex orchestration tool, though some phrasing could be tightened. It is front-loaded with the most critical usage guidance.

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

Completeness5/5

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

Given the tool's complexity and the presence of a full output schema, the description covers purpose, usage, side effects, and key return categories (competency questions, uncertainty, approval gates, reviewCalls). It even clarifies when active-vault validation may not apply, so nothing essential for correct invocation appears missing.

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

Parameters3/5

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

Schema coverage for all parameters is 100%, so the baseline is 3. The description does not add extra meaning to individual parameters beyond what the schema already provides; it only mentions them in passing (e.g., 'forwarded to'), so it doesn't compensate beyond baseline.

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

Purpose5/5

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

The description clearly states the tool orchestrates three specific analyzer tools (analyze_repo_structure, infer_imports, validate_vault) into a single read-only indexing plan. It distinguishes itself from those underlying tools by being a composite and from the CLI write variant by explicitly being read-only and never writing markdown.

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

Usage Guidelines5/5

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

The description explicitly states when to use: 'for large or already-existing projects where the agent needs a resumable ontology indexing checkpoint before writing.' It also contrasts with the CLI `index --apply` which may write, positioning this tool as the read-only alternative with the note that inferred imports remain review-only.

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

infer_importsA
Read-only

R17 (autonomous ingest deeper) — walk TS/JS files in a code repo and infer file-level + module-level import edges. It also walks bounded root Python packages, bounded src/source-layout Python packages, and deterministic Rust use/file-module/literal-include dependencies. A valid root Go module additionally exposes typed local package-import evidence; it stays separate from legacy file edges and never self-approves a semantic relation. Structured coverage names the supported languages; Rust support is bounded static text evidence and does not expand macros, evaluate cfg, resolve symbols, or prove runtime impact. side effect 0 (vault frontmatter NOT modified). moduleEdges are source-backed review candidates, never self-approving semantic depends_on relations. When you know an implementation file, set focusPath (or reviewMode:"focus") before considering full: Atlas returns bounded exact incoming/outgoing static import receipts, counts, and a cursor without requiring a vault. This focused source boundary is not runtime impact or a semantic relation. Omit reviewMode for size-safe automatic delivery: scans whose estimated full MCP result is at most 128 KiB keep the complete response; larger reconciled scans return exactly one compact, non-writing nextRelationReview:v1 packet plus a delivery receipt and stateless cursor. Use reviewMode:"next" to request that bounded packet explicitly. reviewMode:"full" preserves the complete shape, but a result over 128 KiB additionally requires allowLargeResponse:true; this second confirmation prevents coding agents from accidentally opting into a multi-megabyte response. Oversized raw scans without a loadable reconciliation vault fail with an actionable error instead of emitting an unbounded default response. Every compact candidate carries absentEndpoints. If an endpoint is missing, nextCalls is empty and endpointModelling separates an evidence-only analysis call from the complete rootPath + proposal validation contract, source-bound drafts, and queue resume. It never calls get_concepts or relation_check on a missing slug, never claims the analysis call created an endpoint, and never promotes a path-derived slug into a business kind or definition. Each module edge includes whole-edge source-role/import-usage counts, productValueCount, kindCounts, and a bounded exact file-edge evidence receipt. Missing vault edges remain rationale_review_required: inspect both concepts and the observed direction, ask the user, then call add_relation with an explicit why. Test-only or type-only evidence stays visible but must not be framed as a product depends_on approval question without separate product meaning evidence. Detects:

  • relative imports (./, ../) → resolved to file paths

  • dynamic import() / require() / export ... from

  • bare side-effect imports (import "X")

  • apps/* and packages/* workspace imports collapse to analyzer-compatible element slugs

  • bounded static Python import / from ... import statements in root or src/source-layout packages with init.py; imports nested under an explicit TYPE_CHECKING guard are type_only; source is parsed as text and never executed

  • external package imports listed separately

  • tsconfig.json compilerOptions.paths aliases first, then fallback common @/* aliases → resolved to internal files when the target exists; otherwise unresolved as alias-not-found

Use after analyze_repo_structure to pull real dependency edges from the code, not just suggestedRelations heuristics. Unless reconcile:false, also returns reconciliation (+ reconciliationSummary counts): the module edges diffed against the vault's compiled depends_on edges into inBoth / review-required missing edges / inVaultNotInCode (possibly-stale vault edges). Missing edges carry source evidence and a rationale_review_required gate, never a write action. Single source of truth preserved — inspect both concepts, explain why the semantic dependency holds, and ask the user before one explicit add_relation call with why.

ParametersJSON Schema
NameRequiredDescriptionDefault
ignoreNoExtra folder names to skip (added to defaults: node_modules, dist, build, …).
maxFilesNoPositive integer cap on files walked (default 5000, max 50000). Hard stop to avoid pathological monorepos.
rootPathNoRepository root to analyze. Defaults to the active resolved repository root from connection_info.
focusPathNoRepository-relative implementation file to inspect. Supplying focusPath with omitted reviewMode selects focus mode automatically. Returns bounded incoming/outgoing supported static import receipts; it does not claim runtime or semantic impact.
reconcileNoDefault true. When true, diff the inferred module edges against the vault's compiled depends_on edges and include `reconciliation` + `reconciliationSummary`. Set false to skip (raw scan only / no vault).
focusLimitNoFocus mode only. Maximum exact import receipts returned in one page (default 50, max 100).
reviewModeNoOmit for automatic delivery unless focusPath is present. `focus` returns a bounded exact file-level import neighborhood for focusPath. Otherwise responses estimated at or below 128 KiB keep the complete scan, while larger reconciled scans return one compact, non-writing review packet. `full` requests the complete scan; when it exceeds 128 KiB, also pass allowLargeResponse:true. `next` explicitly requests one compact packet and requires reconciliation.
afterReviewIdNo`reviewMode:"next"` only. Pass the prior packet cursor.nextAfterReviewId to advance deterministically; omit to start at the first current candidate.
sourceFoldersNoSource folders to walk (default: ['src','source','lib','app','apps','packages']). Nested scopes preserve repository-relative ontology endpoints. If none exist, falls back to rootPath.
focusDirectionNoFocus mode only. Which exact file-level import direction to page (default both).
focusAfterEdgeIdNoFocus mode only. Pass the prior focusReview.cursor.nextAfterEdgeId to advance deterministically; omit to start at the first current edge.
allowLargeResponseNoConfirmation for reviewMode:"full" only. Required when the estimated complete MCP result exceeds 128 KiB. It never changes scan contents or writes the vault.

Output Schema

ParametersJSON Schema
NameRequiredDescription
edgesNo
contractNo
coverageYes
deliveryNoPresent only when omitted reviewMode was automatically compacted because the estimated full MCP result exceeded the safe delivery boundary.
rootPathYes
nextReviewNo
unresolvedNo
focusReviewNo
moduleEdgesNo
reviewQueueNo
scanSummaryNo
filesScannedYes
reconciliationNoModule edges diffed against the vault's compiled depends_on edges (alias-normalized). null when no vault is loadable (e.g. scanning a foreign repo). Absent when reconcile:false.
externalImportsNo
staleEdgeFollowUpNo
packageImportEvidenceNoRoot Go module-only, bounded package import evidence. It is observed static source evidence, never a runtime claim or semantic relation approval.
reconciliationSummaryNo
packageImportEvidenceSummaryNoBounded Go package-import census. Call fullEvidenceCall to retrieve the complete typed receipt; focusReview itself contains legacy file edges only.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnlyHint=true and destructiveHint=false annotations, the description explicitly states side effect 0 (vault frontmatter NOT modified), that it never performs write actions, never self-approves semantic depends_on relations, never executes source code, and does not expand macros or evaluate cfg for Rust. It also discloses failure behavior for oversized scans without a reconciliation vault, which is valuable behavioral context not present in annotations.

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 an extremely long, dense wall of text that repeats several key ideas multiple times (never self-approving, never a write action, source-backed review candidates). It contains a useful bulleted list of detected import types, but overall the structure is not front-loaded and would be hard for an agent to parse quickly. Significant trimming and sectioning could preserve the same information with much less noise.

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

Completeness5/5

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

Given the tool's complexity, the description is remarkably complete. It covers supported languages, import detection variants, mode behavior, response size limits, reconciliation semantics, missing-edge handling, and write-safety guarantees. An output schema exists, and even though the description explains return details more than necessary, it does not leave critical gaps for an agent attempting to select or invoke the tool correctly.

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

Parameters4/5

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

The input schema already covers all 12 parameters at 100% coverage, so the baseline is 3. The description adds meaningful semantic context beyond the schema: it explains the automatic vs. focus vs. next delivery model, when allowLargeResponse is required, how focusPath interacts with reviewMode, and what reconcile:false skips. This is more than the schema alone provides, though some per-parameter semantics are still left to the schema.

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

Purpose5/5

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

The description states a specific verb and resource: walk TS/JS files and infer file-level and module-level import edges, plus Python/Rust/Go variants. It clearly distinguishes itself from analyze_repo_structure by calling out that it produces real dependency edges rather than suggestedRelations heuristics, and it names related tools like add_relation and get_concepts to clarify what it is not.

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

Usage Guidelines4/5

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

The description explicitly says to use this tool after analyze_repo_structurecreates a clear workflow position. It also explains when to set focusPath, when to omit reviewMode, when to use reviewMode:"next" or "full", and what to do when vault edges are missing (inspect concepts, ask user, then call add_relation). It does not exhaustively enumerate all sibling alternatives, but provides strong practical guidance for the main decision points.

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

inspect_architectureA
Read-only

Read one reviewed architecture-profile/v1 document from the active vault, scan the connected repository with the existing bounded static import analyzer, and return an architectureBrief:v1 for humans and coding agents. The profile declares scoped roles, intended dependency rules, and which known import usages those rules govern; source imports remain observed evidence with usage-qualified receipts. The result distinguishes conforms, violated, and unknown, and never treats unsupported languages, unclassified import usage, empty role mappings, or unmapped edges as compliance. Pattern labels are human/document declarations, not folder-name inference. side effect 0.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxFilesNoPositive source-file scan cap (default 5000, max 50000).
rootPathNoRepository root to inspect. Defaults to the active resolved repository root from connection_info.
profileSlugNoArchitecture profile_slug. Optional only when the vault contains exactly one architecture profile.

Output Schema

ParametersJSON Schema
NameRequiredDescription
profileYes
contractYes
sideEffectYes
conformanceYes
nextActionsYes
agentPlanContractYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral nuance beyond that: it never treats unsupported languages, unclassified import usage, empty role mappings, or unmapped edges as compliance, and clarifies that pattern labels come from human/document declarations, not folder-name inference. This directly informs the agent of the tool's conservative, evidence-based behavior, which is highly valuable for correct invocation and interpretation of results.

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?

Four sentences, each adding distinct value: the core action, the profile's role, the output categories, and the caveat about pattern labels. The description is front-loaded with the primary purpose and ends with a succinct 'side effect 0' note. No filler or redundant information.

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

Completeness5/5

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

Given the tool's complexity and the presence of an output schema, the description covers the essential context: input requirements (reviewed profile, active vault, connected repo), the scanning mechanism, the output type (architectureBrief:v1), the three result categories (conforms, violated, unknown), and explicit exclusions. The agent has enough information to decide when to invoke it and what to expect.

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

Parameters3/5

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

Schema coverage is 100% – every parameter (maxFiles, rootPath, profileSlug) has a description with constraints. The tool description adds no additional meaning about parameters, so it does not go beyond the schema. A baseline of 3 is appropriate since the schema fully documents the 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 opens with a precise verb-resource-outcome chain: 'Read one reviewed architecture-profile/v1 document, scan the connected repository with the existing bounded static import analyzer, and return an architectureBrief:v1.' It clearly distinguishes itself from sibling repo-analysis tools (e.g., index_project, analyze_repo_structure) by specifying the profile-based, compliance-focused output. The mention of 'reviewed' and 'bounded' narrows its scope further, so an agent can differentiate it without opening the schema.

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

Usage Guidelines4/5

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

The description implicitly conveys when to use it: when a reviewed architecture profile exists in the active vault and a repository is connected. It does not explicitly list alternatives or state when not to use it, but the context is clear enough to guide an agent toward this tool for architecture compliance checks rather than, say, indexing or repository structure analysis. No exclusions are mentioned, so a 4 is appropriate.

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

list_conceptsA
Read-only

List every ontology node in the vault (each .md file with a frontmatter kind:). Filter by kind, domain, and/or since (mtime-based incremental sync). Large vaults are resumable with offset + limit; always follow pagination.nextOffset while hasMore is true. AI agents call this first to grasp the codebase's mental model.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoFilter to one canonical ontology kind (project, domain, capability, element, document, vault-readme). Omit to return all. Invalid kind typos fail closed with nearest-value hints instead of returning an empty list.
limitNoPositive integer max rows to return. Defaults to 100, max 500.
sinceNoNon-negative mtime threshold. Filter to nodes with `mtime > since` (ms). Pair with the `mtime` returned in earlier `list_concepts` / `get_concept` responses for incremental sync — "what changed since I last looked". Strict greater-than (mtime === since is excluded) so re-passing the max from a previous response does not double-fetch.
domainNoFilter to nodes whose frontmatter `domain:` matches this slug (e.g. "auth"). Combine with `kind` for "all capabilities under auth" in one call. Use the domain *slug*, not the title.
offsetNoZero-based page offset applied after kind/domain/since filters. Resume at pagination.nextOffset until hasMore is false; ordering is deterministic by canonical slug.
summaryNoWhen true, each node row includes a `summary` (max 200 chars, prose-only — heading / table / code block / image / divider / list / quote are skipped and only the first paragraph is kept, same `extractSummaryExcerpt` helper as `get_concept` / `find_evidence`). Useful for "scan + overview" without N follow-up `get_concept` calls. Default false to keep payload small.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodesYes
totalYesTotal number of matching ontology nodes before the limit is applied.
limitedYesTrue when this page does not contain every matching row.
returnedYesNumber of rows returned in this page.
vaultRootYesResolved vault root path used for the listing.
paginationYes
summaryHintNoOnly present when at least one row carries a partial summary — names the follow-up call that returns the full bodies.
vaultWarningsNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral detail beyond annotations: pagination semantics ('always follow pagination.nextOffset while hasMore is true'), incremental sync via mtime, and resumability for large vaults. This gives the agent practical execution guidance without contradicting any annotation.

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

Conciseness5/5

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

The description is three sentences with zero filler. It front-loads the core purpose, then packs filter, pagination, and intended usage into compact, high-value clauses. Every sentence 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?

Given the rich input schema, output schema, and annotations, the description covers everything an agent needs: what the tool returns, how to filter, how to paginate, and when to call it. The incremental sync and pagination protocol are both stated clearly, so no critical behavioral gap remains for this list-style read tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents every parameter thoroughly, including enums, defaults, and filter behavior. The description adds a high-level summary of filtering ('Filter by kind, domain, and/or since') and pagination, but does not need to repeat schema details. Baseline 3 is appropriate because the schema carries the semantic load.

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 and resource: 'List every ontology node in the vault', with a precise definition ('each .md file with a frontmatter kind:'). This clearly distinguishes it from sibling tools like list_kinds (which lists kinds) and get_concepts (which fetches specific concepts). The scope is unambiguous and immediately actionable.

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

Usage Guidelines4/5

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

The description explicitly states a primary usage context: 'AI agents call this first to grasp the codebase's mental model.' It also explains when to use pagination and incremental sync. However, it does not explicitly say when to prefer alternatives such as list_kinds or get_concepts, so usage guidance is strong but not fully exclusionary.

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

list_kindsA
Read-only

Vault kind distribution — { total, byKind: { capability: N, ... } }. A quick census so AI agents can size up the vault without paging through list_concepts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesTotal number of vault docs that declare a kind.
byKindYesNode counts keyed by frontmatter kind.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the behavioral trait that it returns aggregated counts rather than a full list, and that it's a quick operation. However, it doesn't disclose details like whether the byKind map is sorted, whether zero-count kinds are omitted, or whether the total includes all concepts. With annotations covering safety, a 3 is appropriate.

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 with no waste. The return shape is front-loaded, and the usage context is given in the second sentence. Every word earns its place.

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 tool is simple (zero params, no nested objects) and has an output schema, so the description doesn't need to explain return values in depth. It covers the purpose, the return shape, and the use case. Minor gap: it doesn't mention whether the distribution is limited to certain concept types or if it includes all vault concepts, but the output schema likely covers that.

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 schema is trivially complete. The description adds meaning by explaining the return shape ({ total, byKind: { capability: N, ... } }), which is more than the empty schema provides. Baseline 4 for zero params is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: it provides a vault kind distribution with a total count and per-kind breakdown. It uses a specific verb ('list'/'census') and resource ('vault kind distribution'), and distinguishes itself from the sibling list_concepts by noting it's a quick census without paging.

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 implies when to use it: to size up the vault without paging through list_concepts. It names the alternative (list_concepts) and the context (quick census), though it doesn't explicitly state when not to use it or mention other alternatives like query_ontology.

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

merge_conceptsA
Destructive

⚠ DESTRUCTIVE MULTI-FILE WRITE — fold one node into another. Every backlink to fromSlug is redirected to intoSlug (frontmatter array entries + body links), then fromSlug is deleted. The survivor keeps its UID while the source UID/history is recorded in canonical merged_uids. The intoSlug prose and non-identity frontmatter are preserved as-is — they are not merged automatically (use patch_concept after if you want to combine descriptions). Tail-only references are also redirected. Two-stage safety:

  1. Without confirm: true the call is a dry-run — returns the redirect plan + list of deletions without writing.

  2. With confirm: true the rewrites and the delete happen in one pass. Throws if either slug is missing. Confirmed writes return compact postWriteMaintenance (maintenance_plan) with count-safe byPhase / bySeverity / byKind queue buckets, action score, executable proposedAction, and current-page nextExecutableAction / nextReviewAction pointers for the final graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoActually perform the merge when true. Omit or false for a dry-run.
fromSlugYesSlug to dissolve. Its file is deleted after backlinks redirect.
intoSlugYesSlug to keep. Receives every redirected backlink.
expected_mtimeNoOptional conflict guard for fromSlug. Throws if the source has been modified externally.
expected_into_mtimeNoOptional conflict guard for intoSlug. Pass the survivor mtime from get_concept so a concurrent edit or identity-history change is never overwritten.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dryRunYes
changedNo
deletedYes
fromUidYes
intoUidYes
messageNo
fromPathYes
fromSlugYes
intoSlugYes
canConfirmYesTrue only when repeating the call with confirm:true can perform the previewed change without another explicit safety opt-in.
wouldChangeYesTrue only when the dry-run predicts a disk or Git change.
absorbedUidsYes
capturedFromYes
previewReadyYesTrue only when this response is a complete dry-run preview that an agent can review.
blockedReasonsYesMachine-readable human explanations for every condition currently blocking confirmation.
backlinkUpdatesYes
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.6/5.0
Behavior5/5

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

The description goes far beyond the annotations. While annotations already indicate destructiveHint, the description details exactly what is destroyed (fromSlug deleted after redirecting), what is preserved (intoSlug prose and non-identity frontmatter), and the two-stage execution model (dry-run vs confirm). It also discloses failure conditions (throws if slug missing), conflict guards, and the structure of the output (postWriteMaintenance with byPhase/bySeverity/byKind). This is exemplary behavioral transparency.

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

Conciseness4/5

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

The description is long but information-dense. It front-loads the critical destructive warning and organizes the two-stage safety into a numbered list. Each sentence contributes useful details (redirects, preserved fields, conflict guards, output structure). While some output details might duplicate what's in the output schema, the description is still tightly written and avoids fluff. The length is justified given the tool's complexity.

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 destructive, multi-file mutation tool, the description covers all essential context: preconditions (slugs exist), side effects (redirects, deletion), safety mechanisms (dry-run, confirm), conflict guards, and output expectations. It also mentions exception behavior and the preservation of the survivor's identity. Given the output schema exists, the tool is complete enough for an agent to invoke correctly without additional information.

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

Parameters4/5

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

The schema already has 100% description coverage for all parameters, with clear descriptions for confirm, fromSlug, intoSlug, expected_mtime, and expected_into_mtime. The description adds valuable context beyond the schema, particularly the dry-run/confirm behavior and the conflict-guard purpose of the mtime parameters ('so a concurrent edit or identity-history change is never overwritten'). This enriches the agent's understanding without repeating the schema verbatim.

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 ('fold one node into another') and explicitly lists the core actions: redirecting all backlinks and deleting fromSlug. This clearly distinguishes it from siblings like rename_concept (which renames a node) and delete_concept (which removes without redirecting). The use of 'DESTRUCTIVE MULTI-FILE WRITE' upfront also signals its unique purpose.

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

Usage Guidelines4/5

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

The description provides clear guidance on when to use the tool: to merge concepts, with a two-stage safety mechanism (dry-run vs confirmed). It also mentions using patch_concept after if combining descriptions is desired, which routes the agent to an alternative action. However, it doesn't explicitly state when to choose a different tool (e.g., rename_concept for simple renaming) or list exclusions. The context is clear but not exhaustive.

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

patch_conceptA

Update the frontmatter and/or body of an existing ontology node. Use when an AI agent revises, deepens, or reclassifies a node. Frontmatter patches are key-by-key — null deletes a key, omission preserves it. Body is fully replaced when provided, otherwise preserved. Pass expected_mtime (from the previous get_concept response) to detect concurrent external edits — throws VaultConflictError if the file has changed on disk since you read it. Changed writes return compact postWriteMaintenance (maintenance_plan) with count-safe byPhase / bySeverity / byKind queue buckets, action score, executable proposedAction, and current-page nextExecutableAction / nextReviewAction pointers so agents can immediately continue graph cleanup.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoFull replacement markdown body (optional). Preserved when omitted.
slugYesVault-relative slug (omit the .md extension).
frontmatterNoFrontmatter key/value patches (e.g. { kind: "capability", domain: "views" }). null removes the key. Per-locale display names go here as `display_ko` / `display_en` — fill every locale the vault serves so both audiences read a native name (`title` stays the search/matching source).
expected_mtimeNoOptional conflict guard. If the file mtimeMs differs at write time, the call throws so the caller can re-read and retry. Pass the `mtime` field from the most recent get_concept response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
slugYes
changedYes
filePathYes
postWriteMaintenanceYesCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false, leaving significant behavioral detail to the description. The description fully transparently explains the patch semantics: 'Frontmatter patches are key-by-key — null deletes a key, omission preserves it. Body is fully replaced when provided, otherwise preserved.' It also discloses the conflict-detection error (VaultConflictError) and the structure of the returned postWriteMaintenance object, giving the agent a complete picture of the tool's runtime behavior.

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

Conciseness5/5

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

The description is front-loaded with the core action, then systematically covers usage, patch semantics, conflict handling, and return value structure. Every sentence contributes operational or strategic information. While lengthy, the length is justified by the tool's complexity and the need to clearly explain non-obvious behavior (key-by-key patching, conflict detection, postWriteMaintenance). No filler or redundancy.

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

Completeness5/5

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

Given the tool's complexity (4 params, nested object, conflict behavior, response details) and the presence of an output schema, the description is exceptionally complete. It covers when to use, how parameters behave, what errors to expect, and what the response contains (maintenance_plan with byPhase/bySeverity/byKind queues and pointer fields). An agent has all necessary information to invoke the tool correctly and handle outcomes.

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

Parameters5/5

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

Although schema description coverage is 100% (all parameters have schema-level descriptions), the tool description adds substantial semantic nuance beyond the schema. It explains the key-by-key frontmatter behavior (null deletes, omission preserves), the body replacement semantics, and the purpose of `expected_mtime` as a conflict guard. This enriches parameter understanding and guides correct values (e.g., per-locale display names in frontmatter).

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 opens with a specific verb and resource: 'Update the frontmatter and/or body of an existing ontology node.' It explicitly targets existing nodes, distinguishing it from creation (add_concept) and deletion (delete_concept) tools. It also signals the intended use case ('revises, deepens, or reclassifies'), which differentiates it from related siblings like rename_concept or reclassify_concept.

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 states 'Use when an AI agent revises, deepens, or reclassifies a node.' This gives explicit context for when this tool is appropriate. It does not explicitly name alternative tools or list when-not-to-use conditions, but the scenario phrasing helps an agent decide. The addition of `expected_mtime` conflict guard also provides practical usage guidance.

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

query_conceptsA
Read-only

Typed filter DSL — search vault nodes by predicate. Built for saved-filter / smart-list cases that find_path (BFS) cannot answer, such as "which capabilities have zero elements?", "stub-only nodes in domain=auth", or "has(depends_on) excluding vault-readme".

Grammar (case-insensitive keywords, whitespace-tolerant): filter := atom (AND|OR atom)* atom := NOT? predicate predicate := key=value | key!=value | has(key)

Keys: kind / domain / slug / title for equality, plus any graph frontmatter array key for has(...). kind and has(...) keys are enum-validated with nearest-value hints. Example: kind=capability AND domain=auth AND NOT has(elements) — capabilities under domain auth that have zero elements (= unfinished caps). When total=0, the response includes a growthHint — it names any referenced kind/domain that has 0 nodes in this vault, or nudges you to loosen the filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPositive integer max rows to return. Defaults to 100, max 500.
filterYesFilter expression. Example: kind=capability AND has(elements). Supports NOT / AND / OR. Wrap values containing whitespace or special characters with "..." or '...'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
filterYes
limitedYes
matchesYes
parsedAsYes
growthHintNoOnly present when total=0 — flags a referenced kind/domain with 0 nodes in this vault census, or a generic loosen-the-filter nudge otherwise.

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description goes further: it explains the grammar (case-insensitive, whitespace-tolerant), enum validation with nearest-value hints, and the special growthHint behavior when total=0. This adds rich behavioral context beyond what annotations provide, with no 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?

Though it is longer than typical descriptions, the length is fully earned: a DSL grammar cannot be conveyed in a sentence. The structure is logical — purpose, grammar, keys, example, special case — and front-loads the most critical scoping information. No filler or repetition.

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

Completeness5/5

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

For a 2-param tool with an output schema, the description covers everything needed to invoke correctly: it explains the DSL grammar, valid keys, the limit default (via schema), the growthHint edge case, and even gives query examples. The contrast with find_path removes selection ambiguity. Nothing an agent needs is missing.

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

Parameters5/5

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

Schema coverage is 100%, so both params are already documented. The description adds substantial meaning beyond the schema: it defines the full filter grammar, supported keys, and gives a working example. It also clarifies that kind and has(...) keys are enum-validated, which the schema does not mention. This far exceeds the baseline of 3.

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 opens with a specific verb+resource: 'search vault nodes by predicate' and immediately frames its niche as saved-filter/smart-list cases. It explicitly names the sibling (find_path) that it is not, making distinction trivial. Examples like 'which capabilities have zero elements?' ground the purpose concretely.

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 states when to use it ('saved-filter / smart-list cases') and when not to ('find_path (BFS) cannot answer'), and provides concrete example queries. It makes the selection rule explicit rather than implied, leaving no ambiguity about the target use case.

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

query_ontologyA
Read-only

Analysis archive: analysis_history reads immutable diagnostic Markdown summaries without compiling the graph; use analysisMode, project, limit (1–100 scanned files, default 30), and analysisCursor. analysis_record reads one exact run or review with recordId (UUID). Records retain raw answers, full-body evidence when available, request scope and uncertainty. They are not approved ontology facts; stored qualification describes captured evidence, never current source validity. Reviews are joined to their exact run/finding id. Follow pagination even if a filtered page is empty. These archive operations do not support query_plan. Run graph-engine queries over the freshly compiled ontology artifact. Operations: neighbors (local graph neighborhood), path (one compiled-edge route between two nodes with aligned nodes[] summaries), all_paths (bounded simple paths between two nodes with per-path nodes[] summaries plus limit/searchBudget/exhaustive/truncatedByBudget/totalPathsExact metadata and evidence guidance), query_plan (EXPLAIN-style side-effect-free cost/index estimate plus execution advice before a target operation, filter-preserving suggestedQuery, and filter-aware estimate.totalMatches for match_nodes/match_edges), centrality (PageRank-style core-node ranking plus bridge/authority/hub lists), communities (label-propagation clusters inside the graph), similar_nodes (duplicate/overlap candidates before writes), explain_relation (direct edges, shortest path, and shared-neighbor explanation between two nodes), reachability (transitive graph closure from a start node), pattern_walk (explicit relation-sequence paths such as project → domains → capabilities), impact (incoming by default: what depends on this node), blast_radius (impact grouped by kind/domain with cross-domain edge risk), subgraph (bounded N-hop graph slice for UI/agent views), builder_context (persisted Workshop focus, layout positions, direct graph slice, and safe write handoff; unsaved UI drafts are explicitly excluded; operation name retained for compatibility), overview (counts, relation distribution, and hubs), schema (kind-relation-kind patterns), facets (filter/dashboard aggregates), match_nodes (graph DB-style node rows with degree filters plus a followUp packet for the first returned row), match_edges (graph DB-style edge pattern rows plus a followUp packet for the first returned real edge), node_profile (single node detail dashboard), domain_profile (domain detail dashboard), domain_matrix (domain-to-domain coupling), project_scope (project-contained graph slice), project_map (domain-by-domain project map), relation_check (schema-aware preflight before add_relation), components (connected graph islands), lineage and containment_tree (project/domain/capability containment), cycles (directed dependency-cycle checks), topological_order (prerequisite-first dependency ordering), recommend_relations (safe domain-containment suggestions), growth_plan (side-effect-free ontology expansion candidates), maintenance_plan (ordered post-write graph cleanup/repair actions with stable action id, count-safe summary fields, byPhase / bySeverity / byKind remaining-queue buckets, ready cursor cursor.found=true / cursor.reason=null, cursor nextAfterActionId/hasMore pagination metadata, afterActionId resume, unknown-cursor empty page with cursor.nextAfterActionId=null / cursor.hasMore=false, kind filters, executable graph-array canonicalization, executable flags, and current-page nextExecutableAction / nextReviewAction pointers), agent_brief (Claude Code/Codex handoff prompt, structured businessOntologyLens with business-first outcome → domain → capability → element read order, graphDbQueryPack for facets, schema, match_nodes, match_edges, domain_matrix, centrality, all_paths, explain_relation, and business_questions scans for outcome / domain boundary / capability claim nodes / implementation evidence edges, structured cliFallbackCommands, recipes, graph entrypoints, graph_traversal playbook, traversalStrategy plan_before_enumeration/bounded_path_evidence/containment_cross_check guidance, playbook evidence/stopWhen checklists, write guardrails, relationDecisionGuide, resultContracts for all_paths completeness and match_nodes/match_edges followUp evidence, and read-first write policy), meaning_repair_review (provenance-bound, byte-bounded typed evidence pages and literal full-body read calls for the compact meaning repair manifest), workspace_brief (first-contact status + next actions), and health (one-shot graph integrity dashboard whose relationCensus labels compiler declaration counts and the nonnumeric canonical app-map comparison unit). For agent_brief, select project explicitly when the vault has more than one project. Omitted detail and detail:"full" return the complete project-scoped diagnostic contract. For a known coding task, call detail:"compact" directly after connection_info; do not precede it with workspace_brief or a full inventory unless the question needs whole-vault health. Compact v2 requires a nonblank request-local task (max 2000 characters) and returns at most 12000 UTF-8 JSON bytes: final source/meaning currentness, claim-compatible broad capability selection, persisted element/path evidence, explicit unknown impact and verification, exact full-body next reads, and a detail:"full" follow-up. Definition and Includes support desired work; Excludes may align with explicit non-goals, while a desired/negative boundary conflict, an unsupported claim, or a tied top claim returns no capability. Its content[0].text is the bounded handoff prompt while structuredContent carries the typed facts once. When the selected element Markdown contains reviewed Primary implementation / Supporting implementation / Focused test coordinates and the bound source is current, taskNavigation verifies only those named files and returns exact current lines plus the reviewed non-exhaustive IN/OUT boundary. After those reads, Atlas rechecks the same source identity, fingerprint, revision, and graph hash; any mismatch removes the exact target and downgrades the complete outer currentness contract. A ready prompt reads primary, supporting, focused tests, and a verified manifest together; requires named positive and negative regression tests with exact observable output; and runs the focused check once followed by one non-overlapping full check. Missing, ambiguous, stale, unsafe, or unrecorded coordinates emit no exact target. Task matching selects evidence only; it never searches the repository, never proves source behavior, never persists task text, never approves meaning, and never writes the vault. For impact and blast_radius, only declared depends_on is allowed; use reachability/subgraph for structure. Blast radius reports unknown risk/completeness plus review_required or declared_with_rationale edge qualification until relation-level source receipts exist. A missing depends_on preflight is schema-only: relation_check returns proposedAction:null plus a non-writing approvalGate until the agent explains the observable ability and semantic rationale and receives explicit human approval. Accepts canonical slugs or unique aliases. side effect 0. Use this when you need graph-database-like answers without pulling the full compile_ontology payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoTarget node slug or unique alias. Required for path, all_paths, and explain_relation.
fromNoSource node slug or unique alias. Required for path, all_paths, and explain_relation.
kindNomatch_nodes: optional node kind filter (project, domain, capability, element, document, vault-readme). recommend_relations currently supports capability or element.
seedNoAlias for slug when operation is subgraph or builder_context.
slugNoCenter/root node slug or unique alias. builder_context also accepts its own canonical Workshop focusParam (for example domain:auth). Required for neighbors, reachability, pattern_walk, impact, blast_radius, subgraph, builder_context, lineage, node_profile, and domain_profile; optional root for containment_tree.
sortNomatch_nodes only: sort rows by degree, inDegree, outDegree, or slug. Defaults to degree.
taskNoagent_brief detail:"compact" only: request-local coding task used to select persisted capability, element, and reviewed navigation evidence after Definition/Includes/Excludes compatibility. Conflicting, unsupported, or tied claims return no capability. Never persisted, never used to invent a coordinate, and never treated as behavior proof or semantic approval.
typeNoRelation type for relation_check/match_edges, e.g. depends_on, relates, contains, describes, domains, capabilities, elements, or domain.
depthNoreachability/impact/blast_radius/subgraph/lineage/containment_tree traversal depth. Defaults to 3 for reachability, 2 for impact/blast_radius/subgraph, and 20 for lineage/containment_tree; capped at 20.
kindsNomaintenance_plan only: optional action-kind filter, e.g. ["add_missing_relation", "canonicalize_graph_arrays"].
limitNoPositive integer max rows/components/order entries to return. Defaults to 100, capped at 500.
titleNosimilar_nodes only: proposed title for a not-yet-written concept candidate.
typesNoOptional relation types to include, e.g. ["dependencies"] or ["depends_on"].
cursorNomeaning_repair_review only: opaque stateless cursor returned as pagination.nextCursor. Omit for the first page.
detailNoagent_brief only: compact v2 returns a task-scoped, selected-project handoff capped at 12000 UTF-8 JSON bytes, including exact reviewed taskNavigation only when the bound source is current; full returns the complete diagnostic manuals and graph packs. Omit to keep the current full response while compact is being qualified.
domainNomatch_nodes: optional exact domain filter. domain_profile: domain root slug or unique alias.
phasesNomaintenance_plan only: optional phase filter, e.g. ["repair", "link", "materialize"].
toKindNomatch_edges only: optional target kind filter (project, domain, capability, element, document, vault-readme, external, unresolved). Use external or unresolved for non-node refs.
maxHopsNopath/all_paths/explain_relation traversal hop cap or cycles max depth. Defaults to 5 for path/all_paths/explain_relation and 8 for cycles; capped at 20.
patternNopattern_walk only: required relation sequence to follow, e.g. ["domains", "capabilities", "elements"]. depends_on is normalized to dependencies.
projectNodomain_matrix/project_scope/project_map/agent_brief/meaning_repair_review: project root slug or unique alias. Required for meaning_repair_review; optional when exactly one kind: project node exists for the other operations.
fromKindNomatch_edges only: optional source node kind filter (project, domain, capability, element, document, vault-readme). Source must be a real ontology node, not external/unresolved.
recordIdNoanalysis_record only: immutable analysis or diagnostic-review UUID.
relationNoAlias for type when operation is relation_check.
directionNoneighbors/reachability/impact/blast_radius/subgraph/builder_context: incoming, outgoing, or both. path/all_paths/explain_relation/reachability also accepts undirected.
itemLimitNoproject_map only: positive integer max capability/element/hotspot summaries per domain. Defaults to 20, capped at 500.
maxDegreeNomatch_nodes only: non-negative integer maximum total graph degree.
minDegreeNomatch_nodes only: non-negative integer minimum total graph degree.
nodeLimitNocomponents/communities/health/workspace_brief/agent_brief only: positive integer max node summaries per component/community group. Defaults to 25 for components/communities and 10 for health, capped at 500.
operationYesQuery operation to run.
cycleLimitNohealth/workspace_brief/agent_brief only: positive integer max dependency cycles to inspect. Defaults to 5, capped at 500.
iterationsNocentrality/communities only: positive integer PageRank or label-propagation iteration count. Defaults to 20, max 100.
orderLimitNohealth/workspace_brief/agent_brief only: positive integer max topological-order rows to inspect. Defaults to 20, capped at 500.
severitiesNomaintenance_plan only: optional severity filter, e.g. ["fail", "warn"].
hasIncomingNomatch_nodes only: require presence or absence of incoming graph edges.
hasOutgoingNomatch_nodes only: require presence or absence of outgoing graph edges.
minInDegreeNomatch_nodes only: non-negative integer minimum incoming graph degree.
analysisModeNoanalysis_history only: optional analysis subject filter.
minOutDegreeNomatch_nodes only: non-negative integer minimum outgoing graph degree.
searchBudgetNoall_paths, query_plan(all_paths), and cycles: maximum DFS states to expand before returning partial results. Defaults to 5000. For cycles this is the only bound that fires on an ACYCLIC graph — when truncatedByBudget is true, zero cycles does NOT mean acyclic (check totalCyclesExact).
slugContainsNomatch_nodes only: optional case-insensitive substring filter on canonical slug.
afterActionIdNomaintenance_plan only: stable action id cursor; return actions after this id. Without afterActionId the ready page reports cursor.found=true and cursor.reason=null; cursor.nextAfterActionId matches the last returned action id (or null for an empty page), and cursor.hasMore matches whether more remaining actions exist after this page. nextExecutableAction/nextReviewAction point only at the first executable/review action in the current returned page and preserve that action id, executable flag, phase, kind, and severity. Bucket totals (byPhase, bySeverity, byKind) match remainingActions for the returned cursor. Unknown cursors return an empty page with cursor.found=false, cursor.reason, zero remaining actions, cursor.nextAfterActionId=null, cursor.hasMore=false, and no next actions.
candidateSlugNosimilar_nodes only: proposed slug for a not-yet-written concept candidate.
analysisCursorNoanalysis_history only: nextCursor from the preceding scanned-file page.
componentLimitNohealth/workspace_brief/agent_brief only: positive integer max connected components to inspect. Defaults to 5, capped at 500.
componentTypesNohealth/workspace_brief/agent_brief only: relation types used for connected-component checks. Defaults to the full graph relation set.
executableOnlyNomaintenance_plan only: when true, return only actions with a proposed tool call.
includeOrphansNocontainment_tree only: include ancestorless nodes not reached from project roots. Defaults false.
reviewRevisionNomeaning_repair_review only: sha256 revision from meaningRepair:v2, binding graph/source/typed rows/target mtimes.
dependencyTypesNohealth/workspace_brief/agent_brief only: dependency relation types used for cycle and topological-order checks. Defaults to ["dependencies"].
includeExternalNoneighbors only: include external path-like element refs. Defaults false.
includeIsolatedNotopological_order only: include nodes that are not connected by the selected relation types. Defaults false.
targetOperationNoquery_plan only: read-only graph operation to explain before execution. Excludes query_plan, meaning_repair_review, analysis_history and analysis_record.
expectedGraphHashNomeaning_repair_review first page: exact graphHash from meaningRepair:v2 provenance. Later nextCall values are revision-bound and omit it.
includeUnresolvedNoneighbors only: include dangling unresolved refs. Defaults false.
recommendationLimitNohealth/workspace_brief/agent_brief only: positive integer max relation recommendations to inspect. Defaults to 20, capped at 500.
expectedSourceFingerprintNomeaning_repair_review first page: exact current sourceFingerprint from meaningRepair:v2 provenance. Later nextCall values are revision-bound and omit it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
operationYes
compiledSummaryNo

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description goes far beyond that: 'side effect 0,' 'never writes the vault,' records are 'not approved ontology facts,' complement excludes unclear/unsupported claims, and missing depends_on preflight yields a 'non-writing approvalGate.' It also exposes operational caveats like cursors being stateless, unknown cursors returning empty pages, and 'truncatedByBudget=true ... zero cycles does NOT mean acyclic.' This is rich behavioral disclosure on its own and fully consistent with the annotations.

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 a wall of text: a 39-operation enumeration with extensive cursor and contract details and no headings, lists, or clear front-loaded purpose. Useful guidance such as 'call detail:"compact" directly after connection_info' and even the closing 'Use this when...' is buried by the end of a giant paragraph. It is information-dense, but that density without structure makes it less scannable for an LLM performing a tool selection.

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 57-parameter, 39-operation tool, the description is almost everything but the schema: it explains pagination modes, completion (mutual for unfiltered pages), side-effect boundaries, auth/exclusions per operation, output slots ('content[0].text' vs 'structuredContent'), and operation-specific limits. An output schema is present and carries the return-type contract, so that omission is reasonable. The main shortfall is not missing subjects but a readability/structural deficit that reduces the practical completeness of 4 rather than 5.

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

Parameters3/5

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

Schema coverage is 100% and its parameter descriptions are already very detailed, so the baseline is 3. The description does add per-operation semantics, e.g., depth defaults varying by operation ('3 for reachability, 2 for impact/blast_radius/subgraph, 20 for lineage/containment_tree') and 'depends_on is normalized to dependencies' for pattern. But much of the body repeats schema content (e.g., searchBudget caveat, afterActionId cursor contract), and one operation-specific statement confuses the schema ('limit (1–100 scanned files ... default 30)' vs schema default 100 cap 500).

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 identifies a concrete resource and verb: query the freshly compiled ontology graph, with an explicit contrast against 'pulling the full compile_ontology payload' and a separate analysis archive mode. It also states 'side effect 0' and enumerates operations, so an agent can tell what the tool is for. However, it never differentiates itself from siblings like query_concepts, find_path, find_neighbors, or get_concept, leaving cross-tool discrimination to the agent.

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?

There is explicit when-to-use guidance: use it when you need graph-database-like answers without compiling the full payload, and 'these archive operations do not support query_plan; run graph-engine queries on the freshly compiled artifact.' It also includes routing rules, e.g., impact/blast_radius only use declared depends_on while reachability/subgraph handle structure, and agent_brief compact should follow connection_info directly rather than workspace_brief. Alternatives are named (compile_ontology, workspace_brief), but sibling query tools are never exclusions, so some boundary work remains.

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

read_sourceA
Read-only

Read the text of one raw source under sources/, cut into the units a wiki citation names (docs/ONTOLOGY-ATLAS-SPEC.md §11): a DOCX by heading (h:<slug>; paragraphs before the first heading are p1), an XLSX by sheet and row (s<n>r<m>), a CSV by row (r<n>), a text or HTML file by line (l<n>). Each unit carries the exact anchor to write into [[src:sources/<file>#<anchor>]], so a page cites what it quotes. A PDF returns no text: the agent runtime reads PDFs natively, page by page, and cites #p<n>. Nothing is converted and kept — the file is read on request and the text returned once. Paging: from (1-based unit index) and limit (default 200, max 1000); when truncated is true, next is the from to continue with. sheet narrows a workbook to one sheet number. Returns { path, format, unitCount, from, units: [{anchor, text, kind, heading?, sheet?}], truncated, next?, sha256, note? }. side effect 0. Use it in place of a shell command when a Compile, Check or ask turn needs what a DOCX or XLSX says.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromNo1-based index of the first unit to return. Default 1.
pathYesVault-relative path under `sources/` (`sources/plan.docx`).
limitNoUnits to return at most. Default 200.
sheetNoXLSX only: return one sheet, by its number in workbook order.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fromYes
nextNo
noteNo
pathYes
unitsYes
formatYes
sha256Yes
truncatedYes
unitCountYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds 'side effect 0' and 'Nothing is converted and kept — the file is read on request and the text returned once.' It thoroughly discloses paging behavior, including `truncated` and `next`, and the PDF no-text behavior, which goes beyond the structured annotations.

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 long but dense: it packs the unit grammar, special cases, paging, return shape, and usage guidance into a single cohesive block. It front-loads the core 'Read raw source into units' idea, though the later detailed listing of return fields could be trimmed since an output schema exists. No wasted words, but not extremely tight.

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?

The tool has a complex unit model and the description explains the return shape in enough detail, especially since an output schema already exists. It covers format-specific anchor syntax, the no-text PDF behavior, paging semantics, and the relationship to the `sources/` directory, leaving no ambiguity for an agent deciding to call it and process results correctly.

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

Parameters4/5

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

The input schema already covers all 4 parameters, so the baseline is 3. The description adds meaning beyond the schema by explaining that `from`/`limit` are unit indices (not byte ranges), that `next` is a continuation pointer when `truncated` is true, and that `sheet` narrows a workbook. This connections between the parameters and the unit model is valuable.

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 clear action and target resource: 'Read the text of one raw source under `sources/`' and cuts it into citation units. It differentiates from any other read-style sibling by naming the exact formats and unit schemes (DOCX, XLSX, CSV, text/HTML) and by explaining what the PDF exception is. The 'Use it in place of a shell command' clause further separates it from non-shell, non-source tools.

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 gives an explicit when-to-use: a Compile, Check or ask turn that needs DOCX or XLSX content, in place of a shell command. It also gives an explicit when-not-to-use: PDFs, which the agent runtime reads natively. No alternative tool is named, but the usage context and exclusions are unambiguous.

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

reclassify_conceptA
Destructive

⚠ MULTI-FILE WRITE — change a concept kind and optionally its canonical slug/domain in one previewable transaction. The permanent UID is preserved. Redirects backlinks like rename_concept and replaces a generated starter body with the new kind template while preserving custom prose. Defaults to dry-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoOptional explicit replacement body.
slugYesCurrent canonical slug.
domainNoNew domain; required for capability/element.
confirmNo
newKindYes
newSlugNoOptional new canonical slug.
expected_mtimeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
uidYes
dryRunYes
changedYes
newKindYes
newSlugYes
oldKindYes
oldSlugYes
bodyActionYes
canConfirmYesTrue only when repeating the call with confirm:true can perform the previewed change without another explicit safety opt-in.
sourcePathYes
targetPathYes
wouldChangeYesTrue only when the dry-run predicts a disk or Git change.
previewReadyYesTrue only when this response is a complete dry-run preview that an agent can review.
blockedReasonsYesMachine-readable human explanations for every condition currently blocking confirmation.
backlinkUpdatesYes
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already signal destructiveHint=true, but the description adds substantial behavioral detail: multi-file write, permanent UID preservation, backlink redirection, starter body replacement with custom prose preservation, and default dry-run. This goes well beyond the annotations and provides safety-relevant understanding for an agent invoking a destructive operation.

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

Conciseness5/5

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

Two dense, front-loaded sentences with a clear warning, a concise statement of what changes, side effects, and the dry-run default. Every clause adds operational value and nothing repeats the schema or annotations.

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 destructive multi-file write with seven parameters, the description covers the transaction model, side effects, UID behavior, and body preservation, which is strong. Minor gaps remain around confirm as the commit trigger, expected_mtime concurrency, and the conditional requirement that domain is needed for capability/element, though some of that is present in the schema.

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

Parameters4/5

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

The description maps meaningfully onto parameters: newKind affects the concept kind, newSlug/domain cover the optional slug/domain changes, and body is reflected in the 'preserving custom prose' behavior. With schema coverage at 57%, the description partially compensates for undocumented params, though confirm and expected_mtime are still left to inference.

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 ('reclassify'), the resource ('concept'), and the exact scope: changing the concept kind and optionally its slug/domain. It also differentiates this from rename_concept by noting backlink redirection and from patch_concept by framing it as a multi-file write. The behavior is unambiguous and distinct from sibling 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 actionable context by referencing rename_concept and by stating that it defaults to dry-run, which tells the agent that a preview step is expected. However, it never explicitly states when to prefer this over patch_concept, rename_concept, or delete_concept, nor does it state exclusions or prerequisites for reclassification.

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

remove_relationA
DestructiveIdempotent

Safely remove one exact typed relation and its relation_notes rationale from a source node. Defaults to dry-run; pass confirm:true to write. Supports expected_mtime conflict protection. Use this instead of replacing a whole frontmatter array with patch_concept.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget slug.
fromYesSource slug.
typeYes
confirmNoActually remove when true; default is dry-run.
expected_mtimeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
toYes
keyYes
fromYes
typeYes
dryRunYes
existsYes
changedYes
canConfirmYesTrue only when repeating the call with confirm:true can perform the previewed change without another explicit safety opt-in.
wouldChangeYesTrue only when the dry-run predicts a disk or Git change.
previewReadyYesTrue only when this response is a complete dry-run preview that an agent can review.
blockedReasonsYesMachine-readable human explanations for every condition currently blocking confirmation.
removedRationaleNo
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already signal destructive behavior, but the description adds real value: it reveals the dry-run default, the need to pass confirm:true to write, expected_mtime conflict protection, and the side effect of deleting relation_notes. This goes well beyond what the annotations provide.

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 tight sentences with no filler. The core operation is front-loaded, safety behavior follows immediately, and the alternative-tool pointer is last. Every sentence 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?

Given the output schema exists and annotations cover safety, the description fully covers what an agent needs: what is removed, how to make it write, conflict protection, and the preferred alternative. Nothing essential is missing for correct invocation.

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

Parameters4/5

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

Schema coverage is 60%, leaving type and expected_mtime without descriptions. The description compensates by explaining confirm's dry-run semantics and expected_mtime's conflict-protection role, and by framing 'type' as the typed-relation discriminator. Minor remaining gap: exact behavior when expected_mtime mismatches.

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?

States a specific action ('remove'), a specific resource ('one exact typed relation'), and the attached 'relation_notes' rationale. It also explicitly differentiates itself from patch_concept, so an agent can tell what this tool does at a glance.

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 clearly says to use this tool instead of replacing a whole frontmatter array with patch_concept, and the 'Safely remove one exact typed relation' phrasing defines the triggering condition. This is explicit routing guidance, not just a vague context hint.

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

rename_conceptA
Destructive

⚠ MULTI-FILE WRITE — change a slug and update every backlink in one atomic graph-level operation. The node UID is preserved; only its current human-readable slug changes. Renames the .md file (oldSlug → newSlug, directory move OK), updates the moved file's frontmatter slug: key, and rewrites every backlink — frontmatter array entries (capabilities / elements / dependencies / relates / contains / describes), inline-string keys, and body links [[oldSlug]] / (oldSlug.md). Tail-only references (mcp-server for capabilities/mcp-server) are also redirected to the new tail. Two-stage safety:

  1. Without confirm: true the call is a dry-run — returns updates (each affected file with before/after array keys + bodyChanged flag) without writing.

  2. With confirm: true the file is moved and all backlinks are rewritten in one pass. Throws if oldSlug missing or newSlug already taken (unless overwrite: true). Use this instead of patch_concept + N find_backlinks + N patch_concept loops. Confirmed writes return compact postWriteMaintenance (maintenance_plan) with count-safe byPhase / bySeverity / byKind queue buckets, action score, executable proposedAction, and current-page nextExecutableAction / nextReviewAction pointers for the final graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoActually perform the rename when true. Omit or false for a dry-run preview.
newSlugYesTarget vault-relative slug (omit the .md extension). Directories are created if needed.
oldSlugYesCurrent vault-relative slug (omit the .md extension).
overwriteNoAllow overwriting an existing file at newSlug. Defaults to false (throws if newSlug exists).
expected_mtimeNoOptional conflict guard for oldSlug. Pass the `mtime` from get_concept; throws VaultConflictError if the source has been modified externally since you read it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
uidYes
movedYes
dryRunYes
changedNo
messageNo
newSlugYes
oldSlugYes
canConfirmYesTrue only when repeating the call with confirm:true can perform the previewed change without another explicit safety opt-in.
sourcePathYes
targetPathYes
wouldChangeYesTrue only when the dry-run predicts a disk or Git change.
previewReadyYesTrue only when this response is a complete dry-run preview that an agent can review.
blockedReasonsYesMachine-readable human explanations for every condition currently blocking confirmation.
backlinkUpdatesYes
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, and the description expands on this with essential behavioral context: atomic multi-file write, UID preservation, backlink rewrite details, overwrite semantics, mtime conflict guard, and postWriteMaintenance return structure. No contradiction with annotations.

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 long but every clause earns its place: it front-loads the destructive multi-file warning, then uses numbered safety stages and precise edge cases. The detail is proportional to the complexity of a graph-wide rename operation.

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 destructive graph-level mutation, the description covers the dry-run preview, confirmed-write behavior, error/conflict conditions, alternative workflow guidance, and the return maintenance plan structure. With a rich input schema, output schema, and safety annotations, nothing critical is missing for an agent to decide whether and how to invoke this tool.

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?

All five parameters have complete schema descriptions (100% coverage), so the schema already explains confirm, newSlug, oldSlug, overwrite, and expected_mtime. The description adds behavioral context such as rename direction and overwrite throw behavior, but largely reinforces what the schema already says rather than providing substantial new parameter-level meaning.

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

Purpose5/5

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

Opens with a precise statement of action and scope: 'change a slug and update every backlink in one atomic graph-level operation.' It further details exactly what changes (file move, frontmatter slug key, inline-string keys, body links, tail-only references) and what stays the same (node UID), making it clearly distinct from siblings like patch_concept, find_backlinks, and delete_concept.

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

Usage Guidelines5/5

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

Explicitly names the alternative workflow: 'Use this instead of patch_concept + N find_backlinks + N patch_concept loops.' It also defines the two-stage safety flow (dry-run without confirm, actual write with confirm) and the throw conditions for missing oldSlug or taken newSlug, giving the agent clear invocation guidance.

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

replace_relationA
Destructive

Atomically replace one exact relation with a new target and/or type, moving or replacing its rationale in the same frontmatter write. Defaults to dry-run; pass confirm:true to write. Supports expected_mtime.

ParametersJSON Schema
NameRequiredDescriptionDefault
whyNo
fromYesSource slug.
newToYesReplacement target slug.
oldToYesCurrent target slug.
confirmNo
newTypeYes
oldTypeYes
expected_mtimeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
fromYes
dryRunYes
changedYes
canConfirmYesTrue only when repeating the call with confirm:true can perform the previewed change without another explicit safety opt-in.
newRelationYes
oldRelationYes
wouldChangeYesTrue only when the dry-run predicts a disk or Git change.
previewReadyYesTrue only when this response is a complete dry-run preview that an agent can review.
blockedReasonsYesMachine-readable human explanations for every condition currently blocking confirmation.
postWriteMaintenanceNoCompact maintenance_plan summary for post-write follow-up. Bucket maps describe the remaining queue after the write.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, the description reveals important behaviors: atomic replacement, same-write rationale handling, dry-run default, the need for confirm:true to persist, and support for expected_mtime. This materially helps an agent understand side effects and invocation safety, especially given destructiveHint is true.

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 tightly packed sentences lead with the core operation, then state safety, confirmation, and concurrency control. There is no redundancy, and every clause adds operational value.

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 destructive mutation tool with 8 parameters and low schema coverage, the description covers the essential behavioral context: atomic replacement, dry-run default, confirm flag, and expected_mtime. It does not explicitly state failure behavior when the exact relation is absent or whether existing relations are preserved, but the output schema and exact-match wording reduce ambiguity enough for an agent to proceed.

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 only 38%, so the description must compensate. It alludes to oldTo/oldType/newTo/newType ('target and/or type'), confirm, expected_mtime, and why ('rationale'), but it does not clearly define the relationship between all required parameters, especially from, or explain the semantics of why versus the other fields. The description helps but leaves room for parameter misuse.

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 ('Atomically replace'), a precise resource ('one exact relation'), and the fields changed ('new target and/or type'), which clearly distinguishes it from add_relation and remove_relation. It also conveys the operation's scope as a single frontmatter write, leaving no ambiguity about what the tool does.

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

Usage Guidelines4/5

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

The description gives a clear context for use: replace an exact existing relation with a new target/type atomically, and it explains the safe default dry-run plus the confirm write flag. It does not explicitly name sibling alternatives or state when not to use it, but the operation semantics are specific enough to route an agent correctly.

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

validate_vaultA
Read-only

R+ (cycle 46) — validate every doc in the vault, return per-doc + per-code aggregate. Replaces the K-round-trip pattern of list_concepts then per-doc get_concept (whose warnings: [...] is per-file). 8 issue codes — unclosed-frontmatter, parse-zero-keys, malformed-frontmatter-line, malformed-quoted-scalar, missing-kind, empty-kind, unknown-kind, missing-uid, invalid-uid, invalid-merged-uids, non-canonical-merged-uids, missing-expected-field, non-canonical-graph-array, dangling-graph-reference, duplicate-slug, duplicate-uid. Returns { scanned, problems: [{slug, issues: [{code, severity, message}]}], summary: { problemFiles, errorFiles, warningFiles, byCode: { code: { severity, count, files } } } }. Also returns pathDrift: frontmatter path: / elements: source paths that no longer exist on disk (vault→code drift), resolved against repoRoot (default: the active resolved repository root from connection_info). Ontology-slug references are never flagged. Fix via patch_concept or remove the stale entry. side effect 0. Use when an agent needs the whole-vault health view: first-contact before writes, before / after a batch write, or surfacing issues to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoRootNoRepository root that frontmatter source paths resolve against, for the pathDrift check. Defaults to the active resolved repository root from connection_info. Pass this if the vault lives apart from the code repo.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scannedYesNumber of vault markdown files scanned.
summaryYes
problemsYes
pathDriftYesVault→code path drift: frontmatter source paths missing on disk, resolved against repoRoot.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds value by specifying 'side effect 0' and detailing the output structure including pathDrift behavior. It also notes that ontology-slug references are never flagged, which is a useful behavioral nuance beyond the schema.

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

Conciseness4/5

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

The description is dense and information-rich, covering purpose, usage, output shape, and behavioral notes in a compact form. It is slightly long but every sentence earns its place. The main purpose and key contrast are front-loaded, though the list of issue codes adds bulk at the cost of some quick readability.

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

Completeness5/5

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

Given the complexity of the tool (many issue codes, nested output structure), the description is thorough. It provides the output format, default parameter behavior, and actionable follow-up steps (patch_concept). With an output schema present, the description need not detail return values further, and it covers all essential aspects for an agent to call it correctly.

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

Parameters3/5

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

Schema coverage is 100% and the only parameter, repoRoot, is well-documented in the schema. The description reinforces its purpose (pathDrift resolution) and provides the default behavior, but adds minimal new semantic information beyond what the schema already states.

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

Purpose5/5

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

The description clearly states the tool validates every document in the vault and returns per-document and per-code aggregates. It distinguishes itself from siblings by explicitly contrasting with the 'K-round-trip pattern' of list_concepts and get_concept, and it is not confused with validate_wiki because it focuses on vault concepts.

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

Usage Guidelines5/5

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

The description explicitly states when to use: 'when an agent needs the whole-vault health view' and gives concrete use cases: first-contact before writes, before/after batch writes, or surfacing issues to the user. It also indicates what to do about pathDrift (fix via patch_concept) and mentions it replaces an alternative pattern.

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

validate_wikiA
Read-only

Judge the pages under wiki/ against the wiki page contract (docs/ONTOLOGY-ATLAS-SPEC.md §11): no kind:, the seven required frontmatter fields, the five sections in order, a citation on every bullet under ## Facts, and a cited path that is both declared in sources: and present in the folder. A wiki page is not an ontology node — it carries no kind: by contract, which is what keeps it out of the graph — so validate_vault says nothing about whether one fits its own shape. This is that answer. Problem codes: kind-present, missing-field:, section-order, uncited-fact, bad-citation, bad-truncation-record, citation-target-missing, describes-needs-approval. The optional sources_truncated: key lists which paths in sources: the run read only part of; it is what lets a reader tell a document written up whole from one written up in part. Returns { pageCount, failingCount, pages: [{path, problems: [{code, message, line?}]}] } — the same shape ontology-atlas wiki-validate --json prints, so a person and an agent read one report. side effect 0. Use it after writing or editing a page, and before claiming a compile finished.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsNoVault-relative page paths to judge (`wiki/quarter-plan.md`). Omit to judge every page under `wiki/`, which has no cap because the folder decides how many there are. Max 50 when naming them, the same ceiling `get_concepts.uids` uses: past that, asking for the whole folder is one call instead of a list somebody has to assemble. A path outside `wiki/` is reported as a problem rather than silently skipped.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pagesYes
pageCountYesPages judged.
failingCountYesPages with at least one problem. Zero means every page judged fits.

TDQS

A4.9/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the readOnlyHint: it explicitly states 'side effect 0', enumerates problem codes, explains the optional `sources_truncated:` key's semantics, and describes the exact JSON return shape. This goes well beyond what the annotations alone convey.

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 dense but every sentence earns its place: purpose, checks, differentiation, problem codes, truncation semantics, output shape, side effect, and usage timing. It is longer than average because the tool itself is complex, but the structure front-loads the core purpose and organizes supporting detail clearly.

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

Completeness5/5

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

Given the tool's complexity, the description is complete: it covers inputs, defaults, edge cases, output shape, failure codes, side effects, and usage context. The output schema exists, yet the description also summarizes the return shape so an agent understands the report at a glance.

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

Parameters5/5

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

Though the schema already documents `paths` at 100% coverage, the description adds crucial semantic guidance: omitting the parameter validates every page under `wiki/`, enumerating paths is capped at 50, and paths outside `wiki/` are reported as problems rather than silently skipped. This meaningfully enriches the schema definition.

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 opens with a specific verb ('Judge') and a precise resource (`wiki/` pages) against an explicitly cited contract, listing the exact checks performed. It also distinguishes itself from `validate_vault`, making the tool's scope immediately identifiable.

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

Usage Guidelines5/5

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

The description explicitly says when to use the tool ('after writing or editing a page, and before claiming a compile finished') and contrasts it with `validate_vault`, clarifying why this validator is needed for a different shape. This gives an agent clear decision criteria for selecting it over the sibling validator.

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. 38 tool updatesv0.13.0
    • First observedabsorb_document
    • First observedadd_concept
    • First observedadd_concepts
    • First observedadd_relation
    • First observedadd_relations
    • First observedanalyze_repo_structure
    • First observedcompile_ontology
    • First observedconnect_project_source
    • First observedconnection_info
    • First observeddelete_concept
    • First observeddisconnect_project_source
    • First observedfinalize_project_meaning
    • First observedfind_backlinks
    • First observedfind_evidence
    • First observedfind_neighbors
    • First observedfind_orphans
    • First observedfind_path
    • First observedget_concept
    • First observedget_concepts
    • First observedgit_history
    • First observedgit_snapshot
    • First observedgit_status
    • First observedindex_project
    • First observedinfer_imports
    • First observedinspect_architecture
    • First observedlist_concepts
    • First observedlist_kinds
    • First observedmerge_concepts
    • First observedpatch_concept
    • First observedquery_concepts
    • First observedquery_ontology
    • First observedread_source
    • First observedreclassify_concept
    • First observedremove_relation
    • First observedrename_concept
    • First observedreplace_relation
    • First observedvalidate_vault
    • First observedvalidate_wiki

TDQS

A4.1/5.0

Scored across 38 tools

Disambiguation3/5

The CRUD and relation tools are clearly distinct (add/get/patch/delete/rename/merge), but the query surface has meaningful overlap: find_path, find_neighbors, find_backlinks, find_orphans, find_evidence, query_concepts, and query_ontology (which bundles 30+ graph operations) all serve discovery and could cause misselection. The code-analysis quartet (analyze_repo_structure, infer_imports, inspect_architecture, index_project) also has blurry boundaries, though each has a stated distinct role.

Naming Consistency5/5

Naming is highly consistent: verb_noun snake_case throughout (add_concept, get_concept, list_concepts, patch_concept, merge_concepts). Batch variants consistently pluralize the noun (add_concepts, get_concepts, add_relations), and prefix pairs like connect_project_source/disconnect_project_source and find_path/find_backlinks/find_neighbors follow a clear predictable pattern.

Tool Count3/5

At 38 tools this is well above the comfortable 3-15 range and over the 25+ heavy threshold, but the server's scope is genuinely broad: ontology CRUD, batch operations, relation management, git integration, code analysis, validation, and graph queries. Notably, query_ontology bundles ~30 operations into one tool, so the effective surface is even larger; the breadth earns some leeway but it remains a heavy, sprawling surface.

Completeness4/5

The tool surface covers the full ontology lifecycle: create (single/batch), read, update (patch/rename/reclassify), delete, merge; full relation management (add/remove/replace, batch); validation (validate_vault, validate_wiki); git checkpointing; a code-analysis pipeline; and rich graph-query operations. Minor gaps exist (no batch delete, no direct node export beyond compile_ontology), but there are no dead ends in the core workflows.

Maintenance

ActivityNo data
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Local-first dev memory: indexes Git commits, PRs, Jira/Linear tickets, Confluence docs, Slack threads, and Calendar events into a local SQLite/FTS5/ONNX index, and exposes them as MCP tools so Claude Code, Cursor, and Codex can search and cite your past work.
    17
    4
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Self-hostable, markdown-native team wiki with a built-in MCP server: agents search, read, and write your wiki pages (ranked Postgres full-text + semantic search, backlink traversal). Plus Atlas, which auto-generates a cited, coverage-checked wiki from your git repos and Jira.
    41
    62
    AGPL 3.0