Card snapshot
agentic-mermaid.dev
·
2026-07-10 17:25:16 UTC
·
e82b2e91439d3e05625e3fd311b8739b9d6c8cac4a63be035ad64e71b1f7b8e9
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"name": "agentic-mermaid-mcp",
"version": "0.1.0",
"kind": "product",
"description": "Render, verify, describe, mutate, and build Mermaid diagrams through a stateless Streamable HTTP MCP server.",
"icon": "https://agentic-mermaid.dev/favicon.svg",
"url": "https://agentic-mermaid.dev/mcp",
"serverUrl": "https://agentic-mermaid.dev/mcp",
"transport": "streamable-http",
"capabilities": {
"tools": true,
"resources": false
},
"tools": [
{
"name": "execute",
"description": "Run synchronous JavaScript against the mermaid SDK in an isolated sandbox. Code runs as an expression or statement body \u2014 return the final value. Promise jobs, async/await, and dynamic import are not supported. Multi-step diagram edits should be one execute() call. The SDK declaration is TypeScript-shaped for guidance; the sandbox does not transpile type annotations. Hosted note: execute runs in an on-demand isolate and costs more than the direct render_svg/render_ascii/render_png/verify/describe tools \u2014 prefer those for plain render/verify calls. For straightforward structured edits, prefer the declarative mutate/build tools; reserve execute for logic the ops don't express.",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"parameters": {
"code": {
"type": "string",
"description": "JavaScript to execute; mermaid.* SDK is global.",
"required": true
},
"timeoutMs": {
"type": "number",
"description": "Optional CPU-time budget (default 5000ms, max 30000ms).",
"required": false
}
}
},
{
"name": "render_svg",
"description": "Render a Mermaid source string to themeable SVG. Returns { ok, svg }. Layout is deterministic: identical input produces identical geometry.",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"parameters": {
"source": {
"type": "string",
"description": "Mermaid source.",
"required": true
},
"theme": {
"type": "string",
"description": "Named theme (one of: paper, dusk, zinc-light, zinc-dark, tokyo-night, tokyo-night-storm, tokyo-night-light, catppuccin-mocha, catppuccin-latte, nord, nord-light, dracula, github-light, github-dark, solarized-light, solarized-dark, one-dark, salmon, salmon-dark, tufte, tufte-dark).",
"required": false
},
"bg": {
"type": "string",
"description": "Background CSS color (overrides theme).",
"required": false
},
"fg": {
"type": "string",
"description": "Foreground CSS color (overrides theme).",
"required": false
},
"style": {
"description": "Style: a name (hand-drawn, excalidraw, pen-and-ink, freehand, watercolor, blueprint, tufte, accessible-high-contrast, patent-drawing, status-dashboard, ops-schematic, chalkboard, risograph, architectural-plan, publication-figure, or any theme name), an inline style record, or an array stack merged left \u2192 right. A colors-only style is a theme.",
"required": false
},
"seed": {
"type": "number",
"description": "Re-rolls ink wobble of styled looks; never moves layout.",
"required": false
}
}
},
{
"name": "render_ascii",
"description": "Render a Mermaid source string to text. Returns { ok, text }. useAscii true \u2192 plain ASCII (+,-,|); false/absent \u2192 Unicode box drawing (\u250c,\u2500,\u2502).",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"parameters": {
"source": {
"type": "string",
"description": "Mermaid source.",
"required": true
},
"useAscii": {
"type": "boolean",
"description": "true = ASCII characters, false = Unicode (default).",
"required": false
}
}
},
{
"name": "render_png",
"description": "Rasterize a Mermaid source string to PNG. Returns { ok, png_base64 }. Hosted rendering uses resvg-wasm with bundled fonts; bytes may differ from the local napi renderer, so hosted PNG is a convenience surface, not part of the byte-determinism contract. For file/URL artifacts use the local stdio server.",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"parameters": {
"source": {
"type": "string",
"description": "Mermaid source.",
"required": true
},
"scale": {
"type": "number",
"description": "Output scale multiplier (default 2 \u2014 retina; clamped to 0.1\u20138).",
"required": false
},
"background": {
"type": "string",
"description": "CSS color string (default 'white').",
"required": false
},
"style": {
"description": "Style name | record | stack (same as render_svg). Hosted rasterization bundles the built-in style faces; custom unbundled fonts fall back to DejaVu.",
"required": false
},
"seed": {
"type": "number",
"description": "Ink seed for styled looks.",
"required": false
}
}
},
{
"name": "verify",
"description": "Parse and verify a Mermaid diagram without rendering it. Returns { ok, family, summary, warnings, layout: { bounds, nodes, edges } } for valid diagrams and { ok: false, errors } for parse failures. `family` is the detected diagram family and `summary` a one-line description \u2014 check them: ok:true only means the diagram is structurally valid, not that it is the kind you intended. Warnings use the layout-rubric codes.",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"parameters": {
"source": {
"type": "string",
"description": "Mermaid source.",
"required": true
}
}
},
{
"name": "describe",
"description": "Describe a Mermaid diagram. format=text returns { ok, text } with one or two summary sentences; format=json returns { ok, tree } with the AX tree; format=facts returns { ok, facts } with deterministic semantic fact lines for machine checking (for example edge A -> B : label, member Duck +quack()).",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"parameters": {
"source": {
"type": "string",
"description": "Mermaid source.",
"required": true
},
"format": {
"type": "string",
"enum": [
"text",
"json",
"facts"
],
"description": "text (default), json AX tree, or facts semantic read-back.",
"required": false
}
}
},
{
"name": "mutate",
"description": "Apply a list of structured edit ops to an existing Mermaid `source` and return the edited diagram. This is the declarative counterpart to `execute`: plain JSON in, plain JSON out, no sandbox. Prefer it for straightforward edits; reserve `execute` for logic the ops don't express. Returns { ok, family, source, verify:{ ok, warnings } } on success, or { ok:false, family, opIndex, error } \u2014 where `error` names the offending field and lists the valid ones \u2014 when an op is malformed or cannot apply. Ops apply in order and are all-or-nothing: the first failing op stops the batch (its position is `opIndex`) and the input is left untouched. Each op is { \"kind\": <op>, \u2026fields }. Op kinds by family: ...",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"parameters": {
"source": {
"type": "string",
"description": "Mermaid source to edit.",
"required": true
},
"ops": {
"type": "array",
"items": {
"type": "object"
},
"description": "Ordered list of edit ops; each is { kind, ...fields }.",
"required": true
}
}
},
{
"name": "build",
"description": "Author a new Mermaid diagram from blank by folding a list of structured ops over an empty diagram of `family`. The declarative counterpart to hand-writing source. Returns the same envelope as `mutate`: { ok, family, source, verify } or { ok:false, family, opIndex, error }. Op kinds by family: flowchart: add_node(id, label, shape?, parent?), remove_node(id), rename_node(from, to), set_label(target, label), add_edge(from, to, label?, style?), remove_edge(id) state: add_state(id, label?, parent?), remove_state(id), rename_state(from, to), set_state_label(id, label), add_transition(from, to, label?, parent?), remove_transition(index?, from?, to?, parent?), set_transition_label(index?, from?, ...",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"parameters": {
"family": {
"type": "string",
"description": "Diagram family to author (one of: flowchart, state, sequence, timeline, class, er, journey, architecture, xychart, pie, quadrant, gantt).",
"required": true
},
"ops": {
"type": "array",
"items": {
"type": "object"
},
"description": "Ordered list of ops; each is { kind, ...fields }.",
"required": true
}
}
}
],
"generatedFrom": {
"packageVersion": "0.1.0",
"gitSha": "development",
"buildTime": "development"
}
}