Skip to main content
Glama

The problem

Coding agents repeatedly scan the same repository, read entire files to understand one function, consume raw terminal noise, and lose architectural decisions between sessions. Markdown specs help at first, then drift away from the code they describe.

mdflow keeps a Git-tracked architecture graph beside the source. Its MCP server turns that graph into a narrow, verified working context for each task—and can apply symbol-level code changes with tests and automatic rollback.

For developers

For AI agents

A native Canvas for architecture, dependencies, plans, progress, and evidence

Task-scoped context instead of repository-wide scanning

Ghost blueprints for planned work and solid anchors for implemented code

AST symbol slices across a complete execution chain

Impact paths before a change reaches the codebase

Atomic symbol mutation with verification and rollback

Git-native history: code and architecture move together

Sanitized terminal output that preserves useful failures

Related MCP server: engrams

Try it on a repository

Requires Node.js 22 or later. No global install is needed.

cd your-project
npx -y github:yubinbin32-ops/Mdflow-Canvas init --scan
npx -y github:yubinbin32-ops/Mdflow-Canvas status
npx -y github:yubinbin32-ops/Mdflow-Canvas setup

On macOS 14+, download the native app from GitHub Releases to explore the graph, focus dependencies, inspect code streams, and configure supported agents visually. The CLI and MCP server also run headlessly on Windows, Linux, CI, and remote machines.

One closed loop

flowchart LR
  Human["Developer\nCanvas + plans"] --> Graph[".mdflow/graph.json\nGit-tracked truth"]
  Graph --> Context["Task slice\ncontracts + impact path"]
  Context --> Agent["AI coding agent\nvia MCP"]
  Agent --> Mutation["AST symbol mutation"]
  Mutation --> Verify{"Tests pass?"}
  Verify -->|yes| Graph
  Verify -->|no| Rollback["Automatic rollback"]
  Rollback --> Agent

The runtime uses a local SQLite cache for fast reads. The durable source of truth is deterministic plain-text JSON, so a Git checkout or discard restores code and architecture together.

Measured on mdflow itself

Run npm run benchmark to reproduce the measurements locally. Results vary by repository and task; these numbers come from the current mdflow codebase.

Operation

Baseline

mdflow

Reduction / speed

Task context

112,738 tokens

1,197 tokens

98.9% fewer tokens

Four-module code chain

84,227 tokens

654 tokens

99.2% fewer tokens

Build and test log

4,042 tokens

212 tokens

94.8% fewer tokens

Structured context retrieval

repeated file scans

3.11 ms P50

local indexed lookup

The benchmark also checks target-module recall, related-topology capture, irrelevant-module isolation, checkpoint persistence, change-set reversal, and Git graph synchronization.

What makes it different

Architecture that can start before code

Planned features live as Ghost Blueprints without fake file bindings. As implementation lands, blocks become Solid Anchors connected to real AST symbols. The same object moves from intent to code to evidence.

Code context at symbol boundaries

chain_code_stream follows an execution path across files and returns the relevant functions, classes, and contracts. Agents see the code that participates in the task instead of every line in every file.

Code changes with a verification boundary

block_code_mutate locates a bound symbol, replaces it atomically, runs the configured verification command, and restores the original file when verification fails.

Evidence as part of architecture

Plans and blocks can require Checkpoints backed by tests, static checks, or review receipts. Completion is tied to evidence rather than a chat claim.

Terminal output built for agent context

log_sanitize removes ANSI control sequences, spinner rewrites, and repetitive successful output while keeping failure summaries and stack context.

Native macOS Canvas

  • Compact orthogonal routing keeps large dependency graphs readable.

  • Double-click focus reveals one-hop dependencies and related Chains.

  • The Inspector shows AST bindings, code streams, plans, progress, and Checkpoint evidence.

  • Settings can configure Google Antigravity, Cursor, Claude Desktop, OpenCode, and Codex workflows.

Connect an MCP client

The desktop app can write supported configurations for you. For manual setup, point your client at the bundled server:

{
  "mcpServers": {
    "mdflow": {
      "command": "npx",
      "args": ["-y", "github:yubinbin32-ops/Mdflow-Canvas", "serve"]
    }
  }
}

This standard shape works with Cursor, Claude Desktop, OpenCode, and other stdio MCP clients. Google Antigravity can use the bundled server path with MDFLOW_PROJECT_ROOT set to the workspace.

Develop locally

npm ci
npm test                 # 17 tests
npm run benchmark        # reproducible context/AST/log benchmark
npm run plugin:build     # rebuild the bundled MCP server
npm run desktop:build    # build the Swift macOS app

Project status

mdflow is early-stage open-source software and its graph format and MCP surface may evolve. The project currently targets macOS 14+ for the native app and Node.js 22+ for the cross-platform CLI/server. Issues, reproducible benchmark results, and focused pull requests are welcome.

