← The evidence ledger
Evidence row 1727622
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 331feda7-ddec-41f8-b273-394a5cdbf0fb
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 2480cd92110e14f48af94e44bad66fc3d990a9b1a23c4291e291b48a5ebecaf4
- Leaf
- 0x04261412473d6c5ee7f9b3a099af0443ca174185a132cc7a8408be4e9fa52d76
What was observed
{
"count": 20,
"tools": [
{
"description": "Generate a slide-deck-quality cycle diagram: 3–8 stages evenly spaced around a loop, first stage at 12 o'clock running clockwise, joined by arrows that lead from the last stage back to the first, with an optional centre label and a short detail line beside each stage. Two looks: \"nodes\" (coloured circles on a ring with curved arrows) and \"segments\" (a ring cut into arrow-shaped segments). Choose it when the process repeats: improvement loops (plan-do-check-act), flywheels, product or customer lifecycles, feedback loops. Use a process diagram instead when steps run once from start to finish, a timeline when dates matter, and hub and spoke when the items surround a centre with no order. Limits: 3–8 stages, names of 1–3 words, details of about 12 words. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A cycle diagram: stages evenly spaced around a loop, joined by arrows, with an optional centre label.",
"examples": [
{
"center": "Customer value",
"stages": [
{
"detail": "Set the quarter's bets",
"name": "Plan"
},
{
"detail": "Ship small, ship often",
"name": "Build"
},
{
"detail": "Track usage and outcomes",
"name": "Measure"
},
{
"detail": "Keep what works, drop what doesn't",
"name": "Learn"
}
],
"style": "nodes",
"title": "Continuous improvement loop"
}
],
"properties": {
"center": {
"description": "Optional label in the middle of the loop, e.g. the goal the cycle serves (\"Customer value\"). Bold, wrapped to up to 3 lines. Omit for none.",
"maxLength": 80,
"type": "string"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"stages": {
"description": "The stages in order (3–8). The first sits at 12 o'clock and the loop runs clockwise, back from the last stage to the first. Fewer than 3 still render but are reported as a warning; more than 8 are dropped.",
"items": {
"properties": {
"color": {
"description": "Hex colour, e.g. \"#4f46e5\". Optional: stages without one take the next palette colour.",
"maxLength": 40,
"type": "string"
},
"detail": {
"description": "Optional short description shown outside the ring next to the stage, wrapped to up to 3 lines (about 12 words).",
"maxLength": 160,
"type": "string"
},
"name": {
"description": "Stage name, 1–3 words reads best (e.g. \"Plan\", \"Build\"). Long names shrink and wrap to 2 lines.",
"maxLength": 60,
"type": "string"
}
},
"required": [
"name"
],
"type": "object",
"x-fromString": "name"
},
"maxItems": 8,
"minItems": 1,
"type": "array"
},
"style": {
"default": "nodes",
"description": "\"nodes\" (default): coloured circles on a ring joined by curved arrows, stage names inside the circles. \"segments\": a thick ring cut into coloured arrow-shaped segments, stage names outside.",
"enum": [
"nodes",
"segments"
],
"type": "string"
},
"title": {
"default": "Cycle",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"description": "Chart width in pixels (640–2400). Omit it (recommended) and the chart sizes itself to its content with comfortable margins, between 880 and 1280px wide. PNG output renders at 2x.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"stages"
],
"title": "Cycle diagram",
"type": "object"
},
"name": "create_cycle"
},
{
"description": "Generate a slide-deck-quality decision tree drawn left to right in clean columns of rounded boxes, in the decision-analysis convention: a square where a decision splits into options, a circle where chance splits into events, and a triangle at each end outcome. Branch lines carry an optional `label` (\"Yes\", \"No\", an option) and, under a chance node, the probability (\"Strong demand · 60%\"); end outcomes can carry a numeric `payoff`, lined up in a column at the right (`prefix` \"$\", `suffix` \"m\"). Expected values are rolled back automatically once the tree has payoffs and probabilities: every decision and chance node shows its EV, each decision's best option is drawn in the accent colour and the rejected ones are muted with a ‖ prune mark; probabilities that don't add up to 100% are warned about and drawn as given. Node types are inferred (branches with probabilities make a chance node, no branches an outcome, otherwise a decision), so a plain yes/no troubleshooting or eligibility flowchart is just questions with \"Yes\"/\"No\" labels and no numbers. Choose it for choosing between options under uncertainty (launch, invest, build vs buy, litigate or settle), expected-value and decision-analysis homework, and yes/no question flowcharts; use an issue tree instead to break a problem or metric into its parts, a chevron process for steps in order, and a Harvey ball matrix to score options against criteria. Limits: 5 levels including the root, up to 5 branches per node, 40 nodes; keep names to a few words. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"$defs": {
"node": {
"description": "One node in the tree: a decision, a chance event or an end outcome. Its children are the branches leaving it.",
"properties": {
"children": {
"description": "The branches leaving this node, top to bottom (up to 5): the options of a decision, the possible events of a chance node, or the answers to a question.",
"items": {
"$ref": "#/$defs/node",
"x-fromString": "name"
},
"maxItems": 5,
"type": "array"
},
"label": {
"description": "Optional text on the branch line leading into this node, e.g. \"Yes\" / \"No\" in a question flowchart, or an option name. Under a chance node it is followed by the probability (\"Strong demand · 60%\"). Omit it when the node's name already says it.",
"maxLength": 40,
"type": "string"
},
"name": {
"description": "The text in the node's box: the decision or question (\"Launch Atlas?\", \"Is the router on?\"), the option or event it stands for (\"Launch now\", \"Strong demand\"), or the end result (\"Replace the cable\"). Wraps onto three lines, then truncates; keep it to a few words.",
"maxLength": 80,
"type": "string"
},
"payoff": {
"description": "Optional value of an end outcome as a plain number (4.2 for $4.2m with prefix \"$\" and suffix \"m\"; negative for a loss). Shown right-aligned in a payoff column at the right edge and used to roll back expected values. Only counts on nodes without children.",
"maximum": 1000000000000,
"minimum": -1000000000000,
"type": "number"
},
"probability": {
"description": "Optional probability of this branch, for children of a chance node. Write it as 0–1 (0.6) or as a percentage (60): any value above 1 is read as a percentage, so write 1% as 0.01. Drawn on the branch as \"60%\". Branches of a chance node that leave it out share whatever is left of 100% equally. If a chance node's branches don't add up to 100%, the chart is still drawn and a warning says so.",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"type": {
"description": "Optional node type, drawn in the decision-analysis convention: \"decision\" (a square: the decision maker picks a branch), \"chance\" (a circle: chance picks a branch, with probabilities) or \"outcome\" (a triangle: an end point, with an optional payoff). Usually omit it and it is inferred: a node whose branches carry a probability is a chance node, a node with no branches an outcome, anything else a decision.",
"enum": [
"decision",
"chance",
"outcome"
],
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
}
},
"description": "A decision tree drawn left to right: decisions (squares), chance events (circles) and end outcomes (triangles), with branch labels, probabilities, payoffs and rolled-back expected values. Also draws plain yes/no question flowcharts.",
"examples": [
{
"prefix": "$",
"root": {
"children": [
{
"children": [
{
"name": "Strong demand",
"payoff": 4.2,
"probability": 0.6
},
{
"name": "Weak demand",
"payoff": -1.5,
"probability": 0.4
}
],
"name": "Launch now"
},
{
"name": "License out",
"payoff": 1.2
}
],
"name": "Launch strategy"
},
"suffix": "m",
"title": "Should we launch Atlas now?"
},
{
"root": {
"children": [
{
"children": [
{
"label": "No",
"name": "Replace the charger"
},
{
"label": "Yes",
"name": "Book a repair"
}
],
"label": "No",
"name": "Is it charging?"
},
{
"label": "Yes",
"name": "Restart in safe mode"
}
],
"name": "Does it power on?"
},
"title": "Laptop won't start"
}
],
"properties": {
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours: the first marks decisions and the best options, the second chance events, the third end outcomes. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"prefix": {
"default": "",
"description": "Text before every payoff and expected value, e.g. \"$\", \"€\" or \"£\". Default none.",
"maxLength": 6,
"type": "string"
},
"root": {
"$ref": "#/$defs/node",
"description": "The first decision or question, on the left (e.g. \"Launch strategy for Atlas\" or \"Does the laptop power on?\"), with its branches nested in `children`. Limits: 5 levels in total including the root, up to 5 branches per node and 40 nodes; extras are dropped with a warning, deepest levels and last-listed nodes first."
},
"showEV": {
"description": "Roll back expected values: print \"EV\" on every decision and chance node, draw each decision's best option in the accent colour and mark the rejected options with a ‖ prune mark. When omitted it is on as soon as the tree has both payoffs and probabilities; set false to hide it, true to show it for decision-only trees with payoffs.",
"type": "boolean"
},
"suffix": {
"default": "",
"description": "Text after every payoff and expected value, e.g. \"m\", \"k\", \"bn\" or \" pts\". Default none.",
"maxLength": 6,
"type": "string"
},
"title": {
"default": "Decision tree",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"description": "Chart width in pixels (640–2400). Omit it (recommended) and the chart sizes itself to its content with comfortable margins, between 880 and 1280px wide. PNG output renders at 2x.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"root"
],
"title": "Decision Tree",
"type": "object"
},
"name": "create_decision_tree"
},
{
"description": "Generate a clean ecomap (ecological map, Hartman style) for social work, family therapy, case management and school counselling: the client or household in a solid centre circle with its members listed inside, and 2–12 system circles around it (school, work, extended family, church, health care, probation, friends…), each joined to the centre by a line whose style shows the relationship: strong (thick line), moderate (plain line, the default), tenuous (dashed) or stressful (hatched red line). Arrowheads show the flow of energy or resources: to the system, from it, or both ways. Each system may carry a short detail outside its circle, and a legend of the line styles sits underneath. Choose it to map a person's or family's relationships with outside systems; use a hub and spoke for neutral parts around a centre with no relationship quality, a mind map when the items branch further, and an org chart for reporting lines. Limits: 2–12 systems, 0–8 household members, system names of 1–3 words, details of about 10 words. Use first names or roles only; never put identifying client details in the chart. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "An ecomap (Hartman style): a client or household in the centre, the systems around them, and lines whose style shows the strength of each relationship and arrows for the flow of energy or resources.",
"examples": [
{
"center": {
"members": [
"Maria, 34",
"Leo, 9"
],
"name": "Lopez household"
},
"systems": [
{
"flow": "both",
"name": "School",
"strength": "strong"
},
{
"detail": "Night shifts",
"flow": "to",
"name": "Work",
"strength": "stressful"
},
{
"name": "Extended family",
"strength": "tenuous"
},
{
"flow": "from",
"name": "Health care"
}
],
"title": "Lopez family ecomap"
}
],
"properties": {
"center": {
"description": "The client or household in the middle: a solid circle in the first palette colour with the name in bold white and the members listed under it, e.g. { \"name\": \"Lopez household\", \"members\": [\"Maria, 34\", \"Leo, 9\"] }. Use first names, roles or ages only.",
"properties": {
"color": {
"description": "Optional hex colour of the centre circle. Default: the first palette colour (indigo #4f46e5); the systems take the following palette colours.",
"maxLength": 40,
"type": "string"
},
"members": {
"default": [],
"description": "Optional household members listed small inside the centre circle, one per line (0–8), e.g. [\"Maria, 34\", \"Leo, 9\"]. A first name or role with an age reads best; the circle grows to fit.",
"items": {
"maxLength": 30,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"name": {
"description": "Name of the client or household, e.g. \"Lopez household\" or \"Sam\". Bold white text, wrapped to up to 2 lines.",
"maxLength": 40,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"legend": {
"default": true,
"description": "Show the legend under the map explaining the four line styles and the arrows. Default true; set false when the audience already knows the notation.",
"type": "boolean"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"systems": {
"description": "The systems around the centre (2–12), placed clockwise from 12 o'clock: people, groups and services such as School, Work, Extended family, Church, Health care, Friends, Probation, Benefits. One system still renders but is reported as a warning; more than 12 are dropped.",
"items": {
"properties": {
"color": {
"description": "Hex colour of this system's circle, e.g. \"#10b981\". Optional: systems without one take the next palette colour.",
"maxLength": 40,
"type": "string"
},
"detail": {
"description": "Optional short note shown outside the circle, on the side away from the centre, wrapped to up to 3 lines (about 10 words), e.g. \"Weekly visits from grandma\".",
"maxLength": 120,
"type": "string"
},
"flow": {
"default": "none",
"description": "Direction of energy, support or resources along the line: \"none\" (default, no arrowheads), \"to\" (from the client to this system), \"from\" (from this system to the client) or \"both\" (a two-way exchange).",
"enum": [
"none",
"to",
"from",
"both"
],
"type": "string"
},
"name": {
"description": "System label inside its circle, 1–3 words reads best (e.g. \"Extended family\"). Long names shrink and wrap to up to 3 lines.",
"maxLength": 40,
"type": "string"
},
"strength": {
"default": "moderate",
"description": "Quality of the relationship, drawn as the connecting line's style (Hartman's ecomap convention): \"strong\" (thick solid line), \"moderate\" (plain solid line, the default), \"tenuous\" (dashed line) or \"stressful\" (red line crossed by short hatch marks, -/-/-).",
"enum": [
"strong",
"moderate",
"tenuous",
"stressful"
],
"type": "string"
}
},
"required": [
"name"
],
"type": "object",
"x-fromString": "name"
},
"maxItems": 12,
"minItems": 1,
"type": "array"
},
"title": {
"default": "Ecomap",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"description": "Chart width in pixels (640–2400). Omit it (recommended) and the chart sizes itself to its content with comfortable margins, between 880 and 1280px wide. PNG output renders at 2x.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"center",
"systems"
],
"title": "Ecomap",
"type": "object"
},
"name": "create_ecomap"
},
{
"description": "Generate a slide-deck-quality fishbone diagram (Ishikawa or cause-and-effect diagram) for root-cause analysis: a horizontal spine ending in a head box that holds the problem, with 1–8 category bones angled off it, alternating above and below, each named in a coloured pill and carrying up to 6 causes, and each cause up to 3 sub-causes. Standard category sets fill in unnamed categories: 6M for manufacturing (People, Machine, Method, Material, Measurement, Environment), 8P for services and 4S for the service industry. Choose it for quality, Lean and Six Sigma (DMAIC Analyze) work, healthcare quality improvement, incident reviews and any \"why does this keep happening\" slide; use an issue tree for a MECE logic or KPI breakdown, a mind map for an open brainstorm, a SIPOC to scope a process, and the lab fishbone (create_lab_fishbone) for lab value skeletons such as BMP or CBC, which is a different thing. Infer 4–6 categories and 2–4 causes each from the problem rather than asking. Limits: 1–8 categories, 6 causes per category of about 2–7 words, 3 sub-causes per cause. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A fishbone (Ishikawa, cause-and-effect) diagram for root-cause analysis: the problem in a head box on the right, 1–8 category bones off a horizontal spine, alternating top and bottom, each with up to 6 causes and up to 3 sub-causes per cause.",
"examples": [
{
"categories": [
{
"causes": [
{
"text": "Agency nurses unfamiliar with ward routine"
},
{
"text": "High patient-to-nurse ratio on nights"
}
],
"name": "People"
},
{
"causes": [
{
"sub": [
"Clashes with handover"
],
"text": "All rounds timed for 08:00"
}
],
"name": "Methods"
},
{
"causes": [
{
"text": "One medication cart for 28 beds"
}
],
"name": "Equipment"
},
{
"causes": [
{
"text": "Pharmacy delivers after the morning round"
}
],
"name": "Materials"
}
],
"problem": "Late medication administration",
"title": "Root cause analysis: Ward 4B"
}
],
"properties": {
"categories": {
"description": "The category bones (1–8; 4–6 is typical), drawn left to right in pairs: the first above the spine, the second below it, the third above, and so on. More than 8 are dropped with a warning. E.g. [{ \"name\": \"People\", \"causes\": [{ \"text\": \"Agency staff unfamiliar with the ward\", \"sub\": [\"No induction checklist\"] }] }].",
"items": {
"properties": {
"causes": {
"default": [],
"description": "The causes on this bone (0–6), listed top to bottom. Each is a horizontal branch with its text above the line. E.g. [{ \"text\": \"Night shift understaffed\" }, { \"text\": \"Unclear handover\", \"sub\": [\"No SBAR template\"] }]. A plain string is accepted as a cause without sub-causes: \"Night shift understaffed\" means { \"text\": \"Night shift understaffed\" }.",
"items": {
"properties": {
"sub": {
"default": [],
"description": "Optional sub-causes (0–3): the reasons behind this cause, drawn as smaller branches off it, e.g. [\"Single delivery run\", \"Orders sent late\"]. Wrap to 2 lines.",
"items": {
"maxLength": 60,
"type": "string"
},
"maxItems": 3,
"type": "array"
},
"text": {
"description": "The cause, a short phrase of about 2–7 words, e.g. \"Pharmacy delivery after the round\". Wraps to 3 lines to fit between the bones.",
"maxLength": 80,
"type": "string"
}
},
"type": "object",
"x-fromString": "text"
},
"maxItems": 6,
"type": "array"
},
"color": {
"description": "Optional hex colour for this bone, its cause lines and its name pill, e.g. \"#0ea5e9\". Default: the next palette colour.",
"maxLength": 40,
"type": "string"
},
"name": {
"description": "Category name shown in the pill at the bone's outer end, e.g. \"Methods\" or \"Equipment\". Omit it to use the `preset` name for this position. One or two words; long names shrink to 12px, then wrap to 2 lines.",
"maxLength": 40,
"type": "string"
}
},
"type": "object",
"x-fromString": "name"
},
"maxItems": 8,
"minItems": 1,
"type": "array"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to the category bones that have no colour of their own (bone, cause lines and name pill). Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"preset": {
"default": "6m",
"description": "Standard category set whose names are used for categories that have no `name`, by position: \"6m\" (manufacturing: People, Machine, Method, Material, Measurement, Environment), \"8p\" (services: Product, Price, Place, Promotion, People, Process, Physical evidence, Productivity), \"4s\" (service industry: Surroundings, Suppliers, Systems, Skills) or \"custom\" (unnamed categories show \"Category 1\", \"Category 2\"…). Default \"6m\". A category's own `name` always wins.",
"enum": [
"6m",
"8p",
"4s",
"custom"
],
"type": "string"
},
"problem": {
"description": "The effect being analysed, shown in the head box at the right end of the spine, e.g. \"Late medication administration on Ward 4B\". Phrase it as a problem, not a cause. Wraps to 5 lines in the box; about 3–10 words reads best.",
"maxLength": 120,
"type": "string"
},
"title": {
"default": "Root cause analysis",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"default": 1280,
"description": "Chart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height is computed from the content: bones grow as long as their causes need.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"problem",
"categories"
],
"title": "Fishbone Diagram",
"type": "object"
},
"name": "create_fishbone"
},
{
"description": "Generate a slide-deck-quality Porter's five forces diagram laid out as the classic cross: competitive rivalry in the centre, threat of new entrants above, threat of substitutes below, bargaining power of suppliers on the left and of buyers on the right, with arrows pointing in at the centre. Each box has a header band with the force's name, an optional rating pill (very low, low, medium, high, very high; green, amber or red) and up to 5 short bullets of evidence; an optional conclusion line sits underneath. Choose it to assess an industry's attractiveness or competitive pressure for a strategy, market-entry, investment or case-interview slide. Use a Harvey ball matrix to score several options against criteria, a hub and spoke for items around a centre with no fixed meaning, and a mind map for open-ended brainstorming. All five forces are required (an empty object {} is fine); infer sensible ratings and bullets from the industry rather than asking. Limits: 5 bullets per force of about 4–10 words, a conclusion of one sentence. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "Porter's five forces laid out as the classic cross: competitive rivalry in the centre, new entrants above, substitutes below, suppliers left and buyers right, each with an optional Low/Medium/High rating and bullets, plus an optional conclusion.",
"examples": [
{
"buyers": {
"bullets": [
"Riders switch apps for a cheaper fare"
],
"rating": "high"
},
"conclusion": "Overall: moderately attractive for the two scaled players; buyer power and rivalry cap margins",
"newEntrants": {
"bullets": [
"Two-sided network effects favour incumbents",
"Insurance and licensing costs are high"
],
"rating": "low"
},
"rivalry": {
"bullets": [
"Two players hold over 95% of trips",
"Promotions and price matching are constant"
],
"rating": "high"
},
"substitutes": {
"bullets": [
"Own car, transit, micromobility"
],
"rating": "medium"
},
"suppliers": {
"bullets": [
"Drivers multi-home across both apps"
],
"rating": "medium"
},
"title": "Five forces: US ride-hailing"
}
],
"properties": {
"buyers": {
"description": "Right box: how much leverage customers have to push prices down or demand more. Default name \"Bargaining power of buyers\". E.g. { \"rating\": \"high\", \"bullets\": [\"Riders compare fares in seconds\"] }.",
"properties": {
"bullets": {
"default": [],
"description": "The evidence for this force (0–5 short phrases, about 4–10 words each), listed in the box. Long ones wrap to 3 lines.",
"items": {
"maxLength": 120,
"type": "string"
},
"maxItems": 5,
"type": "array"
},
"color": {
"description": "Optional hex colour for this box's header band, e.g. \"#0ea5e9\". Default: the first palette colour for every box, so ratings stay the only colour that carries meaning.",
"maxLength": 40,
"type": "string"
},
"label": {
"default": "Bargaining power of buyers",
"description": "Name shown in the box's header band. Default \"Bargaining power of buyers\"; override only to rename it.",
"maxLength": 50,
"type": "string"
},
"rating": {
"description": "Optional strength of this force, shown as a pill in the header: \"very low\", \"low\" (green), \"medium\" (amber), \"high\" or \"very high\" (red). Omit for no rating.",
"enum": [
"very low",
"low",
"medium",
"high",
"very high"
],
"type": "string"
}
},
"type": "object"
},
"conclusion": {
"description": "Optional one-line takeaway shown in a muted band under the cross, e.g. \"Overall: moderately attractive; buyer power is the main threat\". Wraps to 2 lines. Omit for none.",
"maxLength": 200,
"type": "string"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"newEntrants": {
"description": "Top box: how easily new competitors can enter the industry (capital needs, scale, brand, regulation). Default name \"Threat of new entrants\". E.g. { \"rating\": \"high\", \"bullets\": [\"Network effects favour incumbents\"] }.",
"properties": {
"bullets": {
"default": [],
"description": "The evidence for this force (0–5 short phrases, about 4–10 words each), listed in the box. Long ones wrap to 3 lines.",
"items": {
"maxLength": 120,
"type": "string"
},
"maxItems": 5,
"type": "array"
},
"color": {
"description": "Optional hex colour for this box's header band, e.g. \"#0ea5e9\". Default: the first palette colour for every box, so ratings stay the only colour that carries meaning.",
"maxLength": 40,
"type": "string"
},
"label": {
"default": "Threat of new entrants",
"description": "Name shown in the box's header band. Default \"Threat of new entrants\"; override only to rename it.",
"maxLength": 50,
"type": "string"
},
"rating": {
"description": "Optional strength of this force, shown as a pill in the header: \"very low\", \"low\" (green), \"medium\" (amber), \"high\" or \"very high\" (red). Omit for no rating.",
"enum": [
"very low",
"low",
"medium",
"high",
"very high"
],
"type": "string"
}
},
"type": "object"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours. Every header band takes the FIRST palette colour unless a force sets its own colour; rating pills always use green, amber and red. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"rivalry": {
"description": "Centre box: how intensely existing competitors fight on price, product, marketing and service. Default name \"Competitive rivalry\". E.g. { \"rating\": \"high\", \"bullets\": [\"Price war among the top two players\",\"Low switching costs for riders\"] }.",
"properties": {
"bullets": {
"default": [],
"description": "The evidence for this force (0–5 short phrases, about 4–10 words each), listed in the box. Long ones wrap to 3 lines.",
"items": {
"maxLength": 120,
"type": "string"
},
"maxItems": 5,
"type": "array"
},
"color": {
"description": "Optional hex colour for this box's header band, e.g. \"#0ea5e9\". Default: the first palette colour for every box, so ratings stay the only colour that carries meaning.",
"maxLength": 40,
"type": "string"
},
"label": {
"default": "Competitive rivalry",
"description": "Name shown in the box's header band. Default \"Competitive rivalry\"; override only to rename it.",
"maxLength": 50,
"type": "string"
},
"rating": {
"description": "Optional strength of this force, shown as a pill in the header: \"very low\", \"low\" (green), \"medium\" (amber), \"high\" or \"very high\" (red). Omit for no rating.",
"enum": [
"very low",
"low",
"medium",
"high",
"very high"
],
"type": "string"
}
},
"type": "object"
},
"showRatings": {
"default": true,
"description": "Show each force's rating pill. Default true; false hides every rating without deleting it.",
"type": "boolean"
},
"substitutes": {
"description": "Bottom box: how easily customers can meet the same need another way. Default name \"Threat of substitutes\". E.g. { \"rating\": \"high\", \"bullets\": [\"Public transit and micromobility\"] }.",
"properties": {
"bullets": {
"default": [],
"description": "The evidence for this force (0–5 short phrases, about 4–10 words each), listed in the box. Long ones wrap to 3 lines.",
"items": {
"maxLength": 120,
"type": "string"
},
"maxItems": 5,
"type": "array"
},
"color": {
"description": "Optional hex colour for this box's header band, e.g. \"#0ea5e9\". Default: the first palette colour for every box, so ratings stay the only colour that carries meaning.",
"maxLength": 40,
"type": "string"
},
"label": {
"default": "Threat of substitutes",
"description": "Name shown in the box's header band. Default \"Threat of substitutes\"; override only to rename it.",
"maxLength": 50,
"type": "string"
},
"rating": {
"description": "Optional strength of this force, shown as a pill in the header: \"very low\", \"low\" (green), \"medium\" (amber), \"high\" or \"very high\" (red). Omit for no rating.",
"enum": [
"very low",
"low",
"medium",
"high",
"very high"
],
"type": "string"
}
},
"type": "object"
},
"suppliers": {
"description": "Left box: how much leverage suppliers (inputs, labour, platforms) have over prices and terms. Default name \"Bargaining power of suppliers\". E.g. { \"rating\": \"high\", \"bullets\": [\"Drivers multi-home across apps\"] }.",
"properties": {
"bullets": {
"default": [],
"description": "The evidence for this force (0–5 short phrases, about 4–10 words each), listed in the box. Long ones wrap to 3 lines.",
"items": {
"maxLength": 120,
"type": "string"
},
"maxItems": 5,
"type": "array"
},
"color": {
"description": "Optional hex colour for this box's header band, e.g. \"#0ea5e9\". Default: the first palette colour for every box, so ratings stay the only colour that carries meaning.",
"maxLength": 40,
"type": "string"
},
"label": {
"default": "Bargaining power of suppliers",
"description": "Name shown in the box's header band. Default \"Bargaining power of suppliers\"; override only to rename it.",
"maxLength": 50,
"type": "string"
},
"rating": {
"description": "Optional strength of this force, shown as a pill in the header: \"very low\", \"low\" (green), \"medium\" (amber), \"high\" or \"very high\" (red). Omit for no rating.",
"enum": [
"very low",
"low",
"medium",
"high",
"very high"
],
"type": "string"
}
},
"type": "object"
},
"title": {
"default": "Five forces analysis",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"description": "Chart width in pixels (640–2400). Omit it (recommended) and the chart sizes itself to its content with comfortable margins, between 880 and 1280px wide. PNG output renders at 2x.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"rivalry",
"newEntrants",
"substitutes",
"suppliers",
"buyers"
],
"title": "Porter's Five Forces",
"type": "object"
},
"name": "create_five_forces"
},
{
"description": "Generate a slide-deck-quality football field chart, the valuation summary used in banking and corporate-development decks: one floating horizontal bar per method from its low to its high value on a shared axis with round gridlines, the method name and an optional assumption line (\"8.0x–10.0x EV/EBITDA\") on the left, low and high values printed at the bar ends, up to 3 dashed marker lines (current share price, offer price) and an optional shaded implied range. Choose it for valuation ranges (DCF, trading comps, precedent transactions, 52-week range, analyst targets, LBO) and for any comparison of low–high ranges on one scale, such as salary bands, cost or estimate ranges, or price ranges by scenario. Use a timeline (Gantt) when the ranges are dates, a Harvey ball matrix for scores against criteria, and a pyramid/funnel for stage volumes. Values are plain numbers; set prefix (\"$\", default), suffix (\"m\", \"/sh\", \"x\") and decimals for display. Limits: 1–12 rows, 0–3 markers; a low above its high is swapped with a warning. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A football field valuation chart: one floating low-to-high bar per valuation method on a shared value axis, with optional marker lines (current price, offer) and a shaded implied range.",
"examples": [
{
"markers": [
{
"label": "Current price",
"value": 45.1
},
{
"label": "Offer",
"value": 52
}
],
"range": {
"high": 55,
"label": "Implied range",
"low": 48
},
"rows": [
{
"high": 49.6,
"low": 38.2,
"method": "52-week trading range"
},
{
"detail": "8.0x–10.0x EV/EBITDA",
"high": 53,
"low": 42,
"method": "Trading comps"
},
{
"detail": "10.5x–12.5x EV/EBITDA",
"high": 61,
"low": 50,
"method": "Precedent transactions"
},
{
"detail": "WACC 9–11%, g 2–3%",
"high": 60,
"low": 46,
"method": "DCF (perpetuity growth)"
}
],
"title": "Valuation summary ($ per share)"
}
],
"properties": {
"axisMax": {
"description": "Optional right end of the value axis, e.g. 70. Omit (recommended) and the axis ends at a round number slightly above the largest value.",
"maximum": 1000000000000,
"minimum": -1000000000000,
"type": "number"
},
"axisMin": {
"description": "Optional left end of the value axis, e.g. 30. Omit (recommended) and the axis starts at a round number slightly below the smallest value. Bars beyond the axis are cut off with a warning.",
"maximum": 1000000000000,
"minimum": -1000000000000,
"type": "number"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"decimals": {
"description": "Decimal places for every value (0–3), e.g. 2 shows 45.10. Omit (the default) to show each value as given, rounded to at most 2 decimals.",
"maximum": 3,
"minimum": 0,
"type": "integer"
},
"markers": {
"default": [],
"description": "Optional vertical dashed reference lines across every row (0–3), each labelled at the top with its label and value, e.g. [{ \"label\": \"Current price\", \"value\": 45.1 }, { \"label\": \"Offer\", \"value\": 52 }]. Default: none.",
"items": {
"properties": {
"color": {
"description": "Optional hex colour for the line and its label. Default: dark slate for the first marker, red for the second, gray for the third.",
"maxLength": 40,
"type": "string"
},
"label": {
"description": "Marker name shown above its line, followed by the formatted value, e.g. \"Current price\" or \"Offer price\".",
"maxLength": 40,
"type": "string"
},
"value": {
"description": "Where the line sits on the value axis, in the chart's units, e.g. 45.1.",
"maximum": 1000000000000,
"minimum": -1000000000000,
"type": "number"
}
},
"required": [
"label"
],
"type": "object"
},
"maxItems": 3,
"type": "array"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours. Every bar takes the FIRST palette colour unless the row sets its own colour, so a brand colour as the first entry recolours the whole chart. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"prefix": {
"default": "$",
"description": "Text put before every value, default \"$\". Use \"€\", \"£\" or \"\" (none), e.g. \"\" for multiples.",
"maxLength": 6,
"type": "string"
},
"range": {
"description": "Optional shaded band behind every row, e.g. the implied valuation range: { \"low\": 48, \"high\": 55, \"label\": \"Implied range\" }. Its label and values are shown above the band. Omit for none (the default).",
"properties": {
"high": {
"description": "High end of the shaded band, e.g. 55.",
"maximum": 1000000000000,
"minimum": -1000000000000,
"type": "number"
},
"label": {
"description": "Optional name shown above the band before its values, e.g. \"Implied range\" or \"Proposed offer range\".",
"maxLength": 40,
"type": "string"
},
"low": {
"description": "Low end of the shaded band, e.g. 48.",
"maximum": 1000000000000,
"minimum": -1000000000000,
"type": "number"
}
},
"type": "object"
},
"rows": {
"description": "The valuation methods, top to bottom (1–12; extra rows are dropped with a warning). Each row is one horizontal bar from low to high on the shared axis, e.g. { \"method\": \"Trading comps\", \"detail\": \"8.0x–10.0x EV/EBITDA\", \"low\": 42, \"high\": 51 }. A row whose low is above its high is swapped and reported as a warning.",
"items": {
"properties": {
"color": {
"description": "Optional hex colour for this bar, e.g. \"#0ea5e9\" to set one method apart (such as the 52-week range). Default: the first palette colour.",
"maxLength": 40,
"type": "string"
},
"detail": {
"description": "Optional muted line under the method name with the key assumption, e.g. \"8.0x–10.0x EV/EBITDA\" or \"WACC 9–11%, g 2–3%\". Omit for none.",
"maxLength": 80,
"type": "string"
},
"high": {
"description": "High end of the range, in the same units as low, e.g. 58. Swapped with low (and warned) if it is the smaller.",
"maximum": 1000000000000,
"minimum": -1000000000000,
"type": "number"
},
"low": {
"description": "Low end of the range, in the chart's units (the prefix and suffix are added for display), e.g. 42 for $42/share or 1250 for $1,250m. Numeric strings are accepted.",
"maximum": 1000000000000,
"minimum": -1000000000000,
"type": "number"
},
"method": {
"description": "Method name shown left of the bar at 14px bold, e.g. \"DCF (perpetuity growth)\" or \"52-week trading range\". Wraps to two lines when long.",
"maxLength": 60,
"type": "string"
}
},
"required": [
"method"
],
"type": "object"
},
"maxItems": 12,
"minItems": 1,
"type": "array"
},
"showValues": {
"default": true,
"description": "Print the low and high values just outside each end of every bar. Default true.",
"type": "boolean"
},
"suffix": {
"default": "",
"description": "Text put after every value, default \"\" (none). E.g. \"m\" for $ millions, \"/sh\" for per share, \"x\" for multiples, \"%\" for percentages.",
"maxLength": 6,
"type": "string"
},
"title": {
"default": "Valuation summary",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"default": 1280,
"description": "Chart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height is computed from the number of rows.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"rows"
],
"title": "Football Field Chart",
"type": "object"
},
"name": "create_football_field"
},
{
"description": "Generate a slide-deck-quality Harvey ball matrix: options as rows scored against criteria as columns, every cell drawn in one style (Harvey balls 0–4 from empty to full, ticks 0/1, or 0–5 dots), with an optional highlighted 'Recommended' row, an optional notes column (appears when any row has notes) and a legend. Choose it to compare vendors, tools, plans or features side by side; use a timeline when the point is WHEN work happens, a process for ordered steps, a pyramid/funnel for a hierarchy or narrowing stages, and a hub and spoke, mind map or org chart for relationships. Limits: 2–12 rows, 1–8 criteria, row names up to 40 characters; scores outside the style's range are clamped and null leaves a cell blank. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A comparison matrix: options (rows) scored against criteria (columns) with Harvey balls, ticks or dots.",
"examples": [
{
"criteria": [
"Cost",
"Ease of use",
"Integrations",
"Support"
],
"legend": true,
"rows": [
{
"name": "Salesforce",
"scores": [
1,
3,
4,
3
]
},
{
"highlight": true,
"name": "HubSpot",
"scores": [
3,
4,
3,
3
]
},
{
"name": "Pipedrive",
"scores": [
4,
4,
2,
2
]
}
],
"style": "harvey",
"title": "CRM vendor comparison"
}
],
"properties": {
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"criteria": {
"description": "Column headings, left to right: what each option is scored on, e.g. [\"Cost\", \"Ease of use\", \"Integrations\"]. 1–8 criteria, up to 40 characters each; long names wrap to two lines.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 8,
"minItems": 1,
"type": "array"
},
"legend": {
"default": true,
"description": "Show a one-line legend under the grid explaining the scale. Default true.",
"type": "boolean"
},
"notes": {
"description": "Show the Notes column on the right. true shows it even when no row has a note yet; false hides it (any row notes are kept but not drawn). When omitted, the column appears automatically as soon as any row has a note, so you can simply set rows[].notes.",
"type": "boolean"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"rows": {
"description": "The options being compared, top to bottom (2–12). Each has a name and one score per criterion, in the same order as `criteria`.",
"items": {
"properties": {
"color": {
"description": "Optional hex colour for this row's balls, ticks or dots, e.g. \"#10b981\". Default: the first palette colour (or dark slate if that colour is too light to read).",
"maxLength": 40,
"type": "string"
},
"highlight": {
"default": false,
"description": "Tint this row and tag it \"Recommended\". Use it on the option you are recommending (normally just one). Default false.",
"type": "boolean"
},
"name": {
"description": "Option name shown in the left column (up to 40 characters; long names wrap to two lines).",
"maxLength": 40,
"type": "string"
},
"notes": {
"description": "Optional short comment shown in the Notes column on the right (wrapped to two lines, up to 160 characters). See the top-level `notes` field for when that column appears.",
"maxLength": 160,
"type": "string"
},
"scores": {
"default": [],
"description": "One score per criterion, in criteria order. Range depends on `style`: harvey 0–4 (0 empty ring … 4 full ball), check 0/1 (1 draws a tick), dots 0–5 (filled dots). null leaves a cell blank (drawn as a muted dash). Values outside the style's range are clamped with a warning; a shorter array leaves the remaining cells blank, a longer one is truncated.",
"items": {
"default": null,
"maximum": 5,
"minimum": 0,
"type": [
"number",
"null"
]
},
"maxItems": 8,
"type": "array"
}
},
"required": [
"name"
],
"type": "object"
},
"maxItems": 12,
"minItems": 2,
"type": "array"
},
"style": {
"default": "harvey",
"description": "Cell style for the whole grid: \"harvey\" (Harvey balls, scores 0–4 from empty to full), \"check\" (a tick for 1, nothing for 0) or \"dots\" (0–5 filled dots out of five). Default \"harvey\".",
"enum": [
"harvey",
"check",
"dots"
],
"type": "string"
},
"title": {
"default": "Comparison",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"default": 1280,
"description": "Chart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height is computed from the content.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"criteria",
"rows"
],
"title": "Harvey Ball Matrix",
"type": "object"
},
"name": "create_harvey_matrix"
},
{
"description": "Generate a slide-deck-quality hub and spoke diagram: a large central hub circle with 3–10 coloured satellite cards evenly spaced around it, each joined to the hub by a spoke, with an optional short detail beside each satellite and optional arrowheads (out from the hub, or both ways). Choose it when several items relate to one centre with no order between them: a platform and its products or integrations, a team and its stakeholders, a core value and its pillars, a company and its partners. Use a cycle when the items form a repeating sequence, a process diagram for one-way steps, a mind map when the satellites branch further, and an org chart for reporting lines. Limits: 3–10 spokes, one level only, names of 1–3 words, details of about 12 words. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A hub-and-spoke diagram: a central hub with evenly spaced satellites joined to it by spokes, in no particular order.",
"examples": [
{
"arrows": "none",
"hub": "Core platform",
"spokes": [
{
"detail": "iOS and Android",
"name": "Mobile app"
},
{
"name": "Partner API"
},
{
"name": "Analytics"
},
{
"name": "Billing"
}
],
"title": "Platform ecosystem"
}
],
"properties": {
"arrows": {
"default": "none",
"description": "Arrowheads on the spokes: \"none\" (default, plain connecting lines), \"out\" (from the hub towards each satellite, e.g. distribution or influence), \"both\" (two-way exchange).",
"enum": [
"none",
"out",
"both"
],
"type": "string"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"hub": {
"description": "Label of the central hub, e.g. \"Core platform\". Bold white text in a large circle, wrapped to up to 3 lines; 1–4 words reads best.",
"maxLength": 60,
"type": "string"
},
"hubColor": {
"description": "Optional hex colour of the hub circle. Default: the first palette colour (indigo #4f46e5), with the spokes taking the following palette colours.",
"maxLength": 40,
"type": "string"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"spokes": {
"description": "The satellites around the hub (3–10), placed clockwise from 12 o'clock. Order only decides placement; nothing implies a sequence. Fewer than 3 still render but are reported as a warning; more than 10 are dropped.",
"items": {
"properties": {
"color": {
"description": "Hex colour, e.g. \"#0ea5e9\". Optional: satellites without one take the next palette colour.",
"maxLength": 40,
"type": "string"
},
"detail": {
"description": "Optional short description shown next to the satellite, on the side away from the hub, wrapped to up to 3 lines (about 12 words).",
"maxLength": 160,
"type": "string"
},
"name": {
"description": "Satellite label, 1–3 words reads best (e.g. \"Mobile app\"). Long names shrink and wrap to 2 lines.",
"maxLength": 60,
"type": "string"
}
},
"required": [
"name"
],
"type": "object",
"x-fromString": "name"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"title": {
"default": "Hub and Spoke",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"description": "Chart width in pixels (640–2400). Omit it (recommended) and the chart sizes itself to its content with comfortable margins, between 880 and 1280px wide. PNG output renders at 2x.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"hub",
"spokes"
],
"title": "Hub and spoke",
"type": "object"
},
"name": "create_hub_spoke"
},
{
"description": "Generate a slide-deck-quality issue tree or driver tree: a key question, problem or top-line metric on the left, broken down left to right into drivers, sub-drivers and hypotheses in clean columns of rounded boxes joined by elbow connectors. Each first-level branch takes its own palette colour. Any box can carry a `value` (\"$12.4m\", \"+3% YoY\") and any parent an `operator` (\"+\", \"-\", \"x\", \"/\", drawn as + − × ÷ where its children join) for KPI and value driver trees (Profit = Revenue − Costs; Revenue = Customers × Revenue per customer); `levels` labels the columns and `numbered` adds 1, 1.1, 1.1.1. Choose it for consulting issue trees and MECE breakdowns, hypothesis trees, KPI, value and driver trees, root-cause and problem trees: anything where a parent is logically made up of its children. Use a mind map instead for loose brainstorms radiating from a centre with no hierarchy logic or values, and an org chart for people and reporting lines. Limits: 4 levels including the root, up to 6 children per box, 40 boxes; keep labels to a few words. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"$defs": {
"node": {
"description": "One box in the tree. Its children are the drivers, causes or sub-questions it breaks down into.",
"properties": {
"children": {
"description": "The drivers, causes or sub-questions under this box, top to bottom (up to 6). Ideally mutually exclusive and collectively exhaustive (MECE).",
"items": {
"$ref": "#/$defs/node",
"x-fromString": "name"
},
"maxItems": 6,
"type": "array"
},
"color": {
"description": "Optional hex colour for this box and everything under it, e.g. \"#10b981\". Without one, colour is automatic: the root takes the first palette colour, each first-level branch the next one, and deeper boxes inherit their branch's colour.",
"maxLength": 40,
"type": "string"
},
"name": {
"description": "The box label, e.g. \"Revenue\", \"Price per unit\" or \"Are we losing customers?\". Wraps onto three lines, then truncates; keep it to a few words.",
"maxLength": 80,
"type": "string"
},
"operator": {
"description": "Optional: how this box's children combine into it, drawn as + − × ÷ in a small circle where the connector meets the children's spine (the KPI or value driver tree convention). \"+\" add, \"-\" subtract, \"x\" multiply, \"/\" divide; e.g. Revenue with \"x\" over Customers and Revenue per customer. Omit for a plain issue tree.",
"enum": [
"+",
"-",
"x",
"/"
],
"type": "string"
},
"value": {
"description": "Optional figure shown as a second line in bold, e.g. \"$12.4m\", \"+3% YoY\" or \"4,200\". Free text, so units and signs are up to you. Omit for none.",
"maxLength": 30,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
}
},
"description": "An issue tree or driver tree: a question, problem or metric broken down left to right into drivers and sub-drivers, with optional values and operators.",
"examples": [
{
"levels": [
"Metric",
"Drivers",
"Sub-drivers"
],
"root": {
"children": [
{
"children": [
{
"name": "Customers",
"value": "3,100"
},
{
"name": "Revenue per customer",
"value": "$4,000"
}
],
"name": "Revenue",
"operator": "x",
"value": "$12.4m"
},
{
"children": [
{
"name": "Cost of sales",
"value": "$5.2m"
},
{
"name": "Operating expenses",
"value": "$3.1m"
}
],
"name": "Costs",
"operator": "+",
"value": "$8.3m"
}
],
"name": "Operating profit",
"operator": "-",
"value": "$4.1m"
},
"title": "Operating profit driver tree"
}
],
"properties": {
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"levels": {
"description": "Optional column labels, left to right, printed in small caps above each level, e.g. [\"Key question\", \"Drivers\", \"Sub-drivers\", \"Hypotheses\"] (0–4). Omit for none.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 4,
"type": "array"
},
"numbered": {
"default": false,
"description": "Prefix every box below the root with its outline number, 1, 1.1, 1.1.1, as consultants number issue trees. Default false.",
"type": "boolean"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"root": {
"$ref": "#/$defs/node",
"description": "The key question, problem or top-line metric on the left (e.g. \"Why has profitability declined?\" or \"Operating profit\"), with its drivers nested in `children`. Limits: 4 levels in total including the root, up to 6 children per box and 40 boxes; extras are dropped with a warning, deepest levels and last-listed boxes first."
},
"title": {
"default": "Issue tree",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"description": "Chart width in pixels (640–2400). Omit it (recommended) and the chart sizes itself to its content with comfortable margins, between 880 and 1280px wide. PNG output renders at 2x.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"root"
],
"title": "Issue Tree",
"type": "object"
},
"name": "create_issue_tree"
},
{
"description": "Generate clean lab fishbone diagrams (lab value skeletons), the shorthand nurses, residents and students use in notes and case presentations: BMP / Chem-7 (Na | Cl | BUN over K | HCO3 | Cr with glucose in the tail), CBC (WBC > Hgb over Hct < Plt), coags (PT | PTT over INR), LFT (TP | AST | T bili over Alb | ALT | ALP), ABG (pH / pCO2 / pO2 / HCO3) and Ca/Mg/Phos, each with an optional caption such as a time, in a tidy grid. Numeric values outside adult reference ranges are flagged red with ↑ or blue with ↓ (US or SI ranges; overridable per value), and the result also includes a plain-text version to paste into a note. Choose it whenever lab results should be shown in fishbone form; it is not a cause-and-effect (Ishikawa) diagram, for which use create_fishbone. Values are strings of up to 8 characters; 1–8 panels. A drawing aid only, not clinical decision support: never include patient names or identifiers, because links carry the data. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "Lab value skeletons (\"fishbone\" diagrams): the clinical shorthand for a BMP, CBC, coags, LFT, ABG and Ca/Mg/Phos, with abnormal values flagged. A drawing aid, not clinical decision support.",
"examples": [
{
"panels": [
{
"bun": "18",
"caption": "06:00",
"cl": "102",
"cr": "1.1",
"glu": "112",
"hco3": "24",
"k": "5.6",
"na": "138",
"type": "bmp"
},
{
"caption": "06:00",
"hct": "39.5",
"hgb": "13.2",
"plt": "245",
"type": "cbc",
"wbc": "8.4"
}
],
"title": "Day 3 labs"
}
],
"properties": {
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"flag": {
"default": true,
"description": "Flag numeric values outside the adult reference range: red with ↑ when high, blue with ↓ when low. Default true. Manual `flags` on a panel apply either way. Ranges vary by lab; this is a drawing aid, not clinical decision support.",
"type": "boolean"
},
"labels": {
"default": false,
"description": "Show a small analyte name (Na, K, Hgb…) beside every value. Default false: experienced readers know the positions; turn it on for teaching or for readers new to the shorthand.",
"type": "boolean"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours; only the first is used, for the small panel-type tags. The skeletons stay monochrome, and flags are always red (high) and blue (low).",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"panels": {
"description": "The panels to draw (1–8), in order, two or three per row. Each has a `type` and its values as flat string keys; leave a key out to leave its position blank. More than 8 are dropped.",
"items": {
"properties": {
"alb": {
"description": "Albumin (Alb), LFT: bottom left. g/dL (US) or g/L (SI), e.g. \"3.9\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"alp": {
"description": "Alkaline phosphatase (ALP), LFT: bottom right. U/L, e.g. \"88\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"alt": {
"description": "ALT, LFT: bottom middle. U/L, e.g. \"28\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"ast": {
"description": "AST, LFT: top middle. U/L, e.g. \"32\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"bun": {
"description": "Blood urea nitrogen (BUN), BMP: top right. mg/dL (US) or urea mmol/L (SI), e.g. \"18\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"ca": {
"description": "Calcium (Ca), Ca/Mg/Phos: above the line. mg/dL (US) or mmol/L (SI), e.g. \"9.2\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"caption": {
"description": "Optional short caption above the panel, after its type tag, e.g. \"06:00\" or \"Day 3, post-op\". Never a patient name or identifier.",
"maxLength": 40,
"type": "string"
},
"cl": {
"description": "Chloride (Cl), BMP: top middle. mmol/L, e.g. \"102\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"cr": {
"description": "Creatinine (Cr), BMP: bottom right. mg/dL (US) or µmol/L (SI), e.g. \"1.1\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"flags": {
"description": "Optional manual flags that override the automatic ones for single values: { \"k\": \"high\" } draws K in red with ↑, \"low\" in blue with ↓, \"normal\" removes an automatic flag. Keys are the value keys above.",
"properties": {
"alb": {
"description": "Manual flag for alb.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"alp": {
"description": "Manual flag for alp.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"alt": {
"description": "Manual flag for alt.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"ast": {
"description": "Manual flag for ast.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"bun": {
"description": "Manual flag for bun.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"ca": {
"description": "Manual flag for ca.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"cl": {
"description": "Manual flag for cl.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"cr": {
"description": "Manual flag for cr.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"glu": {
"description": "Manual flag for glu.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"hco3": {
"description": "Manual flag for hco3.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"hct": {
"description": "Manual flag for hct.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"hgb": {
"description": "Manual flag for hgb.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"inr": {
"description": "Manual flag for inr.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"k": {
"description": "Manual flag for k.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"mg": {
"description": "Manual flag for mg.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"na": {
"description": "Manual flag for na.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"pco2": {
"description": "Manual flag for pco2.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"ph": {
"description": "Manual flag for ph.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"phos": {
"description": "Manual flag for phos.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"plt": {
"description": "Manual flag for plt.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"po2": {
"description": "Manual flag for po2.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"pt": {
"description": "Manual flag for pt.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"ptt": {
"description": "Manual flag for ptt.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"tbili": {
"description": "Manual flag for tbili.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"tp": {
"description": "Manual flag for tp.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
},
"wbc": {
"description": "Manual flag for wbc.",
"enum": [
"high",
"low",
"normal"
],
"type": "string"
}
},
"type": "object"
},
"glu": {
"description": "Glucose (Glu), BMP: in the tail on the right. mg/dL (US) or mmol/L (SI), e.g. \"112\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"hco3": {
"description": "Bicarbonate (HCO3): BMP bottom middle (serum CO2, mmol/L, e.g. \"24\"), or the last value of an ABG. A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"hct": {
"description": "Hematocrit (Hct), CBC: bottom middle. % (US) or L/L (SI), e.g. \"39.5\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"hgb": {
"description": "Hemoglobin (Hgb), CBC: top middle. g/dL (US) or g/L (SI), e.g. \"13.2\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"inr": {
"description": "INR, coags: below the line. e.g. \"1.1\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"k": {
"description": "Potassium (K), BMP: bottom left. mmol/L, e.g. \"4.1\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"mg": {
"description": "Magnesium (Mg), Ca/Mg/Phos: bottom left. mg/dL (US) or mmol/L (SI), e.g. \"2.0\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"na": {
"description": "Sodium (Na), BMP: top left. mmol/L, e.g. \"138\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"pco2": {
"description": "pCO2, ABG: second. mmHg (US) or kPa (SI), e.g. \"40\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"ph": {
"description": "pH, ABG: first. e.g. \"7.38\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"phos": {
"description": "Phosphate (Phos), Ca/Mg/Phos: bottom right. mg/dL (US) or mmol/L (SI), e.g. \"3.4\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"plt": {
"description": "Platelets (Plt), CBC: right. ×10³/µL, e.g. \"245\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"po2": {
"description": "pO2, ABG: third. mmHg (US) or kPa (SI), e.g. \"92\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"pt": {
"description": "Prothrombin time (PT), coags: top left. Seconds, e.g. \"12.8\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"ptt": {
"description": "Partial thromboplastin time (PTT/aPTT), coags: top right. Seconds, e.g. \"31\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"tbili": {
"description": "Total bilirubin (T bili), LFT: top right. mg/dL (US) or µmol/L (SI), e.g. \"0.8\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"tp": {
"description": "Total protein (TP), LFT: top left. g/dL (US) or g/L (SI), e.g. \"7.0\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
},
"type": {
"default": "bmp",
"description": "Which skeleton to draw, and which value keys it reads: \"bmp\" (basic metabolic panel / Chem-7: na, cl, bun over k, hco3, cr, with glu in the tail), \"cbc\" (wbc > hgb over hct < plt), \"coag\" (pt | ptt over inr), \"lft\" (hepatic panel: tp, ast, tbili over alb, alt, alp), \"abg\" (ph / pco2 / po2 / hco3) or \"chem\" (extended electrolytes: ca over mg | phos). Default \"bmp\". Keys that belong to another type are ignored with a warning.",
"enum": [
"bmp",
"cbc",
"coag",
"lft",
"abg",
"chem"
],
"type": "string"
},
"wbc": {
"description": "White blood cells (WBC), CBC: left. ×10³/µL, e.g. \"8.4\". A string of up to 8 characters; non-numeric text such as \"<0.1\", \"pending\" or \"—\" is shown as written and never flagged. Omit it to leave the position blank.",
"maxLength": 8,
"type": "string"
}
},
"type": "object"
},
"maxItems": 8,
"minItems": 1,
"type": "array"
},
"title": {
"default": "Labs",
"description": "Heading shown top-left at 22px bold, e.g. \"Day 3 labs\". An empty string hides it. Never put a patient name or identifier here: links carry the chart itself.",
"maxLength": 140,
"type": "string"
},
"units": {
"default": "US",
"description": "Which reference ranges the automatic flags use: \"US\" (conventional units: mg/dL, g/dL, %, mmHg; the default) or \"SI\" (mmol/L, µmol/L, g/L, L/L, kPa). It does not convert values.",
"enum": [
"US",
"SI"
],
"type": "string"
},
"width": {
"description": "Chart width in pixels (640–2400). Omit it (recommended) and the chart sizes itself to its content with comfortable margins, between 880 and 1280px wide. PNG output renders at 2x.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"panels"
],
"title": "Lab fishbone",
"type": "object"
},
"name": "create_lab_fishbone"
},
{
"description": "Generate a slide-deck-quality mind map: a central topic pill with up to 8 colour-coded branches of sub-topics radiating left and right (or all to the right, like an outline), joined by smooth tapered curves. Choose it for brainstorms, idea or theme breakdowns, workshop outputs, feature or research groupings and anything that unpacks ONE central idea into related topics with no order or reporting line; use an org chart instead for people and who reports to whom, a hub and spoke for one centre with a single ring of peers, and a process or cycle when the order matters. Nest sub-topics in `children` under each branch. Limits: 8 branches, 3 levels below the centre, 50 topics; keep labels to a few words. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"$defs": {
"node": {
"description": "A sub-topic. It takes the colour of its first-level branch.",
"properties": {
"children": {
"description": "Sub-topics of this topic, top to bottom.",
"items": {
"$ref": "#/$defs/node",
"x-fromString": "name"
},
"maxItems": 12,
"type": "array"
},
"name": {
"description": "Topic label, ideally a few words. Long labels wrap onto two lines, then truncate.",
"maxLength": 80,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
}
},
"description": "A mind map: a central topic with coloured branches of sub-topics radiating out.",
"examples": [
{
"branches": [
{
"children": [
{
"name": "Setup wizard"
},
{
"name": "Templates"
}
],
"name": "Onboarding"
},
{
"children": [
{
"name": "Live chat"
}
],
"name": "Support"
},
{
"name": "Pricing"
}
],
"center": "Customer retention"
}
],
"properties": {
"branches": {
"description": "Required: the first-level branches around the centre (up to 8; an empty list draws just the centre), each with optional nested `children` (up to 3 levels below the centre and 50 topics in total; extras are dropped with a warning). In the balanced layout they run clockwise: the first branches down the right side, the rest up the left.",
"items": {
"properties": {
"children": {
"description": "Sub-topics of this branch, top to bottom.",
"items": {
"$ref": "#/$defs/node",
"x-fromString": "name"
},
"maxItems": 12,
"type": "array"
},
"color": {
"description": "Optional hex colour for this branch and everything under it, e.g. \"#10b981\". Without one, branches take the palette colours in order.",
"maxLength": 40,
"type": "string"
},
"name": {
"description": "Branch label, drawn as a coloured pill.",
"maxLength": 80,
"type": "string"
}
},
"required": [
"name"
],
"type": "object",
"x-fromString": "name"
},
"maxItems": 8,
"type": "array"
},
"center": {
"description": "The central topic, drawn as a bold pill in the middle, e.g. \"Customer retention\". Required. Keep it short; long text wraps onto two lines.",
"maxLength": 80,
"type": "string"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"layout": {
"default": "balanced",
"description": "\"balanced\" (default): branches split between the left and right of the centre so both sides are about the same height, the classic mind-map look. \"right\": every branch to the right of the centre, like an outline.",
"enum": [
"balanced",
"right"
],
"type": "string"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"title": {
"default": "Mind Map",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"description": "Chart width in pixels (640–2400). Omit it (recommended) and the chart sizes itself to its content with comfortable margins, between 880 and 1280px wide. PNG output renders at 2x.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"center",
"branches"
],
"title": "Mind Map",
"type": "object"
},
"name": "create_mind_map"
},
{
"description": "Generate a slide-deck-quality org chart: a tree of people cards (name, role, initials circle) joined by elbow connectors, top-down or left-right. Colour is automatic: each team under the root (each of the root's direct reports and everyone below them) gets its own palette colour; set `color` on a card only to override that. Choose it whenever the point is WHO reports to or works with whom: reporting lines, project or engagement teams, governance and steering structures. Use a mind map instead for ideas or topics radiating from a central theme, and a hub and spoke for one centre with peers around it. Nest people in `children` under `root`; more than 4 reports with no reports of their own are stacked in a column automatically. Limits: 60 people, 5 levels. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"$defs": {
"node": {
"description": "One person (or team) card. Children are the people who report to them.",
"properties": {
"children": {
"description": "Direct reports, left to right (top to bottom in left-right layout). More than 4 reports that have no reports of their own are stacked in a column under their manager to keep the chart compact.",
"items": {
"$ref": "#/$defs/node",
"x-fromString": "name"
},
"maxItems": 30,
"type": "array"
},
"color": {
"description": "Optional hex colour for this card's top stripe and initials, and for everyone below it, e.g. \"#10b981\". Without one, colour is automatic: the root takes the first palette colour, each of the root's direct reports takes the next one, and everyone below inherits their team's colour.",
"maxLength": 40,
"type": "string"
},
"name": {
"description": "Person or team name, e.g. \"Dana Lee\" or \"Two engineers\". Shown bold on the card; the initials circle is made from it. Long names shrink, then truncate with an ellipsis.",
"maxLength": 80,
"type": "string"
},
"role": {
"description": "Optional job title or responsibility, e.g. \"Engagement lead\". Wraps to two lines, then truncates.",
"maxLength": 100,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
}
},
"description": "An org chart: a reporting or project-team tree of people cards joined by elbow connectors.",
"examples": [
{
"root": {
"children": [
{
"children": [
{
"name": "Two engineers",
"role": "Build"
}
],
"name": "Sam Ortiz",
"role": "Tech lead"
},
{
"name": "Priya Shah",
"role": "Design lead"
},
{
"name": "Alex Chen",
"role": "Product owner"
}
],
"name": "Dana Lee",
"role": "Engagement lead"
},
"title": "Project team"
}
],
"properties": {
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"layout": {
"default": "top-down",
"description": "\"top-down\" (default): the root at the top, reports in rows below. \"left-right\": the root on the left, reports in columns to the right, which suits deep or very wide trees.",
"enum": [
"top-down",
"left-right"
],
"type": "string"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"root": {
"$ref": "#/$defs/node",
"description": "The top of the tree (the lead, manager or sponsor) with everyone else nested under it in `children`. Limits: 60 people and 5 levels in total (the root is level 1); extra people are dropped with a warning, deepest levels and last-listed people first."
},
"showInitials": {
"default": true,
"description": "Show an initials circle on each card, in the card's team colour. Default true. There are no photos.",
"type": "boolean"
},
"title": {
"default": "Team Structure",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"description": "Chart width in pixels (640–2400). Omit it (recommended) and the chart sizes itself to its content with comfortable margins, between 880 and 1280px wide. PNG output renders at 2x.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"root"
],
"title": "Org Chart",
"type": "object"
},
"name": "create_org_chart"
},
{
"description": "Generate a slide-deck-quality chevron process diagram: 2–7 phases drawn as arrow-shaped chevrons left to right, each with an optional timing line (\"Weeks 1–2\") and up to 5 short bullets beneath it, and an optional \"you are here\" highlight on one phase. Choose it for an \"our approach\" or methodology slide, delivery phases, a sales or onboarding process, or any short linear sequence where the ORDER of the phases matters; use a timeline instead when exact dates and overlapping durations matter, a cycle diagram when the last step loops back to the first, and an org chart or mind map for branching structures. Limits: 2–7 steps, up to 5 bullets per step; keep step names to one to three words and bullets to a short phrase. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A chevron process diagram: 2–7 phases as chevrons left to right, with optional timing and bullets under each.",
"examples": [
{
"current": 1,
"steps": [
{
"bullets": [
"Stakeholder interviews",
"Current-state audit"
],
"name": "Discover",
"timing": "Weeks 1–2"
},
{
"bullets": [
"Target architecture",
"Prototype"
],
"name": "Design",
"timing": "Weeks 3–5"
},
{
"name": "Build",
"timing": "Weeks 6–12"
},
{
"name": "Launch",
"timing": "Week 13"
}
],
"title": "Our delivery approach"
}
],
"properties": {
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"current": {
"description": "Optional highlight: the 0-based index of one step (0 is the first step). A pointer with a label (currentLabel, default \"You are here\") appears above that step; every step keeps its colour. Omit for no highlight (the default).",
"maximum": 6,
"minimum": 0,
"type": "integer"
},
"currentLabel": {
"default": "You are here",
"description": "Text above the pointer on the highlighted step (only shown when current is set). Default \"You are here\"; e.g. \"We are here\", \"Today\", \"Current phase\".",
"maxLength": 40,
"type": "string"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"steps": {
"description": "The phases, left to right (2–7; extra steps are dropped with a warning). Each step is one chevron with its name inside, an optional timing line just under it and optional bullets beneath. Keep names to one to three words; long names shrink, wrap to two lines, then truncate.",
"items": {
"properties": {
"bullets": {
"description": "Optional detail points listed under the chevron (up to 5). Short phrases work best; long ones wrap onto several lines.",
"items": {
"maxLength": 120,
"type": "string"
},
"maxItems": 5,
"type": "array"
},
"color": {
"description": "Hex colour for this chevron, e.g. \"#4f46e5\". Optional: steps without one take the next palette colour. Text inside switches between white and dark for contrast.",
"maxLength": 40,
"type": "string"
},
"name": {
"description": "Phase name shown inside the chevron, e.g. \"Discover\". Shrinks from 15px to 11px, then wraps to two lines, then truncates.",
"maxLength": 60,
"type": "string"
},
"timing": {
"description": "Optional short timing line shown under the chevron, e.g. \"Weeks 1–2\", \"Q3\" or \"30 days\". Omit for none.",
"maxLength": 60,
"type": "string"
}
},
"required": [
"name"
],
"type": "object",
"x-fromString": "name"
},
"maxItems": 7,
"minItems": 1,
"type": "array"
},
"title": {
"default": "Our Approach",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"default": 1280,
"description": "Chart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height is computed from the content.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"steps"
],
"title": "Chevron Process",
"type": "object"
},
"name": "create_process"
},
{
"description": "Generate a slide-deck-quality pyramid or funnel: 2–8 stacked layers in even steps, narrow at the top in pyramid mode (a hierarchy of needs, a strategy pyramid, foundations to vision) or wide at the top in funnel mode (sales, marketing or hiring funnels). Each layer has a name and an optional detail line beside it. Choose it when items stack in a ranked order or narrow down stage by stage; use a process diagram for a sequence of phases of equal weight, a cycle for a loop, a hub and spoke for parts around a centre, and a timeline when dates matter. Limits: 2–8 layers; keep names to one to four words and details to one short sentence. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "Stacked layers drawn as a pyramid (narrow at the top) or a funnel (wide at the top), in even steps, with an optional detail beside each layer.",
"examples": [
{
"layers": [
{
"detail": "Everyone who showed interest",
"name": "Leads"
},
{
"detail": "Need and budget confirmed",
"name": "Qualified"
},
{
"name": "Proposal"
},
{
"name": "Won"
}
],
"mode": "funnel",
"title": "Sales funnel"
}
],
"properties": {
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"layers": {
"description": "The layers, top to bottom (2–8; extra layers are dropped with a warning). In a pyramid the first layer is the narrow tip; in a funnel it is the wide first stage. Names sit inside the shape when they fit, otherwise beside it with a leader line.",
"items": {
"properties": {
"color": {
"description": "Hex colour for this layer, e.g. \"#4f46e5\". Optional: layers without one take the next palette colour. The label switches between white and dark for contrast.",
"maxLength": 40,
"type": "string"
},
"detail": {
"description": "Optional short description shown in a muted column to the right of the shape, aligned to this layer. Wraps to two lines.",
"maxLength": 160,
"type": "string"
},
"name": {
"description": "Layer label, e.g. \"Leads\" or \"Self-actualisation\". One to four words read best.",
"maxLength": 60,
"type": "string"
}
},
"required": [
"name"
],
"type": "object",
"x-fromString": "name"
},
"maxItems": 8,
"minItems": 1,
"type": "array"
},
"mode": {
"default": "pyramid",
"description": "\"pyramid\" (default) narrows toward the top layer, for hierarchies and foundations-to-vision stacks. \"funnel\" is widest at the top and narrows down, for sales, marketing and hiring stages. Layers are always listed top to bottom.",
"enum": [
"pyramid",
"funnel"
],
"type": "string"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"title": {
"default": "Pyramid",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"description": "Chart width in pixels (640–2400). Omit it (recommended) and the chart sizes itself to its content with comfortable margins, between 880 and 1280px wide. PNG output renders at 2x.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"layers"
],
"title": "Pyramid / Funnel",
"type": "object"
},
"name": "create_pyramid"
},
{
"description": "Generate a slide-deck-quality 2×2 matrix, the classic consulting quadrant slide: two labelled axes (name plus low and high ends, rotated on the left) and four quadrants tinted in one accent colour. Two modes: \"plot\" places items as dots at x and y on 0–10 scales (or bubbles sized by `size`), with every label placed automatically so none overlap and quadrant names faint in the corners; \"list\" gives each quadrant a bold name and up to 6 bullets. Choose it to prioritise or position things on two dimensions: tasks, initiatives, features, products, brands, stakeholders or risks. Pick the preset that matches the request and let it supply the standard axes, quadrant names and mode: impactEffort for impact vs effort, quick wins or an action priority matrix; eisenhower for urgent vs important or a to-do list; bcg for a growth-share or product portfolio matrix (give revenue as size); ansoff for growth strategy (products × markets); powerInterest for a stakeholder map; perceptual for a perceptual or competitive positioning map (rename the axes to the user's attributes); riskLikelihood for a likelihood vs impact risk grid; none for any other 2×2 (name the axes and quadrants yourself; an omitted preset means none). Quadrants are keyed by position: topLeft, topRight, bottomLeft, bottomRight; with normal axes topRight is high x, high y. Use a Harvey ball matrix to score options against several criteria, create_five_forces for one industry's competitive forces, and create_swot for strengths, weaknesses, opportunities and threats. Infer realistic positions from context rather than asking. Limits: 30 items, names up to 40 characters (1–4 words read best), 6 bullets per quadrant. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"$defs": {
"quadrant": {
"properties": {
"bullets": {
"description": "List mode: 0–6 short bullets under the name, e.g. [\"Board deck due Friday\", \"Server outage follow-up\"]. Each wraps to at most 3 lines.",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 6,
"type": "array"
},
"color": {
"description": "Optional hex colour for this quadrant's tint (and its plot dots), e.g. \"#10b981\". Default: the accent (first palette colour).",
"maxLength": 40,
"type": "string"
},
"name": {
"description": "Quadrant name, e.g. \"Quick wins\". Bold at the top of the quadrant in list mode, faint in its outer corner in plot mode. Omit to use the preset's name; \"\" hides it.",
"maxLength": 40,
"type": "string"
}
},
"type": "object"
}
},
"description": "A 2×2 matrix: two axes and four labelled quadrants. In list mode each quadrant holds a name and bullets (Eisenhower, Ansoff); in plot mode items are dots or bubbles placed by x and y (impact–effort, BCG, power–interest, perceptual maps). A preset fills in standard axis labels, quadrant names and the mode.",
"examples": [
{
"items": [
{
"name": "Fix checkout errors",
"x": 2,
"y": 8.5
},
{
"name": "Self-serve onboarding",
"x": 3.5,
"y": 7
},
{
"name": "Enterprise SSO",
"x": 7.5,
"y": 8
},
{
"name": "Mobile app rebuild",
"x": 9,
"y": 6
},
{
"name": "Dark mode",
"x": 3,
"y": 2.5
},
{
"name": "Legacy report export",
"x": 7.5,
"y": 2
}
],
"preset": "impactEffort",
"title": "Product initiatives: impact vs effort"
},
{
"preset": "eisenhower",
"quadrants": {
"bottomLeft": {
"bullets": [
"Vendor invoice queries"
]
},
"bottomRight": {
"bullets": [
"Inbox zero"
]
},
"topLeft": {
"bullets": [
"Board deck due Friday",
"Fix payment outage"
]
},
"topRight": {
"bullets": [
"Q4 hiring plan",
"Pricing research"
]
}
},
"title": "This week"
},
{
"items": [
{
"name": "Cloud storage",
"size": 420,
"x": 8,
"y": 8
},
{
"name": "Analytics",
"size": 150,
"x": 3,
"y": 7.5
},
{
"name": "On-prem servers",
"size": 610,
"x": 8.5,
"y": 2
},
{
"name": "Print services",
"size": 60,
"x": 2,
"y": 1.5
}
],
"preset": "bcg",
"title": "Portfolio review"
}
],
"properties": {
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"items": {
"default": [],
"description": "Plot mode only (kept but not drawn in list mode): 0–30 items, each a dot at its x and y on 0–10 scales, with its name beside it, e.g. { \"name\": \"Self-serve onboarding\", \"x\": 2.5, \"y\": 8 }. Labels are placed automatically so they never overlap. Give `size` to draw bubbles.",
"items": {
"properties": {
"color": {
"description": "Optional hex colour for this dot, e.g. \"#ef4444\" to flag one item. Default: its quadrant's colour, which is the accent unless that quadrant has its own.",
"maxLength": 40,
"type": "string"
},
"name": {
"description": "Label shown beside the dot at 13px, e.g. \"SSO for enterprise\". Keep it to 1–4 words; long names wrap to two lines.",
"maxLength": 40,
"type": "string"
},
"size": {
"description": "Optional bubble size, any positive number such as revenue (e.g. 420 for $420m). Bubble AREA is proportional to size, relative to the largest; items without a size stay small dots. Omit on every item for plain dots.",
"maximum": 1000000000000,
"minimum": 0,
"type": "number"
},
"x": {
"description": "Position along the horizontal axis, 0 (low) to 10 (high); 5 is the midline. Default 5.",
"maximum": 10,
"minimum": 0,
"type": "number"
},
"y": {
"description": "Position along the vertical axis, 0 (low) to 10 (high); 5 is the midline. Default 5.",
"maximum": 10,
"minimum": 0,
"type": "number"
}
},
"required": [
"name"
],
"type": "object"
},
"maxItems": 30,
"type": "array"
},
"mode": {
"description": "\"list\": four tinted quadrants, each with its name and bullets. \"plot\": items drawn as dots or bubbles at their x and y, with quadrant names faint in the corners. Omit to use the preset's mode (list for eisenhower and ansoff, plot for the rest).",
"enum": [
"list",
"plot"
],
"type": "string"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours. The whole matrix uses the FIRST palette colour as its one accent, tinted in four strengths across the quadrants, so a brand colour as the first entry recolours the chart. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"preset": {
"default": "none",
"description": "Set it: the standard matrix to start from, or \"none\" (the default when omitted). Its axis labels, quadrant names and mode fill in anything the payload leaves out (your own values always win). eisenhower: urgency (urgent on the LEFT) × importance; Do first, Schedule, Delegate, Eliminate; list. impactEffort: effort × impact; Quick wins (top left), Major projects, Fill-ins, Thankless tasks; plot. bcg: relative market share (high on the LEFT) × market growth; Stars, Question marks, Cash cows, Dogs; plot. ansoff: products (existing, new) across × markets (existing at the TOP, new below); Market penetration, Product development, Market development, Diversification; list. powerInterest: interest × power; Keep satisfied, Manage closely, Monitor, Keep informed; plot. perceptual: price × quality; High value, Premium, Economy, Overpriced; plot. riskLikelihood: likelihood × impact; Plan contingency, Act now, Accept, Monitor; plot. none: plain Low/High axes and no quadrant names, plot (name the axes and quadrants yourself).",
"enum": [
"none",
"eisenhower",
"impactEffort",
"bcg",
"ansoff",
"powerInterest",
"perceptual",
"riskLikelihood"
],
"type": "string"
},
"quadrants": {
"description": "The four quadrants by POSITION on the slide (after any axis reversal): topLeft, topRight, bottomLeft, bottomRight. With both axes in their normal direction, topRight is high x and high y, bottomLeft low x and low y. Each is { \"name\", \"bullets\", \"color\" }, all optional; a missing name comes from the preset. E.g. { \"topLeft\": { \"name\": \"Quick wins\", \"bullets\": [\"Fix checkout bug\"] } }.",
"properties": {
"bottomLeft": {
"$ref": "#/$defs/quadrant",
"description": "Bottom-left quadrant: low x and low y when the axes run normally (impactEffort: Fill-ins; bcg: Cash cows)."
},
"bottomRight": {
"$ref": "#/$defs/quadrant",
"description": "Bottom-right quadrant: high x and low y when the axes run normally (impactEffort: Thankless tasks; bcg: Dogs)."
},
"topLeft": {
"$ref": "#/$defs/quadrant",
"description": "Top-left quadrant: low x and high y when the axes run normally (impactEffort: Quick wins; eisenhower: Do first; bcg: Stars)."
},
"topRight": {
"$ref": "#/$defs/quadrant",
"description": "Top-right quadrant: high x and high y when the axes run normally (impactEffort: Major projects; powerInterest: Manage closely)."
}
},
"type": "object"
},
"showGrid": {
"default": false,
"description": "Plot mode: light gridlines at every whole unit (1–9) behind the items. Default false (the midlines only).",
"type": "boolean"
},
"title": {
"default": "2×2 matrix",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"default": 1280,
"description": "Chart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height follows from the width (plot mode) or the bullets (list mode).",
"maximum": 2400,
"minimum": 640,
"type": "integer"
},
"xAxis": {
"description": "The horizontal axis along the bottom, e.g. { \"label\": \"Effort\", \"low\": \"Low\", \"high\": \"High\" }. Each field you omit comes from the preset; an empty string hides that text.",
"properties": {
"high": {
"description": "Text at the high end, e.g. \"High\", \"New\" or \"Urgent\".",
"maxLength": 30,
"type": "string"
},
"label": {
"description": "Axis name, centred under the matrix in bold, e.g. \"Effort\" or \"Relative market share\".",
"maxLength": 50,
"type": "string"
},
"low": {
"description": "Text at the low end, e.g. \"Low\", \"Existing\" or \"Not urgent\".",
"maxLength": 30,
"type": "string"
},
"reverse": {
"description": "true puts the HIGH end on the left (BCG share, Eisenhower urgency). Item x values still mean low (0) to high (10). Default: the preset's direction, else false (high on the right).",
"type": "boolean"
}
},
"type": "object"
},
"yAxis": {
"description": "The vertical axis up the left side, with rotated texts, e.g. { \"label\": \"Impact\", \"low\": \"Low\", \"high\": \"High\" }. Each field you omit comes from the preset; an empty string hides that text.",
"properties": {
"high": {
"description": "Text at the high end, e.g. \"High\" or \"Important\".",
"maxLength": 30,
"type": "string"
},
"label": {
"description": "Axis name, centred beside the matrix in bold, e.g. \"Impact\" or \"Market growth\".",
"maxLength": 50,
"type": "string"
},
"low": {
"description": "Text at the low end, e.g. \"Low\" or \"Not important\".",
"maxLength": 30,
"type": "string"
},
"reverse": {
"description": "true puts the HIGH end at the bottom (Ansoff: existing markets on top). Item y values still mean low (0) to high (10). Default: the preset's direction, else false (high at the top).",
"type": "boolean"
}
},
"type": "object"
}
},
"required": [],
"title": "2×2 Matrix",
"type": "object"
},
"name": "create_quadrant_matrix"
},
{
"description": "Generate a slide-deck-quality RACI matrix (responsibility assignment matrix): tasks or deliverables as rows, roles or teams as columns, and each cell a rounded letter chip, R Responsible, A Accountable, C Consulted or I Informed, with \"A/R\" for an owner who also does the work and `model: \"RASCI\"` adding S for Support. Rows can be grouped into phases with `type: \"section\"` rows; a legend explains the letters. With `checks` (default on), tasks without exactly one A or without an R get an amber note at the row end (\"No A\", \"2 As\", \"No R\") and every broken rule is returned in `warnings`; give every task exactly one A and at least one R unless the user's data says otherwise. Choose it for project roles and responsibilities, PMO governance, onboarding and handover plans, and any \"who does what\" slide; use a Harvey ball matrix instead to score options against criteria, an org chart for reporting lines, and a timeline when the point is when work happens. Limits: 1–10 roles and up to 30 rows (tasks plus sections); keep task names to a short verb phrase and roles to a job title. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A RACI (or RASCI) responsibility matrix: tasks or deliverables as rows, roles as columns, each cell R, A, C, I (or S), with optional phase sections and rule checks.",
"examples": [
{
"roles": [
"Product owner",
"Project manager",
"Design lead",
"Dev lead"
],
"tasks": [
{
"name": "Discovery",
"type": "section"
},
{
"cells": [
"A",
"R",
"C",
"I"
],
"name": "Stakeholder interviews"
},
{
"name": "Build",
"type": "section"
},
{
"cells": [
"I",
"C",
"C",
"A/R"
],
"name": "Front-end build"
}
],
"title": "Website relaunch RACI"
}
],
"properties": {
"checks": {
"default": true,
"description": "Check the RACI rules: every task has exactly one A and at least one R (A/R counts as both), and every role is R or A on some task. Tasks that break a rule get an amber dot and a short note (\"No A\", \"2 As\", \"No R\") at the row end, and every broken rule is listed in `warnings`. Default true; set false to hide the notes.",
"type": "boolean"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"legend": {
"default": true,
"description": "Show a legend row under the matrix explaining each letter. Default true.",
"type": "boolean"
},
"model": {
"default": "RACI",
"description": "\"RACI\" (Responsible, Accountable, Consulted, Informed) or \"RASCI\", which adds S for Support. Sets the legend and the builder's click cycle; an S in a RACI chart is still drawn and added to the legend. Default \"RACI\".",
"enum": [
"RACI",
"RASCI"
],
"type": "string"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours: the first fills R chips, the second tints C chips, the third tints S chips (A is always dark and I light gray, so the letters stay distinct). Pass the user's brand colours here when they name them.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"roles": {
"description": "Column headings, left to right: the roles, teams or people, e.g. [\"Project manager\", \"Dev lead\", \"Design\", \"Legal\"]. 1–10 roles, up to 30 characters each; long names wrap onto up to three lines. Prefer roles over personal names.",
"items": {
"maxLength": 30,
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"tasks": {
"description": "The rows, top to bottom (1–30): tasks, deliverables or decisions, each with one cell per role. A row with \"type\": \"section\" is a full-width phase heading (e.g. \"Discovery\") that groups the tasks below it; it has no cells.",
"items": {
"properties": {
"cells": {
"default": [],
"description": "One cell per role, in the same order as `roles`: \"R\" Responsible (does the work), \"A\" Accountable (owns it and signs off; exactly one per task), \"C\" Consulted (two-way input), \"I\" Informed (kept up to date), \"S\" Support (RASCI only: helps the R), \"A/R\" for an owner who also does the work, or \"\" for blank. Lowercase and \"R/A\" are accepted. A shorter array leaves the remaining cells blank, a longer one is truncated; anything else is left blank with a warning.",
"items": {
"maxLength": 4,
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"name": {
"description": "Task or section name, e.g. \"Approve the budget\" or \"Discovery\". Keep tasks to a short verb phrase; long names wrap onto two lines, then truncate.",
"maxLength": 60,
"type": "string"
},
"type": {
"description": "Omit for a normal task row. \"section\" draws a full-width phase heading instead; its cells are ignored.",
"enum": [
"task",
"section"
],
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"maxItems": 30,
"minItems": 1,
"type": "array"
},
"title": {
"default": "RACI matrix",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"default": 1280,
"description": "Chart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height is computed from the content.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"roles",
"tasks"
],
"title": "RACI Matrix",
"type": "object"
},
"name": "create_raci"
},
{
"description": "Generate a slide-deck-quality SIPOC diagram: five equal columns headed by big coloured letters, Suppliers, Inputs, Process, Outputs and Customers, with chevrons between them for the flow. Suppliers, inputs, outputs and customers are stacked cards; the process is 2–7 numbered step boxes joined by down arrows, with an optional process name and optional \"Starts when\" and \"Ends when\" boundaries. Choose it for Lean and Six Sigma project scoping (the Define phase of DMAIC), process-improvement kick-offs, quality and ISO documentation, and any slide that frames a process by who feeds it and who it serves; use a chevron process instead for a simple left-to-right sequence of phases with no inputs or outputs, an issue tree to break a problem into causes, and a timeline when dates matter. Limits: 1–7 steps (2 or more expected), up to 8 items in each of the other four columns; keep each item to a short phrase and start steps with a verb. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A SIPOC diagram: five columns (Suppliers, Inputs, Process, Outputs, Customers) that scope a process from who feeds it to who it serves.",
"examples": [
{
"customers": [
"Customer",
"Finance"
],
"end": "Order is delivered and invoiced",
"inputs": [
"Purchase order",
"Price list",
"Stock"
],
"outputs": [
"Delivered order",
"Invoice"
],
"process": "Order to delivery",
"start": "Customer places an order",
"steps": [
"Receive order",
"Check credit",
"Pick and pack",
"Ship",
"Invoice"
],
"suppliers": [
"Customer",
"Sales team",
"Warehouse"
],
"title": "SIPOC: order fulfilment"
}
],
"properties": {
"colors": {
"description": "Optional colour overrides per column, keyed by its letter, e.g. {\"p\": \"#0f766e\"}. Columns without one take the palette colours in order: S the first, I the second, P the third, O the fourth, C the fifth.",
"properties": {
"c": {
"description": "Hex colour for the Customers column.",
"maxLength": 40,
"type": "string"
},
"i": {
"description": "Hex colour for the Inputs column.",
"maxLength": 40,
"type": "string"
},
"o": {
"description": "Hex colour for the Outputs column.",
"maxLength": 40,
"type": "string"
},
"p": {
"description": "Hex colour for the Process column (its letter, step numbers and step boxes).",
"maxLength": 40,
"type": "string"
},
"s": {
"description": "Hex colour for the Suppliers column, e.g. \"#4f46e5\".",
"maxLength": 40,
"type": "string"
}
},
"type": "object"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"customers": {
"description": "Who receives the outputs (0–8), one card each, e.g. [\"Customer\", \"Finance\"]. Internal teams count as customers too.",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"end": {
"description": "Optional end boundary: the event that completes the process, shown below the steps as \"Ends when …\", e.g. \"Payment is received\". Omit for none.",
"maxLength": 120,
"type": "string"
},
"inputs": {
"description": "What the suppliers provide to the process (0–8), one card each, e.g. [\"Purchase order\", \"Stock levels\"].",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"numbered": {
"default": true,
"description": "Number the process steps 1, 2, 3… in coloured circles. Default true; false shows plain step boxes.",
"type": "boolean"
},
"outputs": {
"description": "What the process produces (0–8), one card each, e.g. [\"Shipped order\", \"Invoice\"].",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"process": {
"description": "Optional name of the process, shown in bold at the top of the Process column, e.g. \"Order to cash\". Omit for none. Wraps to two lines, then truncates.",
"maxLength": 80,
"type": "string"
},
"start": {
"description": "Optional start boundary: the trigger that begins the process, shown above the steps as \"Starts when …\", e.g. \"Customer places an order\". Omit for none.",
"maxLength": 120,
"type": "string"
},
"steps": {
"description": "Required: the high-level process steps, top to bottom (1–7, ideally 4–7; fewer than 2 renders with a warning, extras are dropped with a warning). Each is a step box joined to the next by a down arrow, e.g. [\"Receive order\", \"Check credit\", \"Pick and pack\", \"Ship\", \"Invoice\"]. Start each with a verb.",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 7,
"minItems": 1,
"type": "array"
},
"suppliers": {
"description": "Who provides the inputs (0–8; extras are dropped with a warning), one card each, e.g. [\"Customer\", \"Sales team\", \"Warehouse\"]. Short phrases; long ones wrap onto up to four lines.",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"title": {
"default": "SIPOC",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"default": 1280,
"description": "Chart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height is computed from the tallest column.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"steps"
],
"title": "SIPOC Diagram",
"type": "object"
},
"name": "create_sipoc"
},
{
"description": "Generate a slide-deck-quality Stop Start Continue chart: three equal columns, Stop (red, a stop-sign marker), Start (emerald, a play marker) and Continue (sky, a circular-arrow marker), each a softly tinted panel with up to 8 bullets, plus an optional subject (\"Sprint 14 retro\") and an optional conclusion band for the agreed actions. Set `order: \"start-stop-continue\"` when the user puts Start first; rename columns with `labels` (e.g. { \"continue\": \"Keep doing\" }). Choose it for sprint and project retrospectives, team or manager feedback, and reviews of a process, project or habit; use create_swot for a strategic assessment of a company or product, a Harvey ball matrix to score options against criteria, and a mind map for an open-ended brainstorm. All three lists are optional, but fill all three; infer 3–5 bullets each from context rather than asking. Limits: 8 bullets per column of about 3–8 words, column names of 1–3 words, a conclusion of one sentence. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A Stop Start Continue chart: three equal columns of up to 8 bullets each, what to stop doing, what to start doing and what to keep doing, with an optional subject line and conclusion. Used for retrospectives, feedback and project reviews.",
"examples": [
{
"conclusion": "Actions: review rule in the repo by Friday; protect sprint scope",
"continue": [
"Daily stand-up at 9:30"
],
"start": [
"Pairing on risky stories"
],
"stop": [
"Merging without code review",
"Taking on unplanned work mid-sprint"
],
"subject": "Payments team",
"title": "Sprint 14 retrospective"
}
],
"properties": {
"colors": {
"description": "Optional colour overrides per column, as hex, e.g. { \"stop\": \"#b91c1c\" }. Each colours that column's stripe, marker, bullet dots and tint. Default: red, emerald and sky (or the brand palette).",
"properties": {
"continue": {
"description": "Continue colour, e.g. \"#0ea5e9\".",
"maxLength": 40,
"type": "string"
},
"start": {
"description": "Start colour, e.g. \"#10b981\".",
"maxLength": 40,
"type": "string"
},
"stop": {
"description": "Stop colour, e.g. \"#ef4444\".",
"maxLength": 40,
"type": "string"
}
},
"type": "object"
},
"conclusion": {
"description": "Optional one-line takeaway or list of agreed actions shown in a muted band under the columns, e.g. \"Actions: Sam sets up review rules by Friday; Priya books the support demo\". Wraps to 2 lines. Omit for none.",
"maxLength": 200,
"type": "string"
},
"continue": {
"default": [],
"description": "What to keep doing: what works and should carry on, e.g. [\"Daily stand-up at 9:30\", \"Blameless incident reviews\"]. 0–8 short phrases. Always the last column. Default [].",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"labels": {
"description": "Optional column names in place of the standard Stop, Start and Continue, e.g. { \"continue\": \"Keep doing\" }. An empty or missing name shows the standard one. Up to 30 characters; 1–3 words read best.",
"properties": {
"continue": {
"description": "Name of the Continue column, e.g. \"Keep doing\". Default \"Continue\".",
"maxLength": 30,
"type": "string"
},
"start": {
"description": "Name of the Start column, e.g. \"Start doing\". Default \"Start\".",
"maxLength": 30,
"type": "string"
},
"stop": {
"description": "Name of the Stop column, e.g. \"Stop doing\". Default \"Stop\".",
"maxLength": 30,
"type": "string"
}
},
"type": "object"
},
"order": {
"default": "stop-start-continue",
"description": "Column order: \"stop-start-continue\" (default) or \"start-stop-continue\". Continue is always last. Match the order the user writes.",
"enum": [
"stop-start-continue",
"start-stop-continue"
],
"type": "string"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours. With the default palette the columns are red (Stop), emerald (Start) and sky (Continue); pass brand colours and they apply to the columns left to right instead. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"start": {
"default": [],
"description": "What to start doing: new practices worth trying, e.g. [\"Pair on risky stories\", \"Demo to support every sprint\"]. 0–8 short phrases. Default [].",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"stop": {
"default": [],
"description": "What to stop doing: habits or practices that waste time or hurt results, e.g. [\"Merging without code review\", \"Status meetings with no agenda\"]. 0–8 short phrases of about 3–8 words; long ones wrap to 3 lines. Default [].",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"subject": {
"description": "Optional subject of the review, e.g. \"Sprint 14 retro\" or \"Q3 onboarding review\", shown small and muted in the title row's right corner (or above the columns when the title is long). Omit for none.",
"maxLength": 80,
"type": "string"
},
"title": {
"default": "Stop, start, continue",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"width": {
"default": 1280,
"description": "Chart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height is computed from the content.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [],
"title": "Stop Start Continue",
"type": "object"
},
"name": "create_stop_start_continue"
},
{
"description": "Generate a slide-deck-quality SWOT analysis laid out as the classic 2×2 grid: Strengths (top left) and Weaknesses (top right) as the internal row, Opportunities (bottom left) and Threats (bottom right) as the external row, each a softly tinted panel with its big coloured letter and up to 8 bullets, with optional Helpful / Harmful and Internal / External axis labels, an optional subject (\"Acme Coffee, FY26\") and an optional one-line conclusion underneath. Choose it to assess a company, product, team, project or person for a strategy, business-plan, marketing or coursework slide; use Porter's five forces (create_five_forces) for the pressures on a whole industry, a Harvey ball matrix to score options against criteria, and an issue tree to break one problem down. Only `strengths` is required (an empty [] is fine), but fill all four; infer 3–5 bullets each from context rather than asking. Limits: 8 bullets per quadrant of about 3–8 words, a conclusion of one sentence. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A SWOT analysis as the classic 2×2 grid: Strengths and Weaknesses (internal) on top, Opportunities and Threats (external) below, each with up to 8 bullets, plus optional axis labels, a subject line and a conclusion.",
"examples": [
{
"conclusion": "Go after office wholesale, but fund a second roaster first",
"opportunities": [
"Offices restocking coffee after hybrid return"
],
"strengths": [
"Award-winning single-origin range",
"Loyal following at our two cafés"
],
"subject": "Northside Roasters, FY26",
"threats": [
"Green coffee prices at a 40-year high"
],
"title": "SWOT: wholesale expansion",
"weaknesses": [
"One 15 kg roaster, near capacity"
]
}
],
"properties": {
"colors": {
"description": "Optional colour overrides per quadrant, as hex, e.g. { \"threats\": \"#b91c1c\" }. Each colours that quadrant's stripe, letter, bullet dots and tint. Default: emerald, amber, sky and red (or the brand palette).",
"properties": {
"opportunities": {
"description": "Opportunities colour, e.g. \"#0ea5e9\".",
"maxLength": 40,
"type": "string"
},
"strengths": {
"description": "Strengths colour, e.g. \"#10b981\".",
"maxLength": 40,
"type": "string"
},
"threats": {
"description": "Threats colour, e.g. \"#ef4444\".",
"maxLength": 40,
"type": "string"
},
"weaknesses": {
"description": "Weaknesses colour, e.g. \"#f59e0b\".",
"maxLength": 40,
"type": "string"
}
},
"type": "object"
},
"conclusion": {
"description": "Optional one-line takeaway shown in a muted band under the grid, e.g. \"Lead with wholesale to offices; fund a second roaster first\". Wraps to 2 lines. Omit for none.",
"maxLength": 200,
"type": "string"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"labels": {
"default": true,
"description": "Show the axis labels: \"Helpful\" and \"Harmful\" over the columns, \"Internal\" and \"External\" beside the rows. Default true.",
"type": "boolean"
},
"opportunities": {
"default": [],
"description": "External, helpful: trends or openings the subject could use, e.g. [\"Offices restocking coffee after hybrid return\"]. 0–8 short phrases. Bottom-left quadrant. Default [].",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours. With the default palette the quadrants are emerald (S), amber (W), sky (O) and red (T); pass brand colours and they apply in order S, W, O, T instead. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"strengths": {
"description": "Required (may be empty []). Internal, helpful: what the subject does well or owns, e.g. [\"Award-winning single-origin range\", \"Loyal café following\"]. 0–8 short phrases of about 3–8 words; long ones wrap to 3 lines. Top-left quadrant.",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"subject": {
"description": "Optional subject of the analysis, e.g. \"Northside Roasters, FY26\", shown small and muted in the title row's right corner (or above the grid when the title is long). Omit for none.",
"maxLength": 80,
"type": "string"
},
"threats": {
"default": [],
"description": "External, harmful: what could hurt the subject, e.g. [\"Green coffee prices at a 40-year high\"]. 0–8 short phrases. Bottom-right quadrant. Default [].",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"title": {
"default": "SWOT analysis",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"weaknesses": {
"default": [],
"description": "Internal, harmful: what holds the subject back, e.g. [\"One roaster, near capacity\"]. 0–8 short phrases. Top-right quadrant. Default [].",
"items": {
"maxLength": 100,
"type": "string"
},
"maxItems": 8,
"type": "array"
},
"width": {
"default": 1280,
"description": "Chart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height is computed from the content.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"strengths"
],
"title": "SWOT Analysis",
"type": "object"
},
"name": "create_swot"
},
{
"description": "Generate a slide-deck-quality Gantt timeline: task bars and milestone diamonds laid out across numbered time columns (weeks, sprints, months), with optional labelled section bands that group tasks into phases. Choose it for project plans, roadmaps, launch schedules and anything where WHEN each piece of work happens is the point; use a process diagram instead when only the order of phases matters. Limits: 2–52 columns, up to 100 rows. Set duration 0.25 for a milestone. Infer missing details rather than asking; the user can adjust the chart in the builder through the Edit link. ALWAYS give the user the image link: inline chat images usually cannot be saved, but the link renders the exact chart on demand and can be pasted into a slide or Markdown.",
"inputSchema": {
"description": "A Gantt timeline: rows of task bars and milestones across numbered time columns.",
"examples": [
{
"columns": 8,
"tasks": [
{
"duration": 2,
"name": "Discovery",
"start": 0
},
{
"duration": 2.5,
"name": "Design",
"start": 1
},
{
"duration": 3,
"name": "Development",
"start": 3
},
{
"duration": 2,
"name": "QA & Review",
"start": 5
},
{
"duration": 0.25,
"name": "Launch",
"start": 7
}
],
"title": "Q3 Product Roadmap",
"unit": "Week"
}
],
"properties": {
"columns": {
"default": 8,
"description": "Number of time columns across the chart (2–52, default 8).",
"maximum": 52,
"minimum": 2,
"type": "integer"
},
"credit": {
"default": true,
"description": "Shows a small \"twominutetoolkit.com\" credit under the chart, inside the card. Set false to leave it off (for example when the user asks for no branding).",
"type": "boolean"
},
"labelsInBars": {
"default": true,
"description": "Draw each task's name inside its bar (and beside milestone diamonds). Default true.",
"type": "boolean"
},
"palette": {
"default": [
"#4f46e5",
"#0ea5e9",
"#10b981",
"#f59e0b",
"#ef4444",
"#6b7280"
],
"description": "Hex colours applied in order to items that have no colour of their own. Pass the user's brand colours here when they name them. Default: indigo, sky, emerald, amber, red, gray.",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 12,
"type": "array"
},
"start": {
"default": 1,
"description": "Number of the first column, so 1 gives \"Week 1, Week 2…\" (default 1).",
"maximum": 9999,
"minimum": 0,
"type": "integer"
},
"tasks": {
"description": "Rows in the chart, top to bottom (up to 100). Normally just task bars and milestones, which is all most timelines need. Section bands ({ \"type\": \"section\" }) may optionally be inserted to group the tasks below them into labelled phases.",
"items": {
"properties": {
"color": {
"description": "Hex colour, e.g. \"#4f46e5\". Optional: tasks without one take the next palette colour; sections default to light grey (#e2e8f0). Section label text switches between dark and white for contrast.",
"maxLength": 40,
"type": "string"
},
"duration": {
"default": 0.25,
"description": "Length in columns. 0.25 draws a milestone diamond instead of a bar. Tasks only.",
"maximum": 52,
"minimum": 0.25,
"type": "number"
},
"name": {
"description": "Task or section label. Long names are truncated to fit.",
"maxLength": 120,
"type": "string"
},
"start": {
"default": 0,
"description": "0-based start column; 0 is the first column. Quarter steps work (e.g. 1.5). Tasks only.",
"maximum": 52,
"minimum": 0,
"type": "number"
},
"type": {
"default": "task",
"description": "Omit for a normal task bar. \"section\" draws a full-width labelled divider band (start and duration are ignored).",
"enum": [
"task",
"section"
],
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"title": {
"default": "Project Timeline",
"description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.",
"maxLength": 140,
"type": "string"
},
"unit": {
"default": "Week",
"description": "Column unit label, e.g. \"Week\", \"Sprint\", \"Month\", \"Day\", \"Q\". Headers read \"<unit> <number>\". Default \"Week\".",
"maxLength": 24,
"type": "string"
},
"width": {
"default": 1280,
"description": "Chart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height is computed from the content.",
"maximum": 2400,
"minimum": 640,
"type": "integer"
}
},
"required": [
"tasks"
],
"title": "Timeline",
"type": "object"
},
"name": "create_timeline"
}
]
}What the leaf hashes
{"body":"2480cd92110e14f48af94e44bad66fc3d990a9b1a23c4291e291b48a5ebecaf4","id":1727622,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793497793292370,"prev":null,"subject":"331feda7-ddec-41f8-b273-394a5cdbf0fb","subject_kind":"endpoint"}Proof
Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.