Server definition
- Hash
- sha256:39a1328444918ee297f101b919bfaa94d80408c9cc4862821208ec630a1fd942
- What it is
- What a remote MCP server returned when asked what it offers: 5 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "DEPRECATED alias for `generate_visual` (removed no earlier than v1.24.x). Use `generate_visual` going forward — identical behaviour.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"defaultArrowHead": {
"description": "Default arrowhead style applied to all edges that don't specify their own.",
"type": [
"string",
"null"
]
},
"defaultArrowStyle": {
"description": "Connector aesthetic mode applied to all edges that don't set their own `arrowStyle`. Options: \"calligraphy\" (default — hand-drawn ink-ribbon connectors) | \"clean\" (standard stroked-line connectors) | \"block\" (chunky outlined block-arrow connectors with integrated triangular head). Orthogonal to defaultLineStyle (which now controls dash pattern only) — all 15 combinations of arrowStyle × lineStyle are valid.",
"enum": [
"calligraphy",
"clean",
"block"
],
"type": [
"string",
"null"
]
},
"defaultBlockArrowSize": {
"anyOf": [
{
"enum": [
"small",
"medium",
"large"
],
"type": "string"
},
{
"maximum": 60,
"minimum": 1,
"type": "number"
}
],
"description": "Default Block Arrow size when `defaultArrowStyle` (or per-edge arrowStyle) is \"block\". Options: \"small\" (slim — body ~14 px) | \"medium\" (default — body ~24 px) | \"large\" (chunky — body ~36 px). Or a raw body half-width number in px (1–60); head dimensions scale proportionally. Per-edge `blockArrowSize` overrides this default."
},
"defaultConnector": {
"description": "Default connector type applied to all edges that don't specify their own.",
"enum": [
"straight",
"curved",
"elbow",
"orthogonal",
"bezier"
],
"type": [
"string",
"null"
]
},
"defaultConnectorAnimate": {
"description": "Animate every connector edge. Options: none (default) | flow (dashes march along the line) | pulse (gentle opacity breathing) | glow (subtle stroke-width pulse) | trace (bright dot traverses each edge) | wave (large stroke-width oscillation). SVG-only — exports to PNG / WebP / OG-image freeze on first frame.",
"enum": [
"none",
"flow",
"pulse",
"glow",
"trace",
"wave",
"lightning",
"beat",
"comet"
],
"type": [
"string",
"null"
]
},
"defaultConnectorAnimateSpeed": {
"description": "Animation speed when defaultConnectorAnimate is set. Options: slow (3s cycle) | medium (2s, default) | fast (1s).",
"enum": [
"slow",
"medium",
"fast"
],
"type": [
"string",
"null"
]
},
"defaultDividerStyle": {
"description": "Divider / grid-line / table-border style. Governs the structural rule-lines a diagram emits: matrix grid lines, gantt phase column dividers, sequence lifelines, swimlane (process-flow) lane boundaries. Options: \"subtle\" (barely-there hairline), \"normal\" (default — pre-v1.55.0 baseline of 1 px / 25 % opacity), \"bold\" (emphasised grid presence), \"dashed\" (6,4 dasharray editorial feel), \"dotted\" (1,3 dasharray lightweight rhythm), \"none\" (no divider emission — cells separated only by colour banding). Useful for comparison tables (try \"bold\") or minimalist matrices (try \"none\").",
"enum": [
"subtle",
"normal",
"bold",
"dashed",
"dotted",
"none"
],
"type": [
"string",
"null"
]
},
"defaultLineStyle": {
"description": "v1.45.2+ — Default DASH PATTERN applied to all edges that don't specify their own. Options: \"solid\" | \"dashed\" | \"dotted\" | \"dash-dot\" | \"long-dash\". Combines orthogonally with `defaultArrowStyle` (calligraphy/clean/block) for 15 total visual combinations. Legacy values \"calligraphy\" and \"block-arrow\" are still accepted for backward compat (the renderer maps them to defaultArrowStyle=\"calligraphy\"/\"block\" with lineStyle=\"solid\"); new callers should use `defaultArrowStyle` for the aesthetic mode.",
"enum": [
"calligraphy",
"block-arrow",
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"defaultSceneAnimation": {
"description": "Whole-visual reveal animation. Plays ONCE when the SVG is displayed, freezes at the final state. Options: none (default) | fade (entire visual fades in) | zoom (scales in from 70% to 100%) | zoom-pan (Ken Burns camera move) | flow (each node + edge appears sequentially in spec order). Orthogonal to defaultConnectorAnimate — both can run together. SVG-only — PNG / WebP exports show the fully-revealed final state (rasteriser ignores SMIL; static attrs hold the final value). Animated GIF / MP4 client-side encoder ticks the scene through.",
"enum": [
"none",
"fade",
"zoom",
"zoom-pan",
"flow",
"wave-sweep",
"build-up",
"flow-zoom-pan"
],
"type": [
"string",
"null"
]
},
"defaultSceneAnimationLoop": {
"description": "Animation loop count. v1.50.9+ — applies to BOTH connector animations (flow / pulse / glow / wave / trace / lightning / beat / comet) AND scene animations (fade / zoom / zoom-pan / flow / wave-sweep / build-up / flow-zoom-pan). Options (all quoted strings): \"once\" (default — plays once and freezes) | \"2\" | \"3\" | \"5\" (repeat that many times then freeze) | \"infinite\" (loop forever; best for live presentations and the historical default for connector animations pre-v1.50.9). Maps to SMIL repeatCount.",
"enum": [
"once",
"2",
"3",
"5",
"infinite"
],
"type": [
"string",
"null"
]
},
"defaultSceneAnimationSpeed": {
"description": "Scene animation speed. Options: slow (1.5× duration) | medium (default) | fast (0.6× duration).",
"enum": [
"slow",
"medium",
"fast"
],
"type": [
"string",
"null"
]
},
"defaultShadow": {
"description": "Default shadow level applied to all nodes.",
"enum": [
"none",
"sm",
"md",
"lg"
],
"type": [
"string",
"null"
]
},
"defaultShapeLineStyle": {
"description": "Default line style for shape outlines (node borders). v1.44.1 — also drives shape rendering mode: \"calligraphy\" gives hand-drawn rough shapes (ink-ribbon outlines); \"solid\" | \"dashed\" | \"dotted\" | \"dash-dot\" | \"long-dash\" give crisp geometric shapes with that outline pattern. Independent of edge/connector line style.",
"enum": [
"calligraphy",
"block-arrow",
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"defaultTitleStyle": {
"description": "Title decoration treatment. Options: \"plain\" (default, just the title text), \"accent-bar\" (small accent-coloured vertical bar to the left of the title), \"underline\" (accent-coloured horizontal stroke below the title), \"boxed\" (title rendered in a subtle bordered + drop-shadowed pill — strongest framing). Affects only the diagram title, not subtitles or section headers.",
"enum": [
"plain",
"accent-bar",
"underline",
"boxed"
],
"type": [
"string",
"null"
]
},
"edges": {
"items": {
"additionalProperties": false,
"properties": {
"animate": {
"description": "Connector animation. Options: none (default) | flow (dashes march) | pulse (opacity breathing) | glow (stroke-width pulse) | trace (bright dot travels along) | wave (large stroke-width oscillation). SVG-only — exports to PNG/WebP capture one frozen frame.",
"enum": [
"none",
"flow",
"pulse",
"glow",
"trace",
"wave",
"lightning",
"beat",
"comet"
],
"type": [
"string",
"null"
]
},
"animateSpeed": {
"description": "Animation speed. Options: slow (3s cycle) | medium (2s, default) | fast (1s).",
"enum": [
"slow",
"medium",
"fast"
],
"type": [
"string",
"null"
]
},
"arrowStyle": {
"description": "Per-edge connector aesthetic mode (overrides defaultArrowStyle). Options: \"calligraphy\" | \"clean\" | \"block\". Orthogonal to lineStyle (dash pattern); all 15 combinations are valid.",
"enum": [
"calligraphy",
"clean",
"block"
],
"type": [
"string",
"null"
]
},
"blockArrowSize": {
"anyOf": [
{
"enum": [
"small",
"medium",
"large"
],
"type": "string"
},
{
"maximum": 60,
"minimum": 1,
"type": "number"
}
],
"description": "Block Arrow size for this edge (only when arrowStyle is \"block\"). Preset names: \"small\" (slim) | \"medium\" (default) | \"large\" (chunky). OR a raw body half-width in px (1–60); head dimensions scale proportionally."
},
"connectorType": {
"enum": [
"straight",
"curved",
"elbow",
"orthogonal",
"bezier"
],
"type": [
"string",
"null"
]
},
"hidden": {
"type": [
"boolean",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"lineStyle": {
"enum": [
"calligraphy",
"block-arrow",
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"loop": {
"description": "Per-edge animation loop count override. Wins over the diagram-level `defaultSceneAnimationLoop`. Values are quoted strings: \"once\" | \"2\" | \"3\" | \"5\" | \"infinite\". Maps to SMIL repeatCount.",
"enum": [
"once",
"2",
"3",
"5",
"infinite"
],
"type": [
"string",
"null"
]
},
"source": {
"type": "string"
},
"sourceArrow": {
"description": "Arrowhead style at the edge source end. Options: open (default) | triangle | diamond | circle | bar | dot | none.",
"type": [
"string",
"null"
]
},
"style": {
"additionalProperties": false,
"properties": {
"fill": {
"type": [
"string",
"null"
]
},
"opacity": {
"maximum": 1,
"minimum": 0,
"type": [
"number",
"null"
]
},
"stroke": {
"type": [
"string",
"null"
]
},
"strokeWidth": {
"type": [
"number",
"null"
]
}
},
"required": [
"stroke",
"strokeWidth",
"opacity",
"fill"
],
"type": [
"object",
"null"
]
},
"target": {
"type": "string"
},
"targetArrow": {
"description": "Arrowhead style at the edge target end. Options: open (default) | triangle | diamond | circle | bar | dot | none.",
"type": [
"string",
"null"
]
}
},
"required": [
"source",
"target",
"label",
"lineStyle",
"connectorType",
"sourceArrow",
"targetArrow",
"style",
"hidden",
"animate",
"animateSpeed",
"blockArrowSize",
"arrowStyle",
"loop"
],
"type": "object"
},
"type": [
"array",
"null"
]
},
"fontFamily": {
"description": "Font family for diagram text. Options: inter, poppins (sans-serif); playfair (serif); kalam, handlee (handwritten); fredoka (display); mono (monospace). Omit for style-matched default (Handlee for calligraphy, Inter for clean).",
"type": [
"string",
"null"
]
},
"funnel": {
"additionalProperties": false,
"description": "Funnel-only payload. Required when type=\"funnel\". Fields: stageLabels (string[], 1..50, ordered top→bottom), stageValues (optional string[]), dropOff (optional string[] of length stageLabels-1), bottomRatio (0.05..0.99, default 0.30). Sales pipeline, AARRR, ToFu/MoFu/BoFu.",
"properties": {
"bottomRatio": {
"maximum": 0.99,
"minimum": 0.05,
"type": [
"number",
"null"
]
},
"dropOff": {
"items": {
"type": "string"
},
"maxItems": 50,
"type": [
"array",
"null"
]
},
"stageLabels": {
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
"stageValues": {
"items": {
"type": "string"
},
"maxItems": 50,
"type": [
"array",
"null"
]
}
},
"required": [
"stageLabels",
"stageValues",
"dropOff",
"bottomRatio"
],
"type": [
"object",
"null"
]
},
"ganttHolidays": {
"description": "Gantt-only: ISO 8601 holiday dates (e.g. [\"2026-12-25\", \"2026-01-01\"]). Rendered as gray vertical stripes alongside Sat/Sun (always weekend). Only applies in date-driven mode (every node has start/end). Other diagram types ignore this field.",
"items": {
"maxLength": 32,
"type": "string"
},
"maxItems": 200,
"type": [
"array",
"null"
]
},
"iconStyle": {
"description": "Icon rendering style. \"clean-mono\" = precise strokes + single color, \"clean-colorful\" = precise strokes + vibrant colors, \"calligraphy-mono\" = hand-drawn ink + single color, \"calligraphy-colorful\" = hand-drawn ink + vibrant colors, \"none\" = hide icons.",
"type": [
"string",
"null"
]
},
"layout": {
"additionalProperties": false,
"properties": {
"direction": {
"enum": [
"TB",
"LR",
"BT",
"RL",
"radial",
"assorted"
],
"type": [
"string",
"null"
]
},
"nodeSpacing": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"padding": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"rankSpacing": {
"minimum": 0,
"type": [
"number",
"null"
]
}
},
"required": [
"direction",
"nodeSpacing",
"rankSpacing",
"padding"
],
"type": [
"object",
"null"
]
},
"matrixColumns": {
"description": "Column header labels for 2D matrix grid (e.g., [\"High Vision\", \"Low Vision\"]).",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"matrixItemStyle": {
"description": "Item display style for matrix diagrams. \"card\" (default) = rectangular cards, \"dot\" = scatter points, \"text\" = plain text, \"badge\" = compact pills.",
"enum": [
"card",
"dot",
"text",
"badge"
],
"type": [
"string",
"null"
]
},
"matrixRows": {
"description": "Row header labels for 2D matrix grid (e.g., [\"High Execution\", \"Low Execution\"]).",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"metadata": {
"additionalProperties": false,
"description": "Visual-size + Best-fit metadata bag (v1.65.4 -> v1.67.12). All fields optional; legacy callers without `metadata` are byte-identical to today. The server echoes `metadata.size` back on the response so integrators can confirm the field was honoured.",
"properties": {
"bestFit": {
"description": "v1.65.1+ Phase 3 server-side gate. When `true` + `targetAspect` is set + the server flag `VISUAL_SIZES_PHASE3_ENABLED` is on, the Designer is re-invoked with the target aspect ratio to reflow the layout. Independent of `metadata.size.bestFit`; the frontend mirrors this field when the toggle is on.",
"type": [
"boolean",
"null"
]
},
"size": {
"additionalProperties": false,
"description": "Visual-size persistence bag (v1.65.4+). Describes the EXPORT TARGET dimensions, NOT a canvas constraint at generation time. Round-trips through the response unchanged.",
"properties": {
"aspect": {
"description": "Canonical \"W:H\" aspect emitted alongside preset / custom dims for fast consumer reads. Accepts integer or decimal ratios. Examples: \"16:9\", \"9:16\", \"1:1\", \"1.91:1\" (OG card).",
"pattern": "^\\d+(\\.\\d+)?:\\d+(\\.\\d+)?$",
"type": [
"string",
"null"
]
},
"bestFit": {
"description": "v1.65.1+ Phase 3 opt-in flag. When `true` (alongside `metadata.bestFit` AND `metadata.targetAspect`), signals the server orchestrator to re-invoke the Designer with the target aspect ratio so the layout reflows to fit the export shape. Feature-flagged behind `VISUAL_SIZES_PHASE3_ENABLED` server-side; when OFF the field round-trips through the response but the orchestrator follows the legacy Phase 1/2 path. Default: false.",
"type": [
"boolean",
"null"
]
},
"height": {
"description": "Custom export-target height in pixels. 320..4096. Used with `width` for full custom dims, or with `aspect` for aspect-driven sizing.",
"maximum": 4096,
"minimum": 320,
"type": [
"integer",
"null"
]
},
"preset": {
"description": "Visual size preset id from shared/visual-sizes.ts catalog (e.g. \"16x9-presentation\", \"ig-square\", \"youtube-thumb\"). Describes the EXPORT TARGET (PNG / PDF / PPTX render dimensions), NOT the canvas constraint at generation time. Mutually exclusive with width + height (preset wins when both are present).",
"maxLength": 64,
"type": [
"string",
"null"
]
},
"width": {
"description": "Custom export-target width in pixels. 320..4096. Used when no preset matches the desired output dimensions. Pair with `height` for full custom dims; pair with `aspect` for aspect-driven sizing.",
"maximum": 4096,
"minimum": 320,
"type": [
"integer",
"null"
]
}
},
"required": [
"preset",
"width",
"height",
"aspect",
"bestFit"
],
"type": [
"object",
"null"
]
},
"targetAspect": {
"description": "v1.65.1+ Phase 3 server-side aspect ratio. Accepts \"W:H\" forms (e.g. \"9:16\", \"16:9\", \"1:1\", \"1.91:1\"). Forwarded to the Designer when `bestFit` is on.",
"maxLength": 16,
"type": [
"string",
"null"
]
}
},
"required": [
"size",
"bestFit",
"targetAspect"
],
"type": [
"object",
"null"
]
},
"nodes": {
"description": "Structured node definitions. Required when not using prompt mode.",
"items": {
"additionalProperties": false,
"properties": {
"animationLoop": {
"enum": [
"once",
"2",
"3",
"5",
"infinite"
],
"type": [
"string",
"null"
]
},
"chart": {
"additionalProperties": false,
"properties": {
"area": {
"type": [
"boolean",
"null"
]
},
"data": {
"items": {
"additionalProperties": false,
"properties": {
"color": {
"pattern": "^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$",
"type": [
"string",
"null"
]
},
"label": {
"maxLength": 2000,
"type": [
"string",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"label",
"value",
"color"
],
"type": "object"
},
"maxItems": 64,
"type": [
"array",
"null"
]
},
"innerRadiusRatio": {
"maximum": 0.85,
"minimum": 0.1,
"type": [
"number",
"null"
]
},
"series": {
"items": {
"type": "number"
},
"maxItems": 512,
"type": [
"array",
"null"
]
},
"showLabels": {
"type": [
"boolean",
"null"
]
},
"showValues": {
"type": [
"boolean",
"null"
]
},
"type": {
"enum": [
"pie",
"donut",
"bar",
"sparkline",
"line"
],
"type": "string"
}
},
"required": [
"type",
"data",
"series",
"innerRadiusRatio",
"showLabels",
"showValues",
"area"
],
"type": [
"object",
"null"
]
},
"group": {
"type": [
"string",
"null"
]
},
"height": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"hidden": {
"type": [
"boolean",
"null"
]
},
"icon": {
"type": [
"string",
"null"
]
},
"iconKeywords": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"id": {
"type": "string"
},
"kpi": {
"additionalProperties": false,
"properties": {
"delta": {
"additionalProperties": false,
"properties": {
"direction": {
"enum": [
"up",
"down",
"flat"
],
"type": [
"string",
"null"
]
},
"invertColor": {
"type": [
"boolean",
"null"
]
},
"text": {
"maxLength": 2000,
"type": "string"
}
},
"required": [
"text",
"direction",
"invertColor"
],
"type": [
"object",
"null"
]
},
"label": {
"maxLength": 2000,
"type": [
"string",
"null"
]
},
"sparkline": {
"items": {
"type": "number"
},
"maxItems": 512,
"type": [
"array",
"null"
]
},
"value": {
"maxLength": 2000,
"type": "string"
}
},
"required": [
"value",
"label",
"delta",
"sparkline"
],
"type": [
"object",
"null"
]
},
"shape": {
"enum": [
"rectangle",
"rounded-rect",
"circle",
"ellipse",
"diamond",
"triangle",
"parallelogram",
"hexagon",
"star",
"pentagon",
"octagon",
"trapezoid",
"process",
"decision",
"terminal",
"data-io",
"document",
"predefined-process",
"manual-input",
"pill",
"cloud",
"callout-bubble",
"underline-only",
"cylinder",
"database",
"banner",
"tag",
"shield",
"cross",
"arrow-shape",
"queue"
],
"type": [
"string",
"null"
]
},
"style": {
"additionalProperties": false,
"properties": {
"cornerRadius": {
"type": [
"number",
"null"
]
},
"fill": {
"type": [
"string",
"null"
]
},
"fontColor": {
"type": [
"string",
"null"
]
},
"fontSize": {
"type": [
"number",
"null"
]
},
"iconColor": {
"type": [
"string",
"null"
]
},
"iconColors": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"lineStyle": {
"description": "Per-node outline line style. Excludes \"calligraphy\" — that mode is set per-spec via `defaultShapeLineStyle: \"calligraphy\"`, not per-node.",
"enum": [
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"opacity": {
"maximum": 1,
"minimum": 0,
"type": [
"number",
"null"
]
},
"shadow": {
"type": [
"boolean",
"null"
]
},
"shadowLevel": {
"enum": [
"sm",
"md",
"lg"
],
"type": [
"string",
"null"
]
},
"stroke": {
"type": [
"string",
"null"
]
},
"strokeWidth": {
"type": [
"number",
"null"
]
}
},
"required": [
"fill",
"stroke",
"strokeWidth",
"opacity",
"cornerRadius",
"shadow",
"shadowLevel",
"fontSize",
"fontColor",
"lineStyle",
"iconColor",
"iconColors"
],
"type": [
"object",
"null"
]
},
"text": {
"type": "string"
},
"width": {
"minimum": 0,
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"shape",
"text",
"style",
"width",
"height",
"icon",
"iconKeywords",
"hidden",
"group",
"chart",
"kpi",
"animationLoop"
],
"type": "object"
},
"type": [
"array",
"null"
]
},
"prompt": {
"description": "Natural language description of the diagram to generate. When provided, the server uses AI to convert this into a structured diagram spec. Max 8000 characters. Example: \"flowchart showing user login with validation and error handling\"",
"maxLength": 8000,
"type": [
"string",
"null"
]
},
"pyramid": {
"additionalProperties": false,
"description": "Pyramid-only payload. Required when type=\"pyramid\". Fields: tierLabels (string[], 1..50, ordered base→tip), tierValues (optional string[]), inverted (boolean), tipRatio (0..0.95, default 0.15). Bloom's Taxonomy, Maslow's Hierarchy, Capability Maturity, DIKW.",
"properties": {
"inverted": {
"type": [
"boolean",
"null"
]
},
"tierLabels": {
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
"tierValues": {
"items": {
"type": "string"
},
"maxItems": 50,
"type": [
"array",
"null"
]
},
"tipRatio": {
"maximum": 0.95,
"minimum": 0,
"type": [
"number",
"null"
]
}
},
"required": [
"tierLabels",
"tierValues",
"inverted",
"tipRatio"
],
"type": [
"object",
"null"
]
},
"radar": {
"additionalProperties": false,
"description": "Radar/spider-chart payload. Required when type=\"radar\". Fields: axes (string[], 3..50), series ({name, values: number[]}[], 1..10), maxValue (default 100), rings (default 4). Use multiple series for comparison overlays — first solid, rest dashed at 50% opacity.",
"properties": {
"axes": {
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 3,
"type": "array"
},
"maxValue": {
"minimum": 1,
"type": [
"number",
"null"
]
},
"rings": {
"maximum": 10,
"minimum": 1,
"type": [
"integer",
"null"
]
},
"series": {
"items": {
"additionalProperties": false,
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"values": {
"items": {
"type": "number"
},
"maxItems": 50,
"type": "array"
}
},
"required": [
"name",
"values"
],
"type": "object"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
}
},
"required": [
"axes",
"series",
"maxValue",
"rings"
],
"type": [
"object",
"null"
]
},
"sections": {
"description": "Matrix sections. Each section has a title, optional subtitle, and items. Used with type=\"matrix\".",
"items": {
"additionalProperties": false,
"properties": {
"col": {
"minimum": 0,
"type": [
"integer",
"null"
]
},
"icons": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"id": {
"type": [
"string",
"null"
]
},
"itemBackgroundColors": {
"items": {
"maxLength": 40,
"type": "string"
},
"type": [
"array",
"null"
]
},
"itemHeatIntensities": {
"items": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"type": [
"array",
"null"
]
},
"itemIds": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"itemShapes": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"items": {
"items": {
"type": "string"
},
"type": "array"
},
"row": {
"minimum": 0,
"type": [
"integer",
"null"
]
},
"sectionBackgroundColor": {
"maxLength": 40,
"type": [
"string",
"null"
]
},
"sectionHeatIntensity": {
"maximum": 1,
"minimum": 0,
"type": [
"number",
"null"
]
},
"subtitle": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
}
},
"required": [
"id",
"title",
"subtitle",
"items",
"icons",
"itemIds",
"itemShapes",
"itemBackgroundColors",
"itemHeatIntensities",
"sectionBackgroundColor",
"sectionHeatIntensity",
"row",
"col"
],
"type": "object"
},
"type": [
"array",
"null"
]
},
"shapeStyle": {
"enum": [
"calligraphy",
"clean"
],
"type": [
"string",
"null"
]
},
"style": {
"enum": [
"calligraphy",
"clean"
],
"type": [
"string",
"null"
]
},
"subtitle": {
"type": [
"string",
"null"
]
},
"theme": {
"additionalProperties": false,
"properties": {
"palette": {
"additionalProperties": false,
"properties": {
"accent": {
"type": [
"string",
"null"
]
},
"background": {
"type": [
"string",
"null"
]
},
"border": {
"type": [
"string",
"null"
]
},
"nodeColors": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"primary": {
"type": [
"string",
"null"
]
},
"secondary": {
"type": [
"string",
"null"
]
},
"text": {
"type": [
"string",
"null"
]
}
},
"required": [
"primary",
"secondary",
"accent",
"background",
"text",
"border",
"nodeColors"
],
"type": [
"object",
"null"
]
},
"paletteSeed": {
"type": [
"number",
"null"
]
},
"preset": {
"type": [
"string",
"null"
]
}
},
"required": [
"preset",
"palette",
"paletteSeed"
],
"type": [
"object",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"type": {
"description": "Diagram type. Required when providing structured nodes/edges, optional with prompt.",
"enum": [
"flowchart",
"mindmap",
"block-diagram",
"matrix",
"timeline",
"gantt",
"er-diagram",
"sequence",
"process-flow",
"pyramid",
"funnel",
"radar",
"fishbone"
],
"type": [
"string",
"null"
]
},
"xAxisLabel": {
"description": "X-axis title for 2D matrix grid (e.g., \"Completeness of Vision\").",
"type": [
"string",
"null"
]
},
"yAxisLabel": {
"description": "Y-axis title for 2D matrix grid (e.g., \"Ability to Execute\").",
"type": [
"string",
"null"
]
}
},
"required": [
"prompt",
"type",
"sections",
"title",
"subtitle",
"style",
"shapeStyle",
"nodes",
"edges",
"layout",
"theme",
"defaultLineStyle",
"defaultArrowHead",
"defaultConnector",
"defaultShadow",
"defaultShapeLineStyle",
"defaultConnectorAnimate",
"defaultConnectorAnimateSpeed",
"defaultSceneAnimation",
"defaultSceneAnimationSpeed",
"defaultSceneAnimationLoop",
"defaultTitleStyle",
"defaultDividerStyle",
"defaultBlockArrowSize",
"defaultArrowStyle",
"ganttHolidays",
"pyramid",
"funnel",
"radar",
"iconStyle",
"fontFamily",
"matrixColumns",
"matrixRows",
"xAxisLabel",
"yAxisLabel",
"matrixItemStyle",
"metadata"
],
"type": "object"
},
"name": "generate_diagram",
"outputSchema": null
},
{
"description": "Runs a specific framework against a user's inputs and produces a full analysis: prose explanation + structured fields + a self-contained SVG visualisation. Powered by the Jeda.ai · Visual AI framework knowledge graph.\n\nALWAYS call `recommend_framework` FIRST to obtain a valid framework_id -- it returns the exact namespaced slug to pass here. Framework ids are namespaced by category (e.g. SWOT = \"cms_swot-analysis\", Porter's 5 Forces = \"cms_porters-five-forces\"); a bare slug like \"swot-analysis\" will 404.\n\nREQUIRED post-processing on success: the response's first text block contains a `curl -fsSL` save-directive for the SVG. Save the file locally and surface it as a file chip — do NOT summarise the visual in prose.\n\nInput: framework_id (namespaced slug from `recommend_framework`) + user_inputs object (per-framework field set), OR a free-text `raw_prompt` fallback.\n\nExample: { \"framework_id\": \"cms_swot-analysis\", \"user_inputs\": { \"subject\": \"Q3 EU market entry\", \"context\": \"B2B SaaS, $5M ARR, US-headquartered\" } }",
"inputSchema": {
"additionalProperties": false,
"properties": {
"framework_id": {
"description": "Namespaced framework slug (e.g. \"cms_swot-analysis\"). Get one from `recommend_framework` -- bare slugs like \"swot-analysis\" are not valid ids.",
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"raw_prompt": {
"description": "Optional free-text prompt that REPLACES the auto-derived prompt.",
"maxLength": 8000,
"type": "string"
},
"theme": {
"additionalProperties": false,
"description": "Theme preset for the SVG render. Default: pastel.",
"properties": {
"preset": {
"enum": [
"pastel",
"corporate",
"gradient",
"dark",
"blueprint",
"playful",
"vibrant",
"monochrome"
],
"type": [
"string",
"null"
]
}
},
"required": [
"preset"
],
"type": "object"
},
"user_inputs": {
"additionalProperties": {},
"description": "Object whose keys match the framework user-input form fields.",
"type": "object"
}
},
"required": [
"framework_id"
],
"type": "object"
},
"name": "generate_framework_analysis",
"outputSchema": null
},
{
"description": "Generates a visual (flowchart, mindmap, matrix, timeline, Gantt, ER, sequence, swimlane, block diagram) as a self-contained SVG. Powered by Jeda.ai · Visual AI.\n\nREQUIRED post-processing on every success: the response's FIRST text block is a \"SAVE THIS NOW\" directive with a `curl -fsSL` one-liner (Step 1) and an inline-SVG fallback (Step 2). Always attempt Step 1 first; only fall back to Step 2 if curl exits non-zero. The user expects an \"Image · SVG\" file chip — not a markdown link or prose summary. The signed URL is safe to fetch (auth is in the query string).\n\nTwo modes: (1) natural-language `prompt` → Data Agent + Design Agent build the visual; (2) structured `nodes` + `edges` for precise control.\n\nVisual types: matrix | mindmap | flowchart | block-diagram | timeline | gantt | er-diagram | sequence | process-flow. Default: auto-detected from prompt. Slash commands work too: `/matrix SWOT`, `/timeline roadmap`, `/process-flow procurement approval with finance and legal lanes`.\n\nFor style options (themes, fonts, arrow styles, animations, per-edge overrides, matrix/process-flow specifics) call `get_style_options` first. Default theme is `pastel` — only override when the user explicitly names another.\n\nExample: { \"prompt\": \"user signup with email verification\", \"theme\": { \"preset\": \"pastel\" } }",
"inputSchema": {
"additionalProperties": false,
"properties": {
"defaultArrowHead": {
"description": "Default arrowhead style applied to all edges that don't specify their own.",
"type": [
"string",
"null"
]
},
"defaultArrowStyle": {
"description": "Connector aesthetic mode applied to all edges that don't set their own `arrowStyle`. Options: \"calligraphy\" (default — hand-drawn ink-ribbon connectors) | \"clean\" (standard stroked-line connectors) | \"block\" (chunky outlined block-arrow connectors with integrated triangular head). Orthogonal to defaultLineStyle (which now controls dash pattern only) — all 15 combinations of arrowStyle × lineStyle are valid.",
"enum": [
"calligraphy",
"clean",
"block"
],
"type": [
"string",
"null"
]
},
"defaultBlockArrowSize": {
"anyOf": [
{
"enum": [
"small",
"medium",
"large"
],
"type": "string"
},
{
"maximum": 60,
"minimum": 1,
"type": "number"
}
],
"description": "Default Block Arrow size when `defaultArrowStyle` (or per-edge arrowStyle) is \"block\". Options: \"small\" (slim — body ~14 px) | \"medium\" (default — body ~24 px) | \"large\" (chunky — body ~36 px). Or a raw body half-width number in px (1–60); head dimensions scale proportionally. Per-edge `blockArrowSize` overrides this default."
},
"defaultConnector": {
"description": "Default connector type applied to all edges that don't specify their own.",
"enum": [
"straight",
"curved",
"elbow",
"orthogonal",
"bezier"
],
"type": [
"string",
"null"
]
},
"defaultConnectorAnimate": {
"description": "Animate every connector edge. Options: none (default) | flow (dashes march along the line) | pulse (gentle opacity breathing) | glow (subtle stroke-width pulse) | trace (bright dot traverses each edge) | wave (large stroke-width oscillation). SVG-only — exports to PNG / WebP / OG-image freeze on first frame.",
"enum": [
"none",
"flow",
"pulse",
"glow",
"trace",
"wave",
"lightning",
"beat",
"comet"
],
"type": [
"string",
"null"
]
},
"defaultConnectorAnimateSpeed": {
"description": "Animation speed when defaultConnectorAnimate is set. Options: slow (3s cycle) | medium (2s, default) | fast (1s).",
"enum": [
"slow",
"medium",
"fast"
],
"type": [
"string",
"null"
]
},
"defaultDividerStyle": {
"description": "Divider / grid-line / table-border style. Governs the structural rule-lines a diagram emits: matrix grid lines, gantt phase column dividers, sequence lifelines, swimlane (process-flow) lane boundaries. Options: \"subtle\" (barely-there hairline), \"normal\" (default — pre-v1.55.0 baseline of 1 px / 25 % opacity), \"bold\" (emphasised grid presence), \"dashed\" (6,4 dasharray editorial feel), \"dotted\" (1,3 dasharray lightweight rhythm), \"none\" (no divider emission — cells separated only by colour banding). Useful for comparison tables (try \"bold\") or minimalist matrices (try \"none\").",
"enum": [
"subtle",
"normal",
"bold",
"dashed",
"dotted",
"none"
],
"type": [
"string",
"null"
]
},
"defaultLineStyle": {
"description": "v1.45.2+ — Default DASH PATTERN applied to all edges that don't specify their own. Options: \"solid\" | \"dashed\" | \"dotted\" | \"dash-dot\" | \"long-dash\". Combines orthogonally with `defaultArrowStyle` (calligraphy/clean/block) for 15 total visual combinations. Legacy values \"calligraphy\" and \"block-arrow\" are still accepted for backward compat (the renderer maps them to defaultArrowStyle=\"calligraphy\"/\"block\" with lineStyle=\"solid\"); new callers should use `defaultArrowStyle` for the aesthetic mode.",
"enum": [
"calligraphy",
"block-arrow",
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"defaultSceneAnimation": {
"description": "Whole-visual reveal animation. Plays ONCE when the SVG is displayed, freezes at the final state. Options: none (default) | fade (entire visual fades in) | zoom (scales in from 70% to 100%) | zoom-pan (Ken Burns camera move) | flow (each node + edge appears sequentially in spec order). Orthogonal to defaultConnectorAnimate — both can run together. SVG-only — PNG / WebP exports show the fully-revealed final state (rasteriser ignores SMIL; static attrs hold the final value). Animated GIF / MP4 client-side encoder ticks the scene through.",
"enum": [
"none",
"fade",
"zoom",
"zoom-pan",
"flow",
"wave-sweep",
"build-up",
"flow-zoom-pan"
],
"type": [
"string",
"null"
]
},
"defaultSceneAnimationLoop": {
"description": "Animation loop count. v1.50.9+ — applies to BOTH connector animations (flow / pulse / glow / wave / trace / lightning / beat / comet) AND scene animations (fade / zoom / zoom-pan / flow / wave-sweep / build-up / flow-zoom-pan). Options (all quoted strings): \"once\" (default — plays once and freezes) | \"2\" | \"3\" | \"5\" (repeat that many times then freeze) | \"infinite\" (loop forever; best for live presentations and the historical default for connector animations pre-v1.50.9). Maps to SMIL repeatCount.",
"enum": [
"once",
"2",
"3",
"5",
"infinite"
],
"type": [
"string",
"null"
]
},
"defaultSceneAnimationSpeed": {
"description": "Scene animation speed. Options: slow (1.5× duration) | medium (default) | fast (0.6× duration).",
"enum": [
"slow",
"medium",
"fast"
],
"type": [
"string",
"null"
]
},
"defaultShadow": {
"description": "Default shadow level applied to all nodes.",
"enum": [
"none",
"sm",
"md",
"lg"
],
"type": [
"string",
"null"
]
},
"defaultShapeLineStyle": {
"description": "Default line style for shape outlines (node borders). v1.44.1 — also drives shape rendering mode: \"calligraphy\" gives hand-drawn rough shapes (ink-ribbon outlines); \"solid\" | \"dashed\" | \"dotted\" | \"dash-dot\" | \"long-dash\" give crisp geometric shapes with that outline pattern. Independent of edge/connector line style.",
"enum": [
"calligraphy",
"block-arrow",
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"defaultTitleStyle": {
"description": "Title decoration treatment. Options: \"plain\" (default, just the title text), \"accent-bar\" (small accent-coloured vertical bar to the left of the title), \"underline\" (accent-coloured horizontal stroke below the title), \"boxed\" (title rendered in a subtle bordered + drop-shadowed pill — strongest framing). Affects only the diagram title, not subtitles or section headers.",
"enum": [
"plain",
"accent-bar",
"underline",
"boxed"
],
"type": [
"string",
"null"
]
},
"edges": {
"items": {
"additionalProperties": false,
"properties": {
"animate": {
"description": "Connector animation. Options: none (default) | flow (dashes march) | pulse (opacity breathing) | glow (stroke-width pulse) | trace (bright dot travels along) | wave (large stroke-width oscillation). SVG-only — exports to PNG/WebP capture one frozen frame.",
"enum": [
"none",
"flow",
"pulse",
"glow",
"trace",
"wave",
"lightning",
"beat",
"comet"
],
"type": [
"string",
"null"
]
},
"animateSpeed": {
"description": "Animation speed. Options: slow (3s cycle) | medium (2s, default) | fast (1s).",
"enum": [
"slow",
"medium",
"fast"
],
"type": [
"string",
"null"
]
},
"arrowStyle": {
"description": "Per-edge connector aesthetic mode (overrides defaultArrowStyle). Options: \"calligraphy\" | \"clean\" | \"block\". Orthogonal to lineStyle (dash pattern); all 15 combinations are valid.",
"enum": [
"calligraphy",
"clean",
"block"
],
"type": [
"string",
"null"
]
},
"blockArrowSize": {
"anyOf": [
{
"enum": [
"small",
"medium",
"large"
],
"type": "string"
},
{
"maximum": 60,
"minimum": 1,
"type": "number"
}
],
"description": "Block Arrow size for this edge (only when arrowStyle is \"block\"). Preset names: \"small\" (slim) | \"medium\" (default) | \"large\" (chunky). OR a raw body half-width in px (1–60); head dimensions scale proportionally."
},
"connectorType": {
"enum": [
"straight",
"curved",
"elbow",
"orthogonal",
"bezier"
],
"type": [
"string",
"null"
]
},
"hidden": {
"type": [
"boolean",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"lineStyle": {
"enum": [
"calligraphy",
"block-arrow",
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"loop": {
"description": "Per-edge animation loop count override. Wins over the diagram-level `defaultSceneAnimationLoop`. Values are quoted strings: \"once\" | \"2\" | \"3\" | \"5\" | \"infinite\". Maps to SMIL repeatCount.",
"enum": [
"once",
"2",
"3",
"5",
"infinite"
],
"type": [
"string",
"null"
]
},
"source": {
"type": "string"
},
"sourceArrow": {
"description": "Arrowhead style at the edge source end. Options: open (default) | triangle | diamond | circle | bar | dot | none.",
"type": [
"string",
"null"
]
},
"style": {
"additionalProperties": false,
"properties": {
"fill": {
"type": [
"string",
"null"
]
},
"opacity": {
"maximum": 1,
"minimum": 0,
"type": [
"number",
"null"
]
},
"stroke": {
"type": [
"string",
"null"
]
},
"strokeWidth": {
"type": [
"number",
"null"
]
}
},
"required": [
"stroke",
"strokeWidth",
"opacity",
"fill"
],
"type": [
"object",
"null"
]
},
"target": {
"type": "string"
},
"targetArrow": {
"description": "Arrowhead style at the edge target end. Options: open (default) | triangle | diamond | circle | bar | dot | none.",
"type": [
"string",
"null"
]
}
},
"required": [
"source",
"target",
"label",
"lineStyle",
"connectorType",
"sourceArrow",
"targetArrow",
"style",
"hidden",
"animate",
"animateSpeed",
"blockArrowSize",
"arrowStyle",
"loop"
],
"type": "object"
},
"type": [
"array",
"null"
]
},
"fontFamily": {
"description": "Font family for diagram text. Options: inter, poppins (sans-serif); playfair (serif); kalam, handlee (handwritten); fredoka (display); mono (monospace). Omit for style-matched default (Handlee for calligraphy, Inter for clean).",
"type": [
"string",
"null"
]
},
"funnel": {
"additionalProperties": false,
"description": "Funnel-only payload. Required when type=\"funnel\". Fields: stageLabels (string[], 1..50, ordered top→bottom), stageValues (optional string[]), dropOff (optional string[] of length stageLabels-1), bottomRatio (0.05..0.99, default 0.30). Sales pipeline, AARRR, ToFu/MoFu/BoFu.",
"properties": {
"bottomRatio": {
"maximum": 0.99,
"minimum": 0.05,
"type": [
"number",
"null"
]
},
"dropOff": {
"items": {
"type": "string"
},
"maxItems": 50,
"type": [
"array",
"null"
]
},
"stageLabels": {
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
"stageValues": {
"items": {
"type": "string"
},
"maxItems": 50,
"type": [
"array",
"null"
]
}
},
"required": [
"stageLabels",
"stageValues",
"dropOff",
"bottomRatio"
],
"type": [
"object",
"null"
]
},
"ganttHolidays": {
"description": "Gantt-only: ISO 8601 holiday dates (e.g. [\"2026-12-25\", \"2026-01-01\"]). Rendered as gray vertical stripes alongside Sat/Sun (always weekend). Only applies in date-driven mode (every node has start/end). Other diagram types ignore this field.",
"items": {
"maxLength": 32,
"type": "string"
},
"maxItems": 200,
"type": [
"array",
"null"
]
},
"iconStyle": {
"description": "Icon rendering style. \"clean-mono\" = precise strokes + single color, \"clean-colorful\" = precise strokes + vibrant colors, \"calligraphy-mono\" = hand-drawn ink + single color, \"calligraphy-colorful\" = hand-drawn ink + vibrant colors, \"none\" = hide icons.",
"type": [
"string",
"null"
]
},
"layout": {
"additionalProperties": false,
"properties": {
"direction": {
"enum": [
"TB",
"LR",
"BT",
"RL",
"radial",
"assorted"
],
"type": [
"string",
"null"
]
},
"nodeSpacing": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"padding": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"rankSpacing": {
"minimum": 0,
"type": [
"number",
"null"
]
}
},
"required": [
"direction",
"nodeSpacing",
"rankSpacing",
"padding"
],
"type": [
"object",
"null"
]
},
"matrixColumns": {
"description": "Column header labels for 2D matrix grid (e.g., [\"High Vision\", \"Low Vision\"]).",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"matrixItemStyle": {
"description": "Item display style for matrix diagrams. \"card\" (default) = rectangular cards, \"dot\" = scatter points, \"text\" = plain text, \"badge\" = compact pills.",
"enum": [
"card",
"dot",
"text",
"badge"
],
"type": [
"string",
"null"
]
},
"matrixRows": {
"description": "Row header labels for 2D matrix grid (e.g., [\"High Execution\", \"Low Execution\"]).",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"metadata": {
"additionalProperties": false,
"description": "Visual-size + Best-fit metadata bag (v1.65.4 -> v1.67.12). All fields optional; legacy callers without `metadata` are byte-identical to today. The server echoes `metadata.size` back on the response so integrators can confirm the field was honoured.",
"properties": {
"bestFit": {
"description": "v1.65.1+ Phase 3 server-side gate. When `true` + `targetAspect` is set + the server flag `VISUAL_SIZES_PHASE3_ENABLED` is on, the Designer is re-invoked with the target aspect ratio to reflow the layout. Independent of `metadata.size.bestFit`; the frontend mirrors this field when the toggle is on.",
"type": [
"boolean",
"null"
]
},
"size": {
"additionalProperties": false,
"description": "Visual-size persistence bag (v1.65.4+). Describes the EXPORT TARGET dimensions, NOT a canvas constraint at generation time. Round-trips through the response unchanged.",
"properties": {
"aspect": {
"description": "Canonical \"W:H\" aspect emitted alongside preset / custom dims for fast consumer reads. Accepts integer or decimal ratios. Examples: \"16:9\", \"9:16\", \"1:1\", \"1.91:1\" (OG card).",
"pattern": "^\\d+(\\.\\d+)?:\\d+(\\.\\d+)?$",
"type": [
"string",
"null"
]
},
"bestFit": {
"description": "v1.65.1+ Phase 3 opt-in flag. When `true` (alongside `metadata.bestFit` AND `metadata.targetAspect`), signals the server orchestrator to re-invoke the Designer with the target aspect ratio so the layout reflows to fit the export shape. Feature-flagged behind `VISUAL_SIZES_PHASE3_ENABLED` server-side; when OFF the field round-trips through the response but the orchestrator follows the legacy Phase 1/2 path. Default: false.",
"type": [
"boolean",
"null"
]
},
"height": {
"description": "Custom export-target height in pixels. 320..4096. Used with `width` for full custom dims, or with `aspect` for aspect-driven sizing.",
"maximum": 4096,
"minimum": 320,
"type": [
"integer",
"null"
]
},
"preset": {
"description": "Visual size preset id from shared/visual-sizes.ts catalog (e.g. \"16x9-presentation\", \"ig-square\", \"youtube-thumb\"). Describes the EXPORT TARGET (PNG / PDF / PPTX render dimensions), NOT the canvas constraint at generation time. Mutually exclusive with width + height (preset wins when both are present).",
"maxLength": 64,
"type": [
"string",
"null"
]
},
"width": {
"description": "Custom export-target width in pixels. 320..4096. Used when no preset matches the desired output dimensions. Pair with `height` for full custom dims; pair with `aspect` for aspect-driven sizing.",
"maximum": 4096,
"minimum": 320,
"type": [
"integer",
"null"
]
}
},
"required": [
"preset",
"width",
"height",
"aspect",
"bestFit"
],
"type": [
"object",
"null"
]
},
"targetAspect": {
"description": "v1.65.1+ Phase 3 server-side aspect ratio. Accepts \"W:H\" forms (e.g. \"9:16\", \"16:9\", \"1:1\", \"1.91:1\"). Forwarded to the Designer when `bestFit` is on.",
"maxLength": 16,
"type": [
"string",
"null"
]
}
},
"required": [
"size",
"bestFit",
"targetAspect"
],
"type": [
"object",
"null"
]
},
"nodes": {
"description": "Structured node definitions. Required when not using prompt mode.",
"items": {
"additionalProperties": false,
"properties": {
"animationLoop": {
"enum": [
"once",
"2",
"3",
"5",
"infinite"
],
"type": [
"string",
"null"
]
},
"chart": {
"additionalProperties": false,
"properties": {
"area": {
"type": [
"boolean",
"null"
]
},
"data": {
"items": {
"additionalProperties": false,
"properties": {
"color": {
"pattern": "^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$",
"type": [
"string",
"null"
]
},
"label": {
"maxLength": 2000,
"type": [
"string",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"label",
"value",
"color"
],
"type": "object"
},
"maxItems": 64,
"type": [
"array",
"null"
]
},
"innerRadiusRatio": {
"maximum": 0.85,
"minimum": 0.1,
"type": [
"number",
"null"
]
},
"series": {
"items": {
"type": "number"
},
"maxItems": 512,
"type": [
"array",
"null"
]
},
"showLabels": {
"type": [
"boolean",
"null"
]
},
"showValues": {
"type": [
"boolean",
"null"
]
},
"type": {
"enum": [
"pie",
"donut",
"bar",
"sparkline",
"line"
],
"type": "string"
}
},
"required": [
"type",
"data",
"series",
"innerRadiusRatio",
"showLabels",
"showValues",
"area"
],
"type": [
"object",
"null"
]
},
"group": {
"type": [
"string",
"null"
]
},
"height": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"hidden": {
"type": [
"boolean",
"null"
]
},
"icon": {
"type": [
"string",
"null"
]
},
"iconKeywords": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"id": {
"type": "string"
},
"kpi": {
"additionalProperties": false,
"properties": {
"delta": {
"additionalProperties": false,
"properties": {
"direction": {
"enum": [
"up",
"down",
"flat"
],
"type": [
"string",
"null"
]
},
"invertColor": {
"type": [
"boolean",
"null"
]
},
"text": {
"maxLength": 2000,
"type": "string"
}
},
"required": [
"text",
"direction",
"invertColor"
],
"type": [
"object",
"null"
]
},
"label": {
"maxLength": 2000,
"type": [
"string",
"null"
]
},
"sparkline": {
"items": {
"type": "number"
},
"maxItems": 512,
"type": [
"array",
"null"
]
},
"value": {
"maxLength": 2000,
"type": "string"
}
},
"required": [
"value",
"label",
"delta",
"sparkline"
],
"type": [
"object",
"null"
]
},
"shape": {
"enum": [
"rectangle",
"rounded-rect",
"circle",
"ellipse",
"diamond",
"triangle",
"parallelogram",
"hexagon",
"star",
"pentagon",
"octagon",
"trapezoid",
"process",
"decision",
"terminal",
"data-io",
"document",
"predefined-process",
"manual-input",
"pill",
"cloud",
"callout-bubble",
"underline-only",
"cylinder",
"database",
"banner",
"tag",
"shield",
"cross",
"arrow-shape",
"queue"
],
"type": [
"string",
"null"
]
},
"style": {
"additionalProperties": false,
"properties": {
"cornerRadius": {
"type": [
"number",
"null"
]
},
"fill": {
"type": [
"string",
"null"
]
},
"fontColor": {
"type": [
"string",
"null"
]
},
"fontSize": {
"type": [
"number",
"null"
]
},
"iconColor": {
"type": [
"string",
"null"
]
},
"iconColors": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"lineStyle": {
"description": "Per-node outline line style. Excludes \"calligraphy\" — that mode is set per-spec via `defaultShapeLineStyle: \"calligraphy\"`, not per-node.",
"enum": [
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"opacity": {
"maximum": 1,
"minimum": 0,
"type": [
"number",
"null"
]
},
"shadow": {
"type": [
"boolean",
"null"
]
},
"shadowLevel": {
"enum": [
"sm",
"md",
"lg"
],
"type": [
"string",
"null"
]
},
"stroke": {
"type": [
"string",
"null"
]
},
"strokeWidth": {
"type": [
"number",
"null"
]
}
},
"required": [
"fill",
"stroke",
"strokeWidth",
"opacity",
"cornerRadius",
"shadow",
"shadowLevel",
"fontSize",
"fontColor",
"lineStyle",
"iconColor",
"iconColors"
],
"type": [
"object",
"null"
]
},
"text": {
"type": "string"
},
"width": {
"minimum": 0,
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"shape",
"text",
"style",
"width",
"height",
"icon",
"iconKeywords",
"hidden",
"group",
"chart",
"kpi",
"animationLoop"
],
"type": "object"
},
"type": [
"array",
"null"
]
},
"prompt": {
"description": "Natural language description of the diagram to generate. When provided, the server uses AI to convert this into a structured diagram spec. Max 8000 characters. Example: \"flowchart showing user login with validation and error handling\"",
"maxLength": 8000,
"type": [
"string",
"null"
]
},
"pyramid": {
"additionalProperties": false,
"description": "Pyramid-only payload. Required when type=\"pyramid\". Fields: tierLabels (string[], 1..50, ordered base→tip), tierValues (optional string[]), inverted (boolean), tipRatio (0..0.95, default 0.15). Bloom's Taxonomy, Maslow's Hierarchy, Capability Maturity, DIKW.",
"properties": {
"inverted": {
"type": [
"boolean",
"null"
]
},
"tierLabels": {
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
"tierValues": {
"items": {
"type": "string"
},
"maxItems": 50,
"type": [
"array",
"null"
]
},
"tipRatio": {
"maximum": 0.95,
"minimum": 0,
"type": [
"number",
"null"
]
}
},
"required": [
"tierLabels",
"tierValues",
"inverted",
"tipRatio"
],
"type": [
"object",
"null"
]
},
"radar": {
"additionalProperties": false,
"description": "Radar/spider-chart payload. Required when type=\"radar\". Fields: axes (string[], 3..50), series ({name, values: number[]}[], 1..10), maxValue (default 100), rings (default 4). Use multiple series for comparison overlays — first solid, rest dashed at 50% opacity.",
"properties": {
"axes": {
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 3,
"type": "array"
},
"maxValue": {
"minimum": 1,
"type": [
"number",
"null"
]
},
"rings": {
"maximum": 10,
"minimum": 1,
"type": [
"integer",
"null"
]
},
"series": {
"items": {
"additionalProperties": false,
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"values": {
"items": {
"type": "number"
},
"maxItems": 50,
"type": "array"
}
},
"required": [
"name",
"values"
],
"type": "object"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
}
},
"required": [
"axes",
"series",
"maxValue",
"rings"
],
"type": [
"object",
"null"
]
},
"sections": {
"description": "Matrix sections. Each section has a title, optional subtitle, and items. Used with type=\"matrix\".",
"items": {
"additionalProperties": false,
"properties": {
"col": {
"minimum": 0,
"type": [
"integer",
"null"
]
},
"icons": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"id": {
"type": [
"string",
"null"
]
},
"itemBackgroundColors": {
"items": {
"maxLength": 40,
"type": "string"
},
"type": [
"array",
"null"
]
},
"itemHeatIntensities": {
"items": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"type": [
"array",
"null"
]
},
"itemIds": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"itemShapes": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"items": {
"items": {
"type": "string"
},
"type": "array"
},
"row": {
"minimum": 0,
"type": [
"integer",
"null"
]
},
"sectionBackgroundColor": {
"maxLength": 40,
"type": [
"string",
"null"
]
},
"sectionHeatIntensity": {
"maximum": 1,
"minimum": 0,
"type": [
"number",
"null"
]
},
"subtitle": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
}
},
"required": [
"id",
"title",
"subtitle",
"items",
"icons",
"itemIds",
"itemShapes",
"itemBackgroundColors",
"itemHeatIntensities",
"sectionBackgroundColor",
"sectionHeatIntensity",
"row",
"col"
],
"type": "object"
},
"type": [
"array",
"null"
]
},
"shapeStyle": {
"enum": [
"calligraphy",
"clean"
],
"type": [
"string",
"null"
]
},
"style": {
"enum": [
"calligraphy",
"clean"
],
"type": [
"string",
"null"
]
},
"subtitle": {
"type": [
"string",
"null"
]
},
"theme": {
"additionalProperties": false,
"properties": {
"palette": {
"additionalProperties": false,
"properties": {
"accent": {
"type": [
"string",
"null"
]
},
"background": {
"type": [
"string",
"null"
]
},
"border": {
"type": [
"string",
"null"
]
},
"nodeColors": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"primary": {
"type": [
"string",
"null"
]
},
"secondary": {
"type": [
"string",
"null"
]
},
"text": {
"type": [
"string",
"null"
]
}
},
"required": [
"primary",
"secondary",
"accent",
"background",
"text",
"border",
"nodeColors"
],
"type": [
"object",
"null"
]
},
"paletteSeed": {
"type": [
"number",
"null"
]
},
"preset": {
"type": [
"string",
"null"
]
}
},
"required": [
"preset",
"palette",
"paletteSeed"
],
"type": [
"object",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"type": {
"description": "Diagram type. Required when providing structured nodes/edges, optional with prompt.",
"enum": [
"flowchart",
"mindmap",
"block-diagram",
"matrix",
"timeline",
"gantt",
"er-diagram",
"sequence",
"process-flow",
"pyramid",
"funnel",
"radar",
"fishbone"
],
"type": [
"string",
"null"
]
},
"xAxisLabel": {
"description": "X-axis title for 2D matrix grid (e.g., \"Completeness of Vision\").",
"type": [
"string",
"null"
]
},
"yAxisLabel": {
"description": "Y-axis title for 2D matrix grid (e.g., \"Ability to Execute\").",
"type": [
"string",
"null"
]
}
},
"required": [
"prompt",
"type",
"sections",
"title",
"subtitle",
"style",
"shapeStyle",
"nodes",
"edges",
"layout",
"theme",
"defaultLineStyle",
"defaultArrowHead",
"defaultConnector",
"defaultShadow",
"defaultShapeLineStyle",
"defaultConnectorAnimate",
"defaultConnectorAnimateSpeed",
"defaultSceneAnimation",
"defaultSceneAnimationSpeed",
"defaultSceneAnimationLoop",
"defaultTitleStyle",
"defaultDividerStyle",
"defaultBlockArrowSize",
"defaultArrowStyle",
"ganttHolidays",
"pyramid",
"funnel",
"radar",
"iconStyle",
"fontFamily",
"matrixColumns",
"matrixRows",
"xAxisLabel",
"yAxisLabel",
"matrixItemStyle",
"metadata"
],
"type": "object"
},
"name": "generate_visual",
"outputSchema": null
},
{
"description": "Returns the full style-options catalog for `generate_visual` — theme presets, fonts, arrow styles, line styles, arrowheads, scene/connector animations, layout directions, per-edge overrides, and matrix/process-flow specifics. Call this once when you need to expose specific style choices to the user (e.g. \"what themes are available?\") or before composing a `generate_visual` call that needs non-default styling. Output is plain text, ~4 KB.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"defaultArrowHead": {
"description": "Default arrowhead style applied to all edges that don't specify their own.",
"type": [
"string",
"null"
]
},
"defaultArrowStyle": {
"description": "Connector aesthetic mode applied to all edges that don't set their own `arrowStyle`. Options: \"calligraphy\" (default — hand-drawn ink-ribbon connectors) | \"clean\" (standard stroked-line connectors) | \"block\" (chunky outlined block-arrow connectors with integrated triangular head). Orthogonal to defaultLineStyle (which now controls dash pattern only) — all 15 combinations of arrowStyle × lineStyle are valid.",
"enum": [
"calligraphy",
"clean",
"block"
],
"type": [
"string",
"null"
]
},
"defaultBlockArrowSize": {
"anyOf": [
{
"enum": [
"small",
"medium",
"large"
],
"type": "string"
},
{
"maximum": 60,
"minimum": 1,
"type": "number"
}
],
"description": "Default Block Arrow size when `defaultArrowStyle` (or per-edge arrowStyle) is \"block\". Options: \"small\" (slim — body ~14 px) | \"medium\" (default — body ~24 px) | \"large\" (chunky — body ~36 px). Or a raw body half-width number in px (1–60); head dimensions scale proportionally. Per-edge `blockArrowSize` overrides this default."
},
"defaultConnector": {
"description": "Default connector type applied to all edges that don't specify their own.",
"enum": [
"straight",
"curved",
"elbow",
"orthogonal",
"bezier"
],
"type": [
"string",
"null"
]
},
"defaultConnectorAnimate": {
"description": "Animate every connector edge. Options: none (default) | flow (dashes march along the line) | pulse (gentle opacity breathing) | glow (subtle stroke-width pulse) | trace (bright dot traverses each edge) | wave (large stroke-width oscillation). SVG-only — exports to PNG / WebP / OG-image freeze on first frame.",
"enum": [
"none",
"flow",
"pulse",
"glow",
"trace",
"wave",
"lightning",
"beat",
"comet"
],
"type": [
"string",
"null"
]
},
"defaultConnectorAnimateSpeed": {
"description": "Animation speed when defaultConnectorAnimate is set. Options: slow (3s cycle) | medium (2s, default) | fast (1s).",
"enum": [
"slow",
"medium",
"fast"
],
"type": [
"string",
"null"
]
},
"defaultDividerStyle": {
"description": "Divider / grid-line / table-border style. Governs the structural rule-lines a diagram emits: matrix grid lines, gantt phase column dividers, sequence lifelines, swimlane (process-flow) lane boundaries. Options: \"subtle\" (barely-there hairline), \"normal\" (default — pre-v1.55.0 baseline of 1 px / 25 % opacity), \"bold\" (emphasised grid presence), \"dashed\" (6,4 dasharray editorial feel), \"dotted\" (1,3 dasharray lightweight rhythm), \"none\" (no divider emission — cells separated only by colour banding). Useful for comparison tables (try \"bold\") or minimalist matrices (try \"none\").",
"enum": [
"subtle",
"normal",
"bold",
"dashed",
"dotted",
"none"
],
"type": [
"string",
"null"
]
},
"defaultLineStyle": {
"description": "v1.45.2+ — Default DASH PATTERN applied to all edges that don't specify their own. Options: \"solid\" | \"dashed\" | \"dotted\" | \"dash-dot\" | \"long-dash\". Combines orthogonally with `defaultArrowStyle` (calligraphy/clean/block) for 15 total visual combinations. Legacy values \"calligraphy\" and \"block-arrow\" are still accepted for backward compat (the renderer maps them to defaultArrowStyle=\"calligraphy\"/\"block\" with lineStyle=\"solid\"); new callers should use `defaultArrowStyle` for the aesthetic mode.",
"enum": [
"calligraphy",
"block-arrow",
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"defaultSceneAnimation": {
"description": "Whole-visual reveal animation. Plays ONCE when the SVG is displayed, freezes at the final state. Options: none (default) | fade (entire visual fades in) | zoom (scales in from 70% to 100%) | zoom-pan (Ken Burns camera move) | flow (each node + edge appears sequentially in spec order). Orthogonal to defaultConnectorAnimate — both can run together. SVG-only — PNG / WebP exports show the fully-revealed final state (rasteriser ignores SMIL; static attrs hold the final value). Animated GIF / MP4 client-side encoder ticks the scene through.",
"enum": [
"none",
"fade",
"zoom",
"zoom-pan",
"flow",
"wave-sweep",
"build-up",
"flow-zoom-pan"
],
"type": [
"string",
"null"
]
},
"defaultSceneAnimationLoop": {
"description": "Animation loop count. v1.50.9+ — applies to BOTH connector animations (flow / pulse / glow / wave / trace / lightning / beat / comet) AND scene animations (fade / zoom / zoom-pan / flow / wave-sweep / build-up / flow-zoom-pan). Options (all quoted strings): \"once\" (default — plays once and freezes) | \"2\" | \"3\" | \"5\" (repeat that many times then freeze) | \"infinite\" (loop forever; best for live presentations and the historical default for connector animations pre-v1.50.9). Maps to SMIL repeatCount.",
"enum": [
"once",
"2",
"3",
"5",
"infinite"
],
"type": [
"string",
"null"
]
},
"defaultSceneAnimationSpeed": {
"description": "Scene animation speed. Options: slow (1.5× duration) | medium (default) | fast (0.6× duration).",
"enum": [
"slow",
"medium",
"fast"
],
"type": [
"string",
"null"
]
},
"defaultShadow": {
"description": "Default shadow level applied to all nodes.",
"enum": [
"none",
"sm",
"md",
"lg"
],
"type": [
"string",
"null"
]
},
"defaultShapeLineStyle": {
"description": "Default line style for shape outlines (node borders). v1.44.1 — also drives shape rendering mode: \"calligraphy\" gives hand-drawn rough shapes (ink-ribbon outlines); \"solid\" | \"dashed\" | \"dotted\" | \"dash-dot\" | \"long-dash\" give crisp geometric shapes with that outline pattern. Independent of edge/connector line style.",
"enum": [
"calligraphy",
"block-arrow",
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"defaultTitleStyle": {
"description": "Title decoration treatment. Options: \"plain\" (default, just the title text), \"accent-bar\" (small accent-coloured vertical bar to the left of the title), \"underline\" (accent-coloured horizontal stroke below the title), \"boxed\" (title rendered in a subtle bordered + drop-shadowed pill — strongest framing). Affects only the diagram title, not subtitles or section headers.",
"enum": [
"plain",
"accent-bar",
"underline",
"boxed"
],
"type": [
"string",
"null"
]
},
"edges": {
"items": {
"additionalProperties": false,
"properties": {
"animate": {
"description": "Connector animation. Options: none (default) | flow (dashes march) | pulse (opacity breathing) | glow (stroke-width pulse) | trace (bright dot travels along) | wave (large stroke-width oscillation). SVG-only — exports to PNG/WebP capture one frozen frame.",
"enum": [
"none",
"flow",
"pulse",
"glow",
"trace",
"wave",
"lightning",
"beat",
"comet"
],
"type": [
"string",
"null"
]
},
"animateSpeed": {
"description": "Animation speed. Options: slow (3s cycle) | medium (2s, default) | fast (1s).",
"enum": [
"slow",
"medium",
"fast"
],
"type": [
"string",
"null"
]
},
"arrowStyle": {
"description": "Per-edge connector aesthetic mode (overrides defaultArrowStyle). Options: \"calligraphy\" | \"clean\" | \"block\". Orthogonal to lineStyle (dash pattern); all 15 combinations are valid.",
"enum": [
"calligraphy",
"clean",
"block"
],
"type": [
"string",
"null"
]
},
"blockArrowSize": {
"anyOf": [
{
"enum": [
"small",
"medium",
"large"
],
"type": "string"
},
{
"maximum": 60,
"minimum": 1,
"type": "number"
}
],
"description": "Block Arrow size for this edge (only when arrowStyle is \"block\"). Preset names: \"small\" (slim) | \"medium\" (default) | \"large\" (chunky). OR a raw body half-width in px (1–60); head dimensions scale proportionally."
},
"connectorType": {
"enum": [
"straight",
"curved",
"elbow",
"orthogonal",
"bezier"
],
"type": [
"string",
"null"
]
},
"hidden": {
"type": [
"boolean",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"lineStyle": {
"enum": [
"calligraphy",
"block-arrow",
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"loop": {
"description": "Per-edge animation loop count override. Wins over the diagram-level `defaultSceneAnimationLoop`. Values are quoted strings: \"once\" | \"2\" | \"3\" | \"5\" | \"infinite\". Maps to SMIL repeatCount.",
"enum": [
"once",
"2",
"3",
"5",
"infinite"
],
"type": [
"string",
"null"
]
},
"source": {
"type": "string"
},
"sourceArrow": {
"description": "Arrowhead style at the edge source end. Options: open (default) | triangle | diamond | circle | bar | dot | none.",
"type": [
"string",
"null"
]
},
"style": {
"additionalProperties": false,
"properties": {
"fill": {
"type": [
"string",
"null"
]
},
"opacity": {
"maximum": 1,
"minimum": 0,
"type": [
"number",
"null"
]
},
"stroke": {
"type": [
"string",
"null"
]
},
"strokeWidth": {
"type": [
"number",
"null"
]
}
},
"required": [
"stroke",
"strokeWidth",
"opacity",
"fill"
],
"type": [
"object",
"null"
]
},
"target": {
"type": "string"
},
"targetArrow": {
"description": "Arrowhead style at the edge target end. Options: open (default) | triangle | diamond | circle | bar | dot | none.",
"type": [
"string",
"null"
]
}
},
"required": [
"source",
"target",
"label",
"lineStyle",
"connectorType",
"sourceArrow",
"targetArrow",
"style",
"hidden",
"animate",
"animateSpeed",
"blockArrowSize",
"arrowStyle",
"loop"
],
"type": "object"
},
"type": [
"array",
"null"
]
},
"fontFamily": {
"description": "Font family for diagram text. Options: inter, poppins (sans-serif); playfair (serif); kalam, handlee (handwritten); fredoka (display); mono (monospace). Omit for style-matched default (Handlee for calligraphy, Inter for clean).",
"type": [
"string",
"null"
]
},
"funnel": {
"additionalProperties": false,
"description": "Funnel-only payload. Required when type=\"funnel\". Fields: stageLabels (string[], 1..50, ordered top→bottom), stageValues (optional string[]), dropOff (optional string[] of length stageLabels-1), bottomRatio (0.05..0.99, default 0.30). Sales pipeline, AARRR, ToFu/MoFu/BoFu.",
"properties": {
"bottomRatio": {
"maximum": 0.99,
"minimum": 0.05,
"type": [
"number",
"null"
]
},
"dropOff": {
"items": {
"type": "string"
},
"maxItems": 50,
"type": [
"array",
"null"
]
},
"stageLabels": {
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
"stageValues": {
"items": {
"type": "string"
},
"maxItems": 50,
"type": [
"array",
"null"
]
}
},
"required": [
"stageLabels",
"stageValues",
"dropOff",
"bottomRatio"
],
"type": [
"object",
"null"
]
},
"ganttHolidays": {
"description": "Gantt-only: ISO 8601 holiday dates (e.g. [\"2026-12-25\", \"2026-01-01\"]). Rendered as gray vertical stripes alongside Sat/Sun (always weekend). Only applies in date-driven mode (every node has start/end). Other diagram types ignore this field.",
"items": {
"maxLength": 32,
"type": "string"
},
"maxItems": 200,
"type": [
"array",
"null"
]
},
"iconStyle": {
"description": "Icon rendering style. \"clean-mono\" = precise strokes + single color, \"clean-colorful\" = precise strokes + vibrant colors, \"calligraphy-mono\" = hand-drawn ink + single color, \"calligraphy-colorful\" = hand-drawn ink + vibrant colors, \"none\" = hide icons.",
"type": [
"string",
"null"
]
},
"layout": {
"additionalProperties": false,
"properties": {
"direction": {
"enum": [
"TB",
"LR",
"BT",
"RL",
"radial",
"assorted"
],
"type": [
"string",
"null"
]
},
"nodeSpacing": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"padding": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"rankSpacing": {
"minimum": 0,
"type": [
"number",
"null"
]
}
},
"required": [
"direction",
"nodeSpacing",
"rankSpacing",
"padding"
],
"type": [
"object",
"null"
]
},
"matrixColumns": {
"description": "Column header labels for 2D matrix grid (e.g., [\"High Vision\", \"Low Vision\"]).",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"matrixItemStyle": {
"description": "Item display style for matrix diagrams. \"card\" (default) = rectangular cards, \"dot\" = scatter points, \"text\" = plain text, \"badge\" = compact pills.",
"enum": [
"card",
"dot",
"text",
"badge"
],
"type": [
"string",
"null"
]
},
"matrixRows": {
"description": "Row header labels for 2D matrix grid (e.g., [\"High Execution\", \"Low Execution\"]).",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"metadata": {
"additionalProperties": false,
"description": "Visual-size + Best-fit metadata bag (v1.65.4 -> v1.67.12). All fields optional; legacy callers without `metadata` are byte-identical to today. The server echoes `metadata.size` back on the response so integrators can confirm the field was honoured.",
"properties": {
"bestFit": {
"description": "v1.65.1+ Phase 3 server-side gate. When `true` + `targetAspect` is set + the server flag `VISUAL_SIZES_PHASE3_ENABLED` is on, the Designer is re-invoked with the target aspect ratio to reflow the layout. Independent of `metadata.size.bestFit`; the frontend mirrors this field when the toggle is on.",
"type": [
"boolean",
"null"
]
},
"size": {
"additionalProperties": false,
"description": "Visual-size persistence bag (v1.65.4+). Describes the EXPORT TARGET dimensions, NOT a canvas constraint at generation time. Round-trips through the response unchanged.",
"properties": {
"aspect": {
"description": "Canonical \"W:H\" aspect emitted alongside preset / custom dims for fast consumer reads. Accepts integer or decimal ratios. Examples: \"16:9\", \"9:16\", \"1:1\", \"1.91:1\" (OG card).",
"pattern": "^\\d+(\\.\\d+)?:\\d+(\\.\\d+)?$",
"type": [
"string",
"null"
]
},
"bestFit": {
"description": "v1.65.1+ Phase 3 opt-in flag. When `true` (alongside `metadata.bestFit` AND `metadata.targetAspect`), signals the server orchestrator to re-invoke the Designer with the target aspect ratio so the layout reflows to fit the export shape. Feature-flagged behind `VISUAL_SIZES_PHASE3_ENABLED` server-side; when OFF the field round-trips through the response but the orchestrator follows the legacy Phase 1/2 path. Default: false.",
"type": [
"boolean",
"null"
]
},
"height": {
"description": "Custom export-target height in pixels. 320..4096. Used with `width` for full custom dims, or with `aspect` for aspect-driven sizing.",
"maximum": 4096,
"minimum": 320,
"type": [
"integer",
"null"
]
},
"preset": {
"description": "Visual size preset id from shared/visual-sizes.ts catalog (e.g. \"16x9-presentation\", \"ig-square\", \"youtube-thumb\"). Describes the EXPORT TARGET (PNG / PDF / PPTX render dimensions), NOT the canvas constraint at generation time. Mutually exclusive with width + height (preset wins when both are present).",
"maxLength": 64,
"type": [
"string",
"null"
]
},
"width": {
"description": "Custom export-target width in pixels. 320..4096. Used when no preset matches the desired output dimensions. Pair with `height` for full custom dims; pair with `aspect` for aspect-driven sizing.",
"maximum": 4096,
"minimum": 320,
"type": [
"integer",
"null"
]
}
},
"required": [
"preset",
"width",
"height",
"aspect",
"bestFit"
],
"type": [
"object",
"null"
]
},
"targetAspect": {
"description": "v1.65.1+ Phase 3 server-side aspect ratio. Accepts \"W:H\" forms (e.g. \"9:16\", \"16:9\", \"1:1\", \"1.91:1\"). Forwarded to the Designer when `bestFit` is on.",
"maxLength": 16,
"type": [
"string",
"null"
]
}
},
"required": [
"size",
"bestFit",
"targetAspect"
],
"type": [
"object",
"null"
]
},
"nodes": {
"description": "Structured node definitions. Required when not using prompt mode.",
"items": {
"additionalProperties": false,
"properties": {
"animationLoop": {
"enum": [
"once",
"2",
"3",
"5",
"infinite"
],
"type": [
"string",
"null"
]
},
"chart": {
"additionalProperties": false,
"properties": {
"area": {
"type": [
"boolean",
"null"
]
},
"data": {
"items": {
"additionalProperties": false,
"properties": {
"color": {
"pattern": "^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$",
"type": [
"string",
"null"
]
},
"label": {
"maxLength": 2000,
"type": [
"string",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"label",
"value",
"color"
],
"type": "object"
},
"maxItems": 64,
"type": [
"array",
"null"
]
},
"innerRadiusRatio": {
"maximum": 0.85,
"minimum": 0.1,
"type": [
"number",
"null"
]
},
"series": {
"items": {
"type": "number"
},
"maxItems": 512,
"type": [
"array",
"null"
]
},
"showLabels": {
"type": [
"boolean",
"null"
]
},
"showValues": {
"type": [
"boolean",
"null"
]
},
"type": {
"enum": [
"pie",
"donut",
"bar",
"sparkline",
"line"
],
"type": "string"
}
},
"required": [
"type",
"data",
"series",
"innerRadiusRatio",
"showLabels",
"showValues",
"area"
],
"type": [
"object",
"null"
]
},
"group": {
"type": [
"string",
"null"
]
},
"height": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"hidden": {
"type": [
"boolean",
"null"
]
},
"icon": {
"type": [
"string",
"null"
]
},
"iconKeywords": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"id": {
"type": "string"
},
"kpi": {
"additionalProperties": false,
"properties": {
"delta": {
"additionalProperties": false,
"properties": {
"direction": {
"enum": [
"up",
"down",
"flat"
],
"type": [
"string",
"null"
]
},
"invertColor": {
"type": [
"boolean",
"null"
]
},
"text": {
"maxLength": 2000,
"type": "string"
}
},
"required": [
"text",
"direction",
"invertColor"
],
"type": [
"object",
"null"
]
},
"label": {
"maxLength": 2000,
"type": [
"string",
"null"
]
},
"sparkline": {
"items": {
"type": "number"
},
"maxItems": 512,
"type": [
"array",
"null"
]
},
"value": {
"maxLength": 2000,
"type": "string"
}
},
"required": [
"value",
"label",
"delta",
"sparkline"
],
"type": [
"object",
"null"
]
},
"shape": {
"enum": [
"rectangle",
"rounded-rect",
"circle",
"ellipse",
"diamond",
"triangle",
"parallelogram",
"hexagon",
"star",
"pentagon",
"octagon",
"trapezoid",
"process",
"decision",
"terminal",
"data-io",
"document",
"predefined-process",
"manual-input",
"pill",
"cloud",
"callout-bubble",
"underline-only",
"cylinder",
"database",
"banner",
"tag",
"shield",
"cross",
"arrow-shape",
"queue"
],
"type": [
"string",
"null"
]
},
"style": {
"additionalProperties": false,
"properties": {
"cornerRadius": {
"type": [
"number",
"null"
]
},
"fill": {
"type": [
"string",
"null"
]
},
"fontColor": {
"type": [
"string",
"null"
]
},
"fontSize": {
"type": [
"number",
"null"
]
},
"iconColor": {
"type": [
"string",
"null"
]
},
"iconColors": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"lineStyle": {
"description": "Per-node outline line style. Excludes \"calligraphy\" — that mode is set per-spec via `defaultShapeLineStyle: \"calligraphy\"`, not per-node.",
"enum": [
"solid",
"dashed",
"dotted",
"dash-dot",
"long-dash"
],
"type": [
"string",
"null"
]
},
"opacity": {
"maximum": 1,
"minimum": 0,
"type": [
"number",
"null"
]
},
"shadow": {
"type": [
"boolean",
"null"
]
},
"shadowLevel": {
"enum": [
"sm",
"md",
"lg"
],
"type": [
"string",
"null"
]
},
"stroke": {
"type": [
"string",
"null"
]
},
"strokeWidth": {
"type": [
"number",
"null"
]
}
},
"required": [
"fill",
"stroke",
"strokeWidth",
"opacity",
"cornerRadius",
"shadow",
"shadowLevel",
"fontSize",
"fontColor",
"lineStyle",
"iconColor",
"iconColors"
],
"type": [
"object",
"null"
]
},
"text": {
"type": "string"
},
"width": {
"minimum": 0,
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"shape",
"text",
"style",
"width",
"height",
"icon",
"iconKeywords",
"hidden",
"group",
"chart",
"kpi",
"animationLoop"
],
"type": "object"
},
"type": [
"array",
"null"
]
},
"prompt": {
"description": "Natural language description of the diagram to generate. When provided, the server uses AI to convert this into a structured diagram spec. Max 8000 characters. Example: \"flowchart showing user login with validation and error handling\"",
"maxLength": 8000,
"type": [
"string",
"null"
]
},
"pyramid": {
"additionalProperties": false,
"description": "Pyramid-only payload. Required when type=\"pyramid\". Fields: tierLabels (string[], 1..50, ordered base→tip), tierValues (optional string[]), inverted (boolean), tipRatio (0..0.95, default 0.15). Bloom's Taxonomy, Maslow's Hierarchy, Capability Maturity, DIKW.",
"properties": {
"inverted": {
"type": [
"boolean",
"null"
]
},
"tierLabels": {
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
"tierValues": {
"items": {
"type": "string"
},
"maxItems": 50,
"type": [
"array",
"null"
]
},
"tipRatio": {
"maximum": 0.95,
"minimum": 0,
"type": [
"number",
"null"
]
}
},
"required": [
"tierLabels",
"tierValues",
"inverted",
"tipRatio"
],
"type": [
"object",
"null"
]
},
"radar": {
"additionalProperties": false,
"description": "Radar/spider-chart payload. Required when type=\"radar\". Fields: axes (string[], 3..50), series ({name, values: number[]}[], 1..10), maxValue (default 100), rings (default 4). Use multiple series for comparison overlays — first solid, rest dashed at 50% opacity.",
"properties": {
"axes": {
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 3,
"type": "array"
},
"maxValue": {
"minimum": 1,
"type": [
"number",
"null"
]
},
"rings": {
"maximum": 10,
"minimum": 1,
"type": [
"integer",
"null"
]
},
"series": {
"items": {
"additionalProperties": false,
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"values": {
"items": {
"type": "number"
},
"maxItems": 50,
"type": "array"
}
},
"required": [
"name",
"values"
],
"type": "object"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
}
},
"required": [
"axes",
"series",
"maxValue",
"rings"
],
"type": [
"object",
"null"
]
},
"sections": {
"description": "Matrix sections. Each section has a title, optional subtitle, and items. Used with type=\"matrix\".",
"items": {
"additionalProperties": false,
"properties": {
"col": {
"minimum": 0,
"type": [
"integer",
"null"
]
},
"icons": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"id": {
"type": [
"string",
"null"
]
},
"itemBackgroundColors": {
"items": {
"maxLength": 40,
"type": "string"
},
"type": [
"array",
"null"
]
},
"itemHeatIntensities": {
"items": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"type": [
"array",
"null"
]
},
"itemIds": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"itemShapes": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"items": {
"items": {
"type": "string"
},
"type": "array"
},
"row": {
"minimum": 0,
"type": [
"integer",
"null"
]
},
"sectionBackgroundColor": {
"maxLength": 40,
"type": [
"string",
"null"
]
},
"sectionHeatIntensity": {
"maximum": 1,
"minimum": 0,
"type": [
"number",
"null"
]
},
"subtitle": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
}
},
"required": [
"id",
"title",
"subtitle",
"items",
"icons",
"itemIds",
"itemShapes",
"itemBackgroundColors",
"itemHeatIntensities",
"sectionBackgroundColor",
"sectionHeatIntensity",
"row",
"col"
],
"type": "object"
},
"type": [
"array",
"null"
]
},
"shapeStyle": {
"enum": [
"calligraphy",
"clean"
],
"type": [
"string",
"null"
]
},
"style": {
"enum": [
"calligraphy",
"clean"
],
"type": [
"string",
"null"
]
},
"subtitle": {
"type": [
"string",
"null"
]
},
"theme": {
"additionalProperties": false,
"properties": {
"palette": {
"additionalProperties": false,
"properties": {
"accent": {
"type": [
"string",
"null"
]
},
"background": {
"type": [
"string",
"null"
]
},
"border": {
"type": [
"string",
"null"
]
},
"nodeColors": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"primary": {
"type": [
"string",
"null"
]
},
"secondary": {
"type": [
"string",
"null"
]
},
"text": {
"type": [
"string",
"null"
]
}
},
"required": [
"primary",
"secondary",
"accent",
"background",
"text",
"border",
"nodeColors"
],
"type": [
"object",
"null"
]
},
"paletteSeed": {
"type": [
"number",
"null"
]
},
"preset": {
"type": [
"string",
"null"
]
}
},
"required": [
"preset",
"palette",
"paletteSeed"
],
"type": [
"object",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"type": {
"description": "Diagram type. Required when providing structured nodes/edges, optional with prompt.",
"enum": [
"flowchart",
"mindmap",
"block-diagram",
"matrix",
"timeline",
"gantt",
"er-diagram",
"sequence",
"process-flow",
"pyramid",
"funnel",
"radar",
"fishbone"
],
"type": [
"string",
"null"
]
},
"xAxisLabel": {
"description": "X-axis title for 2D matrix grid (e.g., \"Completeness of Vision\").",
"type": [
"string",
"null"
]
},
"yAxisLabel": {
"description": "Y-axis title for 2D matrix grid (e.g., \"Ability to Execute\").",
"type": [
"string",
"null"
]
}
},
"required": [
"prompt",
"type",
"sections",
"title",
"subtitle",
"style",
"shapeStyle",
"nodes",
"edges",
"layout",
"theme",
"defaultLineStyle",
"defaultArrowHead",
"defaultConnector",
"defaultShadow",
"defaultShapeLineStyle",
"defaultConnectorAnimate",
"defaultConnectorAnimateSpeed",
"defaultSceneAnimation",
"defaultSceneAnimationSpeed",
"defaultSceneAnimationLoop",
"defaultTitleStyle",
"defaultDividerStyle",
"defaultBlockArrowSize",
"defaultArrowStyle",
"ganttHolidays",
"pyramid",
"funnel",
"radar",
"iconStyle",
"fontFamily",
"matrixColumns",
"matrixRows",
"xAxisLabel",
"yAxisLabel",
"matrixItemStyle",
"metadata"
],
"type": "object"
},
"name": "get_style_options",
"outputSchema": null
},
{
"description": "Recommends business / strategy / risk frameworks for a stated problem. Powered by the Jeda.ai · Visual AI framework knowledge graph (~2,100 frameworks across 19 categories, edge-curated).\n\nUse when the user describes a business problem (\"customer churn rising\", \"evaluating market entry\", \"need to assess vendor risk\") rather than naming a specific framework. Returns top-N frameworks ranked by fit, each with a concrete reason citing the specific problem signals matched.\n\nInput: just the problem statement is enough. Optional faceted filters (`persona`, `regulation`, `decision_stage`) narrow the candidate set. Set `limit` between 3 and 10 for picker UIs.\n\nPair with `generate_framework_analysis` to actually run a recommended framework against the user's inputs.\n\nExample: { \"problem_statement\": \"We need to decide whether to enter the EU SMB market in Q3\", \"decision_stage\": \"decide\", \"limit\": 5 }",
"inputSchema": {
"additionalProperties": false,
"properties": {
"decision_stage": {
"description": "Decision-lifecycle stage.",
"enum": [
"explore",
"diagnose",
"decide",
"execute",
"review"
],
"type": "string"
},
"limit": {
"description": "Number of frameworks to return. Default 5; cap 20.",
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"persona": {
"description": "Persona slug (e.g. \"ciso\", \"pm\", \"cfo\").",
"maxLength": 64,
"type": "string"
},
"problem_statement": {
"description": "Plain-English description of the business problem. 10–2000 chars.",
"maxLength": 2000,
"minLength": 10,
"type": "string"
},
"regulation": {
"description": "Regulation slug (e.g. \"sox\", \"gdpr\", \"iso-31000\").",
"maxLength": 64,
"type": "string"
}
},
"required": [
"problem_statement"
],
"type": "object"
},
"name": "recommend_framework",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:39a1328444918ee297f101b919bfaa94d80408c9cc4862821208ec630a1fd942 | sha256sum