License

MIT © mdflow contributors

Available Tools

19 tools
block_code_mutateA

Atomically mutate a specific AST symbol's implementation bound to an architecture Block. Replaces only the targeted symbol body, runs automated verification with terminal log sanitization, and automatically rolls back if tests fail.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes
blockIdYes
newCodeYes
projectRootNo
verifyCommandNo
includeStructuredNo

TDQS

A3.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 does so well. It discloses atomicity, targeted replacement, automated verification, terminal log sanitization, and automatic rollback on test failure, giving the agent a clear behavioral model beyond the schema.

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

Conciseness5/5

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

A single, dense sentence front-loads the core purpose and then adds key behavioral qualifiers without waste. Every clause contributes meaningful information, making this appropriately concise and well-structured.

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

Completeness2/5

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

The high-level behavior is clear, but the tool has six parameters, no output schema, and no annotations, and the description omits parameter semantics, return behavior, and prerequisites. An agent would likely need additional context to invoke this correctly, especially for includeStructured and verifyCommand.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain most parameters. While blockId, symbol, and newCode are inferable from the prose, verifyCommand, includeStructured, and projectRoot lack meaningful explanation, leaving the agent to guess at their formatting and purpose.

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

Purpose5/5

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

The description clearly identifies the specific action (atomically mutate), the resource (a specific AST symbol implementation bound to an architecture Block), and the scope (only the targeted symbol body). This distinguishes it well from sibling tools like graph_mutate or change_set_revert.

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: it is for mutating a specific symbol within a Block when automated verification and rollback are desired. However, it does not explicitly state when to prefer this over alternatives or when not to use it, leaving some inference to the agent.

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

chain_code_streamB

Extract an end-to-end code stream along an architectural Chain. Returns only targeted AST symbol slices and interfaces for each node, saving ~90% tokens compared to full file reads.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainIdYes
projectRootNo
maxTotalCharsNo
includeStructuredNo

TDQS

B3.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It usefully reveals that the tool returns only targeted AST symbol slices and interfaces rather than full files, and that it is token-efficient. It does not address error handling, side effects, or authentication expectations, but the 'Extract/Returns' framing implies a read-only operation.

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

Conciseness5/5

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

The description is a single efficient sentence that front-loads the core action, then adds the key output characteristic and the main benefit. There is no filler or redundant restating of the tool name.

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

Completeness2/5

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

With four parameters, no output schema, and no annotations, the description needs to explain the parameter semantics and how the 'Chain' concept works; it does neither. It provides a high-level idea of the return content, but an agent could not confidently construct a correct invocation beyond guessing at chainId.

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

Parameters1/5

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

Schema description coverage is 0%, and the tool description does not compensate by explaining any parameters. chainId is only vaguely implied by the word 'Chain', while projectRoot, maxTotalChars, and includeStructured are entirely unmentioned, leaving an agent without enough information to set optional parameters correctly.

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

Purpose4/5

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

The description clearly states a specific operation ('Extract an end-to-end code stream') on a specific resource ('an architectural Chain') and distinguishes its output scope ('targeted AST symbol slices and interfaces'). It does not explicitly contrast with sibling tools, but the AST-slice and token-saving framing makes its purpose reasonably distinct.

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

Usage Guidelines3/5

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

The description implies when to use the tool: when you need an end-to-end code stream along a Chain and want to avoid full file reads, as shown by the 'saving ~90% tokens' comparison. However, it does not explicitly state conditions, prerequisites, or when to prefer a sibling tool, so some inference is required.

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

change_set_revertA

Create a new reverse ChangeSet for a safe, fully reversible update-only ChangeSet. Original History is preserved; stale or unsupported changes are rejected instead of partially reverted.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
actorNo
planIdNo
reasonNo
gitHeadNo
changeSetIdYes
projectRootNo
chainScopeIdNo
includeStructuredNo

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 full behavioral burden. It discloses key behaviors: a new reverse ChangeSet is created, original history is preserved, and stale or unsupported changes are rejected rather than partially reverted. This goes beyond the tool name, though it omits details like permissions 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?

Two sentences deliver the core purpose, safety properties, and rejection behavior with no filler. The most important constraint is front-loaded.

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?

Despite a concise behavioral summary, the tool has 9 parameters and no output schema; the description does not explain what each parameter does, what the successful result looks like, or what inputs are required beyond changeSetId. This is insufficient for reliable invocation of a 9-parameter tool.

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

Parameters1/5

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

Schema description coverage is 0% and the description adds no meaning for any of the 9 parameters. Required changeSetId is obvious from the schema, but parameters like task, actor, planId, reason, gitHead, projectRoot, chainScopeId, and includeStructured are entirely unexplained, leaving the agent without guidance.

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

