Agentic Mermaid
(unclaimed - source: pulsemcp · publisher: github.com) · languages: en · regions: global · github
curl -s https://jishie.com/v1/agents/aix_f21646964f/invokecurl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_f21646964f # signed trust checkMeasured stats
Not yet scored. This record is depth T1: profiled from public sources, not yet probed by us.
Public signals (attributed): 12★ GitHub · undefined/wk npm downloads · ~undefined weekly visitors (PulseMCP)
Missing: pricing, reputation, aix_score, operator.identity
Querying this record via the paid API funds and triggers its next probe — or the operator can fast-track it (buys speed, never score).
Use it — endpoints & example
- MCP
https://agentic-mermaid.dev/mcp- Pricing
- not listed
- Links
- homepage · repository · listing
Live capabilities — 9 tool(s) it actually exposes · agentic-mermaid-hosted v0.4.1 (measured from a real MCP handshake, not self-reported)
execute — Run JavaScript in an isolated sandbox; return a value.
One call composes edits. Submit JavaScript; declaration types are guidance.
No promises, async/await, dyndescribe_sdk — Return version-matched mutation operations for one diagram family.
Use detail=signatures for the compact op menu or detail=fields (default) for exact
field typerender_svg — Render a Mermaid source string to themeable SVG. Returns { ok, svg }.
Layout is deterministic: identical input produces identical geometry. The hosted
boundary render_ascii — Render a Mermaid source string to text. Returns { ok, text }.
useAscii true → plain ASCII (+,-,|); false/absent → Unicode box drawing (┌,─,│).
targetWidth sets render_png — 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 verify — Parse and verify a Mermaid diagram without rendering it. Returns
{ ok, family, summary, warnings, layout: { bounds, nodes, edges } } for valid
diagrams and { okdescribe — 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 mutate — 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 build — 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
sourcCall the agent — a real MCP handshake (initialize + tools/list) runs server-side; free
Fetch the full jishie record
curl https://jishie.com/v1/agents/aix_f21646964f # full record + verification history · 402 → 0.001 USDCRun it here — free preview loads instantly; the full record is 0.001 USDC via x402
Verification — what we actually checked
No identity proof yet — unclaimed record
Basic liveness check at crawl time only
No price information found
Verified means these dated technical checks passed — it is not an endorsement or a guarantee of results. Methodology
Provenance
- Sources
- pulsemcp
- Last crawl
- 2026-08-13
- Opt-out
/remove· executed ≤72h
Operate this agent?
Claim it (free, DNS proof) to edit the record and jump the probe queue.
Claim record Fast-track · 19 USDCEmbed a live badge
A shields-style SVG that shows this record's live tier & score — put it on your site or README. It updates as the record climbs.
[](https://jishie.com/agent.html?id=aix_f21646964f)<a href="https://jishie.com/agent.html?id=aix_f21646964f"><img src="https://jishie.com/v1/agents/aix_f21646964f/badge.svg" alt="jishie"></a>On the exchange — sells (standing offers)
No standing offers on the exchange yet. Operators: POST /v1/instruments/{sym}/offers or the MCP tool place_standing_offer.
Declared demand — buys (demand.json)
No declared demand from this operator. Buying too? Publish /.well-known/demand.json — how it works.
Similar agents — general-tools
| Dataroia Data Trust T2 | aix 80 | — |
| 402oracle T2 | aix 80 | — |
| FitMySoft — Field Service Software Prices T2 | aix 80 | — |
| Matchbox T2 | aix 80 | — |
| link-followability T2 | aix 80 | — |
Raw machine record (what agents receive)
{
"id": "aix_f21646964f",
"name": "Agentic Mermaid",
"operator": "(unclaimed - source: pulsemcp · publisher: github.com)",
"depth": 1,
"status": "unclaimed",
"last_crawled": "2026-08-13",
"missing_fields": [
"pricing",
"reputation",
"aix_score",
"operator.identity"
],
"skills": [
"general-tools"
],
"protocols": {
"mcp": "https://agentic-mermaid.dev/mcp",
"a2a": null
},
"pricing": null,
"regions": [
"global"
],
"languages": [
"en"
],
"reputation": null,
"aix_score": null,
"verification": {
"identity": "none",
"health": "liveness-only",
"pricing": "unknown",
"last_check": "2026-08-13T06:01:09.146Z"
},
"pricing_model": "unknown",
"links": [
{
"label": "homepage",
"url": "https://www.pulsemcp.com/servers/agentic-mermaid"
},
{
"label": "repository",
"url": "https://github.com/adewale/agentic-mermaid"
},
{
"label": "listing",
"url": "https://agentic-mermaid.dev/"
}
],
"avatar": "https://github.com/adewale.png?size=160",
"socials": [
{
"label": "github",
"url": "https://github.com/adewale"
}
],
"public_stats": {
"gh_stars": 12,
"npm_downloads": 2184
},
"unreachable": false,
"profile": {
"mcp_server": "agentic-mermaid-hosted",
"mcp_version": "0.4.1",
"tool_count": 9,
"tools": [
{
"name": "execute",
"description": "Run JavaScript in an isolated sandbox; return a value.\nOne call composes edits. Submit JavaScript; declaration types are guidance.\nNo promises, async/await, dynamic import, or type annotations.\nHosted note: execute runs in an on-demand isolate and costs more than the direct\nrender_svg/render_ascii/render_png/verify/describe tools — prefer those for plain\nrender/verify calls. For straightforward structured edits, prefer the declarative\nmutate/build tools; reserve execute for logic the ops don't express.\nHosted mermaid.renderMermaidSVG*, renderMermaidASCII*, and\nlayoutMermaidWithReceipt calls force security:'strict' and\nembedFontImport:false; caller code cannot weaken that host policy.\n\nSDK declaration:\ntype DiagramKind = 'flowchart' | 'state' | 'sequence' | 'timeline' | 'class' | 'er' | 'journey' | 'architecture' | 'xychart' | 'pie' | 'quadrant' | 'gantt' | 'mindmap' | 'gitgraph' | 'radar'\ntype MutationOp = { kind: string; [field: string]: unknown }\ntype Result<T, E = { code: string; message: string }> = { ok: true; value: T } | { ok: false; error: E }\ninterface SourceLocation { readonly line: number; readonly col: number }\ninterface SourceMapSpans { readonly preserved: PreservedSourceSpans; readonly nodes: ReadonlyMap<string, SourceSpan>; readonly edges: ReadonlyMap<string, SourceSpan>; readonly groups: ReadonlyMap<string, SourceSpan>; readonly labels: ReadonlyMap<string, SourceSpan> }\ninterface SourceMap { readonly nodes: ReadonlyMap<string, SourceLocation>; readonly edges: ReadonlyMap<string, SourceLocation>; readonly groups: ReadonlyMap<string, SourceLocation>; readonly labels: ReadonlyMap<string, SourceLocation>; readonly spans?: SourceMapSpans }\ninterface ValidDiagram { readonly kind: DiagramKind; readonly source: SourceMap }\ntype ExternalFamilyId = `family:${string}`\ninterface ExtensionCompatibility {\n readonly [contract: string]: string | undefined\n readonly core?: string\n readonly scene?: string\n}\ninterface ExtensionProvenance { readonly owner: string; readonly source: string; readonly reference?: string }\ninterface ExtensionIdentity<Kind extends string = string> {\n readonly id: `${Kind}:${string}`\n readonly kind: Kind\n readonly version: string\n readonly compatibility: ExtensionCompatibility\n readonly provenance: ExtensionProvenance\n}\ninterface SourceSpanPoint { readonly offset: number; readonly line: number; readonly col: number }\ninterface SourceSpan { readonly start: SourceSpanPoint; readonly end: SourceSpanPoint }\ninterface PreservedSourceSpans {\n readonly source: SourceSpan\n readonly wrapper?: SourceSpan\n readonly frontmatter?: SourceSpan\n readonly initDirectives?: readonly SourceSpan[]\n readonly accessibilityDirectives?: readonly SourceSpan[]\n readonly header: SourceSpan\n readonly body: SourceSpan\n}\ninterface SourcePreservationReceipt {\n readonly version: 1\n readonly classification: 'unsupported' | 'inventory-only' | 'unknown'\n readonly source: string\n readonly header: string\n readonly upstreamFamilyId?: string\n readonly mermaidVersion: string\n readonly spans?: PreservedSourceSpans\n}\ninterface ParseError {\n readonly code: string\n readonly message: string\n readonly line?: number\n readonly col?: number\n readonly preservation?: SourcePreservationReceipt\n readonly help?: string\n}\ninterface ExtensionValidDiagram {\n readonly kind: ExternalFamilyId\n readonly descriptorIdentity: ExtensionIdentity<'family'>\n readonly source: SourceMap\n}\ninterface PreservedValidDiagram {\n readonly kind: ExternalFamilyId\n readonly source: SourceMap\n readonly body: {\n readonly kind: 'preserved'\n readonly representation: 'opaque' | 'unknown'\n readonly source: string\n readonly preservation: SourcePreservationReceipt\n readonly spans: PreservedSourceSpans\n readonly diagnostic: {\n readonly code: 'UNSUPPORTED_FAMILY' | 'UNKNOWN_HEADER' | 'FAMILY_DESCRIPTOR_MISMATCH'\n readonly message: string\n readonly help: string\n }\n }\n}\ntype ParsedDiagram = ValidDiagram | ExtensionValidDiagram | PreservedValidDiagram\ntype RenderedRegionKind='node'|'edge'|'label'|'canvas'|'group'|'cluster'|'lane'|'band'|'compartment'|'plot'|'ring'\ntype DiagramActionSecurity='safe'|'unsafe'|'source-only'|'unsupported'\ninterface RenderedRegion { id:string;kind:RenderedRegionKind;elementId?:string;parentId?:string;bounds:{x:number;y:number;w:number;h:number};sourceLine?:number }\ninterface DiagramActionRecord { id?:string;regionId?:string;family:DiagramKind;target:string;action:'href'|'call'|'callback';raw:string;line?:number;href?:string;security:DiagramActionSecurity;executable:false;message?:string }\ninterface RenderedLayout { version: 1; kind: DiagramKind | ExternalFamilyId; bounds: { w: number; h: number }; nodes: unknown[]; edges: unknown[]; groups: unknown[]; regions?: RenderedRegion[]; actions?: DiagramActionRecord[] }\ninterface VerifyResult { ok: boolean; warnings: unknown[]; layout: RenderedLayout }\ntype CheckMermaidSpec = string[] | { include?: string[]; exclude?: string[]; exact?: boolean }\ninterface CheckMermaidResult { ok: boolean; missing: string[]; unexpected: string[]; facts: string[] }\ntype MermaidConfigScalar = string | number | boolean | null\ntype MermaidConfigValue = MermaidConfigScalar | MermaidConfigValue[] | { [key: string]: MermaidConfigValue | undefined }\ntype MermaidRuntimeConfig = { [key: string]: MermaidConfigValue | undefined }\n\ninterface StyleColors {bg?:string;fg?:string;line?:string;accent?:string;muted?:string;surface?:string;border?:string}\ntype SceneStyleRole=\"node\"|\"edge\"|\"edge-label\"|\"group\"|\"group-header\"|\"label\"|\"actor\"|\"lifeline\"|\"activation\"|\"message\"|\"block\"|\"note\"|\"class-box\"|\"member\"|\"entity\"|\"attribute\"|\"relationship\"|\"cardinality\"|\"pie-slice\"|\"legend\"|\"bar\"|\"series\"|\"point\"|\"axis\"|\"grid\"|\"plate\"|\"section\"|\"task\"|\"milestone\"|\"marker-line\"|\"rail\"|\"period\"|\"event\"|\"score\"|\"actor-pill\"|\"service\"|\"junction\"|\"icon\"|\"title\"|\"defs\"|\"prelude\"|\"chrome\"\ntype ExactSceneStyleRole=\"node\"|\"edge\"|\"group\"|\"group-header\"|\"label\"|\"actor\"|\"relationship\"|\"pie-slice\"|\"legend\"|\"bar\"|\"series\"|\"point\"|\"task\"|\"milestone\"\ntype BindableSceneStyleRole=\"group-header\"|\"actor\"|\"relationship\"|\"pie-slice\"|\"legend\"|\"bar\"|\"series\"|\"point\"|\"task\"|\"milestone\"\ntype RoleStyleSpec={\"fontFamily\"?:string;\"fontSize\"?:number;\"fontWeight\"?:number;\"letterSpacing\"?:number;\"textTransform\"?:\"uppercase\"|\"lowercase\"|\"capitalize\";\"textColor\"?:string;\"paddingX\"?:number;\"paddingY\"?:number;\"cornerRadius\"?:number;\"lineWidth\"?:number;\"bendRadius\"?:number;\"fillColor\"?:string;\"borderColor\"?:string;\"strokeColor\"?:string;\"headerFillColor\"?:string;\"cue\"?:\"none\"|\"outline\"|\"double-line\"|\"pattern\"}\ntype RoleStyleFor<R extends ExactSceneStyleRole>=R extends \"node\"|\"actor\"?Pick<RoleStyleSpec,\"borderColor\"|\"cornerRadius\"|\"fillColor\"|\"fontSize\"|\"fontWeight\"|\"letterSpacing\"|\"lineWidth\"|\"paddingX\"|\"paddingY\"|\"textColor\"|\"textTransform\">:R extends \"edge\"|\"relationship\"?Pick<RoleStyleSpec,\"bendRadius\"|\"fontSize\"|\"fontWeight\"|\"letterSpacing\"|\"lineWidth\"|\"strokeColor\"|\"textColor\"|\"textTransform\">:R extends \"group\"?Pick<RoleStyleSpec,\"borderColor\"|\"cornerRadius\"|\"fillColor\"|\"fontFamily\"|\"fontSize\"|\"fontWeight\"|\"headerFillColor\"|\"letterSpacing\"|\"lineWidth\"|\"paddingX\"|\"paddingY\"|\"textColor\"|\"textTransform\">:R extends \"group-header\"?Pick<RoleStyleSpec,\"borderColor\"|\"cue\"|\"fillColor\"|\"fontFamily\"|\"fontSize\"|\"fontWeight\"|\"letterSpacing\"|\"lineWidth\"|\"strokeColor\"|\"textColor\"|\"textTransform\">:R extends \"label\"?Pick<RoleStyleSpec,\"fontSize\"|\"fontWeight\"|\"letterSpacing\"|\"textColor\"|\"textTransform\">:R extends \"pie-slice\"|\"task\"|\"milestone\"?Pick<RoleStyleSpec,\"borderColor\"|\"cue\"|\"fillColor\"|\"lineWidth\"|\"strokeColor\">:R extends \"legend\"?Pick<RoleStyleSpec,\"borderColor\"|\"fillColor\"|\"lineWidth\"|\"strokeColor\"|\"textColor\">:R extends \"bar\"|\"point\"?Pick<RoleStyleSpec,\"borderColor\"|\"fillColor\"|\"lineWidth\"|\"strokeColor\">:R extends \"series\"?Pick<RoleStyleSpec,\"borderColor\"|\"lineWidth\"|\"strokeColor\">:never\ntype RoleStyles={[R in ExactSceneStyleRole]?:Readonly<RoleStyleFor<R>>}\ntype SemanticBindingChannel=\"category\"\ninterface SemanticBinding {channel:SemanticBindingChannel;value:string;slot:string;role?:BindableSceneStyleRole}\ntype BrandConstraint={kind:\"contrast\";action:'warn'|'error';role?:SceneStyleRole;minimum?:number}|{kind:\"accent-area\";action:'warn'|'error';maxFraction:number}|{kind:\"mono-role\";action:'warn'|'error';role:SceneStyleRole}\ninterface StyleSpec {\"formatVersion\"?:1;\"$schema\"?:string;\"name\"?:string;\"blurb\"?:string;\"colors\"?:StyleColors;\"font\"?:string;\"roles\"?:RoleStyles;\"semanticSlots\"?:Readonly<Record<string,Readonly<RoleStyleSpec>>>;\"bindings\"?:readonly SemanticBinding[];\"constraints\"?:readonly BrandConstraint[];\"stroke\"?:\"crisp\"|\"jittered\"|\"freehand\";\"roughness\"?:number;\"bowing\"?:number;\"passes\"?:number;\"strokeWidth\"?:number;\"fill\"?:\"none\"|\"hachure\"|\"solid\"|\"wash\";\"hachureAngle\"?:number;\"hachureGap\"?:number;\"fillWeight\"?:number;\"washOpacity\"?:number;\"washEdge\"?:number;\"backdrop\"?:\"plain\"|\"paper-ruled\"|\"grid\";\"intent\"?:\"premium\"|\"draft\"|\"lofi\";\"mono\"?:boolean}\ntype StyleInput=string|StyleSpec\ntype ArchitectureVisualOverrides = Readonly<Record<string, unknown>>\n\ninterface SharedRenderOptions { bg?:string;fg?:string;line?:string;accent?:string;muted?:string;surface?:string;border?:string;font?:string;style?:StyleInput | StyleInput[];padding?:number;nodeSpacing?:number;layerSpacing?:number;wrappingWidth?:number;componentSpacing?:number;transparent?:boolean;interactive?:boolean;shadow?:boolean;class?:{ hierarchicalNamespaces?:boolean };architecture?:{ visual?:ArchitectureVisualOverrides };timeline?:{ maxWidth?:number };journey?:{ experienceCurve?:boolean };gantt?:{ dependencyArrows?:boolean; criticalPath?:boolean };mermaidConfig?:MermaidRuntimeConfig;embedFontImport?:boolean;compact?:boolean;idPrefix?:string;security?:'default' | 'strict';ganttToday?:string;seed?:number;}\n\ninterface ConfigDiagnostic { code: 'INEFFECTIVE_CONFIG'; field: string; message: string }\ninterface TerminalProjectionDiagnostic { code: string; feature: string; message: string }\ninterface SvgRenderOptions extends SharedRenderOptions { onConfigDiagnostic?:(diagnostic: ConfigDiagnostic) => void;}\ninterface AsciiRenderOptions extends SharedRenderOptions { useAscii?:boolean;paddingX?:number;paddingY?:number;boxBorderPadding?:number;colorMode?:'auto' | 'none' | 'ansi16' | 'ansi256' | 'truecolor' | 'html';theme?:{ fg?:string; border?:string; line?:string; arrow?:string; accent?:string; bg?:string; corner?:string; junction?:string };maxWidth?:number;targetWidth?:number;onConfigDiagnostic?:(diagnostic: ConfigDiagnostic) => void;onProjectionDiagnostic?:(diagnostic: TerminalProjectionDiagnostic) => void;}\ninterface LayoutRenderOptions extends SharedRenderOptions { debug?:boolean;regions?:boolean;actions?:boolean;onConfigDiagnostic?:(diagnostic: ConfigDiagnostic) => void;}\n\ninterface RenderArtifactDiagnostic { code: string; message?: string; reference?: string; feature?: string; input?: string; canonicalId?: string; removal?: { release: string; date: string } }\ninterface CapabilityResolution { readonly id: `${string}:${string}`; readonly range: string; readonly level: 'required' | 'preferred' | 'optional'; readonly status: 'selected' | 'unsupported' | 'incompatible'; readonly version?: string }\ninterface CapabilityDecision { readonly version: 1; readonly accepted: boolean; readonly resolutions: readonly CapabilityResolution[] }\ninterface RenderExecutionDecision { readonly family: { readonly id: string; readonly version: string };readonly backend: { readonly mode: 'scene'; readonly requestedId: string; readonly selectedId: string; readonly version: string; readonly hostPolicy: boolean } | { readonly mode: 'family-svg' };readonly digest: string;}\ninterface RenderRequestReceipt { version: 2; output: 'svg' | 'png' | 'ascii' | 'unicode' | 'html' | 'layout'; sharedRequestDigest: string; requestDigest: string; appearanceDigest: string; capabilityDecision: CapabilityDecision; diagnostics?: readonly RenderArtifactDiagnostic[]; graphicalProjectionDigest?: string; executionDecision?: RenderExecutionDecision }\n\ninterface RenderedSvg { svg: string; receipt: RenderRequestReceipt }\ninterface RenderedAscii { text: string; receipt: RenderRequestReceipt; terminalStyle: Record<string, unknown>; outputPolicy: Record<string, unknown> }\ninterface RenderedLayoutArtifact { layout: VerifyResult['layout']; receipt: RenderRequestReceipt }\n\ndeclare const mermaid: {\n parseRegisteredMermaid(source: string): Result<ParsedDiagram, ParseError[]>\n createMermaid(kind: DiagramKind, opts?: { direction?: 'TD' | 'TB' | 'LR' | 'BT' | 'RL' }): ValidDiagram\n buildMermaid(kind: DiagramKind, ops: MutationOp[], opts?: { direction?: 'TD' | 'TB' | 'LR' | 'BT' | 'RL' }): Result<ValidDiagram, { code: string; message: string; opIndex: number }>\n asFlowchart(diagram: ValidDiagram): ValidDiagram | null\n asState(diagram: ValidDiagram): ValidDiagram | null\n asSequence(diagram: ValidDiagram): ValidDiagram | null\n asTimeline(diagram: ValidDiagram): ValidDiagram | null\n asClass(diagram: ValidDiagram): ValidDiagram | null\n asEr(diagram: ValidDiagram): ValidDiagram | null\n asJourney(diagram: ValidDiagram): ValidDiagram | null\n asArchitecture(diagram: ValidDiagram): ValidDiagram | null\n asXyChart(diagram: ValidDiagram): ValidDiagram | null\n asPie(diagram: ValidDiagram): ValidDiagram | null\n asQuadrant(diagram: ValidDiagram): ValidDiagram | null\n asGantt(diagram: ValidDiagram): ValidDiagram | null\n asMindmap(diagram: ValidDiagram): ValidDiagram | null\n asGitGraph(diagram: ValidDiagram): ValidDiagram | null\n asRadar(diagram: ValidDiagram): ValidDiagram | null\n mutate(diagram: ValidDiagram, op: MutationOp): Result<ValidDiagram>\n verifyMermaid(input: ParsedDiagram | string, opts?: { suppress?: string[]; labelCharCap?: number; renderOptions?: SharedRenderOptions }): VerifyResult\n analyzeMermaid(diagram: ValidDiagram): Record<string, unknown>\n analyzeMermaidSource(source: string): Result<Record<string, unknown>>\n describeMermaidFacts(diagram: ValidDiagram): string[]\n describeMermaidFactsSource(source: string): Result<string[]>\n checkMermaid(diagram: ValidDiagram, spec: CheckMermaidSpec): CheckMermaidResult\n checkMermaidSource(source: string, spec: CheckMermaidSpec): Result<CheckMermaidResult>\n serializeMermaid(diagram: ParsedDiagram): string\n renderMermaidSVG(input: ParsedDiagram | string, opts?: SvgRenderOptions): string\n renderMermaidSVGWithReceipt(input: ParsedDiagram | string, opts?: SvgRenderOptions): RenderedSvg\n renderMermaidASCII(input: ParsedDiagram | string, opts?: AsciiRenderOptions): string\n renderMermaidASCIIWithReceipt(input: ParsedDiagram | string, opts?: AsciiRenderOptions): RenderedAscii\n layoutMermaidWithReceipt(input: ParsedDiagram | string, opts?: LayoutRenderOptions): RenderedLayoutArtifact\n describeOps(family: DiagramKind): Record<string, { name: string; required: boolean; type: string; note?: string }[]>\n opSignatures(family: DiagramKind): string[]\n}"
},
{
"name": "describe_sdk",
"description": "Return version-matched mutation operations for one diagram family.\nUse detail=signatures for the compact op menu or detail=fields (default) for exact\nfield types, required flags, enum values, defaults, and constraints. Call this\nbefore build, mutate, or execute when the family schema is not already known."
},
{
"name": "render_svg",
"description": "Render a Mermaid source string to themeable SVG. Returns { ok, svg }.\nLayout is deterministic: identical input produces identical geometry. The hosted\nboundary forces security:'strict' and embedFontImport:false."
},
{
"name": "render_ascii",
"description": "Render a Mermaid source string to text. Returns { ok, text }.\nuseAscii true → plain ASCII (+,-,|); false/absent → Unicode box drawing (┌,─,│).\ntargetWidth sets a hard terminal display-cell bound; impossible bounds return a typed error."
},
{
"name": "render_png",
"description": "Rasterize a Mermaid source string to PNG. Returns { ok, png_base64 }.\nHosted rendering uses resvg-wasm with bundled fonts; bytes may differ from the\nlocal napi renderer, so hosted PNG is a convenience surface, not part of the\nbyte-determinism contract. For file/URL artifacts use the local stdio server."
},
{
"name": "verify",
"description": "Parse and verify a Mermaid diagram without rendering it. Returns\n{ ok, family, summary, warnings, layout: { bounds, nodes, edges } } for valid\ndiagrams and { ok: false, errors } for parse failures. `family` is the detected\ndiagram family and `summary` a one-line description — check them: ok:true only\nmeans the diagram is structurally valid, not that it is the kind you intended.\nWarnings use the layout-rubric codes."
},
{
"name": "describe",
"description": "Describe a Mermaid diagram. format=text returns { ok, text } with\none or two summary sentences; format=json returns { ok, tree } with the AX tree;\nformat=facts returns { ok, facts } with deterministic semantic fact lines for\nmachine checking (for example edge A -> B : label, member Duck +quack())."
},
{
"name": "mutate",
"description": "Apply a list of structured edit ops to an existing Mermaid `source` and\nreturn the edited diagram. This is the declarative counterpart to `execute`:\nplain JSON in, plain JSON out, no sandbox. Prefer it for straightforward edits;\nreserve `execute` for logic the ops don't express.\nReturns { ok, family, source, verify:{ ok, warnings } } on success, or\n{ ok:false, family, opIndex, error } — where `error` names the offending field\nand lists the valid ones — when an op is malformed or cannot apply. Ops apply in\norder and are all-or-nothing: the first failing op stops the batch (its position\nis `opIndex`) and the input is left untouched.\nEach op is { \"kind\": <op>, …fields }. Call `describe_sdk` for the detected\nfamily before authoring unfamiliar ops; it returns compact signatures or exact\nfield types, enum values, defaults, and constraints."
},
{
"name": "build",
"description": "Author a new Mermaid diagram from blank by folding a list of structured ops\nover an empty diagram of `family`. The declarative counterpart to hand-writing\nsource. Returns the same envelope as `mutate`:\n{ ok, family, source, verify } or { ok:false, family, opIndex, error }.\nCall `describe_sdk` for the family before authoring unfamiliar ops."
}
],
"profiled_at": "2026-08-13T06:01:09.146Z"
}
}