Skip to main content
Glama

umtri-mcp

MCP server for Umtri — give your AI coding agent a persistent map of your project's structure, dependencies, and bugs.

Your agent re-derives your codebase from scratch every session. Umtri stores the structure once and hands it back through MCP: a tree of what the system is made of, the calls and dependencies between its parts, and the bugs eroding it. Ask "what breaks if I change this?" and get an answer traced through recorded connections rather than guessed from a grep.

Quick start

The fastest path is the hosted endpoint at https://mcp.umtri.io — nothing to install. Generate a token at app.umtri.io → Settings → API Tokens, then:

claude mcp add --transport http umtri https://mcp.umtri.io \
  --header "Authorization: Bearer umtri_pat_xxxxxxxxxxxxxxxx"

Any MCP client that takes a config object uses the same shape:

{
  "mcpServers": {
    "umtri": {
      "type": "http",
      "url": "https://mcp.umtri.io",
      "headers": { "Authorization": "Bearer umtri_pat_xxxxxxxxxxxxxxxx" }
    }
  }
}

Related MCP server: AgentsBestFriend

Run it yourself (stdio)

Use this package when you want to pin a version or point at a self-hosted API:

claude mcp add umtri \
  -e UMTRI_API_TOKEN=umtri_pat_xxxxxxxxxxxxxxxx \
  --transport stdio \
  -- npx -y umtri-mcp

Variable

Required

Default

UMTRI_API_TOKEN

yes

UMTRI_API_BASE

no

https://api.umtri.io

The token is not validated at setup time, so a bad token connects but every call fails. If tools appear and then error, re-check the token and its scope — read tokens cannot call any write tool.

Tools

Readget_graph, get_bug, get_impact, list_projects, list_bugs, list_seasons, list_events

Writecreate_project, create_node, update_node, delete_node, create_edge, delete_edge, create_api, update_api, delete_api, create_bug, update_bug, delete_bug

Plan loopcommit_plan, record_commit, reopen_transplant

get_graph returns a slice, not a dump: scope by subtree (rootId), by layer (maxType), by role, or by season, and control description weight separately. A large tree stays cheap to read.

Resources

Seven read-only documents the agent can pull for domain rules — the plant vocabulary (trunk/limb/twig/leaf/vein), what counts as a node and what does not, how seasons work, how plan nodes are meant to be realized, and how a ground behaves while transplanting.

umtri://rules/vocabulary            umtri://rules/transplant
umtri://rules/vocabulary-detailed   umtri://rules/plan
umtri://rules/seasons-human-only    umtri://about/vision
umtri://rules/system-structure

License

Apache-2.0. See LICENSE.

Available Tools

22 tools
commit_planCommit a realized plan nodeAInspect

Promotes a plan node (metadata.plan=true) to the real tree by clearing the plan flag. VERIFICATION GATE: the node must already carry metadata.implements (the source path(s) you wrote) — without it the commit is rejected, because an uncommitted plan node with no implements is not considered realized. Call this only after you have actually written the code and recorded implements via update_node. See umtri://rules/plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPlan node id to commit.
slugYesGround slug.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden, and it discloses key behaviors: it clears the plan flag, rejects commits without metadata.implements, and requires prior recording via update_node. It does not mention failure modes or reversibility, but the core behavior and preconditions are transparent.

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 primary action, followed by the verification gate and usage guidance. Every sentence provides necessary information without redundancy or filler.

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

Completeness4/5

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

The description fully covers the purpose, prerequisite conditions, and rejection behavior, and it points to additional rules. It does not describe the return value or side effects on child nodes, but for the purpose of selecting and invoking the tool correctly, the context is sufficient.

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 describes both parameters ('Plan node id to commit' and 'Ground slug') with 100% coverage, so the baseline is 3. The description adds context about metadata.implements and source paths, but it does not add new syntax or format details for the parameters themselves.

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

Purpose5/5

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

The description clearly states the tool's function: 'Promotes a plan node (metadata.plan=true) to the real tree by clearing the plan flag.' This is a specific verb+resource+mechanism that distinguishes it from siblings like update_node, which is referenced as the prior step for recording implements.

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?

Explicit usage guidance is provided: 'Call this only after you have actually written the code and recorded implements via update_node.' The description also specifies a verification gate and references a rule link, making it clear when the tool is appropriate and what conditions must be met.

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

create_apiCreate an API flow between two nodesAInspect

Records an API flow (start → end) for a RUNTIME request / call / data flow: a screen calling an endpoint, an endpoint hitting a table, an external integration (payment, SMS, webhook). Direction is caller → callee. APIs are first-class (apis table), not generic edges — for a build-time/structural reliance use create_edge (dependency) instead. Add the flows a maintainer would trace; don't wire everything. start/end must be existing node ids. See umtri://rules/system-structure (Connections).

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesTarget node id.
slugYesGround slug.
labelNo
startYesSource node id.
metadataNo
descriptionNo

TDQS

A4.5/5.0
Behavior5/5

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

Despite no annotations, the description discloses critical behavioral constraints: direction is caller→callee, start/end must be existing node ids, APIs are first-class (apis table) not generic edges, and it's for runtime data flows. This goes well beyond a simple 'create' and gives the agent necessary 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.

Conciseness4/5

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

The description is a bit long but well-organized: definition, examples, direction clarification, distinction from sibling, usage guidance, constraint, and rule reference. Each sentence contributes. Slightly more verbose than the highest-caliber examples, but no waste.

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?