Purpose5/5

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

The description states a specific action ('Create a new reverse ChangeSet') on a specific resource, clearly distinguishing it from sibling tools like graph_mutate or block_code_mutate. The constraint 'update-only ChangeSet' further clarifies 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?

The description identifies the intended use case: reverting a 'safe, fully reversible update-only ChangeSet.' It clearly implies when this tool is appropriate, though it does not explicitly name alternatives 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.

changes_sinceB

Read only graph/checkpoint mutations after a known change sequence. Use this for live synchronization and compact read-back instead of reloading the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sequenceNo
projectRootNo
includeStructuredNo

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the transparency burden. It discloses the key trait of being read-only and indicates incremental behavior since a sequence, but omits pagination behavior, ordering guarantees, handling of unknown/stale sequences, and response shape.

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 tight sentences with no filler; the read-only nature and intended use are front-loaded. Every phrase contributes to orientation or usage guidance.

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

Completeness2/5

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

For a four-parameter tool with no output schema and no annotations, this is too thin: an agent cannot determine what values to pass for projectRoot or includeStructured, or what the response contains. The description provides motivation but not enough operational detail for correct invocation.

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

Parameters2/5

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

The schema has four parameters and zero description coverage, and the description only hints at the sequence concept and loosely implies limiting via 'compact read-back.' projectRoot and includeStructured remain entirely unexplained, so the description does not compensate for the schema gap.

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

Purpose4/5

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

The description states a specific read-only operation over graph/checkpoint mutations anchored to a known change sequence. The 'read only' qualifier and incremental-change framing distinguish it from mutation siblings like graph_mutate and graph_patch, though it does not explicitly name a sibling.

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

Usage Guidelines4/5

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

It explicitly recommends the tool for live synchronization and compact read-back, and contrasts it with reloading the project. It does not list when-not cases or alternative sibling tools, but the intended use context is clear.

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

checkpoint_listA

List checkpoints by status, target, Plan or ChainScope, including standalone checkpoints that are not referenced by any Plan. Use this for a compact verification inbox instead of opening every entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
localeNo
planIdNo
statusNo
targetIdNo
targetTypeNo
projectRootNo
chainScopeIdNo
unassignedOnlyNo
includeStructuredNo

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states no mutation/destructive behavior, but it doesn't mention whether the tool filters by authenticated user/workspace, whether the list is sorted, whether 'unassignedOnly' semantics overlap with standalone inclusion, or what pagination/limit behavior applies. The description adds the standalone/non-referenced inclusion nuance, but leaves significant behavioral gaps.

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 that front-load the main purpose and filter dimensions, then give a use-case recommendation. No filler.

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

Completeness2/5

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

A list tool with 10 params, no annotations, no output schema, and no parameter documentation in the description. The returned shape of checkpoints is unknown; the inclusion condition is partially disclosed but not fully (how 'unassignedOnly' interacts, whether limit applies to the entire set, whether locale/ projectRoot are required for any filtering). Incomplete for safe agent invocation.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It gives a partial map by naming filter categories (status, target, Plan, ChainScope) that correspond to several parameters (status, targetId/targetType, planId, chainScopeId), but it omits other params like limit, locale, projectRoot, unassignedOnly, and includeStructured. The structure is simple (all optional scalars), but with 10 params and zero schema descriptions, the description should add more.

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

Purpose5/5

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

The description clearly states it lists checkpoints with multiple filter dimensions (status, target, Plan, ChainScope) and adds a key differentiator: it includes standalone checkpoints not referenced by any Plan. This distinguishes it from other checkpoint/list tools and gives the agent a specific verb and resource.

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

Usage Guidelines4/5

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

The description provides clear context on when to use it ('compact verification inbox instead of opening every entity') and implies it's a read/list tool. It doesn't explicitly name alternatives among siblings, but the use-case guidance is enough to route selection.

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

checkpoint_recordC

Create or update a checkpoint with evidence. Passed checkpoints are the only basis for healthy completion states.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
actorNo
titleYes
planIdNo
statusYes
gitHeadNo
coverageNo
criteriaNo
evidenceNo
targetIdYes
targetTypeYes
projectRootNo
chainScopeIdNo
evidenceLevelNo
invalidatedAtNo
checkpointKindNo
expectedRevisionNo
aggregationPolicyNo
includeStructuredNo
eligibleAfterChildrenNo
requiredEvidenceLevelNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does reveal that the tool mutates state by creating or updating a checkpoint and that passed checkpoints are central to completion health, but it omits upsert semantics, invalidation behavior, revision handling, evidence validation, and side effects on related checkpoints. This is under-disclosed for a mutation tool.

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

Conciseness4/5

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

