DiagramZu
DiagramZu's MCP server lets AI clients read, create, update, and analyze Mermaid diagrams — plus comments, version history, and presentation decks — inside your DiagramZu workspaces.
Workspaces:
list_spacesshows every workspace the token can act in, your role, and the default; other tools take an optionalspace(id, slug, or exact name).Browse:
list_diagrams(search withq, sort by created/updated/title/relevance, filter by folder or owner) andlist_folders(nested paths, up to two levels).Read/write diagrams:
get_diagramby id;create_diagramandupdate_diagramfor title, description, Mermaid code (≤50 KB), folder, and visual style presets (midnight,paper,forest,ocean,mono).Layout control:
styleOptionsfor line, arrow, curve, spacing, and layout engines (dagre,elk.*, orauto).Structure analysis:
analyze_diagramreports orphan nodes, hubs, cycles, and clusters for flowcharts, and can post findings as node-pinned comments.Version history:
list_versionsandget_version(read-only; restoring is human-only);update_diagramcan snapshot a pre-edit version with a label.Comments:
list_comments(filter by node, include/exclude resolved) andadd_comment(pin to a node or reply one level deep) for human-visible review feedback.Decks:
list_decks,get_deck,create_deck, andupdate_deckassemble existing diagrams into an ordered slideshow (declarative slide lists).Link behavior: tools return members-only
/app/...URLs; public share links are deliberately never minted by the server and must be created by a person via the Share button.
Connect over hosted HTTP (https://mcp.diagramzu.ai/mcp with a dz_live_… Bearer token) or local stdio via npx -y @diagramzu/mcp.
Provides tools to create, update, and analyze Mermaid diagrams stored on diagramzu.ai.
@diagramzu/mcp
MCP server for diagramzu.ai. Lets Claude Code, Claude Desktop, Cursor, Windsurf, ChatGPT custom GPTs, and any MCP client read and write Mermaid diagrams in your Space.
You author diagrams by talking to your AI — it stores them in your Space at diagramzu.ai/app/d/<id>, where your team can read them and publish a public link.
Available in the official MCP Registry as
ai.diagramzu/mcp.
1. Get a token
Sign up at diagramzu.ai, then create an API token at diagramzu.ai/app/settings/connections. Tokens look like dz_live_… and are scoped to one Space — no separate space-id needed.
Related MCP server: AI Diagram Maker MCP Server
2. Connect your client
The hosted server is the easy path: no install, no build. Just paste a config.
Claude Code
claude mcp add --scope user --transport http diagramzu https://mcp.diagramzu.ai/mcp \
--header "Authorization: Bearer dz_live_xxx"Claude Desktop, Cursor, Windsurf, Cline
Add to your client's MCP config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS for Claude Desktop, ~/.cursor/mcp.json for Cursor, etc.):
{
"mcpServers": {
"diagramzu": {
"type": "http",
"url": "https://mcp.diagramzu.ai/mcp",
"headers": { "Authorization": "Bearer dz_live_xxx" }
}
}
}ChatGPT custom GPT (Actions)
In the GPT builder, add an MCP server action pointing to https://mcp.diagramzu.ai/mcp with a Bearer-token authentication header set to your dz_live_… token.
Local stdio (for clients that don't speak remote MCP)
npx -y @diagramzu/mcpwith environment:
DIAGRAMZU_BASE_URL=https://diagramzu.ai
DIAGRAMZU_API_TOKEN=dz_live_xxx
DIAGRAMZU_SPACE_ID=<your space id> # optionalDIAGRAMZU_SPACE_ID is optional. Left unset, the server uses the token's own default workspace — the one chosen when the token was minted. Set it to pin a different workspace as the default for this process.
Most users should prefer the remote HTTP transport above — the stdio path exists for clients without HTTP MCP support.
Workspaces
A token is scoped either to one workspace or to all the workspaces its owner belongs to, chosen when the token is authorized (the consent page's Access radio, or Settings → API tokens). An account-scoped token follows its owner's live memberships: joining a workspace adds it, being removed from one closes it on the next call.
list_spacesshows every workspace this connection can act in, which one is the default, and your role in each.Every other tool takes an optional
space— a workspace id, slug, or exact name (case-insensitive). Omit it to act in the default workspace. A name matching more than one workspace is refused rather than guessed; pass the id or slug.Every tool result ends with the workspace it acted in.
Returned
/app/...links carry?space=, so opening one switches the browser to that workspace when you are a member.
Tools
Tool | Description |
| List every workspace this connection can act in, with ids, slugs, roles, and which is the default |
| List diagrams in the Space (filter with |
| List folders in the Space |
| Fetch one diagram by id (title, description, Mermaid source) |
| Create a new diagram (returns its id and its |
| Update title, Mermaid source, description, or style of an existing diagram |
| Get a structural summary of a diagram (nodes, edges, density) |
| List version history for a diagram |
| Fetch a specific historical version of a diagram |
| List a diagram's comments, oldest first (optionally only one node's thread) |
| Post a comment, optionally pinned to a node or replying to a thread |
| List presentation decks in the Space, newest-edited first |
| Fetch one deck by id, with its ordered slides |
| Assemble existing diagrams into an ordered presentation deck |
| Change a deck's title, description, or slide order ( |
Which URLs are public
Two different things get called "a link" here, and only one of them works for someone outside your Space:
URL | Who can open it |
| Space members only — the diagram in the app. |
| Space members only — the deck's presentation view. |
| Anyone with the link — the public, read-only diagram page. |
| Anyone with the link — the public, read-only deck. |
The tools hand back the /app/… URLs, so a link pasted straight out of a chat is
a members-only one: send it to someone outside the Space and they land on
sign-in. To publish, open the diagram or deck in DiagramZu and use its Share
button. This MCP server deliberately ships no tool that mints a public link —
not because a token cannot (a dz_live_… token can mint one over the REST API),
but because publishing a Space's content should be a deliberate human action
rather than a side effect of a conversation. Once a diagram has a public link,
get_diagram and update_diagram report it on a Share (public, read-only):
line of their own.
Show off your setup
If you publish your MCP / Claude Code config in a dotfiles or example repo, drop this in the README so the next person knows where the diagrams come from:
[](https://diagramzu.ai)Renders as a small shields-style badge — gray MCP + indigo diagramzu.
Local development (this repo)
For hacking on diagramzu itself, build from source:
cd packages/mcp-diagramzu
pnpm install
pnpm run build
# point your client at: node dist/index.js
# with DIAGRAMZU_BASE_URL / DIAGRAMZU_API_TOKEN (DIAGRAMZU_SPACE_ID optional)License
MIT
Available Tools
15 toolsadd_commentAInspect
Post a comment on a diagram. Pass nodeId to pin it to a specific node, or parentId to reply to an existing top-level comment (threads are one level deep). The author is the API token's owner. Use this to leave structured review findings a human will see on the diagram.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Comment text (1–5000 chars) | |
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. | |
| nodeId | No | Pin to this node id (top-level comments only) | |
| parentId | No | Reply to this top-level comment id | |
| diagramId | Yes | Diagram UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries full burden. It discloses that the author is the API token's owner, that threads are strictly one level deep, and that nodeId is only for top-level comments – key behavioral facts. It stops short of describing permissions needed, editability, or notification behavior, which keeps it from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, all front-loaded and zero waste. Every clause conveys necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a comment-creation tool with no output schema and no annotations, the description covers author attribution, threading depth, and node pinning rules. It omits return value details (expected, as no output schema), and doesn't mention rate limits or whether comments are editable, but those are minor against the core operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema. The description reinforces nodeId/parentId semantics and the threading constraint but adds no syntax, format, or validation details beyond what the schema says. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Post a comment on a diagram') and distinguishes itself from siblings by naming the pinning and threading capabilities. An agent can pick this apart from list_comments without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use each parameter combination ('Pass nodeId to pin...', 'parentId to reply...') and states the intended context ('structured review findings a human will see'). It doesn't mention alternatives like list_comments or when not to comment, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_diagramAInspect
Analyze a stored flowchart diagram's structure (nodes, edges, subgraphs) and return actionable findings — orphan nodes, over-connected hubs, cycles, disconnected clusters, and grouping suggestions. Flowchart diagrams only. Set postAsComments: true to also persist each finding as a comment on the diagram (node-pinned where the finding names a single node) so a human reviewer sees them on the diagram surface.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Diagram UUID | |
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. | |
| postAsComments | No | If true, persist each finding as a comment on the diagram instead of only returning ephemeral prose. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the mutation side effect: default behavior is ephemeral prose, while postAsComments:true persists comments on the diagram surface (node-pinned when a finding names a single node). It omits permissions/auth requirements and any rate or cost considerations, keeping it 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the list of findings, then the flowchart-only restriction, then the optional flag. Every sentence earns its place, though the final sentence is long and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema, the description names the return contents (orphan nodes, over-connected hubs, cycles, disconnected clusters, grouping suggestions) and covers the optional write path. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the effect of postAsComments (persisting findings as comments) and the node-pinning behavior, which the schema does not mention.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (analyze) and resource (stored flowchart diagram's structure: nodes, edges, subgraphs) and enumerates the concrete findings returned. The 'Flowchart diagrams only' restriction further distinguishes its scope from sibling tools like get_diagram or update_diagram.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for the optional behavior ('Set postAsComments: true to also persist...'), but does not name an alternative tool or state when analysis should be preferred over, e.g., get_diagram. No sibling tool offers structural analysis, so the absence of explicit alternatives is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_deckAInspect
Create a presentation deck from existing diagrams. Pass slides as the complete ordered list of diagram ids — the deck plays them as a slideshow in that order. Typical flow: create_diagram for each slide, collect the returned ids, then create_deck with those ids in presentation order. Returns the deck id and the present URL, which only members of this Space can open — it is NOT a shareable link. To share the deck outside the Space, someone in the Space opens it in DiagramZu and uses its Share button, which mints a public read-only presentation link. Diagram ids must already exist in this Space (use list_diagrams to find them).
| Name | Required | Description | Default |
|---|---|---|---|
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. | |
| title | No | Deck title shown in the deck list and above the presentation (≤200 chars). | |
| slides | No | Ordered list of existing diagram UUIDs. The deck plays them in this exact order. A diagram may appear at most once. Omit or pass [] to create an empty deck. | |
| description | No | Optional one-line summary of what the deck covers (≤1000 chars). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: it discloses the return values (deck id and present URL), a critical access constraint (only Space members can open the URL, it is NOT shareable), and the out-of-band sharing path via DiagramZu's Share button. This is exactly the non-obvious behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and the slides contract, then the flow, then the return/sharing caveat. Dense and mostly waste-free, though the sharing explanation runs slightly long for a single tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by explaining what is returned (deck id, present URL) and its access limitation. Combined with the prerequisite chain, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents space, title, slides, and description including the ≤200/≤1000 char limits and the 'at most once' rule. The description reinforces the ordered-list semantics but adds little beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a presentation deck from existing diagrams') and immediately names the source objects, distinguishing it from siblings like create_diagram and update_deck. An agent can tell exactly what this produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit typical flow (create_diagram per slide → collect ids → create_deck in presentation order), names the prerequisite (ids must already exist in this Space, use list_diagrams), and routes the sharing use case to a separate mechanism. When-to-use and alternatives are fully covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_diagramAInspect
Create a new diagram in the Space. Returns its id and its URL in the app, which only members of this Space can open — it is NOT a shareable link. To show the diagram to anyone outside the Space, someone in the Space opens it in DiagramZu and uses its Share button, which mints a public read-only link. See this server's instructions for diagram-type selection and class role names (edge/core/data/accent/muted) for color-grouping.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Mermaid source (≤50,000 bytes). Defaults to a tiny flowchart. | |
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. | |
| style | No | Visual preset: midnight (default dark), paper, forest, ocean, mono. Omit to use the default. | |
| title | No | Display name (≤200 chars) | |
| folderId | No | Optional UUID of an existing folder to place the diagram in. Use list_folders first to find the right folder by name (e.g. 'Infra', 'Schemas'). Omit to place at the space root. | |
| description | No | Overall purpose of the diagram (≤1000 chars). Shown to share-link viewers and surfaced back to the agent as the diagram's brief — write this before generating the code. | |
| styleOptions | No | Optional layout knobs, independent of the color preset. Each key is optional; omit any to keep its default. Pass layout: 'auto' to let the server pick a concrete layout based on the diagram's shape. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does real work: it discloses that the returned URL is Space-member-only, is NOT shareable, and that a public link requires an in-app Share action. It does not cover creation-time permissions, failure modes, or rate limits, but the visibility semantics are unusually well documented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and return value, and the sharing caveat is worth its length because misuse produces a link that silently fails for outsiders. The Share-button walkthrough is somewhat verbose, but every sentence conveys a distinct constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, annotation-free tool with a nested object and no output schema, the description fills the two biggest gaps itself: return shape and link visibility. Remaining omissions are error behavior and creation permissions, which are secondary for a first-call tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema by pointing at the class role names (edge/core/data/accent/muted) for color-grouping in the Mermaid code and by explaining what the description field is for. The nested styleOptions object is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource scoped to a Space ('Create a new diagram in the Space'), which is clearly distinguishable from siblings like create_deck or update_diagram. It also states what is returned (id and URL), so an agent knows the outcome without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent to the server instructions for diagram-type selection and explains the sharing workflow, but never states when to prefer this over alternatives such as update_diagram or when creation would be refused (e.g. duplicate names). Context is clear, but explicit exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deckAInspect
Fetch one deck by id. Returns its title, description, and the ordered list of slides (each slide is a diagram id + title in presentation order).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deck UUID | |
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the return shape (title, description, ordered slides as diagram id + title), but says nothing about permissions, error behavior for an unknown id, or whether the space parameter affects visibility. Some value added, but gaps remain for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the operation front-loaded and no filler. Slightly dense parenthetical about slide structure, but every clause conveys real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with a fully documented schema and no output schema, the description covers purpose and return contents well. The only missing piece is behavioral context around permissions or failure modes, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (id, space) are fully documented in the schema, including the space fallback and ambiguity-refusal rules. The description adds nothing beyond what the schema already states, which is the correct baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (one deck by id), and the second sentence clarifies it retrieves a single deck rather than a collection, distinguishing it from list_decks. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'one deck by id' versus the sibling list_decks, but there is no explicit when-to-use statement, no mention of prerequisites, and no routing guidance to alternatives. Adequate but leaves 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.
get_diagramAInspect
Fetch one diagram by id. Returns its title, description (the agent's brief), mermaid source code, and its URL in the app — which only members of this Space can open. If the diagram already has a public link, that link is reported separately on a Share (public, read-only): line; a public link is minted by a person, from the diagram's Share button. Read the description before editing — it tells you what the diagram is for and when to update it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Diagram UUID | |
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and provides substantial behavioral context: it describes the returned fields, notes that the app URL is restricted to Space members, explains the public link and how it is minted, and advises reading the description before editing. It does not cover error cases or required permissions for the call itself, but it is otherwise rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and return values, and every sentence contributes useful information. It is slightly longer than strictly necessary due to the public-link detail and editing advice, but there is no redundant or wasted language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with no output schema, the description compensates by detailing exactly what is returned, including the public link format, and adds a workflow hint about reading the description before editing. It is complete enough for an agent to call the tool correctly and understand the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents both parameters (id and space). The description adds no additional syntax, format, or constraint details beyond what the schema provides, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch') and resource ('one diagram by id'), and it lists the exact return fields (title, description, mermaid source, URL), clearly distinguishing it from list-oriented siblings like list_diagrams or analyze_diagram.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying 'Read the description before editing — it tells you what the diagram is for and when to update it,' which suggests this tool is for retrieving a diagram prior to an update. However, it does not explicitly state when to use this tool versus alternatives like get_version or analyze_diagram, nor does it provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_versionAInspect
Fetch one snapshot by id. Returns its title, mermaid source code, and metadata. Read-only — restore is human-only in the UI.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. | |
| diagramId | Yes | Diagram UUID | |
| versionId | Yes | Version UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose the safety profile (read-only) plus the fields returned (title, mermaid source, metadata). It omits error behavior for a missing or inaccessible id and any permission requirements, which keeps it from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the identity of the operation front-loaded and the return contents and read-only constraint following. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the return fields, and the read-only constraint covers the safety dimension that annotations would otherwise supply. Error handling and permission requirements remain unstated, a minor gap for a simple single-item read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the space parameter is documented in detail in the schema, including fallback behavior and name-collision handling. The description only says 'by id', adding no syntax or format detail beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch one snapshot by id') and immediately distinguishes itself from list_versions by scoping to a single snapshot. An agent can pick it apart from get_diagram and list_versions without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'restore is human-only in the UI' clause tells the agent what this tool cannot be used for, which is genuinely useful routing guidance. It stops short of explicitly naming list_versions as the alternative for enumeration, so it lands just under the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commentsAInspect
List comments on a diagram, oldest first. Returns id, parentId (null for a top-level comment), nodeId (the pinned node, if any), author, resolved state, and a body snippet. Use nodeId to fetch only the thread pinned to one node.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items (default 500, max 500) | |
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. | |
| nodeId | No | Only comments pinned to this node id | |
| offset | No | Items to skip (default 0) | |
| diagramId | Yes | Diagram UUID | |
| includeResolved | No | Include resolved threads (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure burden. It usefully enumerates return fields (id, parentId, nodeId, author, resolved state, body snippet) and ordering, but omits read-only nature, required permissions, rate limits, and pagination behavior, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler, front-loading purpose, then return shape, then a usage tip. Efficient, though slightly less crisp than the ideal two-sentence structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description's explicit return-field list is valuable. The schema fully covers parameters, and the description adds ordering and nodeId usage. Some behavioral context (e.g., default pagination, space parameter implications) is missing, but the definition is adequate for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters thoroughly. The description adds only a minor rephrasing for nodeId and provides no additional semantic detail for other parameters, matching the baseline for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List comments on a diagram') plus an ordering guarantee ('oldest first'). However, it does not differentiate itself from sibling tools like add_comment or other list_* tools, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a specific usage instruction for the nodeId filter ('Use nodeId to fetch only the thread pinned to one node'), which is helpful. But it offers no guidance on when to use this tool versus alternatives (e.g., add_comment) or when not to use it, leaving usage implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_decksAInspect
List presentation decks in the configured Space, newest-edited first. A deck is an ordered set of existing diagrams shown as a slideshow. Returns each deck's id, title, and slide count.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose ordering (newest-edited first) and the shape of each returned item (id, title, slide count), which is genuinely useful. It omits pagination/result-limit behavior, permission requirements, and whether an empty Space is possible — notable gaps for a list endpoint with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and scope, then the definition, then the return shape. No filler and nothing that could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description supplies the essential missing piece — what each returned item contains — plus scope and ordering. It falls short only on pagination/volume behavior and authorization expectations, which an agent would want before paging through results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'space' parameter has 100% schema description coverage, including slug/name/id forms, the default-workspace behavior, and the ambiguity refusal rule. The description adds nothing beyond the schema here, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List presentation decks'), scopes it ('in the configured Space'), and adds the ordering ('newest-edited first'), which is enough to separate it from get_deck, create_deck, and update_deck. It also defines the domain object ('an ordered set of existing diagrams shown as a slideshow'), so the agent knows what a deck is without external context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'list ... in the configured Space' and by the return of id/title/slide count, which signals a browsing/enumeration purpose. However, it never says when to prefer get_deck over this, nor any exclusion or prerequisite, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_diagramsAInspect
List diagrams in the configured Space (every folder, newest first by default). Use this BEFORE create_diagram to check whether a diagram with the target purpose already exists — if it does, prefer update_diagram over creating a duplicate. Filter with q (case-insensitive substring on title, description, or code) when looking for a named diagram (e.g. q: 'schema' or q: 'infra'). Sort with sort: 'updated' to find the most recently changed diagrams, or sort: 'relevance' when q is set so a title hit ranks above a description or code hit.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Case-insensitive substring search on title, description, or code. Use when looking for a named diagram (e.g. 'schema', 'infra'). | |
| sort | No | Sort order. 'created' (default) = newest-first by creation; 'updated' = newest-first by last edit (use this to find the most recently changed diagram); 'title' = alphabetical; 'relevance' = title hits first, then description, then code (only when `q` is set; otherwise same as 'updated'). | |
| owner | No | Filter to diagrams created by this user (Clerk user id, e.g. 'user_abc'). Rarely needed; omit unless the caller already has the user id. | |
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. | |
| folderId | No | Optional UUID — narrow to diagrams in this folder. Use list_folders to look up folder ids. Omit to see every folder (the default). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose defaults: scope is the whole Space across every folder, and ordering is newest-first by default. It omits result limits, pagination, and any auth/scope caveats, which are meaningful for a list endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and default behavior, then layers the pre-create check and filter/sort guidance. It is somewhat long, but each sentence carries actionable routing or parameter guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers scope, ordering defaults, and the pre-flight duplicate check for a 5-parameter, all-optional list tool. Given no output schema and no annotations, the omission of pagination/result-size behavior is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both `q` and `sort` are already fully documented in the schema; the description largely restates that (substring match, relevance ranking). It adds only light usage framing rather than new semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list diagrams) plus scope (configured Space, every folder) and the default ordering. It also distinguishes itself from siblings create_diagram and update_diagram by naming them, so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to run this BEFORE create_diagram to avoid duplicates and to prefer update_diagram when a match exists. It also names the conditions for using `q` and each `sort` value, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersAInspect
List every folder in the configured Space, ordered by name. Returns id and full path (e.g. 'Infra/AWS' for a nested folder). Use this BEFORE create_diagram or update_diagram when you want to place a diagram in a meaningful folder — agents should match by name (e.g. find a folder named 'Schemas' and pass its id as folderId). Folders are at most two levels deep. Creating folders is currently human-only.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose two real constraints: folders are at most two levels deep, and folder creation is human-only. It does not cover permission/auth requirements or behavior for spaces with zero folders, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all load-bearing: scope/return shape, then the workflow instruction, then the two structural limits. The most actionable content (use before create/update) is front-loaded after the scope statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-param read tool with no output schema and no annotations, the description covers scope, return fields, nesting depth, downstream usage, and the human-only limitation on creation. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'space' parameter, and the schema description already explains id/slug/name resolution and the ambiguity refusal. The description adds no parameter-level detail beyond the phrase 'configured Space', so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List every folder in the configured Space') plus the ordering and the returned fields (id and full path with a concrete example). It is clearly distinguishable from siblings like list_spaces and list_diagrams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the downstream tools (create_diagram, update_diagram), the precondition ('use this BEFORE'), and the intended workflow (match a folder by name and pass its id as folderId). This is a model example of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spacesAInspect
List every workspace this connection can act in. Returns each workspace's id, slug, name, your role, and which one is the default (the workspace used when a tool is called without space). Call this FIRST when the user mentions a workspace by name, or when you are not sure which workspace the work belongs in — then pass the id as space on the tool you actually want. A connection scoped to a single workspace returns just that one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does useful work: it defines the semantics of the default workspace and explains that a single-scoped connection returns only one entry. It does not address pagination or rate limits, but for a zero-parameter read-only listing the disclosure is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with purpose, then return shape, then the routing instruction, then the edge case. No sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming the returned fields; no annotations exist, and it still conveys safety implicitly via 'list' plus the scoping behavior. An agent has everything needed to call it and use the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description does add cross-tool semantics by explaining that the returned id is passed as `space` on other tools, which is context the empty schema cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List every workspace this connection can act in') and enumerates exactly what comes back (id, slug, name, role, default flag). This is clearly distinguishable from the diagram/deck siblings in the tool set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use triggers ('Call this FIRST when the user mentions a workspace by name, or when you are not sure which workspace the work belongs in') and names the follow-up action (pass the id as `space`). It also pre-empts the trivial case of a single-workspace connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_versionsAInspect
List manual snapshots of a diagram, newest first. Returns id, label, title, createdAt, and createdBy for each.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (default 100, max 200) | |
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. | |
| offset | No | Items to skip (default 0) | |
| diagramId | Yes | Diagram UUID |
TDQS
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 reasonably well: it discloses sort order, enumerates the returned fields (id, label, title, createdAt, createdBy), and the word "manual" signals that autosaved versions are excluded. It stops short of stating pagination behavior or any authorization requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the scope and ordering front-loaded before the return-shape sentence. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating the fields returned per snapshot, which is exactly the right disclosure. Remaining gaps are minor: it does not describe what "manual" excludes or how pagination interacts with limit/offset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, offset, space, and diagramId are already fully documented in the schema. The description adds nothing about parameter behavior, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and a precise resource (manual snapshots of a diagram), plus the sort order (newest first). The word "manual" usefully narrows scope, implicitly distinguishing these snapshots from autosaves, though it never names the sibling get_version as the single-item alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb and the required diagramId, but there is no explicit when-to-use guidance, no mention of when to prefer get_version, and no stated prerequisites (e.g., permission to read the diagram).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_deckAInspect
Update a deck's title, description, and/or slide order. slides is DECLARATIVE: pass the complete desired ordered list of diagram ids — reorder, add, and remove are all expressed by sending the new full list (any id omitted is removed from the deck; new ids are appended in the order given). Returns the deck id and the present URL, which only members of this Space can open — it is NOT a shareable link. To share the deck outside the Space, someone in the Space opens it in DiagramZu and uses its Share button, which mints a public read-only link.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deck UUID | |
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. | |
| title | No | Deck title shown in the deck list and above the presentation (≤200 chars). | |
| slides | No | Complete ordered list of diagram UUIDs that should be in the deck after this update. Omit to leave the slides unchanged; pass [] to clear all slides. | |
| description | No | One-line summary of what the deck covers (≤1000 chars). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the destructive/additive semantics of `slides` (omitted ids are removed, new ids appended) and clarifies that the returned present URL is members-only, not a shareable link, plus how to actually share. It does not state the permissions/auth required to perform the update, leaving a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by the non-obvious `slides` contract and the return/share caveat. It is somewhat long and the sharing explanation could be trimmed, but every sentence carries information relevant to correct invocation or interpretation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must cover behavior and return values, and it does explain the return payload (deck id + present URL) and its sharing limitation. The main residual gap is the absence of permission/prerequisite information for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds genuine meaning beyond the schema for `slides` by spelling out the declarative contract (full-list replacement, reorder/add/remove, append order) and reiterating omit/[] behavior, which goes past the schema's own wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (deck) and enumerates the updatable fields (title, description, slide order). An agent can immediately distinguish this mutation tool from get_deck, create_deck, and list_decks without consulting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to express reorder/add/remove via the declarative slides list, which is strong implied usage guidance for that parameter. However, it never states when to choose this tool over siblings (e.g., create_deck vs update_deck) or any prerequisites for invoking it, so usage guidance is present but partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_diagramAInspect
Update an existing diagram's title, description, mermaid source, visual style preset, and/or layout style options. When rewriting the source, keep or restore class assignments using the role names from this server's instructions so the diagram stays color-grouped. In a workspace with proposal review enabled, your change is recorded as a proposal pending human approval rather than applied to the live diagram — in that case tell the user you've proposed the change and share the review URL.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Diagram UUID | |
| code | No | Mermaid source (≤50,000 bytes). Replaces the diagram's current code. | |
| space | No | Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead. | |
| style | No | Visual preset: midnight (default dark), paper, forest, ocean, mono. | |
| title | No | Display name (≤200 chars) | |
| folderId | No | Optional UUID of an existing folder to move this diagram into. Use list_folders to look up folder ids. (Moving back to root is currently human-only.) | |
| description | No | Overall purpose of the diagram (≤1000 chars). Shown to share-link viewers and surfaced back to the agent as the diagram's brief — write this before generating the code. | |
| styleOptions | No | Optional layout knobs, independent of the color preset. Each key is optional; omit any to keep its default. Pass layout: 'auto' to let the server pick a concrete layout based on the diagram's shape. | |
| versionLabel | No | Optional short label for the snapshot taken when createVersion is true (max 80 chars). | |
| createVersion | No | If true, snapshot the pre-update diagram state as a version row before applying the update. Use this to create a checkpoint right before an agent overwrites the diagram. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely succeeds: it discloses the proposal-review approval flow (a non-obvious side effect that changes whether the edit is live), the color-grouping requirement for source rewrites, and the 'and/or' semantics implying partial updates. It does not cover permission/workspace requirements or failure modes, which keeps it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose, then the two most consequential behavioral caveats. Nothing is filler, though the sentences are dense and could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with a nested styleOptions object, no output schema and no annotations, the description covers the critical unknowns: that fields are optional/partial, that a proposal may be created instead of an immediate write, and the source-rewrite constraint. Missing only auth/workspace prerequisites, which the schema's `space` description partially handles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 10 parameters in depth (code byte limit, space resolution rules, enum meanings, versionLabel/createVersion interactions). The description mostly restates the field list and adds only the cross-reference to role names for `class` assignments; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource ('Update an existing diagram') and enumerates the mutable surface (title, description, mermaid source, style preset, layout options). The resource is unambiguous against the sibling update_deck, and an agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real conditional guidance: keep/restore `class` assignments from the server instructions when rewriting source, and in proposal-review workspaces the change becomes a pending proposal — with an instruction to inform the user and share the review URL. It stops short of naming explicit alternatives (e.g. create_diagram vs update, or reading with get_diagram first).
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.
15 tool updates
v0.0.7- Changed
add_comment1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
analyze_diagram1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
create_deck1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
create_diagram1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
get_deck1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
get_diagram1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
get_version1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
list_comments1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
list_decks1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
list_diagrams1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
list_folders1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Added
list_spaces - Changed
list_versions1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
update_deck1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
- Changed
update_diagram1 field changed- added
Input schema / properties / spaceAdded value: +{ + "description": "Which workspace to act in: its id, its slug, or its exact name (case-insensitive). Omit to use this token's default workspace. Call list_spaces to see what this token can reach. A name that matches more than one workspace is refused — pass the id or slug instead.", + "type": "string" +}
4 tool updates
v0.0.6- Changed
create_deck1 field changed- changed
Input schema / properties / title / descriptionPrevious value: -"Deck title shown in the deck list and above the presentation."New value: +"Deck title shown in the deck list and above the presentation (≤200 chars)."
- Changed
create_diagram2 fields changed- changed
Input schema / properties / code / descriptionPrevious value: -"Mermaid source. Defaults to a tiny flowchart."New value: +"Mermaid source (≤50,000 bytes). Defaults to a tiny flowchart." - changed
Input schema / properties / title / descriptionPrevious value: -"Display name"New value: +"Display name (≤200 chars)"
- Changed
update_deck1 field changed- changed
Input schema / properties / title / descriptionPrevious value: -"Deck title shown in the deck list and above the presentation."New value: +"Deck title shown in the deck list and above the presentation (≤200 chars)."
- Changed
update_diagram2 fields changed- changed
Input schema / properties / code / descriptionPrevious value: -"Mermaid source. Replaces the diagram's current code."New value: +"Mermaid source (≤50,000 bytes). Replaces the diagram's current code." - changed
Input schema / properties / title / descriptionPrevious value: -"Display name"New value: +"Display name (≤200 chars)"
1 tool update
v0.0.5- Changed
list_diagrams3 fields changed- changed
Input schema / properties / q / descriptionPrevious value: -"Case-insensitive substring search on title and code. Use when looking for a named diagram (e.g. 'schema', 'infra')."New value: +"Case-insensitive substring search on title, description, or code. Use when looking for a named diagram (e.g. 'schema', 'infra')." - changed
Input schema / properties / sort / descriptionPrevious value: -"Sort order. 'created' (default) = newest-first by creation; 'updated' = newest-first by last edit (use this to find the most recently changed diagram); 'title' = alphabetical."New value: +"Sort order. 'created' (default) = newest-first by creation; 'updated' = newest-first by last edit (use this to find the most recently changed diagram); 'title' = alphabetical; 'relevance' = title hits first, then description, then code (only when `q` is set; otherwise same as 'updated')." - changed
Input schema / properties / sort / enumPrevious value: -[ - "created", - "updated", - "title" -]New value: +[ + "created", + "updated", + "title", + "relevance" +]
8 tool updates
v0.0.4- Added
add_comment - Changed
analyze_diagram1 field changed- added
Input schema / properties / postAsCommentsAdded value: +{ + "description": "If true, persist each finding as a comment on the diagram instead of only returning ephemeral prose.", + "type": "boolean" +}
- Added
create_deck - Added
get_deck - Added
list_comments - Added
list_decks - Added
update_deck - Changed
update_diagram3 fields changed- added
Input schema / properties / code / descriptionAdded value: +"Mermaid source. Replaces the diagram's current code." - added
Input schema / properties / id / descriptionAdded value: +"Diagram UUID" - added
Input schema / properties / title / descriptionAdded value: +"Display name"
8 tool updates
v0.0.3- First observed
analyze_diagram - First observed
create_diagram - First observed
get_diagram - First observed
get_version - First observed
list_diagrams - First observed
list_folders - First observed
list_versions - First observed
update_diagram
TDQS
Scored across 15 tools
Each tool has a distinct resource and action: diagram CRUD, diagram analysis, version reading, comment listing/posting, deck CRUD, space listing, and folder listing. There is no overlap in purpose; an agent can easily select the right tool based on the target entity and operation. Descriptions further reinforce boundaries with explicit read-only or write-only notes.
All 15 tools follow a consistent snake_case verb_noun pattern: list_*, get_*, create_*, update_*, add_*, and analyze_*. The naming is predictable and readable, with no mixing of conventions or vague verbs. This consistency makes the toolset easy to scan and understand.
With 15 tools, the server covers the core domain (diagrams, decks, comments, versions, spaces, folders) without bloat or redundancy. Each tool earns its place, and the count is well within the typical 3–15 range for a coherent MCP server. There is no sense of missing or excessive tooling.
Core workflows are covered: create/read/update diagrams, create/read/update decks, add/list comments, list/get versions, and analyze diagrams. However, destructive operations (delete_diagram, delete_deck) and comment resolution/modification are absent, which may force agents to rely on human intervention for cleanup or thread management. These are minor gaps for typical agent tasks, but they prevent a perfect score.
Maintenance
Related MCP Connectors
Render, verify, describe, and safely edit Mermaid diagrams through MCP.
Create and manage Mermaid.js flowcharts and diagrams with AI agents via MCP.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Real-time collaborative whiteboard — AI agents and humans edit the same board live over MCP.
Related MCP Servers
- AlicenseBqualityDmaintenance❤️ Generate mermaid diagram and chart with AI MCP dynamically.14,421 npm642TypeScriptMIT
- AlicenseAqualityFmaintenanceMCP server for AI Diagram Maker — generate software engineering diagrams from natural language, code, ASCII diagram, images, or Mermaid. Inline diagram rendering using MCP apps UI and diagram URL in responses. Works with Cursor, Claude Desktop, Claude Code, and any MCP-compatible AI.582 npm9MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI to create, edit, and manage Mermaid diagrams via MCP, with real-time preview in a browser-based editor.3-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with a local Mermaid diagram editor via MCP, allowing them to get and set diagrams programmatically.19,454,436 npm13Apache 2.0