It covers purpose, constraints, examples, and references a rule. No output schema exists, so return value is not clarified, and error conditions (e.g., what happens if start/end don't exist) are only implied. Still, given the tool's moderate complexity and rich description, it is mostly complete.

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

Parameters3/5

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

The description adds meaning to start/end ('must be existing node ids', 'direction is caller → callee') beyond the schema's terse 'Source/Target node id'. However, with 50% schema description coverage, it does not compensate for undocumented params like label, metadata, and description. Slug remains underdefined ('Ground slug' is vague).

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+resource ('Records an API flow') and immediately clarifies scope with examples (screen→endpoint, endpoint→table, external integration). It explicitly distinguishes from create_edge by stating this is for runtime flows vs dependency, making the purpose unambiguous even among 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 Guidelines5/5

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

It gives explicit when-to-use vs alternatives: 'for a build-time/structural reliance use create_edge (dependency) instead.' It also provides selection guidance ('Add the flows a maintainer would trace; don't wire everything'), telling the agent which edges to create.

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

create_bugReport a bug on a groundAInspect

Creates a new bug (issue eroding the target). target.kind = "node" or "api" requires target.id of an existing node/api in the ground. target.kind = "ground" attaches the bug to the project itself (no id). score = change risk on a 0–8 scale (8 = riskiest). It blends functional impact with fix difficulty (a harder fix is likelier to break things, so it ranks higher within a tier). 0: no risk — idea / memo. 1: no risk — copy / wording edit. 2: no functional error, but may change usability. 3: minor functional issue possible — simple fix. 4: minor — complex fix. 5: significant functional issue possible — simple fix. 6: significant — complex fix. 7: critical functional issue possible — simple fix. 8: critical — complex fix. Defaults to 4. Urgency is intentionally NOT part of this score. status defaults to "open". solution is the fix: at report time it is the plan ("this is probably how we fix it"), and by the time the bug is resolved it should describe what was actually applied. Same field — overwrite it as understanding changes; project_events keeps the diff. Leave it empty rather than guessing. For a node/api bug, the response auto-attaches impact (the affected blast radius from the target): reachedCount, the reached nodes with hop distance and the connection each was reached through, other active bugs sitting in that radius, and a coverage note. Use it to scope what else to check/QA. If the target has no recorded connections the radius is empty — that means nothing is recorded, not that nothing is affected (record edges/apis). Requires a write-scope token. See umtri://rules/vocabulary for bug semantics.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGround slug.
scoreNoChange risk 0–8 (8 = riskiest: critical impact × complex fix). Defaults to 4. See tool description for the rubric.
titleYesShort summary of the bug. Required.
statusNoDefaults to "open".
targetYesBug target. Use {kind:"ground"} when the bug is about the project as a whole.
solutionNoHow to fix it. At report time this is the plan/idea; update it to what was actually applied when you resolve. Markdown allowed. Omit if you do not know yet.
descriptionNoLonger details on what is wrong (markdown allowed).

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly. It discloses the score rubric (0–8, defaults to 4), states urgency is intentionally excluded, explains solution overwrite semantics with project_events diff, status default, response auto-attached impact, empty radius meaning, and write-scope token requirement.

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 structured: it starts with the main purpose, then target, score, status, solution, and response behavior. Every sentence adds substantive detail, though the score rubric could have been condensed. Overall, the length is justified by 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 7-parameter tool with nested objects and no output schema, the description covers all necessary ground: target selection, score rubric, status default, solution handling, response impact details, and write-token requirement. It is fully self-contained for correct invocation and expectation setting.

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

Parameters5/5

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

Schema coverage is 100%, but the description significantly enriches multiple parameters: it gives the full score rubric referenced by the schema, explains target.kind semantics beyond the enum, clarifies solution lifecycle, and confirms status default. This goes well beyond baseline schema descriptions.

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

Purpose5/5

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

The description opens with 'Creates a new bug (issue eroding the target).' using a specific verb and resource, clearly distinguishing it from sibling tools like update_bug, delete_bug, and list_bugs. It also elaborates on the target.kind variants, reinforcing the resource type and scope.

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

Usage Guidelines4/5

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

It provides explicit context on when to use different target kinds (node/api vs ground) and when to omit id. It also advises leaving solution empty rather than guessing and uses the impact response for QA scoping. However, it does not explicitly contrast with alternatives like update_bug or delete_bug, so it stops short of a full when-not/exclusion statement.

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

create_edgeCreate an edge between two nodesAInspect

Creates a directed edge (source → target) for a STRUCTURAL relation: type "dependency" (A is built on / needs B) or "data_flow" (data moves A → B outside a request). Use for module/library deps, a route depending on the data store, a job writing a table. For a runtime request/call/integration use create_api instead, not an edge. Reserve connections for relations a maintainer would trace — don't wire everything. type ∈ project.edge_types; same source and target is rejected. See umtri://rules/system-structure (Connections).

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGround slug.
typeNoEdge type. Backend defaults if omitted.
labelNo
sourceYesSource node id.
targetYesTarget node id.
metadataNo

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description reveals key behavioral details: structural vs runtime, self-loop rejection, and a reference to rules. It doesn't mention idempotency, response format, or existence checks, but covers core behaviors well.

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, front-loaded with the core purpose. Each sentence earns its place: what it creates, use cases, when not to use, constraints/reference. No 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?

Despite no output schema, the description covers purpose, usage boundaries, alternatives, and a validation rule. It omits return value/error scenarios but points to a rule document for more details, making it fairly complete for a moderately complex tool.

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 covers slug/source/target/type descriptions (67% coverage). The description adds significant meaning for 'type' with examples and clarifies source/target as directed nodes. However, label and metadata are left undocumented in both schema and description.

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 creates a directed edge for structural relations, with specific types (dependency, data_flow). It explicitly distinguishes from create_api for runtime calls and from node-creation tools by focusing on 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?

Provides concrete use cases (module/library deps, route depending on data store, job writing a table) and explicitly says when NOT to use it ('use create_api instead for runtime request/call/integration'). Also advises restraint ('don't wire everything').

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

create_nodeCreate a node in a groundAInspect

Creates a node. Follows the plant vocabulary protocol — see umtri://rules/vocabulary. type ∈ trunk · limb · twig · leaf · vein. Role is derived (structure / object / action). Build leaf-first: when adding a leaf/vein, create only the missing trunk/limb/twig ancestors on its path, then the leaf — do NOT pre-build every trunk, then every limb, then leaves (see Build order in umtri://rules/vocabulary). Aim for a faithful, COMPLETE map of the project, not a summary: every meaningful module/screen/endpoint/table/integration should become a node (grouped at the information-unit grain, not one-per-file). A real project yields many leaves — under-capturing to a few nodes is the more common mistake. See Completeness in umtri://rules/system-structure. parent ∈ existing node id; omit to create a root-level node. season ∈ existing season id; omit to use the active "now" season. Past seasons are normally rejected, but allowed while the ground is transplanting (project.transplanting=true) — nodes added then are auto-stamped metadata.transplanted=true for audit. See umtri://rules/transplant. The tool validates against protocol policies. Hierarchy violations are rejected. Soft issues (reserved-domain labels, leaf↔vein heuristic, trunk naming) come back as warnings in the response — reconsider before continuing if warnings appear. After creating a leaf/vein, consider its connections: if it calls/feeds another node add an api (create_api), if it depends on/is built on another add an edge (create_edge). The response carries a connectionCheck reminder. See umtri://rules/system-structure (Connections). Creating seasons via MCP is forbidden — see umtri://rules/seasons-human-only. When realizing a human-drawn plan brief, any detail nodes you add should carry metadata.plan=true and the realized node needs metadata.implements — see umtri://rules/plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGround slug.
tagsNo
typeYesNode type. Use trunk/limb/twig/leaf/vein per the metaphor.
labelYesNode label, visible in the tree.
parentNoParent node id. Omit for root-level (a new trunk).
seasonNoSeason id. Omit to use the active "now" season.
metadataNoFree-form metadata. For `leaf` and `vein`, set `metadata.implements` to an array of file paths (or `path#identifier` for multi-export files) — this is how the graph maps concept → code and is expected on essentially every leaf/vein. Use `metadata.placeholder=true` for intentionally-empty structure.
sproutedAtNoEffective creation time (ISO 8601 with offset, e.g. "2024-03-15T09:00:00Z"). Omit to use the current moment. Use only when back-filling history of a project that existed before Umtri — e.g. importing past commits or migrating a tree. The visualization timeline (sibling order, season visibility, events) follows this value.
descriptionNo

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and excels: it discloses validation against protocol policies, rejection of hierarchy violations, soft issues returning as warnings, a connectionCheck reminder in the response, and transplant-specific behavior (auto-stamping metadata.transplanted=true). This goes well beyond basic mutation disclosure.

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 and dense, but every sentence carries distinct operational value—build order, completeness, warnings, connection follow-ups, transplant rules, and plan metadata. It loses a point for being a single unstructured block with repeated 'umtri://' references, which makes scanning harder, though it is not wasteful.

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 9 parameters, no output schema, and no annotations, this description is remarkably self-sufficient. It covers creation rules, hierarchy constraints, warning behavior, connection next-steps, season/transplant edge cases, and plan metadata expectations, leaving no major operational gap.

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 78% (7 of 9 properties have descriptions), so the baseline is 3. The description adds meaningful semantics for `type` (the metaphor vocabulary), `parent` (root-level omission), `season` (transplant allowances), and `metadata` (implements/placeholder conventions), which exceeds what the schema alone provides. It omits `sproutedAt` and `description` but those are adequately covered by 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 opens with 'Creates a node' and immediately defines the plant vocabulary protocol (trunk/limb/twig/leaf/vein), making the resource and action explicit. It also distinguishes from siblings by explaining when to use create_api/create_edge for connections, preventing confusion with related 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?

It provides explicit when-to-use and when-not-to-use guidance: build leaf-first, do NOT pre-build every trunk/limb, aim for complete maps, and add connections via create_api/create_edge after leaves/veins. It also forbids season creation via MCP and details plan-rule behavior for realizing human-drawn briefs.

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

create_projectCreate a new ground (project)AInspect

Creates a new ground. Slug must match /^[a-z0-9][a-z0-9-]{0,49}$/ and be unique. The authenticated user owns it. Requires a write-scope token.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name.
slugYesURL slug. Lowercase letters, digits, hyphens; 1–50 chars.
visibilityNoDefaults to private.
descriptionNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavioral traits. It covers slug format/uniqueness, authenticated ownership, and write-token requirement—valuable context beyond the bare 'creates'. However, it omits success/error behavior and default visibility, leaving some room for improvement.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action. Every sentence provides essential information (creation, slug constraints, ownership, auth). No redundant or filler content.

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 description plus schema adequately cover purpose, required parameters, constraints, and auth for a creation tool. Missing details like success/error responses and default visibility are not critical given no output schema and the schema's default declaration. Slightly lower due to not explicitly connecting 'ground' to 'project' in the description itself.

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 75%, so the schema already documents most parameter meanings. The description adds only the uniqueness constraint for slug, which is not in the schema. For name, visibility, and description, the schema provides sufficient semantics, keeping this at baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the action ('Creates a new ground') and identifies the resource. The title further clarifies 'ground (project)', distinguishing this from sibling create_* tools like create_bug or create_node. The verb is specific and the resource type is explicit.

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

Usage Guidelines3/5

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

The description implies this tool is used to create a new ground, but it does not explicitly mention when to use it over alternatives. It provides prerequisites like unique slug and write-scope token, which are useful conditions but not direct alternatives or exclusions. No explicit guidance on scenarios favoring this tool.

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

delete_apiSoft-delete an API entryAInspect

Sets removed_at on the API. History is preserved — the API can still be seen in past season views via the time slider.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
slugYes

TDQS

A3.6/5.0
Behavior4/5

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

There are no annotations, so the description carries full burden. It explicitly discloses the mechanism ('Sets removed_at') and the key behavioral trait (history preserved via time slider), adding meaningful context beyond simple 'delete' terminology. It does not mention reversibility or permissions, but the core behavior is well covered.

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

Conciseness5/5

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

Two sentences, front-loaded with the exact action ('Sets removed_at'), and every clause adds value about history preservation. There is no filler or redundancy.

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

Completeness3/5

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

The description covers the core soft-delete behavior and historical visibility, which is essential for a deletion tool. However, it omits any explanation of parameters, possible output, or error conditions. Given the lack of annotations and output schema, the description is serviceable but not fully complete.

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

Parameters1/5

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

Schema description coverage is 0%. The description provides no explanation for the two parameters (id and slug), leaving the agent to guess their roles and relationship to the API entry. The parameter names alone are insufficient, especially since both are just minLength-1 strings.

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

Purpose5/5

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

The description clearly states a specific action ('Sets removed_at on the API') and resource (API entry), which distinguishes it from sibling tools like delete_edge and delete_node. The title 'Soft-delete an API entry' reinforces the same specific verb+resource.

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

Usage Guidelines3/5

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

The description implies usage by noting history is preserved and the API remains visible in past season views, which hints at soft-delete semantics. However, it does not explicitly state when to use this tool versus alternatives, nor does it name any sibling tools or exclusion criteria.

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

delete_bugDelete a bug (hard delete)AInspect

Permanently removes a bug record. Bugs do not have history — once deleted, the record is gone. For "I resolved this", use update_bug with status="resolved" instead, so the tree remembers what was eroded.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
slugYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that deletion is permanent and that bugs have no history, making the record irrecoverable. It also contrasts with update_bug's history-preserving behavior. However, it doesn't mention side effects, permissions, or response details, so it stops short of a 5.

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, front-loads the main action, and every sentence earns its place: the second sentence clarifies the alternative. There is no redundancy or fluff.

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

Completeness3/5

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

The description covers purpose, usage, and key behavioral transparency, but completely omits parameter semantics. For a tool with two required parameters and no annotations, this is a moderate level of completeness; the gaps are noticeable but not fatal to understanding the tool's role.

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

Parameters1/5

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

The schema provides bare parameter names (id, slug) with zero description coverage, and the description adds no explanation of what each parameter means, whether both are needed, or how they identify the bug. This is a critical gap for an agent to correctly construct the invocation.

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 permanently removes a bug record, specifying the verb and resource. It also distinguishes itself from update_bug by noting that for marking a bug as resolved, update_bug should be used instead, making the purpose unambiguous.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool (permanent deletion) and when not to (for 'I resolved this', use update_bug with status='resolved'). This provides clear guidance on alternatives and is a model of usage direction.

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

delete_edgeDelete an edgeAInspect

Removes an edge from the ground. Use to retire dependencies/flows that no longer reflect reality.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEdge id.
slugYesGround slug.

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden. It only states the deletion action and a use case, without disclosing side effects, irreversibility, permissions, or error conditions. The phrase 'retire' hints at consequences but lacks specifics.

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

Conciseness5/5

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

The description is concise and front-loaded, with two short sentences: one stating the action and one providing use context. There is no fluff or redundant information.

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

Completeness3/5

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

For a simple delete operation with fully documented parameters, the description covers purpose and use case. However, given the absence of annotations and output schema, it could benefit from more behavioral context (e.g., return value, dependencies). It is minimally adequate but not fully complete.

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

Parameters3/5

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

Both parameters (id and slug) are fully described in the schema with 100% coverage, so the baseline is 3. The description adds no parameter-specific meaning beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states 'Removes an edge from the ground' with a specific verb and resource, and adds context about retiring dependencies/flows. This distinguishes it from sibling tools like delete_node or delete_api.

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

Usage Guidelines4/5

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

The description provides a clear context: 'Use to retire dependencies/flows that no longer reflect reality.' However, it does not explicitly mention alternatives or when not to use the tool, stopping short of full guideline coverage.

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

delete_nodeSoft-delete a nodeAInspect

Sets removed_at on the node. By policy this tool rejects deletion if the node has any active descendant — delete children explicitly first to avoid accidental cascades. (The underlying REST API would cascade; the MCP layer guards against silent loss.) EXCEPTION — while the ground is transplanting (project.transplanting=true), the active-descendant guard is lifted (subtree cascade allowed) and you may pass hard=true to permanently remove import mistakes, including grown (past-season) nodes. Once the human roots the ground, normal guards return.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNode id.
hardNoPermanently delete (incl. descendants via FK cascade) instead of soft-delete. Only honored while the ground is transplanting; irreversible — use for import cleanup.
slugYesGround slug.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the burden of behavioral disclosure. It reveals that the underlying REST API would cascade but the MCP layer guards against silent loss, explains that hard=true is irreversible, and outlines the specific condition (project.transplanting=true) under which the guard is lifted — all crucial 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?

The description is front-loaded with the core action, then efficiently covers the policy, the rationale, and the exception in a logical sequence. Each sentence adds essential information—no fluff or redundancy—and the use of parentheses and an EXCEPTION marker makes the structure easy to parse.

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

Completeness5/5

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

Despite lacking an output schema and annotations, the description is remarkably complete for the tool's complexity. It covers the primary soft-delete behavior, the safety guard, the underlying cascade risk, the transplanting exception, and the irreversible hard-delete option. Nothing critical is missing 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?

The schema already provides 100% parameter coverage, including a detailed description for the 'hard' parameter that states it is permanent, only honored during transplanting, and irreversible. The main description adds contextual policy around the guard but does not introduce new parameter-level meaning beyond what the schema already offers, 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 opens with 'Sets removed_at on the node' which precisely and concretely defines the tool as a soft-delete operation. It distinguishes itself from sibling tools like delete_edge, delete_api, and delete_bug by targeting a node specifically, and the title reinforces this.

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 and when-not-to-use guidance: it states that deletion is rejected if the node has active descendants and instructs to 'delete children explicitly first'. It also details the transplanting exception where the guard is lifted and hard=true becomes available, covering both normal and exceptional usage scenarios.

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

get_bugGet one bug of a groundAInspect

Returns a single bug by reference — the cheap path when you already know which bug you mean. ref accepts either the human-facing number shown in the UI (seq — "14" or #14) or the internal id (bug-), so a human saying "#8" needs no listing at all. Unlike list_bugs this ignores status: a catched bug is still readable by number, which is how you review what a past fix actually did. Use list_bugs only to scan for bugs you cannot yet name. The response carries the full description and metadata, plus impact — the blast radius reached from the bug's target (reachedCount, the reached nodes with hop distance, and other active bugs sitting in that radius). Numbers are per-ground and never reused, so a deleted bug leaves a gap rather than shifting the others. Returns an error if no bug matches.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesBug number (seq, e.g. 14) or internal id (bug-<uuid>).
slugYesGround slug.

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the burden of behavioral disclosure. It reveals acceptance of two ref formats (seq and internal id), that status is ignored, the response includes impact details, that numbers are per-ground and never reused, and that a deleted bug leaves a gap. It also states the error behavior for no match.

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 longer than many but every sentence earns its place. It is front-loaded with the core purpose, then flows logically through ref formats, comparison with list_bugs, response content, and edge cases. There is no redundancy or filler.

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?

Although there is no output schema, the description explicitly lists what the response contains (full description, metadata, impact with reachedCount, reached nodes, other active bugs) and covers error behavior. It also addresses the per-ground numbering nuance and the behavior for deleted bugs, making it self-sufficient for an agent to understand the tool's results and edge cases.

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?

The input schema already has 100% coverage for the two parameters, but the description adds substantial meaning beyond the schema: it clarifies that 'ref' can be a human-facing seq like '14' or '#14' or an internal 'bug-<uuid>', explains that numbers are per-ground and never reused, and describes what the response includes (full description, metadata, impact). This goes well beyond the schema's terse field descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Returns a single bug by reference,' and immediately frames it as the 'cheap path' compared to list_bugs. It also explicitly contrasts with list_bugs, making the tool's unique role unmistakable.

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 this tool vs list_bugs: 'Use list_bugs only to scan for bugs you cannot yet name.' It also explains the advantage of this tool (ignores status, accepts human-facing references) and clarifies the context for reviewing past fixes.

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

get_graphGet the graph of a groundAInspect

Returns the tree(nodes), edges, apis, seasons, and bugs for one ground. The tree is the project's information-structure (IA) diagram — each node is a structural element (an object, or an action it performs), not a work-log entry. Node types follow the plant metaphor: trunk → limb → twig → leaf → vein. See resource umtri://rules/vocabulary. By default returns a summary view — nodes carry id/label/type/parent/season, plus a 200-char description excerpt, metadata.implements, placeholder/dormant flags (soft-deleted nodes are omitted). Pass view="full" only when you need timestamps, full descriptions, all metadata keys, or tags — that response is ~3× larger. For a large tree, read it in slices instead of all at once: rootId (+depth) for one trunk or limb; maxType for a layer (e.g. maxType="twig" = the skeleton without leaves/veins — a cheap overview); role for a cross-section; season for what was born in one season. Filters combine. Node ids come from the graph itself, so the standard drill-down is two calls: first get_graph with maxType="trunk" (or "limb") for a cheap skeleton, find the id you want, then call again with rootId set to it to get just that trunk/limb and its subtree. Control the heaviest field with descriptions: "none" drops descriptions for a pure structural overview, "excerpt" (default) gives a 200-char preview, "full" returns them verbatim when you drill into a limb. The summary response also carries shape (nodeCount, maxDepth, nodes-per-level, over-wide branches) so you can judge whether the tree is too deep or too wide without rebuilding it, a childCount on each branch node, and iaHints flagging structural smells. A bushy tree (mass at mid-levels) is healthy — don't over-nest sparse parents into twigs. Bugs default to active (open + in_progress) — pass bugStatus="all" to also see healed (resolved/closed) ones. Nodes may carry plan:true — these are the human's node-based brief (intent drawn as structure, not a prompt); read them as instructions and realize them (see umtri://rules/plan). When you slice (rootId/maxType/role/season), a connection with only ONE endpoint inside the slice is still returned, marked boundary:true, and its outside endpoint appears as a lightweight stub in externalNodes (id/label/type/role, external:true) — so cross-branch dependencies and calls never silently vanish from a slice. To follow one, call get_graph again with rootId set to that external id. The response also carries project.transplanting — when true the ground is still being transplanted (see umtri://rules/transplant): you may freely add/edit nodes in any season incl. past, and hard-delete import mistakes.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoCross-section by role (structure=trunk/limb/twig, object=leaf, action=vein). Parents may fall outside the result.
slugYesGround slug (from list_projects).
viewNosummary (default) for compact nodes; full for raw shape with all fields.
depthNoWith rootId: how many levels below the root to include (0 = just the root, 1 = root + direct children). Omit for the whole subtree.
rootIdNoScope to this node and its descendants — read one trunk or limb at a time. Get the id from a prior get_graph (e.g. maxType="trunk" for a cheap skeleton). Bugs are scoped to the subtree; edges/apis that cross the subtree boundary are still returned (boundary:true) with their outside endpoint in externalNodes.
seasonNoBorn-in delta — return only nodes that first appeared in this season (season id from list_seasons): what grew that season.
maxTypeNoLayer ceiling — return only nodes at this level or higher (trunk is highest). maxType="twig" yields the structural skeleton without leaves/veins. Great for a cheap overview before drilling in with rootId.
bugStatusNoWhich bugs to include. Default "active" = wild + chasing (open + in_progress) — catched ones are healed erosion, noise on the tree. "wild" for the untouched only, "catched" for healed, "all" for every bug. Raw DB statuses still work. Use list_bugs for richer bug queries (limit/order), get_bug for one you can name.
descriptionsNoHow much of each node/bug description to include in summary view: none (drop them — lightest structural read), excerpt (200-char preview, default), or full (verbatim). Ignored when view="full" (always verbatim).

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses defaults (summary view, active bugs), size implications (full view is ~3x larger), behavior for slices (boundary nodes, externalNodes stubs, soft-deleted nodes omitted), and special cases like plan:true nodes and project.transplanting. This is far beyond what a minimal description would 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?

While long, the description is organized into logical sections (summary vs full, slicing, descriptions control, shape data, bugs, plan, boundaries, transplanting). It is front-loaded with the primary purpose and every sentence contributes actionable information, with no redundancy or filler.

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 there is no output schema, the description does an excellent job of describing the response shape (summary/full fields, shape stats, childCount, iaHints), edge cases (boundary/externalNodes, transplanting), and usage workflows. For a tool with 9 parameters, this description covers all necessary context an agent needs to use it effectively.

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 every parameter, the description adds substantial strategic context. For example, it explains that maxType='twig' is "a cheap overview" and shows how rootId, depth, and role combine to read only the relevant subtree. This enriches the schema's static definitions with real usage patterns.

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 by clearly stating the tool returns "the tree(nodes), edges, apis, seasons, and bugs for one ground," providing a specific verb and resource. It also distinguishes from siblings by emphasizing that it returns the whole graph, while pointing to list_bugs for richer queries and get_bug for a single named bug.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance, including a recommended two-call drill-down workflow: "first get_graph with maxType='trunk' (or 'limb') for a cheap skeleton, find the id you want, then call again with rootId set to it." It also explains when to use view='full', how to control payload via descriptions, and mentions that list_bugs/get_bug are better for bug-specific queries.

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

get_impactTrace the blast radius of a node or bugAInspect

Walks the connection graph (edges + apis) from a start node — or a bug's target — to find which other nodes a problem would reach. This is the tool for "if this breaks / I change this, what else do I need to check?" and for QA scoping. Impact does NOT always flow with the arrow. direction="affected" (default) answers "if the start breaks, who is hurt?" and follows: dependency edges backward (target→source), data_flow edges forward (source→target), apis backward (callee→caller). direction="dependsOn" is the reverse ("what does the start rely on?"). direction="both" unions them. See umtri://rules/system-structure (How problems propagate). Provide exactly one start: node (a node id) or bug (a bug id — starts from its target node, or both endpoints if the bug is on an api; ground-level bugs are rejected). Traversal is over CURRENT (live) structure only. Returns reached[] (each with hops distance, the node from which it was reached, and the connection via it came through — so you can reconstruct the chain), bugs[] (active bugs sitting on any reached node/api, worst score first), and coverage. IMPORTANT: the result is a list of nodes to CHECK, not a proven failure set — it is only as complete as the connections recorded. coverage.startsWithoutConnections flags when the start has no connections at all: an empty result then means "nothing recorded," not "nothing affected" — record edges/apis first.

ParametersJSON Schema
NameRequiredDescriptionDefault
bugNoStart from this bug's target. Provide this OR node.
nodeNoStart node id. Provide this OR bug.
slugYesGround slug.
maxDepthNoMax hops to traverse. Omit for unbounded.
directionNoaffected (default): what breaks if the start breaks. dependsOn: what the start relies on. both: union.

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It goes far beyond the basics by explaining that impact does not always flow with the arrow, that traversal is over current live structure only, and that results are a list to check, not a proven failure set. It also documents the coverage.startsWithoutConnections edge case.

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 well-structured and front-loaded. It starts with the core purpose, then details directions, returns, and caveats. Every sentence adds essential information—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 and the absence of annotations and output schema, the description is remarkably complete. It explains the returned fields (reached[], bugs[], coverage), traversal semantics, limitations, and how to interpret empty results. It is self-contained for an agent to select and invoke it 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?

Schema coverage is 100%, but the description adds significant meaning beyond the schema. It explains direction's effect on edge traversal (e.g., 'dependency edges backward'), the exactly-one rule for node/bug, bug-as-target behavior, and what maxDepth and coverage flags mean. This makes parameter usage much clearer.

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

Purpose5/5

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

The description clearly states the action ('Walks the connection graph') and the resource ('edges + apis') with a specific goal ('find which other nodes a problem would reach'). It explicitly labels itself as 'the tool for' impact analysis, distinguishing it from sibling tools like get_graph.

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

Usage Guidelines4/5

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

It provides explicit use cases ('if this breaks / I change this') and detailed direction semantics. It does not name an alternative tool to use instead, but the 'this is the tool' phrasing gives clear context. It also adds a constraint about exactly one start (node or bug) and ground-level bug rejection.

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

list_bugsList bugs of a groundAInspect

Scans the bugs (issues eroding the ground) of one ground. Looking at ONE bug you already know the number/id of? Call get_bug instead — no need to list. Bugs default to status="active" (wild + chasing): a healed bug is history, and history is not what a scan is for. Ask for "catched" or "all" when you actually want it. Status speaks the product's own words — wild (found, nobody on it) → chasing (someone is fixing it) → catched (it landed) — the same words the UI shows. Each bug has a score (0–8 change-risk; 8 = riskiest). Targets: a node, an api, or the ground itself. By default returns a summary view — each bug carries id, seq (the number a human says, "#14"), target, title, score, status, createdAt/resolvedAt, plus a 200-char description excerpt. Each node/api bug also carries impactCount — how many other nodes its target reaches by blast radius (affected direction), so you can spot wide-blast bugs at a glance; call get_impact on that bug for the full reached list. Pass view="full" for full descriptions and metadata. Use limit + order to bound a scan (e.g. the 5 newest) instead of pulling every bug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGround slug.
viewNosummary (default) for a compact list; full for verbatim descriptions + metadata.
limitNoReturn at most this many bugs (applied after the status filter). Omit for all matching.
orderNoBy creation time: "asc" oldest first (default), "desc" newest first. Pair with limit for "the N newest".
statusNoWhich bugs to include. Default "active" = wild + chasing (open + in_progress). "wild" = found but untouched, "chasing" = someone is on it, "catched" = healed (resolved + closed), "all" = every bug. The raw DB statuses are accepted too; note "open" means wild + chasing there (REST semantics), so pass "wild" when you want only the untouched ones.

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the default status filter, the wild→chasing→catched lifecycle, the summary vs full view contents, impactCount semantics, and score meaning (0–8 change-risk). This goes well beyond what the schema alone conveys.

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 informative, with every sentence earning its place. It is front-loaded with the core purpose, then systematically covers alternatives, defaults, status semantics, returned fields, and parameter usage without 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 there is no output schema, the description adequately enumerates the returned fields (id, seq, target, title, score, status, timestamps, description excerpt, impactCount) and explains parameter effects. It also references relevant sibling tools, making it complete for both selection and invocation.

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 coverage is 100%, the description adds substantial semantic value: it explains status aliases and the active default, pairs limit with order for 'the N newest', defines view='full', and clarifies score and impactCount meanings not obvious from parameter names or enum values 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 a specific verb and resource: 'Scans the bugs (issues eroding the ground) of one ground.' It also explicitly distinguishes itself from the sibling get_bug tool, which covers the 'already know the number/id' case, making the purpose unmistakable.

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

Usage Guidelines5/5

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

Usage guidance is explicit and actionable: use get_bug for a single known bug, use get_impact for the full blast-radius list, and pass explicit status values like 'catched' or 'all' when wanting non-default results. It also clarifies the default active filter and how limit/order can bound a scan.

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

list_eventsList change history of a groundAInspect

Returns the append-only change history (most recent first) of a ground: node/edge/api/bug create, update (with a field-level diff {from,to}), delete, and plan_commit. Each event carries the actor ("user:" for humans, "token:" for agents/automation), a summary label, and for updates a diff. Use it to answer "what changed, when, and by whom" — e.g. a bug's status transitions or a node's edits over time. Filter with entityType/entityId to get a single entity's timeline. Note: git commits recorded via record_commit live in a node's metadata.commits, not here.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGround slug.
limitNoMax events to return (default 50, cap 200).
beforeNoISO timestamp — return events strictly older than this (keyset pagination).
entityIdNoFilter to one entity's timeline (usually paired with entityType).
entityTypeNoFilter to one entity type.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and delivers rich detail: append-only, newest-first ordering, actor format (user:<id> vs token:<id>), field-level diff structure, and the explicit exclusion of record_commit events. This gives the agent a clear model of behavior and side-effect profile.

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 clause adds value: definition, event types, actor/diff format, use case, filtering advice, and an important exclusion. It is front-loaded with the core purpose and remains focused without 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?

There is no output schema, so the description must explain return values, and it does: each event carries actor, summary, and diff for updates. It also covers ordering, event coverage, filtering, and a key exclusion, making the tool's full behavior understandable without external schemas.

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 meaningful context by explaining the effect of entityType/entityId filtering ('get a single entity's timeline') and clarifying the semantics of the returned events, going beyond the schema's bare property descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Returns the append-only change history (most recent first) of a ground,' and enumerates exact event types (create, update, delete, plan_commit). This clearly differentiates it from siblings like list_bugs or list_projects, which serve different purposes.

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 states when to use the tool ('Use it to answer "what changed, when, and by whom"') and provides concrete examples (bug status transitions, node edits). It also gives an exclusion: git commits via record_commit live in node metadata, not here, which prevents mis-selection.

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

list_projectsList grounds (projects)AInspect

Returns all grounds the authenticated user can access, with latest activity timestamp. Use this first to discover slugs for other tools. By default returns a summary view — each ground carries slug, name, isActive, transplanting, nodeCount, openBugs, seasonCount, nowSeasonLabel, latestActivityAt, plus a 200-char description excerpt. Pass view="full" for all fields (preNotes, seedMeta, typeCounts, raw metadata, timestamps); the icon base64 in metadata is always stripped (UI-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNosummary (default) for a compact list; full for every field.

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses the authentication scope, the summary/full view distinction, and the always-stripped icon base64 (UI-only). However, it doesn't mention ordering, pagination, or potential rate limits, which are minor gaps for a list operation. Still, the added field-level detail exceeds typical descriptions.

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

Conciseness5/5

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

The description is three sentences, each earning its place: purpose and scope, usage guidance, and return behavior. It is front-loaded with the core action and avoids fluff. The structure is clean and scannable, 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 the tool's low complexity (one optional parameter, no output schema), the description is complete: it specifies the full return fields for both views, the stripping behavior, and the authentication scope. It also provides the usage context needed to invoke the tool first. The lack of output schema is compensated by the detailed field list.

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 covers 100% of the parameter (view) with an enum and description, the tool description adds significant meaning by explaining the default ('summary') and what 'full' unlocks (preNotes, seedMeta, typeCounts, raw metadata, timestamps). This enriches the parameter understanding well beyond the schema.

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

Purpose5/5

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

The description explicitly states the tool returns all grounds (projects) accessible to the authenticated user, using a specific verb ('Returns') and resource ('grounds'). It also mentions the latest activity timestamp and differentiates itself from sibling tools by positioning 'Use this first to discover slugs for other tools', establishing it as the entry point.

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 tool says 'Use this first to discover slugs for other tools', giving clear when-to-use guidance. It also explains the default summary view and how to switch to full view with view='full', providing practical usage context. While it doesn't name alternatives like list_bugs, the entry-point guidance is strong enough for correct selection.

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

list_seasonsList seasons of a groundAInspect

Returns the seasons (time epochs) of a ground in chronological order. Seasons are created only by humans — do not attempt to create them via this MCP. See umtri://rules/seasons-human-only. By default returns a summary view (id, label, state, startedAt, grownAt). Pass view="full" to also include metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGround slug.
viewNosummary (default) drops UI-only metadata; full includes it.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full behavioral burden. It discloses the human-only creation constraint, chronological ordering, and the summary vs full view behavior including the specific fields returned. It doesn't cover errors or auth, but these are not critical for a read-only list operation.

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

Conciseness5/5

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

Three sentences, each earns its place: first states the core function, second gives an essential constraint/rule, third explains the parameter effect and output. Front-loaded and free of fluff.

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

Completeness4/5

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

For a 2-parameter tool with no output schema, the description explains the return format (summary fields vs full metadata) and points to an external rule for the human-only constraint. It lacks pagination details, but the tool is simple and likely not paginated. Overall sufficient.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the default view ('summary') and what 'view=full' includes ('metadata'), plus listing the exact fields in the default summary. This goes beyond the schema's brief descriptions.

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

Purpose5/5

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

The description states a specific verb+resource ('Returns the seasons of a ground') and adds distinct scope ('in chronological order'), clearly differentiating it from sibling list tools like list_bugs and list_events. The purpose is immediately obvious.

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

Usage Guidelines4/5

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

Provides explicit guidance that seasons are human-only and creation via MCP is prohibited, with a reference link. This acts as a 'when not to use' instruction. It doesn't explicitly contrast with sibling list tools, but the exclusion and default view explanation offer clear context.

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

record_commitRecord a git commit onto the nodes it touchedAInspect

Configuration record (CI/CD). Given a commit SHA and the files it changed, finds nodes whose metadata.implements include any of those files and appends the commit (sha + timestamp + optional message) to their metadata.commits (deduped by sha). Returns the matched node ids. When one commit touches several nodes that are NOT yet connected, the response also carries coChangeCandidates[] ({a, aLabel, b, bLabel}) — nodes that change together are dependency candidates; review them and add a create_edge/create_api where a real relation exists (not auto-created; suppressed for large multi-node commits). Umtri does not run jobs or read git itself — a GitHub Action / CI step or an agent supplies the sha+files. Recording a commit is the LAST step: first make sure the change is in the tree (new unit → create_node with metadata.implements; moved file → update_node), otherwise the sha lands on the nodes that happen to exist and the new ones stay invisible. A repo that keeps forgetting should write the habit down — see umtri://rules/commit-sync. See also umtri://rules/plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
shaYesCommit SHA (short or full).
slugYesGround slug.
filesYesRepo-relative paths changed by the commit, matched against nodes' metadata.implements.
messageNoCommit message (optional, stored with the record).

TDQS

A4.6/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It discloses deduplication by sha, appending timestamp/message, returning matched node ids, that coChangeCandidates are not auto-created, suppression for large commits, and that Umtri does not read git itself. This is comprehensive behavioral transparency.

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

Conciseness4/5

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

The description is detailed and well-structured, front-loaded with the core action. Each sentence adds needed context about preconditions, behavior, or output. Slight extra length from rule references, but justified for a tool with multiple caveats.

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 without an output schema, the description covers return values (matched node ids, coChangeCandidates), preconditions (change must be in tree), edge cases (dedup, large commits), and dependencies (external CI supplies sha+files). This makes it complete for the tool's complexity.

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

Parameters3/5

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

Schema coverage is 100% with all parameters described, so baseline is 3. The description adds little beyond schema: it restates that files are matched against metadata.implements and message is optional, but these are already in the schema. No significant new semantic detail.

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 ('appends') and resource ('metadata.commits'), and explicitly states it records git commit metadata onto nodes. It clearly differentiates itself from sibling CRUD tools (create_node, update_node) by focusing on the commit record action.

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 recording is the LAST step, instructs to use create_node for new units and update_node for moved files first, and warns about consequences of skipping that. It also references create_edge/create_api for co-change candidates and cites rules for commit-sync, giving practical usage guidance.

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

reopen_transplantRe-open transplant on a groundAInspect

Re-opens the transplant window on a rooted ground (sets project.transplanting=true), relaxing guards so historical/structural reconstruction can resume: add/edit nodes in any season incl. past, and hard-delete mistakes. CRITICAL: only call this when the user has EXPLICITLY asked to switch the ground into transplanting (e.g. "put this ground back in transplant", "옮겨심기로 바꿔줘"). Never decide to re-open transplant on your own judgment — it removes safety guardrails. Rooting it back (settling) is human-only via the UI. See umtri://rules/transplant.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGround slug.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description fully discloses side effects and risks: 'relaxing guards so historical/structural reconstruction can resume: add/edit nodes in any season incl. past, and hard-delete mistakes' and 'it removes safety guardrails'. It also notes that settling is human-only. This gives the agent a complete picture of consequences.

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 main action, then provides crucial warnings and references. Every sentence adds value: the effect, what's allowed, explicit call conditions, exclusions, and a reference to rules. It is long but not wasteful—appropriately detailed for a safety-critical tool.

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?

This tool has one parameter, no output schema, and no annotations. The description is fully self-contained: it explains the action, the side effects, the exact user-intent requirement, and the irreversible human-only step. It leaves no ambiguity for the agent.

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

Parameters4/5

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

The schema covers 100% of the parameter ('slug' with 'Ground slug.'), so baseline is 3. However, the description adds meaning by specifying the parameter must be a 'rooted ground', which is a precondition not in the schema. This is useful for correct invocation and justifies 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 clearly states the tool's purpose: 'Re-opens the transplant window on a rooted ground (sets project.transplanting=true)'. It uses a specific verb and resource, and the effect is explicit. This distinguishes it from the CRUD siblings, as it's a state transition rather than a create/update/delete operation.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: 'only call this when the user has EXPLICITLY asked to switch the ground into transplanting... Never decide to re-open transplant on your own judgment'. It also states an exclusion (rooting back is human-only) and references rules. This is the gold standard for usage guidance.

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

update_apiUpdate an API entryAInspect

Partial update of an API. Patchable fields: label, description, metadata, start, end.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAPI id.
slugYes
patchYes

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It discloses the partial-update behavior (only provided fields change) and enumerates the allowed fields, which goes beyond a simple 'update' statement. However, it does not mention return values, idempotency, or side effects.

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

Conciseness5/5

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

The description is a single concise sentence, front-loaded with the core action 'Partial update' and immediately listing the relevant fields. Every word earns its place.

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

Completeness2/5

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

The tool has no output schema and no annotations, so the description should explain the response and any important behaviors. It does not mention what is returned, how success/failure is indicated, or the role of the 'slug' parameter. The nested patch object is only minimally covered.

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

Parameters2/5

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

Schema coverage is only 33% (id has a description, slug and patch do not). The description lists the patchable fields (label, description, metadata, start, end), but these are already present in the schema. It adds no meaning for 'start', 'end', 'slug', or 'metadata', leaving gaps that the description should compensate for.

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 'Partial update of an API' with a specific verb and resource, and lists the patchable fields. This clearly distinguishes it from sibling tools like update_node and update_bug.

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

Usage Guidelines3/5

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

The description implies usage for modifying existing APIs, but does not explicitly state when to use it vs alternatives or mention any exclusions. The 'partial update' wording gives some context but no direct comparison with siblings.

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

update_bugUpdate a bugAInspect

Partial update of a bug. Most common use: status transition. Follow the lifecycle one step at a time: open (wild) → in_progress (chasing) → resolved (catched). Set status="in_progress" the moment you start the fix, not after it lands — it is the only marker that someone is already on this bug, so a parallel agent can see the work in flight instead of duplicating it. Then set "resolved" once it ships. Skipping straight from open to resolved returns a warning (not a rejection) — acceptable when the fix was genuinely instant. Other patchable fields: title, description, solution, score (0–8 change-risk), metadata. When resolving, rewrite solution to what you actually applied — at report time it held the plan, and leaving a stale plan there is worse than leaving it empty. To mark a bug as fixed, prefer status="resolved" over delete — that preserves the history of what eroded the tree. When resolving, you may record the shipped release in metadata.resolvedVersion (e.g. "v2.3.1"); metadata is replaced wholesale, so include existing keys you want to keep.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBug id.
slugYes
patchYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so thoroughly. It discloses the warning on skipped states, the wholesale replacement of metadata, the need to rewrite solution to the actually-applied fix, and the parallel-agent visibility implications of in_progress.

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 longer than average, but every sentence contributes workflow guidance or behavioral caveats. It is front-loaded with the core purpose and then expands into actionable rules; slightly more brevity would improve it, but it is not padded.

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 (nested patch object, multiple patchable fields, state transitions) and no output schema, the description covers all critical behavioral aspects: transition ordering, warnings, metadata replacement, solution rewriting, and the resolved-vs-delete tradeoff. It is contextually complete for an AI agent selecting and invoking the tool.

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 only 33%, so the description must compensate. It adds significant meaning for status (lifecycle one step at a time), solution (rewrite before resolving), metadata (wholesale replacement, include existing keys), and score (0–8 change risk). The slug parameter remains undocumented, which holds this back from a 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 'Partial update of a bug' and immediately identifies the most common use: status transition. It clearly distinguishes update_bug from sibling tools like create_bug and delete_bug by specifying what parts can be patched and how status changes drive the lifecycle.

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: set in_progress when starting a fix, set resolved when shipped, and prefer resolved over delete to preserve history. It also explains the parallel-agent signaling rationale and notes that skipping straight to resolved is acceptable with a warning, providing clear usage context.

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

update_nodeUpdate a nodeAInspect

Partial update of a node. Patchable fields: label, type, parent, season, description, tags, metadata, sproutedAt. Type change reclassifies role; parent change recomputes the ltree path automatically. On a grown (past-season) node, only the tree's shape and timeline are locked — parent, season, type and sproutedAt are rejected. Content fields (label, description, metadata, tags) stay editable, so you can keep metadata.implements current when code moves without reopening transplanting. Moving any node into a past season is rejected. Both restrictions lift while the ground is transplanting (project.transplanting=true), so historical structure can be reconstructed (see umtri://rules/transplant). Same protocol validation as create_node — reject on hierarchy violations, warn on soft issues.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNode id.
slugYesGround slug.
patchYesOnly the fields you want to change.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully discloses the behavioral implications: type changes reclassify roles, parent changes recompute ltree paths, restrictions on past-season nodes, and the effect of transplanting mode. This is far beyond the simple 'update' implied by the title.

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 adds value: patch semantics, restrictions, exceptions, validation behavior, and a reference for transplant rules. It front-loads the purpose and patchable fields before diving into edge cases.

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 description thoroughly covers operation, constraints, exceptional modes, and validation for a complex update tool with no annotations or output schema. It does not describe the return value, but this is not critical given the detailed behavior and no output schema requirement.

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 parameters are already documented. The description adds meaningful context by explaining the effects of changing specific fields (type, parent, season, sproutedAt) and highlights metadata.implements as a use case, going beyond raw schema definitions.

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

Purpose5/5

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

Description clearly states 'Partial update of a node' and enumerates the exact patchable fields, making the tool's purpose unambiguous. It differentiates from siblings like create_node and delete_node by focusing on modification of an existing node.

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 by defining what can be patched and provides detailed conditions (grown-node restrictions, transplanting mode, past-season rejection). It references create_node for validation parity, but does not explicitly contrast with other update tools or state when not to use it.

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

Tool Schema Changelog

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

  1. 22 tool updatesv1.1.0
    • First observedcommit_plan
    • First observedcreate_api
    • First observedcreate_bug
    • First observedcreate_edge
    • First observedcreate_node
    • First observedcreate_project
    • First observeddelete_api
    • First observeddelete_bug
    • First observeddelete_edge
    • First observeddelete_node
    • First observedget_bug
    • First observedget_graph
    • First observedget_impact
    • First observedlist_bugs
    • First observedlist_events
    • First observedlist_projects
    • First observedlist_seasons
    • First observedrecord_commit
    • First observedreopen_transplant
    • First observedupdate_api
    • First observedupdate_bug
    • First observedupdate_node

TDQS

A4.1/5.0

Scored across 22 tools

Disambiguation5/5

Each tool targets a distinct resource and action. The only potentially confusable pair is create_edge vs create_api, but their descriptions explicitly distinguish structural dependency from runtime flow, so an agent can reliably select the right one.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with lowercase and underscores (list_bugs, get_graph, create_node, update_api, delete_bug, etc.). The few non-CRUD verbs (reopen, commit, record) still fit the same pattern, so there are no naming clashes.

Tool Count3/5

22 tools is on the heavy side (16–25 feels heavy), but the domain is broad: projects, nodes, edges, apis, bugs, seasons, events, and transplant operations. Every tool has a defined role, yet the overall surface could be trimmed by merging some specialized tools.

Completeness3/5

Nodes, apis, and bugs have full create/update/delete coverage, and edges have create/delete but no update. Projects only have create and list, missing update/delete. Season creation is intentionally human-only, which is documented. Agents can work around missing update_edge by delete+create, but there are notable lifecycle gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Give your AI coding agents superpowers — a local MCP server for fast, token-efficient code navigation, search & analysis.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Local MCP server giving AI coding agents (Claude Code, Cursor, VS Code/JetBrains Copilot) a shared, persistent memory of your projects and every bug/issue faced during development. Stateless, plain-file storage (AGENTS.md + issues.jsonl) — no database.
    16
    238
    1
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bepuljang/umtri-mcp'

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