The description is concise: two short sentences, with the operative verb front-loaded and no filler. It is efficient and easy to parse, though a structured breakdown of key behaviors would have been more helpful for a tool of this complexity.

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

Completeness2/5

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

For a 21-parameter mutation tool with 4 required fields, no annotations, and no output schema, this description is far too thin. It leaves out core operational details such as how targets are identified, what status transitions are allowed, how evidence should be structured, and what the tool returns or changes after invocation.

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

Parameters2/5

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

Schema description coverage is 0%, and the description adds very little parameter-level meaning. It hints that 'evidence' is relevant and that 'passed' status is significant, but it does not explain the required targetType/targetId/title/status combination or any of the many optional fields. An agent would have to infer nearly all parameter semantics from property names and enums alone.

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

Purpose4/5

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

The description states a clear verb-resource pair: 'Create or update a checkpoint' with a meaningful qualifier, 'with evidence.' It also adds domain significance by saying passed checkpoints are the basis for healthy completion states, which helps distinguish this from read-only siblings like checkpoint_list. It is not tautological and is clear enough for an agent to know what the tool does.

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

Usage Guidelines3/5

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

The description implies when this tool matters, especially for recording passed checkpoints, but it never explicitly says when to use this versus alternatives such as checkpoint_list or graph_mutate. There are no stated exclusions, prerequisites, or guidance about when not to use it, so usage context is only implied.

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

context_for_taskB

Get a budgeted Markdown context pack for the current development task. Use at task start and expand only selected refs.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYes
localeNo
maxCharsNo
focusRefsNo
projectRootNo
includeStructuredNo

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It conveys that the tool is a read-oriented operation ('Get'), produces Markdown, is budgeted, and involves refs that can be selectively expanded. However, it does not disclose side-effect constraints, permissions, or what happens when the budget is exceeded.

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 remarkably concise: two sentences, no filler, purpose first, and a targeted usage rule second. It is easy to parse and front-loads the essential information.

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

Completeness2/5

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

For a tool with 6 parameters, no annotations, and no output schema, this description is too thin to fully support invocation. It is adequate for selecting the tool, but it omits parameter semantics, output expectations, and important behavioral details needed for a reliable call.

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

Parameters2/5

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

Schema description coverage is 0%, and the description adds very little parameter-level meaning. It only hints at 'focusRefs' via 'selected refs' and 'maxChars' via 'budgeted.' It does not explain locale, projectRoot, includeStructured, or how the parameters interact.

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

Purpose4/5

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

The description clearly states a specific action and resource: 'Get a budgeted Markdown context pack for the current development task.' It adds a useful lifecycle cue with 'Use at task start.' It does not explicitly distinguish itself from sibling tools like plan_context, but the task-focused scope and 'expand only selected refs' make the purpose understandable.

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

Usage Guidelines4/5

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

The description gives explicit timing guidance ('Use at task start') and a specific usage constraint ('expand only selected refs'). This is clear context for when to invoke the tool, though it does not mention alternative tools or conditions when the tool should not be used.

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

decision_listA

Read the compact project-scoped Decision index. Bodies, rationale, alternatives, and consequences are omitted; use decision_open or entity_open(type=decision) for one record.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNo
projectRootNo
includeStructuredNo

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It clearly states that bodies, rationale, alternatives, and consequences are omitted, and that this is a read-oriented index tool. This is meaningful behavioral transparency for a 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?

Two front-loaded sentences deliver the core purpose, the key behavioral limitation, and the alternative routing. Every sentence earns its place with no filler.

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

Completeness3/5

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

The description covers the core behavior and alternatives well, but with no output schema, no annotations, and three undocumented parameters, the agent is left guessing about output shape and the effect of includeStructured. It is minimally viable but has clear gaps.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain locale or includeStructured. The phrase 'project-scoped' hints at projectRoot, but the boolean parameter includeStructured is left entirely ambiguous, so the agent receives little guidance for correct 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 uses a specific verb 'Read' and identifies the resource as the 'compact project-scoped Decision index.' It also distinguishes itself from decision_open and entity_open by explicitly stating what is omitted and how to get full records.

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 names alternatives and the condition for choosing them: 'use decision_open or entity_open(type=decision) for one record.' This tells the agent when to use this tool and when not to.

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

decision_openA

Open one project-scoped Decision. Returns its rationale, alternatives, consequences, scope, supersession, and compact History; never projects it onto Canvas.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
localeNo
projectRootNo
historyLimitNo
includeStructuredNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It discloses the return contents and explicitly states a behavioral boundary ('never projects it onto Canvas'). The verb 'Open' implies a read-like operation, but the description does not explicitly guarantee no side effects or mention auth/permission requirements, so it is not a perfect disclosure.

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

Conciseness5/5

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

