MCP-Server

jeda-ai

ai.jeda/jeda-ai
Design & Kreativ Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Creates polished SVG visualizations such as SWOT analyses, flowcharts, mindmaps, and Gantt diagrams.

generate_diagram
Generate Diagram (deprecated)
DEPRECATED alias for `generate_visual` (removed no earlier than v1.24.x). Use `generate_visual` going forward — identical behaviour.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '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'], 'properties': {'type': {'enum': ['flowchart', 'mindmap', 'block-diagram', 'matrix', 'timeline', 'gantt', 'er-diagram', 'sequence', 'process-flow', 'pyramid', 'funnel', 'radar', 'fishbone'], 'type': ['string', 'null'], 'description': 'Diagram type. Required when providing structured nodes/edges, optional with prompt.'}, 'edges': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['source', 'target', 'label', 'lineStyle', 'connectorType', 'sourceArrow', 'targetArrow', 'style', 'hidden', 'animate', 'animateSpeed', 'blockArrowSize', 'arrowStyle', 'loop'], 'properties': {'loop': {'enum': ['once', '2', '3', '5', 'infinite'], 'type': ['string', 'null'], '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.'}, 'label': {'type': ['string', 'null']}, 'style': {'type': ['object', 'null'], 'required': ['stroke', 'strokeWidth', 'opacity', 'fill'], 'properties': {'fill': {'type': ['string', 'null']}, 'stroke': {'type': ['string', 'null']}, 'opacity': {'type': ['number', 'null'], 'maximum': 1, 'minimum': 0}, 'strokeWidth': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'hidden': {'type': ['boolean', 'null']}, 'source': {'type': 'string'}, 'target': {'type': 'string'}, 'animate': {'enum': ['none', 'flow', 'pulse', 'glow', 'trace', 'wave', 'lightning', 'beat', 'comet'], 'type': ['string', 'null'], '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.'}, 'lineStyle': {'enum': ['calligraphy', 'block-arrow', 'solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null']}, 'arrowStyle': {'enum': ['calligraphy', 'clean', 'block'], 'type': ['string', 'null'], 'description': 'Per-edge connector aesthetic mode (overrides defaultArrowStyle). Options: "calligraphy" | "clean" | "block". Orthogonal to lineStyle (dash pattern); all 15 combinations are valid.'}, 'sourceArrow': {'type': ['string', 'null'], 'description': 'Arrowhead style at the edge source end. Options: open (default) | triangle | diamond | circle | bar | dot | none.'}, 'targetArrow': {'type': ['string', 'null'], 'description': 'Arrowhead style at the edge target end. Options: open (default) | triangle | diamond | circle | bar | dot | none.'}, 'animateSpeed': {'enum': ['slow', 'medium', 'fast'], 'type': ['string', 'null'], 'description': 'Animation speed. Options: slow (3s cycle) | medium (2s, default) | fast (1s).'}, 'connectorType': {'enum': ['straight', 'curved', 'elbow', 'orthogonal', 'bezier'], 'type': ['string', 'null']}, 'blockArrowSize': {'anyOf': [{'enum': ['small', 'medium', 'large'], 'type': 'string'}, {'type': 'number', 'maximum': 60, 'minimum': 1}], '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.'}}, 'additionalProperties': False}}, 'nodes': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['id', 'shape', 'text', 'style', 'width', 'height', 'icon', 'iconKeywords', 'hidden', 'group', 'chart', 'kpi', 'animationLoop'], 'properties': {'id': {'type': 'string'}, 'kpi': {'type': ['object', 'null'], 'required': ['value', 'label', 'delta', 'sparkline'], 'properties': {'delta': {'type': ['object', 'null'], 'required': ['text', 'direction', 'invertColor'], 'properties': {'text': {'type': 'string', 'maxLength': 2000}, 'direction': {'enum': ['up', 'down', 'flat'], 'type': ['string', 'null']}, 'invertColor': {'type': ['boolean', 'null']}}, 'additionalProperties': False}, 'label': {'type': ['string', 'null'], 'maxLength': 2000}, 'value': {'type': 'string', 'maxLength': 2000}, 'sparkline': {'type': ['array', 'null'], 'items': {'type': 'number'}, 'maxItems': 512}}, 'additionalProperties': False}, 'icon': {'type': ['string', 'null']}, 'text': {'type': 'string'}, 'chart': {'type': ['object', 'null'], 'required': ['type', 'data', 'series', 'innerRadiusRatio', 'showLabels', 'showValues', 'area'], 'properties': {'area': {'type': ['boolean', 'null']}, 'data': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['label', 'value', 'color'], 'properties': {'color': {'type': ['string', 'null'], 'pattern': '^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$'}, 'label': {'type': ['string', 'null'], 'maxLength': 2000}, 'value': {'type': 'number'}}, 'additionalProperties': False}, 'maxItems': 64}, 'type': {'enum': ['pie', 'donut', 'bar', 'sparkline', 'line'], 'type': 'string'}, 'series': {'type': ['array', 'null'], 'items': {'type': 'number'}, 'maxItems': 512}, 'showLabels': {'type': ['boolean', 'null']}, 'showValues': {'type': ['boolean', 'null']}, 'innerRadiusRatio': {'type': ['number', 'null'], 'maximum': 0.85, 'minimum': 0.1}}, 'additionalProperties': False}, 'group': {'type': ['string', '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': {'type': ['object', 'null'], 'required': ['fill', 'stroke', 'strokeWidth', 'opacity', 'cornerRadius', 'shadow', 'shadowLevel', 'fontSize', 'fontColor', 'lineStyle', 'iconColor', 'iconColors'], 'properties': {'fill': {'type': ['string', 'null']}, 'shadow': {'type': ['boolean', 'null']}, 'stroke': {'type': ['string', 'null']}, 'opacity': {'type': ['number', 'null'], 'maximum': 1, 'minimum': 0}, 'fontSize': {'type': ['number', 'null']}, 'fontColor': {'type': ['string', 'null']}, 'iconColor': {'type': ['string', 'null']}, 'lineStyle': {'enum': ['solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null'], 'description': 'Per-node outline line style. Excludes "calligraphy" — that mode is set per-spec via `defaultShapeLineStyle: "calligraphy"`, not per-node.'}, 'iconColors': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'shadowLevel': {'enum': ['sm', 'md', 'lg'], 'type': ['string', 'null']}, 'strokeWidth': {'type': ['number', 'null']}, 'cornerRadius': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'width': {'type': ['number', 'null'], 'minimum': 0}, 'height': {'type': ['number', 'null'], 'minimum': 0}, 'hidden': {'type': ['boolean', 'null']}, 'iconKeywords': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'animationLoop': {'enum': ['once', '2', '3', '5', 'infinite'], 'type': ['string', 'null']}}, 'additionalProperties': False}, 'description': 'Structured node definitions. Required when not using prompt mode.'}, 'radar': {'type': ['object', 'null'], 'required': ['axes', 'series', 'maxValue', 'rings'], 'properties': {'axes': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 3}, 'rings': {'type': ['integer', 'null'], 'maximum': 10, 'minimum': 1}, 'series': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'values'], 'properties': {'name': {'type': ['string', 'null']}, 'values': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 50}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1}, 'maxValue': {'type': ['number', 'null'], 'minimum': 1}}, '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.', 'additionalProperties': False}, 'style': {'enum': ['calligraphy', 'clean'], 'type': ['string', 'null']}, 'theme': {'type': ['object', 'null'], 'required': ['preset', 'palette', 'paletteSeed'], 'properties': {'preset': {'type': ['string', 'null']}, 'palette': {'type': ['object', 'null'], 'required': ['primary', 'secondary', 'accent', 'background', 'text', 'border', 'nodeColors'], 'properties': {'text': {'type': ['string', 'null']}, 'accent': {'type': ['string', 'null']}, 'border': {'type': ['string', 'null']}, 'primary': {'type': ['string', 'null']}, 'secondary': {'type': ['string', 'null']}, 'background': {'type': ['string', 'null']}, 'nodeColors': {'type': ['array', 'null'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'paletteSeed': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'title': {'type': ['string', 'null']}, 'funnel': {'type': ['object', 'null'], 'required': ['stageLabels', 'stageValues', 'dropOff', 'bottomRatio'], 'properties': {'dropOff': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'maxItems': 50}, 'bottomRatio': {'type': ['number', 'null'], 'maximum': 0.99, 'minimum': 0.05}, 'stageLabels': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 1}, 'stageValues': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'maxItems': 50}}, '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.', 'additionalProperties': False}, 'layout': {'type': ['object', 'null'], 'required': ['direction', 'nodeSpacing', 'rankSpacing', 'padding'], 'properties': {'padding': {'type': ['number', 'null'], 'minimum': 0}, 'direction': {'enum': ['TB', 'LR', 'BT', 'RL', 'radial', 'assorted'], 'type': ['string', 'null']}, 'nodeSpacing': {'type': ['number', 'null'], 'minimum': 0}, 'rankSpacing': {'type': ['number', 'null'], 'minimum': 0}}, 'additionalProperties': False}, 'prompt': {'type': ['string', 'null'], 'maxLength': 8000, '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"'}, 'pyramid': {'type': ['object', 'null'], 'required': ['tierLabels', 'tierValues', 'inverted', 'tipRatio'], 'properties': {'inverted': {'type': ['boolean', 'null']}, 'tipRatio': {'type': ['number', 'null'], 'maximum': 0.95, 'minimum': 0}, 'tierLabels': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 1}, 'tierValues': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'maxItems': 50}}, '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.', 'additionalProperties': False}, 'metadata': {'type': ['object', 'null'], 'required': ['size', 'bestFit', 'targetAspect'], 'properties': {'size': {'type': ['object', 'null'], 'required': ['preset', 'width', 'height', 'aspect', 'bestFit'], 'properties': {'width': {'type': ['integer', 'null'], 'maximum': 4096, 'minimum': 320, '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.'}, 'aspect': {'type': ['string', 'null'], 'pattern': '^\\d+(\\.\\d+)?:\\d+(\\.\\d+)?$', '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).'}, 'height': {'type': ['integer', 'null'], 'maximum': 4096, 'minimum': 320, 'description': 'Custom export-target height in pixels. 320..4096. Used with `width` for full custom dims, or with `aspect` for aspect-driven sizing.'}, 'preset': {'type': ['string', 'null'], 'maxLength': 64, '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).'}, 'bestFit': {'type': ['boolean', 'null'], '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.'}}, '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.', 'additionalProperties': False}, 'bestFit': {'type': ['boolean', 'null'], '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.'}, 'targetAspect': {'type': ['string', 'null'], 'maxLength': 16, '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.'}}, '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.', 'additionalProperties': False}, 'sections': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['id', 'title', 'subtitle', 'items', 'icons', 'itemIds', 'itemShapes', 'itemBackgroundColors', 'itemHeatIntensities', 'sectionBackgroundColor', 'sectionHeatIntensity', 'row', 'col'], 'properties': {'id': {'type': ['string', 'null']}, 'col': {'type': ['integer', 'null'], 'minimum': 0}, 'row': {'type': ['integer', 'null'], 'minimum': 0}, 'icons': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'items': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'itemIds': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'subtitle': {'type': ['string', 'null']}, 'itemShapes': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'itemHeatIntensities': {'type': ['array', 'null'], 'items': {'type': 'number', 'maximum': 1, 'minimum': 0}}, 'itemBackgroundColors': {'type': ['array', 'null'], 'items': {'type': 'string', 'maxLength': 40}}, 'sectionHeatIntensity': {'type': ['number', 'null'], 'maximum': 1, 'minimum': 0}, 'sectionBackgroundColor': {'type': ['string', 'null'], 'maxLength': 40}}, 'additionalProperties': False}, 'description': 'Matrix sections. Each section has a title, optional subtitle, and items. Used with type="matrix".'}, 'subtitle': {'type': ['string', 'null']}, 'iconStyle': {'type': ['string', 'null'], '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.'}, 'fontFamily': {'type': ['string', 'null'], '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).'}, 'matrixRows': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'description': 'Row header labels for 2D matrix grid (e.g., ["High Execution", "Low Execution"]).'}, 'shapeStyle': {'enum': ['calligraphy', 'clean'], 'type': ['string', 'null']}, 'xAxisLabel': {'type': ['string', 'null'], 'description': 'X-axis title for 2D matrix grid (e.g., "Completeness of Vision").'}, 'yAxisLabel': {'type': ['string', 'null'], 'description': 'Y-axis title for 2D matrix grid (e.g., "Ability to Execute").'}, 'defaultShadow': {'enum': ['none', 'sm', 'md', 'lg'], 'type': ['string', 'null'], 'description': 'Default shadow level applied to all nodes.'}, 'ganttHolidays': {'type': ['array', 'null'], 'items': {'type': 'string', 'maxLength': 32}, 'maxItems': 200, '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.'}, 'matrixColumns': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'description': 'Column header labels for 2D matrix grid (e.g., ["High Vision", "Low Vision"]).'}, 'matrixItemStyle': {'enum': ['card', 'dot', 'text', 'badge'], 'type': ['string', 'null'], 'description': 'Item display style for matrix diagrams. "card" (default) = rectangular cards, "dot" = scatter points, "text" = plain text, "badge" = compact pills.'}, 'defaultArrowHead': {'type': ['string', 'null'], 'description': "Default arrowhead style applied to all edges that don't specify their own."}, 'defaultConnector': {'enum': ['straight', 'curved', 'elbow', 'orthogonal', 'bezier'], 'type': ['string', 'null'], 'description': "Default connector type applied to all edges that don't specify their own."}, 'defaultLineStyle': {'enum': ['calligraphy', 'block-arrow', 'solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null'], '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.'}, 'defaultArrowStyle': {'enum': ['calligraphy', 'clean', 'block'], 'type': ['string', 'null'], '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.'}, 'defaultTitleStyle': {'enum': ['plain', 'accent-bar', 'underline', 'boxed'], 'type': ['string', 'null'], '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.'}, 'defaultDividerStyle': {'enum': ['subtle', 'normal', 'bold', 'dashed', 'dotted', 'none'], 'type': ['string', 'null'], '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").'}, 'defaultBlockArrowSize': {'anyOf': [{'enum': ['small', 'medium', 'large'], 'type': 'string'}, {'type': 'number', 'maximum': 60, 'minimum': 1}], '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.'}, 'defaultSceneAnimation': {'enum': ['none', 'fade', 'zoom', 'zoom-pan', 'flow', 'wave-sweep', 'build-up', 'flow-zoom-pan'], 'type': ['string', 'null'], '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.'}, 'defaultShapeLineStyle': {'enum': ['calligraphy', 'block-arrow', 'solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null'], '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.'}, 'defaultConnectorAnimate': {'enum': ['none', 'flow', 'pulse', 'glow', 'trace', 'wave', 'lightning', 'beat', 'comet'], 'type': ['string', 'null'], '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.'}, 'defaultSceneAnimationLoop': {'enum': ['once', '2', '3', '5', 'infinite'], 'type': ['string', 'null'], '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.'}, 'defaultSceneAnimationSpeed': {'enum': ['slow', 'medium', 'fast'], 'type': ['string', 'null'], 'description': 'Scene animation speed. Options: slow (1.5× duration) | medium (default) | fast (0.6× duration).'}, 'defaultConnectorAnimateSpeed': {'enum': ['slow', 'medium', 'fast'], 'type': ['string', 'null'], 'description': 'Animation speed when defaultConnectorAnimate is set. Options: slow (3s cycle) | medium (2s, default) | fast (1s).'}}, 'additionalProperties': False}
generate_framework_analysis
Generate Framework Analysis
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. ALWAYS 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. REQUIRED 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. Input: framework_id (namespaced slug from `recommend_framework`) + user_inputs object (per-framework field set), OR a free-text `raw_prompt` fallback. Example: { "framework_id": "cms_swot-analysis", "user_inputs": { "subject": "Q3 EU market entry", "context": "B2B SaaS, $5M ARR, US-headquartered" } }
Nur Lesen Externer Zugriff
Eingabeschema
{'type': 'object', 'required': ['framework_id'], 'properties': {'theme': {'type': 'object', 'required': ['preset'], 'properties': {'preset': {'enum': ['pastel', 'corporate', 'gradient', 'dark', 'blueprint', 'playful', 'vibrant', 'monochrome'], 'type': ['string', 'null']}}, 'description': 'Theme preset for the SVG render. Default: pastel.', 'additionalProperties': False}, 'raw_prompt': {'type': 'string', 'maxLength': 8000, 'description': 'Optional free-text prompt that REPLACES the auto-derived prompt.'}, 'user_inputs': {'type': 'object', 'description': 'Object whose keys match the framework user-input form fields.', 'additionalProperties': {}}, 'framework_id': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'Namespaced framework slug (e.g. "cms_swot-analysis"). Get one from `recommend_framework` -- bare slugs like "swot-analysis" are not valid ids.'}}, 'additionalProperties': False}
generate_visual
Generate Visual
Generates a visual (flowchart, mindmap, matrix, timeline, Gantt, ER, sequence, swimlane, block diagram) as a self-contained SVG. Powered by Jeda.ai · Visual AI. REQUIRED 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). Two modes: (1) natural-language `prompt` → Data Agent + Design Agent build the visual; (2) structured `nodes` + `edges` for precise control. Visual 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`. For 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. Example: { "prompt": "user signup with email verification", "theme": { "preset": "pastel" } }
Nur Lesen Externer Zugriff
Eingabeschema
{'type': 'object', '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'], 'properties': {'type': {'enum': ['flowchart', 'mindmap', 'block-diagram', 'matrix', 'timeline', 'gantt', 'er-diagram', 'sequence', 'process-flow', 'pyramid', 'funnel', 'radar', 'fishbone'], 'type': ['string', 'null'], 'description': 'Diagram type. Required when providing structured nodes/edges, optional with prompt.'}, 'edges': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['source', 'target', 'label', 'lineStyle', 'connectorType', 'sourceArrow', 'targetArrow', 'style', 'hidden', 'animate', 'animateSpeed', 'blockArrowSize', 'arrowStyle', 'loop'], 'properties': {'loop': {'enum': ['once', '2', '3', '5', 'infinite'], 'type': ['string', 'null'], '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.'}, 'label': {'type': ['string', 'null']}, 'style': {'type': ['object', 'null'], 'required': ['stroke', 'strokeWidth', 'opacity', 'fill'], 'properties': {'fill': {'type': ['string', 'null']}, 'stroke': {'type': ['string', 'null']}, 'opacity': {'type': ['number', 'null'], 'maximum': 1, 'minimum': 0}, 'strokeWidth': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'hidden': {'type': ['boolean', 'null']}, 'source': {'type': 'string'}, 'target': {'type': 'string'}, 'animate': {'enum': ['none', 'flow', 'pulse', 'glow', 'trace', 'wave', 'lightning', 'beat', 'comet'], 'type': ['string', 'null'], '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.'}, 'lineStyle': {'enum': ['calligraphy', 'block-arrow', 'solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null']}, 'arrowStyle': {'enum': ['calligraphy', 'clean', 'block'], 'type': ['string', 'null'], 'description': 'Per-edge connector aesthetic mode (overrides defaultArrowStyle). Options: "calligraphy" | "clean" | "block". Orthogonal to lineStyle (dash pattern); all 15 combinations are valid.'}, 'sourceArrow': {'type': ['string', 'null'], 'description': 'Arrowhead style at the edge source end. Options: open (default) | triangle | diamond | circle | bar | dot | none.'}, 'targetArrow': {'type': ['string', 'null'], 'description': 'Arrowhead style at the edge target end. Options: open (default) | triangle | diamond | circle | bar | dot | none.'}, 'animateSpeed': {'enum': ['slow', 'medium', 'fast'], 'type': ['string', 'null'], 'description': 'Animation speed. Options: slow (3s cycle) | medium (2s, default) | fast (1s).'}, 'connectorType': {'enum': ['straight', 'curved', 'elbow', 'orthogonal', 'bezier'], 'type': ['string', 'null']}, 'blockArrowSize': {'anyOf': [{'enum': ['small', 'medium', 'large'], 'type': 'string'}, {'type': 'number', 'maximum': 60, 'minimum': 1}], '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.'}}, 'additionalProperties': False}}, 'nodes': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['id', 'shape', 'text', 'style', 'width', 'height', 'icon', 'iconKeywords', 'hidden', 'group', 'chart', 'kpi', 'animationLoop'], 'properties': {'id': {'type': 'string'}, 'kpi': {'type': ['object', 'null'], 'required': ['value', 'label', 'delta', 'sparkline'], 'properties': {'delta': {'type': ['object', 'null'], 'required': ['text', 'direction', 'invertColor'], 'properties': {'text': {'type': 'string', 'maxLength': 2000}, 'direction': {'enum': ['up', 'down', 'flat'], 'type': ['string', 'null']}, 'invertColor': {'type': ['boolean', 'null']}}, 'additionalProperties': False}, 'label': {'type': ['string', 'null'], 'maxLength': 2000}, 'value': {'type': 'string', 'maxLength': 2000}, 'sparkline': {'type': ['array', 'null'], 'items': {'type': 'number'}, 'maxItems': 512}}, 'additionalProperties': False}, 'icon': {'type': ['string', 'null']}, 'text': {'type': 'string'}, 'chart': {'type': ['object', 'null'], 'required': ['type', 'data', 'series', 'innerRadiusRatio', 'showLabels', 'showValues', 'area'], 'properties': {'area': {'type': ['boolean', 'null']}, 'data': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['label', 'value', 'color'], 'properties': {'color': {'type': ['string', 'null'], 'pattern': '^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$'}, 'label': {'type': ['string', 'null'], 'maxLength': 2000}, 'value': {'type': 'number'}}, 'additionalProperties': False}, 'maxItems': 64}, 'type': {'enum': ['pie', 'donut', 'bar', 'sparkline', 'line'], 'type': 'string'}, 'series': {'type': ['array', 'null'], 'items': {'type': 'number'}, 'maxItems': 512}, 'showLabels': {'type': ['boolean', 'null']}, 'showValues': {'type': ['boolean', 'null']}, 'innerRadiusRatio': {'type': ['number', 'null'], 'maximum': 0.85, 'minimum': 0.1}}, 'additionalProperties': False}, 'group': {'type': ['string', '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': {'type': ['object', 'null'], 'required': ['fill', 'stroke', 'strokeWidth', 'opacity', 'cornerRadius', 'shadow', 'shadowLevel', 'fontSize', 'fontColor', 'lineStyle', 'iconColor', 'iconColors'], 'properties': {'fill': {'type': ['string', 'null']}, 'shadow': {'type': ['boolean', 'null']}, 'stroke': {'type': ['string', 'null']}, 'opacity': {'type': ['number', 'null'], 'maximum': 1, 'minimum': 0}, 'fontSize': {'type': ['number', 'null']}, 'fontColor': {'type': ['string', 'null']}, 'iconColor': {'type': ['string', 'null']}, 'lineStyle': {'enum': ['solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null'], 'description': 'Per-node outline line style. Excludes "calligraphy" — that mode is set per-spec via `defaultShapeLineStyle: "calligraphy"`, not per-node.'}, 'iconColors': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'shadowLevel': {'enum': ['sm', 'md', 'lg'], 'type': ['string', 'null']}, 'strokeWidth': {'type': ['number', 'null']}, 'cornerRadius': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'width': {'type': ['number', 'null'], 'minimum': 0}, 'height': {'type': ['number', 'null'], 'minimum': 0}, 'hidden': {'type': ['boolean', 'null']}, 'iconKeywords': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'animationLoop': {'enum': ['once', '2', '3', '5', 'infinite'], 'type': ['string', 'null']}}, 'additionalProperties': False}, 'description': 'Structured node definitions. Required when not using prompt mode.'}, 'radar': {'type': ['object', 'null'], 'required': ['axes', 'series', 'maxValue', 'rings'], 'properties': {'axes': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 3}, 'rings': {'type': ['integer', 'null'], 'maximum': 10, 'minimum': 1}, 'series': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'values'], 'properties': {'name': {'type': ['string', 'null']}, 'values': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 50}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1}, 'maxValue': {'type': ['number', 'null'], 'minimum': 1}}, '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.', 'additionalProperties': False}, 'style': {'enum': ['calligraphy', 'clean'], 'type': ['string', 'null']}, 'theme': {'type': ['object', 'null'], 'required': ['preset', 'palette', 'paletteSeed'], 'properties': {'preset': {'type': ['string', 'null']}, 'palette': {'type': ['object', 'null'], 'required': ['primary', 'secondary', 'accent', 'background', 'text', 'border', 'nodeColors'], 'properties': {'text': {'type': ['string', 'null']}, 'accent': {'type': ['string', 'null']}, 'border': {'type': ['string', 'null']}, 'primary': {'type': ['string', 'null']}, 'secondary': {'type': ['string', 'null']}, 'background': {'type': ['string', 'null']}, 'nodeColors': {'type': ['array', 'null'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'paletteSeed': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'title': {'type': ['string', 'null']}, 'funnel': {'type': ['object', 'null'], 'required': ['stageLabels', 'stageValues', 'dropOff', 'bottomRatio'], 'properties': {'dropOff': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'maxItems': 50}, 'bottomRatio': {'type': ['number', 'null'], 'maximum': 0.99, 'minimum': 0.05}, 'stageLabels': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 1}, 'stageValues': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'maxItems': 50}}, '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.', 'additionalProperties': False}, 'layout': {'type': ['object', 'null'], 'required': ['direction', 'nodeSpacing', 'rankSpacing', 'padding'], 'properties': {'padding': {'type': ['number', 'null'], 'minimum': 0}, 'direction': {'enum': ['TB', 'LR', 'BT', 'RL', 'radial', 'assorted'], 'type': ['string', 'null']}, 'nodeSpacing': {'type': ['number', 'null'], 'minimum': 0}, 'rankSpacing': {'type': ['number', 'null'], 'minimum': 0}}, 'additionalProperties': False}, 'prompt': {'type': ['string', 'null'], 'maxLength': 8000, '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"'}, 'pyramid': {'type': ['object', 'null'], 'required': ['tierLabels', 'tierValues', 'inverted', 'tipRatio'], 'properties': {'inverted': {'type': ['boolean', 'null']}, 'tipRatio': {'type': ['number', 'null'], 'maximum': 0.95, 'minimum': 0}, 'tierLabels': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 1}, 'tierValues': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'maxItems': 50}}, '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.', 'additionalProperties': False}, 'metadata': {'type': ['object', 'null'], 'required': ['size', 'bestFit', 'targetAspect'], 'properties': {'size': {'type': ['object', 'null'], 'required': ['preset', 'width', 'height', 'aspect', 'bestFit'], 'properties': {'width': {'type': ['integer', 'null'], 'maximum': 4096, 'minimum': 320, '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.'}, 'aspect': {'type': ['string', 'null'], 'pattern': '^\\d+(\\.\\d+)?:\\d+(\\.\\d+)?$', '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).'}, 'height': {'type': ['integer', 'null'], 'maximum': 4096, 'minimum': 320, 'description': 'Custom export-target height in pixels. 320..4096. Used with `width` for full custom dims, or with `aspect` for aspect-driven sizing.'}, 'preset': {'type': ['string', 'null'], 'maxLength': 64, '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).'}, 'bestFit': {'type': ['boolean', 'null'], '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.'}}, '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.', 'additionalProperties': False}, 'bestFit': {'type': ['boolean', 'null'], '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.'}, 'targetAspect': {'type': ['string', 'null'], 'maxLength': 16, '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.'}}, '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.', 'additionalProperties': False}, 'sections': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['id', 'title', 'subtitle', 'items', 'icons', 'itemIds', 'itemShapes', 'itemBackgroundColors', 'itemHeatIntensities', 'sectionBackgroundColor', 'sectionHeatIntensity', 'row', 'col'], 'properties': {'id': {'type': ['string', 'null']}, 'col': {'type': ['integer', 'null'], 'minimum': 0}, 'row': {'type': ['integer', 'null'], 'minimum': 0}, 'icons': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'items': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'itemIds': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'subtitle': {'type': ['string', 'null']}, 'itemShapes': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'itemHeatIntensities': {'type': ['array', 'null'], 'items': {'type': 'number', 'maximum': 1, 'minimum': 0}}, 'itemBackgroundColors': {'type': ['array', 'null'], 'items': {'type': 'string', 'maxLength': 40}}, 'sectionHeatIntensity': {'type': ['number', 'null'], 'maximum': 1, 'minimum': 0}, 'sectionBackgroundColor': {'type': ['string', 'null'], 'maxLength': 40}}, 'additionalProperties': False}, 'description': 'Matrix sections. Each section has a title, optional subtitle, and items. Used with type="matrix".'}, 'subtitle': {'type': ['string', 'null']}, 'iconStyle': {'type': ['string', 'null'], '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.'}, 'fontFamily': {'type': ['string', 'null'], '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).'}, 'matrixRows': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'description': 'Row header labels for 2D matrix grid (e.g., ["High Execution", "Low Execution"]).'}, 'shapeStyle': {'enum': ['calligraphy', 'clean'], 'type': ['string', 'null']}, 'xAxisLabel': {'type': ['string', 'null'], 'description': 'X-axis title for 2D matrix grid (e.g., "Completeness of Vision").'}, 'yAxisLabel': {'type': ['string', 'null'], 'description': 'Y-axis title for 2D matrix grid (e.g., "Ability to Execute").'}, 'defaultShadow': {'enum': ['none', 'sm', 'md', 'lg'], 'type': ['string', 'null'], 'description': 'Default shadow level applied to all nodes.'}, 'ganttHolidays': {'type': ['array', 'null'], 'items': {'type': 'string', 'maxLength': 32}, 'maxItems': 200, '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.'}, 'matrixColumns': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'description': 'Column header labels for 2D matrix grid (e.g., ["High Vision", "Low Vision"]).'}, 'matrixItemStyle': {'enum': ['card', 'dot', 'text', 'badge'], 'type': ['string', 'null'], 'description': 'Item display style for matrix diagrams. "card" (default) = rectangular cards, "dot" = scatter points, "text" = plain text, "badge" = compact pills.'}, 'defaultArrowHead': {'type': ['string', 'null'], 'description': "Default arrowhead style applied to all edges that don't specify their own."}, 'defaultConnector': {'enum': ['straight', 'curved', 'elbow', 'orthogonal', 'bezier'], 'type': ['string', 'null'], 'description': "Default connector type applied to all edges that don't specify their own."}, 'defaultLineStyle': {'enum': ['calligraphy', 'block-arrow', 'solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null'], '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.'}, 'defaultArrowStyle': {'enum': ['calligraphy', 'clean', 'block'], 'type': ['string', 'null'], '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.'}, 'defaultTitleStyle': {'enum': ['plain', 'accent-bar', 'underline', 'boxed'], 'type': ['string', 'null'], '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.'}, 'defaultDividerStyle': {'enum': ['subtle', 'normal', 'bold', 'dashed', 'dotted', 'none'], 'type': ['string', 'null'], '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").'}, 'defaultBlockArrowSize': {'anyOf': [{'enum': ['small', 'medium', 'large'], 'type': 'string'}, {'type': 'number', 'maximum': 60, 'minimum': 1}], '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.'}, 'defaultSceneAnimation': {'enum': ['none', 'fade', 'zoom', 'zoom-pan', 'flow', 'wave-sweep', 'build-up', 'flow-zoom-pan'], 'type': ['string', 'null'], '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.'}, 'defaultShapeLineStyle': {'enum': ['calligraphy', 'block-arrow', 'solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null'], '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.'}, 'defaultConnectorAnimate': {'enum': ['none', 'flow', 'pulse', 'glow', 'trace', 'wave', 'lightning', 'beat', 'comet'], 'type': ['string', 'null'], '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.'}, 'defaultSceneAnimationLoop': {'enum': ['once', '2', '3', '5', 'infinite'], 'type': ['string', 'null'], '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.'}, 'defaultSceneAnimationSpeed': {'enum': ['slow', 'medium', 'fast'], 'type': ['string', 'null'], 'description': 'Scene animation speed. Options: slow (1.5× duration) | medium (default) | fast (0.6× duration).'}, 'defaultConnectorAnimateSpeed': {'enum': ['slow', 'medium', 'fast'], 'type': ['string', 'null'], 'description': 'Animation speed when defaultConnectorAnimate is set. Options: slow (3s cycle) | medium (2s, default) | fast (1s).'}}, 'additionalProperties': False}
get_style_options
Get Style Options for generate_visual
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.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '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'], 'properties': {'type': {'enum': ['flowchart', 'mindmap', 'block-diagram', 'matrix', 'timeline', 'gantt', 'er-diagram', 'sequence', 'process-flow', 'pyramid', 'funnel', 'radar', 'fishbone'], 'type': ['string', 'null'], 'description': 'Diagram type. Required when providing structured nodes/edges, optional with prompt.'}, 'edges': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['source', 'target', 'label', 'lineStyle', 'connectorType', 'sourceArrow', 'targetArrow', 'style', 'hidden', 'animate', 'animateSpeed', 'blockArrowSize', 'arrowStyle', 'loop'], 'properties': {'loop': {'enum': ['once', '2', '3', '5', 'infinite'], 'type': ['string', 'null'], '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.'}, 'label': {'type': ['string', 'null']}, 'style': {'type': ['object', 'null'], 'required': ['stroke', 'strokeWidth', 'opacity', 'fill'], 'properties': {'fill': {'type': ['string', 'null']}, 'stroke': {'type': ['string', 'null']}, 'opacity': {'type': ['number', 'null'], 'maximum': 1, 'minimum': 0}, 'strokeWidth': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'hidden': {'type': ['boolean', 'null']}, 'source': {'type': 'string'}, 'target': {'type': 'string'}, 'animate': {'enum': ['none', 'flow', 'pulse', 'glow', 'trace', 'wave', 'lightning', 'beat', 'comet'], 'type': ['string', 'null'], '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.'}, 'lineStyle': {'enum': ['calligraphy', 'block-arrow', 'solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null']}, 'arrowStyle': {'enum': ['calligraphy', 'clean', 'block'], 'type': ['string', 'null'], 'description': 'Per-edge connector aesthetic mode (overrides defaultArrowStyle). Options: "calligraphy" | "clean" | "block". Orthogonal to lineStyle (dash pattern); all 15 combinations are valid.'}, 'sourceArrow': {'type': ['string', 'null'], 'description': 'Arrowhead style at the edge source end. Options: open (default) | triangle | diamond | circle | bar | dot | none.'}, 'targetArrow': {'type': ['string', 'null'], 'description': 'Arrowhead style at the edge target end. Options: open (default) | triangle | diamond | circle | bar | dot | none.'}, 'animateSpeed': {'enum': ['slow', 'medium', 'fast'], 'type': ['string', 'null'], 'description': 'Animation speed. Options: slow (3s cycle) | medium (2s, default) | fast (1s).'}, 'connectorType': {'enum': ['straight', 'curved', 'elbow', 'orthogonal', 'bezier'], 'type': ['string', 'null']}, 'blockArrowSize': {'anyOf': [{'enum': ['small', 'medium', 'large'], 'type': 'string'}, {'type': 'number', 'maximum': 60, 'minimum': 1}], '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.'}}, 'additionalProperties': False}}, 'nodes': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['id', 'shape', 'text', 'style', 'width', 'height', 'icon', 'iconKeywords', 'hidden', 'group', 'chart', 'kpi', 'animationLoop'], 'properties': {'id': {'type': 'string'}, 'kpi': {'type': ['object', 'null'], 'required': ['value', 'label', 'delta', 'sparkline'], 'properties': {'delta': {'type': ['object', 'null'], 'required': ['text', 'direction', 'invertColor'], 'properties': {'text': {'type': 'string', 'maxLength': 2000}, 'direction': {'enum': ['up', 'down', 'flat'], 'type': ['string', 'null']}, 'invertColor': {'type': ['boolean', 'null']}}, 'additionalProperties': False}, 'label': {'type': ['string', 'null'], 'maxLength': 2000}, 'value': {'type': 'string', 'maxLength': 2000}, 'sparkline': {'type': ['array', 'null'], 'items': {'type': 'number'}, 'maxItems': 512}}, 'additionalProperties': False}, 'icon': {'type': ['string', 'null']}, 'text': {'type': 'string'}, 'chart': {'type': ['object', 'null'], 'required': ['type', 'data', 'series', 'innerRadiusRatio', 'showLabels', 'showValues', 'area'], 'properties': {'area': {'type': ['boolean', 'null']}, 'data': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['label', 'value', 'color'], 'properties': {'color': {'type': ['string', 'null'], 'pattern': '^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$'}, 'label': {'type': ['string', 'null'], 'maxLength': 2000}, 'value': {'type': 'number'}}, 'additionalProperties': False}, 'maxItems': 64}, 'type': {'enum': ['pie', 'donut', 'bar', 'sparkline', 'line'], 'type': 'string'}, 'series': {'type': ['array', 'null'], 'items': {'type': 'number'}, 'maxItems': 512}, 'showLabels': {'type': ['boolean', 'null']}, 'showValues': {'type': ['boolean', 'null']}, 'innerRadiusRatio': {'type': ['number', 'null'], 'maximum': 0.85, 'minimum': 0.1}}, 'additionalProperties': False}, 'group': {'type': ['string', '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': {'type': ['object', 'null'], 'required': ['fill', 'stroke', 'strokeWidth', 'opacity', 'cornerRadius', 'shadow', 'shadowLevel', 'fontSize', 'fontColor', 'lineStyle', 'iconColor', 'iconColors'], 'properties': {'fill': {'type': ['string', 'null']}, 'shadow': {'type': ['boolean', 'null']}, 'stroke': {'type': ['string', 'null']}, 'opacity': {'type': ['number', 'null'], 'maximum': 1, 'minimum': 0}, 'fontSize': {'type': ['number', 'null']}, 'fontColor': {'type': ['string', 'null']}, 'iconColor': {'type': ['string', 'null']}, 'lineStyle': {'enum': ['solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null'], 'description': 'Per-node outline line style. Excludes "calligraphy" — that mode is set per-spec via `defaultShapeLineStyle: "calligraphy"`, not per-node.'}, 'iconColors': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'shadowLevel': {'enum': ['sm', 'md', 'lg'], 'type': ['string', 'null']}, 'strokeWidth': {'type': ['number', 'null']}, 'cornerRadius': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'width': {'type': ['number', 'null'], 'minimum': 0}, 'height': {'type': ['number', 'null'], 'minimum': 0}, 'hidden': {'type': ['boolean', 'null']}, 'iconKeywords': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'animationLoop': {'enum': ['once', '2', '3', '5', 'infinite'], 'type': ['string', 'null']}}, 'additionalProperties': False}, 'description': 'Structured node definitions. Required when not using prompt mode.'}, 'radar': {'type': ['object', 'null'], 'required': ['axes', 'series', 'maxValue', 'rings'], 'properties': {'axes': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 3}, 'rings': {'type': ['integer', 'null'], 'maximum': 10, 'minimum': 1}, 'series': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'values'], 'properties': {'name': {'type': ['string', 'null']}, 'values': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 50}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1}, 'maxValue': {'type': ['number', 'null'], 'minimum': 1}}, '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.', 'additionalProperties': False}, 'style': {'enum': ['calligraphy', 'clean'], 'type': ['string', 'null']}, 'theme': {'type': ['object', 'null'], 'required': ['preset', 'palette', 'paletteSeed'], 'properties': {'preset': {'type': ['string', 'null']}, 'palette': {'type': ['object', 'null'], 'required': ['primary', 'secondary', 'accent', 'background', 'text', 'border', 'nodeColors'], 'properties': {'text': {'type': ['string', 'null']}, 'accent': {'type': ['string', 'null']}, 'border': {'type': ['string', 'null']}, 'primary': {'type': ['string', 'null']}, 'secondary': {'type': ['string', 'null']}, 'background': {'type': ['string', 'null']}, 'nodeColors': {'type': ['array', 'null'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'paletteSeed': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'title': {'type': ['string', 'null']}, 'funnel': {'type': ['object', 'null'], 'required': ['stageLabels', 'stageValues', 'dropOff', 'bottomRatio'], 'properties': {'dropOff': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'maxItems': 50}, 'bottomRatio': {'type': ['number', 'null'], 'maximum': 0.99, 'minimum': 0.05}, 'stageLabels': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 1}, 'stageValues': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'maxItems': 50}}, '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.', 'additionalProperties': False}, 'layout': {'type': ['object', 'null'], 'required': ['direction', 'nodeSpacing', 'rankSpacing', 'padding'], 'properties': {'padding': {'type': ['number', 'null'], 'minimum': 0}, 'direction': {'enum': ['TB', 'LR', 'BT', 'RL', 'radial', 'assorted'], 'type': ['string', 'null']}, 'nodeSpacing': {'type': ['number', 'null'], 'minimum': 0}, 'rankSpacing': {'type': ['number', 'null'], 'minimum': 0}}, 'additionalProperties': False}, 'prompt': {'type': ['string', 'null'], 'maxLength': 8000, '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"'}, 'pyramid': {'type': ['object', 'null'], 'required': ['tierLabels', 'tierValues', 'inverted', 'tipRatio'], 'properties': {'inverted': {'type': ['boolean', 'null']}, 'tipRatio': {'type': ['number', 'null'], 'maximum': 0.95, 'minimum': 0}, 'tierLabels': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 1}, 'tierValues': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'maxItems': 50}}, '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.', 'additionalProperties': False}, 'metadata': {'type': ['object', 'null'], 'required': ['size', 'bestFit', 'targetAspect'], 'properties': {'size': {'type': ['object', 'null'], 'required': ['preset', 'width', 'height', 'aspect', 'bestFit'], 'properties': {'width': {'type': ['integer', 'null'], 'maximum': 4096, 'minimum': 320, '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.'}, 'aspect': {'type': ['string', 'null'], 'pattern': '^\\d+(\\.\\d+)?:\\d+(\\.\\d+)?$', '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).'}, 'height': {'type': ['integer', 'null'], 'maximum': 4096, 'minimum': 320, 'description': 'Custom export-target height in pixels. 320..4096. Used with `width` for full custom dims, or with `aspect` for aspect-driven sizing.'}, 'preset': {'type': ['string', 'null'], 'maxLength': 64, '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).'}, 'bestFit': {'type': ['boolean', 'null'], '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.'}}, '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.', 'additionalProperties': False}, 'bestFit': {'type': ['boolean', 'null'], '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.'}, 'targetAspect': {'type': ['string', 'null'], 'maxLength': 16, '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.'}}, '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.', 'additionalProperties': False}, 'sections': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['id', 'title', 'subtitle', 'items', 'icons', 'itemIds', 'itemShapes', 'itemBackgroundColors', 'itemHeatIntensities', 'sectionBackgroundColor', 'sectionHeatIntensity', 'row', 'col'], 'properties': {'id': {'type': ['string', 'null']}, 'col': {'type': ['integer', 'null'], 'minimum': 0}, 'row': {'type': ['integer', 'null'], 'minimum': 0}, 'icons': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'items': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'itemIds': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'subtitle': {'type': ['string', 'null']}, 'itemShapes': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'itemHeatIntensities': {'type': ['array', 'null'], 'items': {'type': 'number', 'maximum': 1, 'minimum': 0}}, 'itemBackgroundColors': {'type': ['array', 'null'], 'items': {'type': 'string', 'maxLength': 40}}, 'sectionHeatIntensity': {'type': ['number', 'null'], 'maximum': 1, 'minimum': 0}, 'sectionBackgroundColor': {'type': ['string', 'null'], 'maxLength': 40}}, 'additionalProperties': False}, 'description': 'Matrix sections. Each section has a title, optional subtitle, and items. Used with type="matrix".'}, 'subtitle': {'type': ['string', 'null']}, 'iconStyle': {'type': ['string', 'null'], '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.'}, 'fontFamily': {'type': ['string', 'null'], '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).'}, 'matrixRows': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'description': 'Row header labels for 2D matrix grid (e.g., ["High Execution", "Low Execution"]).'}, 'shapeStyle': {'enum': ['calligraphy', 'clean'], 'type': ['string', 'null']}, 'xAxisLabel': {'type': ['string', 'null'], 'description': 'X-axis title for 2D matrix grid (e.g., "Completeness of Vision").'}, 'yAxisLabel': {'type': ['string', 'null'], 'description': 'Y-axis title for 2D matrix grid (e.g., "Ability to Execute").'}, 'defaultShadow': {'enum': ['none', 'sm', 'md', 'lg'], 'type': ['string', 'null'], 'description': 'Default shadow level applied to all nodes.'}, 'ganttHolidays': {'type': ['array', 'null'], 'items': {'type': 'string', 'maxLength': 32}, 'maxItems': 200, '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.'}, 'matrixColumns': {'type': ['array', 'null'], 'items': {'type': 'string'}, 'description': 'Column header labels for 2D matrix grid (e.g., ["High Vision", "Low Vision"]).'}, 'matrixItemStyle': {'enum': ['card', 'dot', 'text', 'badge'], 'type': ['string', 'null'], 'description': 'Item display style for matrix diagrams. "card" (default) = rectangular cards, "dot" = scatter points, "text" = plain text, "badge" = compact pills.'}, 'defaultArrowHead': {'type': ['string', 'null'], 'description': "Default arrowhead style applied to all edges that don't specify their own."}, 'defaultConnector': {'enum': ['straight', 'curved', 'elbow', 'orthogonal', 'bezier'], 'type': ['string', 'null'], 'description': "Default connector type applied to all edges that don't specify their own."}, 'defaultLineStyle': {'enum': ['calligraphy', 'block-arrow', 'solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null'], '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.'}, 'defaultArrowStyle': {'enum': ['calligraphy', 'clean', 'block'], 'type': ['string', 'null'], '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.'}, 'defaultTitleStyle': {'enum': ['plain', 'accent-bar', 'underline', 'boxed'], 'type': ['string', 'null'], '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.'}, 'defaultDividerStyle': {'enum': ['subtle', 'normal', 'bold', 'dashed', 'dotted', 'none'], 'type': ['string', 'null'], '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").'}, 'defaultBlockArrowSize': {'anyOf': [{'enum': ['small', 'medium', 'large'], 'type': 'string'}, {'type': 'number', 'maximum': 60, 'minimum': 1}], '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.'}, 'defaultSceneAnimation': {'enum': ['none', 'fade', 'zoom', 'zoom-pan', 'flow', 'wave-sweep', 'build-up', 'flow-zoom-pan'], 'type': ['string', 'null'], '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.'}, 'defaultShapeLineStyle': {'enum': ['calligraphy', 'block-arrow', 'solid', 'dashed', 'dotted', 'dash-dot', 'long-dash'], 'type': ['string', 'null'], '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.'}, 'defaultConnectorAnimate': {'enum': ['none', 'flow', 'pulse', 'glow', 'trace', 'wave', 'lightning', 'beat', 'comet'], 'type': ['string', 'null'], '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.'}, 'defaultSceneAnimationLoop': {'enum': ['once', '2', '3', '5', 'infinite'], 'type': ['string', 'null'], '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.'}, 'defaultSceneAnimationSpeed': {'enum': ['slow', 'medium', 'fast'], 'type': ['string', 'null'], 'description': 'Scene animation speed. Options: slow (1.5× duration) | medium (default) | fast (0.6× duration).'}, 'defaultConnectorAnimateSpeed': {'enum': ['slow', 'medium', 'fast'], 'type': ['string', 'null'], 'description': 'Animation speed when defaultConnectorAnimate is set. Options: slow (3s cycle) | medium (2s, default) | fast (1s).'}}, 'additionalProperties': False}
recommend_framework
Recommend Framework
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). Use 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. Input: 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. Pair with `generate_framework_analysis` to actually run a recommended framework against the user's inputs. Example: { "problem_statement": "We need to decide whether to enter the EU SMB market in Q3", "decision_stage": "decide", "limit": 5 }
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['problem_statement'], 'properties': {'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Number of frameworks to return. Default 5; cap 20.'}, 'persona': {'type': 'string', 'maxLength': 64, 'description': 'Persona slug (e.g. "ciso", "pm", "cfo").'}, 'regulation': {'type': 'string', 'maxLength': 64, 'description': 'Regulation slug (e.g. "sox", "gdpr", "iso-31000").'}, 'decision_stage': {'enum': ['explore', 'diagnose', 'decide', 'execute', 'review'], 'type': 'string', 'description': 'Decision-lifecycle stage.'}, 'problem_statement': {'type': 'string', 'maxLength': 2000, 'minLength': 10, 'description': 'Plain-English description of the business problem. 10–2000 chars.'}}, 'additionalProperties': False}
Hinzugefügt
generate_diagram
17. September 2026 07:57
Hinzugefügt
generate_framework_analysis
17. September 2026 07:57
Hinzugefügt
recommend_framework
17. September 2026 07:57
Hinzugefügt
get_style_options
17. September 2026 07:57
Hinzugefügt
generate_visual
17. September 2026 07:57