The description is two tight sentences with no filler. It front-loads the core action and resource, then packs the return fields and a key behavioral caveat into a compact, readable structure.

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?

Despite having no output schema, no annotations, 0% schema description coverage, and five parameters, the description remains brief. It gives the return field names but omits parameter semantics, usage conditions, error behavior, and return structure details, leaving an agent under-informed for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description needed to compensate, but it barely does. Terms like 'project-scoped' and 'compact History' loosely hint at projectRoot and historyLimit, but nothing explains locale, includeStructured, or the exact meaning and interaction of the parameters.

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

Purpose5/5

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

The description uses a specific verb ('Open') and a clear resource ('one project-scoped Decision'), and it distinguishes itself from siblings such as decision_list by focusing on a single Decision and returning a defined set of fields. This makes the tool's purpose unmistakable.

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

Usage Guidelines4/5

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

The description clearly implies when to use it: when you need a single Decision's rationale, alternatives, consequences, scope, supersession, and history. It also names a boundary ('never projects it onto Canvas'), which helps the agent avoid expecting Canvas behavior, though it does not explicitly name sibling alternatives 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.

entity_openB

Open one Block, Chain, Link, Plan, or project-scoped Decision with only relevant details and recent History. Decision bodies are never Canvas nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
typeYes
localeNo
projectRootNo
historyLimitNo
includeStructuredNo

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It adds useful context by saying results are limited to relevant details and recent History, and it provides a domain invariant: 'Decision bodies are never Canvas nodes.' However, it never states whether the operation is read-only, what the response structure is, or what side effects, if any, 'open' may have.

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 short sentences with no filler. The supported entity types are front-loaded, and the second sentence adds a meaningful boundary condition rather than repeating the schema. Every sentence earns its place.

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

Completeness2/5

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

Given 6 parameters, no annotations, no output schema, and several sibling tools, this description is too thin for fully confident invocation. It leaves locale, id semantics, historyLimit bounds, includeStructured behavior, output shape, and sibling differentiation unexplained. It is adequate for a first guess but not complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does partially: the entity list mirrors the type enum, 'project-scoped' aligns with projectRoot, 'recent History' aligns with historyLimit, and 'relevant details' loosely suggests includeStructured. Yet id and locale are completely unaddressed, and the prose mappings are imprecise rather than explicit parameter documentation.

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

Purpose4/5

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

The description states a clear action ('Open') and enumerates the exact resource types: Block, Chain, Link, Plan, or project-scoped Decision. It also previews what the call returns ('only relevant details and recent History'), making the tool's core purpose unambiguous. It does not explicitly contrast with sibling tools like decision_open, but the enumerated scope is still clear.

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

Usage Guidelines2/5

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

There is no explicit guidance about when to use entity_open versus alternatives such as decision_open, graph_search, or context_for_task. The project-scoped qualifier and 'only relevant details' hint at a focused retrieval use case, but no when-to-use or when-not-to-use conditions are stated.

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

foundation_plan_createA

Generate one Foundation Plan from every non-deprecated unimplemented Block. Because this is an explicit implementation/verification Plan, the operation creates missing atomic Block checkpoints, direct Block PlanChanges, dependency-ordered parallel steps, Chain integration gates, and a final Plan acceptance gate in one transaction; plain architecture-only create_block does not.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNofoundation-plan
goalNo
actorNo
titleNoFoundation Plan
reasonNo
gitHeadNo
projectRootNo
includeStructuredNo
requiredEvidenceLevelNointegration

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the operation creates missing atomic Block checkpoints, direct Block PlanChanges, dependency-ordered parallel steps, Chain integration gates, and a final Plan acceptance gate, all in one transaction. This transparently reveals the scope and side effects of the operation, though it does not discuss permissions or reversibility.

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 primary action in the first sentence and structured elaboration in the second. Every clause adds meaningful detail without redundancy, making it appropriately concise and well-structured.

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

Completeness2/5

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

While the description excels at conveying the operation's purpose and effects, it is incomplete for actual invocation. The tool has 9 parameters, no output schema, and no annotations, yet the description provides zero parameter semantics, no return-value expectations, and no guidance on required versus optional inputs. An agent cannot reliably call this tool correctly based on the description alone.

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

Parameters1/5

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

Schema description coverage is 0%, and the description mentions none of the 9 parameters. The schema provides only types and defaults, with no descriptions, so the agent is left without any guidance on how to use id, goal, actor, title, reason, gitHead, projectRoot, includeStructured, or requiredEvidenceLevel. This is a critical gap for a tool with this many parameters.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Generate one Foundation Plan from every non-deprecated unimplemented Block.' It further differentiates itself from the sibling create_block by stating what this tool creates that the plain architecture-only tool does not. This makes the tool's purpose unmistakable.

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

Usage Guidelines4/5

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

The description clearly states this is an explicit implementation/verification Plan operation and contrasts it with 'plain architecture-only create_block does not.' This gives an agent a good sense of when to prefer this tool over create_block, though it does not enumerate other alternatives or explicit exclusion conditions.

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

graph_mutateA

Atomically create or patch Blocks, project-scoped Decisions, global Links, Chain paths, independent Plans, atomic Checkpoints, Background scopes, Decision scopes, and source refs. Decisions are not Canvas Blocks and never enter Block/Chain/Plan coverage. A plain create_block records architecture only; use create_checkpoint in the same ChangeSet when a requirement, Plan, Chain gate, or explicit verification request makes the check necessary. Link kinds are flows_to, calls, reads, writes, depends_on, implements, validates, constrains, and supersedes. Keep each call small and provide expectedRevision for updates.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
actorNo
planIdNo
reasonYes
gitHeadNo
operationsYes
projectRootNo
chainScopeIdNo
includeStructuredNo

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 behavioral disclosure burden, and it reveals important traits: atomicity, Decision scoping that never enters Block/Chain/Plan coverage, the distinction between architecture-only create_block and verification-oriented create_checkpoint, and the need for expectedRevision on updates. It does not cover error behavior, permissions, or reversibility, but what it does disclose is meaningful and non-obvious.

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

Conciseness4/5

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

The description is dense but not bloated, with the core atomic create/patch purpose stated first and critical distinctions front-loaded. Each sentence adds useful information, though the entity list is long and could overwhelm a quick scan.

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?

This is a high-complexity tool with 9 parameters, 27 possible action types, no output schema, and no annotations. The description provides essential high-level guidance but does not explain required fields per action, how operations should be structured, what reason means, what projectRoot and chainScopeId refer to, or what the response contains. An agent would likely struggle to construct a correct call beyond the simplest create_block case.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for the sparse schema, and it partially does by listing allowed link kinds and explaining expectedRevision for updates. However, many parameters such as reason, projectRoot, chainScopeId, task, actor, and the structure of operation fields are left unexplained, leaving significant gaps.

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

Purpose4/5

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

The description uses a specific verb ('create or patch') and clearly enumerates the affected resource types: Blocks, Decisions, Links, Chain paths, Plans, Checkpoints, Background scopes, Decision scopes, and source refs. It also clarifies a key semantic boundary ('Decisions are not Canvas Blocks'), though it does not explicitly distinguish graph_mutate from the sibling graph_patch.

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

Usage Guidelines4/5

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

The description gives concrete when-to-use guidance for sub-operations, notably directing agents to use create_checkpoint when a requirement, Plan, Chain gate, or verification request makes a check necessary, while plain create_block only records architecture. It also advises keeping calls small and providing expectedRevision for updates, though it does not discuss when to prefer graph_mutate over graph_patch.

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

graph_patchA

Apply a compact mdflow/1 Markdown-like patch. The server expands it into the same atomic ChangeSet used by graph_mutate, preserves omitted fields, and can create an atomic Block checkpoint with checkpoint=auto.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
actorNo
patchYes
planIdNo
reasonNo
gitHeadNo
projectRootNo
chainScopeIdNo
includeStructuredNo

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden and does well: it discloses that the server expands the patch into an atomic ChangeSet, preserves omitted fields, and can create a Block checkpoint. This gives useful behavioral traits beyond the schema, though it omits permissions, reversibility, and return behavior.

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

Conciseness4/5

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

Two sentences with no fluff; the core action is front-loaded. The second sentence is a bit dense with three behavioral clauses, but it is still economical for the information it conveys.

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?

This is a mutation tool with 9 parameters, no output schema, and no annotations. The description explains the patch concept and atomicity but omits the meaning of most parameters, does not describe what the server returns, and leaves the checkpoint=auto mechanism unclear. An agent would need much more guidance to invoke this confidently.

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

Parameters2/5

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

Schema description coverage is 0% across 9 parameters, so the description must compensate. It adds some meaning by describing the patch format as compact mdflow/1 Markdown-like and mentioning checkpoint=auto, but it does not explain task, actor, planId, reason, gitHead, projectRoot, chainScopeId, or includeStructured, leaving most parameters ambiguous.

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

Purpose5/5

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

States a specific action ('Apply') and a resource ('compact mdflow/1 Markdown-like patch'), and connects it to graph_mutate via the shared atomic ChangeSet. This clearly distinguishes it from the sibling tool and tells an agent what the tool fundamentally does.

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 relationship to graph_mutate is implied by saying it expands into the same atomic ChangeSet used by graph_mutate, but the description never explicitly says 'use this instead of graph_mutate when you have a compact patch' or lists exclusion conditions. The usage context is inferable, not stated.

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

graph_validateC

Validate global graph references, Chain paths, Plan targets, Background scopes, contracts, and checkpoint-backed completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNo
includeStructuredNo

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only lists validation targets and does not say whether the tool is read-only, whether it can modify the graph, what happens on validation failure, or what side effects it may have. This is a significant transparency gap for a tool in a graph-mutation-adjacent 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 one compact sentence with the verb front-loaded. It contains no filler, though the list format crams multiple concepts together without explaining them.

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

Completeness2/5

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

For a 2-parameter tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain the role of the parameters, the validation output, failure behavior, or side effects, so an agent cannot reliably invoke the tool or interpret its result.

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 input schema has 0% description coverage, and the description does not mention projectRoot or includeStructured. The agent is left to guess what the projectRoot path refers to and what includeStructured controls, so the description adds no parameter meaning.

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

Purpose4/5

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

The description opens with the specific verb 'Validate' and enumerates the resources it checks (global graph references, Chain paths, Plan targets, etc.). This differentiates it from graph_search, graph_mutate, and graph_patch, which perform different actions. However, the list is jargon-heavy and doesn't state the overall goal or how validation results are presented.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool compared with siblings like graph_search or graph_mutate. It doesn't state prerequisites, such as needing a registered project or graph, nor does it mention any scenario where validation should be run.

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

log_sanitizeA

Sanitize build, test, or terminal command outputs. Strips ANSI noise, collapses routine compiler stdout, and isolates actionable failure stack traces to protect context window from token flooding.

ParametersJSON Schema
NameRequiredDescriptionDefault
exitCodeNo
maxCharsNo
rawOutputYes
includeStructuredNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains key transformative behaviors: stripping ANSI noise, collapsing routine compiler stdout, and isolating failure stack traces. It does not disclose output format or side-effect details, but the core behavior is transparent enough for an agent to predict the tool's effect.

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, tightly worded sentence that front-loads the main action and then enumerates concrete transformations. Every phrase adds value, with no filler or repetition.

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 general purpose and key transformations, but it omits important context such as how parameter values alter behavior, whether output is returned as plain text or structured data, and what 'collapse' means in practice. Given no output schema and no annotations, the description is adequate but leaves meaningful gaps for an agent deciding how to invoke it with the right parameters.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for parameter documentation, but it does not explicitly explain exitCode, maxChars, or includeStructured. It only indirectly references rawOutput through phrases like 'terminal command outputs' and token flooding, leaving most parameter meaning to inference from names.

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

Purpose5/5

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

The description uses a specific verb ('Sanitize') and resource ('build, test, or terminal command outputs'), clearly stating the tool's function. It also distinguishes itself from the sibling tools, which are about project/decision/code graph operations rather than log processing.

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

Usage Guidelines4/5

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

The description gives clear context on when to use the tool: for sanitizing command, build, or test outputs before they enter the context window. It does not explicitly state when not to use it or name alternatives, but the sibling list contains no competing log-handling tools, so the usage context is reasonably clear.

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

plan_contextA

Read one Plan as a compact hierarchical development document: overview, ordered ChainScopes, inline Block/Link/Chain changes, checkpoint gates, and exact source refs. This is the primary read before implementing a Plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
localeNo
maxCharsNo
projectRootNo
includeStructuredNo

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description itself carries the behavioral burden and does so via the verb 'Read,' which signals non-mutation. It adds concrete behavioral context by describing the output shape (ChainScopes, inline changes, checkpoint gates, source refs) and compactness, though it does not discuss permissions or truncation behavior.

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

Conciseness5/5

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

Two sentences, with the first enumerating the document contents in a dense list and the second giving the operational context. There is no filler.

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

Completeness3/5

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

The output composition is well described and the primary use case is stated, which covers much of what an agent needs for a read tool. However, without an output schema or parameter explanations, the agent must infer how maxChars, locale, projectRoot, and includeStructured alter the result.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description does not explain locale, maxChars, projectRoot, or includeStructured effects. It only implies the plan id through 'Read one Plan'; the remaining four parameters are left to inference.

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

Purpose4/5

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

The description names a specific action ('Read one Plan') and a concrete deliverable ('compact hierarchical development document') with its contents enumerated. It stops short of naming a sibling read tool, so it doesn't fully differentiate from tools like context_for_task, but the 'primary read before implementing' phrasing anchors its role.

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?

'This is the primary read before implementing a Plan' is an explicit when-to-use instruction. It does not list exclusions or alternatives, so it misses the top anchor, but the timing/context is clear.

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

project_mapA

Read a compact project map with architecture coverage, ordered Plans, Chain paths, unplanned Blocks, checkpoint-free Blocks, and missing required checkpoints without loading entity bodies.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNo
projectRootNo
includeStructuredNo

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It signals a read-side operation ('Read'), states output is 'compact,' and discloses the key performance trait 'without loading entity bodies'; it does not detail errors or permissions, but for a read-only mapping tool these are not major gaps.

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

Conciseness5/5

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

A single sentence front-loads the action and resource, then packs every listed content category and the no-body-loading constraint without filler. Each clause earns its place.

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

Completeness3/5

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

For a three-parameter tool with no output schema, the description does not cover parameter semantics or usage context. It does list the returned project-map sections and a key behavioral constraint, so it is minimally viable but leaves the agent to infer how to set arguments and what the response structure will be.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain locale, projectRoot, or includeStructured. Only the property names and types provide any semantics, so an agent cannot learn default behaviors or acceptable values beyond the bare 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?

Opens with the verb 'Read' and a specific resource, 'compact project map,' and enumerates the distinct content sections (architecture coverage, ordered Plans, Chain paths, unplanned Blocks, checkpoint-free Blocks, missing required checkpoints), separating it from write/registry/graph tools in the sibling list.

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

Usage Guidelines2/5

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

No explicit when-to-use guidance, exclusions, or alternative tools are given. The only contextual hint, 'without loading entity bodies,' implies lightweight inspection but does not tell an agent when to prefer project_map over siblings like graph_search or plan_context.

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

project_registerA

Register an existing directory as an mdflow project. This creates only .mdflow/project.json and is idempotent when the descriptor already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
nameNo
projectRootYes
includeStructuredNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries full burden and explicitly states the side effect scope ('creates only .mdflow/project.json') and idempotency. It does not mention failure modes, but the disclosed behavior is precise and helps an agent anticipate the tool's mutation footprint.

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

Conciseness5/5

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

Two short sentences front-load the core operation, then add one precise behavioral detail; no filler.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is insufficient to determine how to populate the non-required fields or what includeStructured controls. It covers the basic projectRoot use case but not the full call surface.

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

Parameters2/5

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

The input schema has no property descriptions and the description adds no meaning for id, name, or includeStructured; only 'existing directory' hints at projectRoot. This leaves the optional parameters semantically opaque.

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

Purpose5/5

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

The description uses a concrete verb ('Register') plus a specific resource ('an existing directory as an mdflow project') and names the exact output artifact, .mdflow/project.json. This clearly differentiates it from sibling tools by scope and outcome.

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 conveys when to use it: for an existing directory that should become an mdflow project, and the idempotence note tells the agent it can be re-run when the descriptor already exists. It does not name alternatives or explicit when-not-to-use conditions, so not a 5.

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. 19 tool updatesv0.1.0
    • First observedblock_code_mutate
    • First observedchain_code_stream
    • First observedchange_set_revert
    • First observedchanges_since
    • First observedcheckpoint_list
    • First observedcheckpoint_record
    • First observedcontext_for_task
    • First observeddecision_list
    • First observeddecision_open
    • First observedentity_open
    • First observedfoundation_plan_create
    • First observedgraph_mutate
    • First observedgraph_patch
    • First observedgraph_search
    • First observedgraph_validate
    • First observedlog_sanitize
    • First observedplan_context
    • First observedproject_map
    • First observedproject_register

TDQS

B3.2/5.0
Disambiguation3/5

Most tools target distinct resources or actions, but decision_open and entity_open both serve decision opening, and graph_mutate and graph_patch both submit the same atomic ChangeSet through different input formats. The descriptions help clarify intent, so overlap is manageable rather than severe.

Naming Consistency4/5

The dominant pattern is snake_case object_verb naming such as checkpoint_record, graph_mutate, decision_open, and change_set_revert, which gives a predictable rhythm. A few exceptions like context_for_task, plan_context, and changes_since break the pattern but remain readable and understandable.

Tool Count3/5

19 tools sits in the heavy range for an MCP server and is somewhat inflated by multiple specialized readers such as entity_open, decision_open, plan_context, and context_for_task. The broad domain makes the count defensible, but consolidation would improve focus.

Completeness4/5

The server covers project registration, graph/plan/decision reading and mutation, checkpoints, validation, code streaming, code mutation, and rollback, so core workflows do not dead-end. The main gap is the lack of explicit delete/unregister operations, though graph_mutate, graph_patch, and change_set_revert provide partial workarounds.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides durable project context for coding agents, including project maps, session history, and explicit memories, all stored locally.
    32
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Gives AI assistants persistent, queryable project memory for decisions, patterns, and rules, reducing the need to re-explain context in every prompt.
    11
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Gives AI agents durable project memory via the Model Context Protocol, allowing them to read tasks, record decisions, search context, and sync snapshots to the cloud.
    10
    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/yubinbin32-ops/Mdflow-Canvas'

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