_ registry / mcp streamable-http · checked 1h ago

two-minute-toolkit

https://www.twominutetoolkit.com

Registry code: c1ccdf11dfa9e690

api record

20 slide-ready chart tools: Gantt, SWOT, 2×2, RACI, org chart, mind map, fishbone. Free.

from a public catalogue that lists it, not from the operator

endpoint
https://www.twominutetoolkit.com/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is two-minute-toolkit live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is two-minute-toolkit free to use?
Not measured yet.
What tools does two-minute-toolkit have?
20 tools: create_raci, create_timeline, create_harvey_matrix, create_process, create_org_chart, create_mind_map, create_cycle, create_hub_spoke, ….
Is two-minute-toolkit safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
326ms

last good check

priced tools
0

of 20 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 20 tools
20 never probed 0 of 20 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • create_raci unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "RACI Matrix",
      "examples": [
        {
          "roles": [
            "Product owner",
            "Project manager",
            "Design lead",
            "Dev lead"
          ],
          "tasks": [
            {
              "name": "Discovery",
              "type": "section"
            },
            {
              "name": "Stakeholder interviews",
              "cells": [
                "A",
                "R",
                "C",
                "I"
              ]
            },
            {
              "name": "Build",
              "type": "section"
            },
            {
              "name": "Front-end build",
              "cells": [
                "I",
                "C",
                "C",
                "A/R"
              ]
            }
          ],
          "title": "Website relaunch RACI"
        }
      ],
      "required": [
        "roles",
        "tasks"
      ],
      "properties": {
        "model": {
          "enum": [
            "RACI",
            "RASCI"
          ],
          "type": "string",
          "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\"."
        },
        "roles": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 30
          },
          "maxItems": 10,
          "minItems": 1,
          "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."
        },
        "tasks": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 60,
                "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."
              },
              "type": {
                "enum": [
                  "task",
                  "section"
                ],
                "type": "string",
                "description": "Omit for a normal task row. \"section\" draws a full-width phase heading instead; its cells are ignored."
              },
              "cells": {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 4
                },
                "default": [],
                "maxItems": 10,
                "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."
              }
            }
          },
          "maxItems": 30,
          "minItems": 1,
          "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."
        },
        "title": {
          "type": "string",
          "default": "RACI matrix",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "default": 1280,
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "checks": {
          "type": "boolean",
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "legend": {
          "type": "boolean",
          "default": true,
          "description": "Show a legend row under the matrix explaining each letter. Default true."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        }
      },
      "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."
    }
    arguments 151 lines
  • create_timeline unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Timeline",
      "examples": [
        {
          "unit": "Week",
          "tasks": [
            {
              "name": "Discovery",
              "start": 0,
              "duration": 2
            },
            {
              "name": "Design",
              "start": 1,
              "duration": 2.5
            },
            {
              "name": "Development",
              "start": 3,
              "duration": 3
            },
            {
              "name": "QA & Review",
              "start": 5,
              "duration": 2
            },
            {
              "name": "Launch",
              "start": 7,
              "duration": 0.25
            }
          ],
          "title": "Q3 Product Roadmap",
          "columns": 8
        }
      ],
      "required": [
        "tasks"
      ],
      "properties": {
        "unit": {
          "type": "string",
          "default": "Week",
          "maxLength": 24,
          "description": "Column unit label, e.g. \"Week\", \"Sprint\", \"Month\", \"Day\", \"Q\". Headers read \"<unit> <number>\". Default \"Week\"."
        },
        "start": {
          "type": "integer",
          "default": 1,
          "maximum": 9999,
          "minimum": 0,
          "description": "Number of the first column, so 1 gives \"Week 1, Week 2…\" (default 1)."
        },
        "tasks": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 120,
                "description": "Task or section label. Long names are truncated to fit."
              },
              "type": {
                "enum": [
                  "task",
                  "section"
                ],
                "type": "string",
                "default": "task",
                "description": "Omit for a normal task bar. \"section\" draws a full-width labelled divider band (start and duration are ignored)."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "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."
              },
              "start": {
                "type": "number",
                "default": 0,
                "maximum": 52,
                "minimum": 0,
                "description": "0-based start column; 0 is the first column. Quarter steps work (e.g. 1.5). Tasks only."
              },
              "duration": {
                "type": "number",
                "default": 0.25,
                "maximum": 52,
                "minimum": 0.25,
                "description": "Length in columns. 0.25 draws a milestone diamond instead of a bar. Tasks only."
              }
            }
          },
          "maxItems": 100,
          "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."
        },
        "title": {
          "type": "string",
          "default": "Project Timeline",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "default": 1280,
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "columns": {
          "type": "integer",
          "default": 8,
          "maximum": 52,
          "minimum": 2,
          "description": "Number of time columns across the chart (2–52, default 8)."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "labelsInBars": {
          "type": "boolean",
          "default": true,
          "description": "Draw each task's name inside its bar (and beside milestone diamonds). Default true."
        }
      },
      "description": "A Gantt timeline: rows of task bars and milestones across numbered time columns."
    }
    arguments 150 lines
  • create_harvey_matrix unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Harvey Ball Matrix",
      "examples": [
        {
          "rows": [
            {
              "name": "Salesforce",
              "scores": [
                1,
                3,
                4,
                3
              ]
            },
            {
              "name": "HubSpot",
              "scores": [
                3,
                4,
                3,
                3
              ],
              "highlight": true
            },
            {
              "name": "Pipedrive",
              "scores": [
                4,
                4,
                2,
                2
              ]
            }
          ],
          "style": "harvey",
          "title": "CRM vendor comparison",
          "legend": true,
          "criteria": [
            "Cost",
            "Ease of use",
            "Integrations",
            "Support"
          ]
        }
      ],
      "required": [
        "criteria",
        "rows"
      ],
      "properties": {
        "rows": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 40,
                "description": "Option name shown in the left column (up to 40 characters; long names wrap to two lines)."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "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)."
              },
              "notes": {
                "type": "string",
                "maxLength": 160,
                "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."
              },
              "scores": {
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "default": null,
                  "maximum": 5,
                  "minimum": 0
                },
                "default": [],
                "maxItems": 8,
                "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."
              },
              "highlight": {
                "type": "boolean",
                "default": false,
                "description": "Tint this row and tag it \"Recommended\". Use it on the option you are recommending (normally just one). Default false."
              }
            }
          },
          "maxItems": 12,
          "minItems": 2,
          "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`."
        },
        "notes": {
          "type": "boolean",
          "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."
        },
        "style": {
          "enum": [
            "harvey",
            "check",
            "dots"
          ],
          "type": "string",
          "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\"."
        },
        "title": {
          "type": "string",
          "default": "Comparison",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "default": 1280,
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "legend": {
          "type": "boolean",
          "default": true,
          "description": "Show a one-line legend under the grid explaining the scale. Default true."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "criteria": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "maxItems": 8,
          "minItems": 1,
          "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."
        }
      },
      "description": "A comparison matrix: options (rows) scored against criteria (columns) with Harvey balls, ticks or dots."
    }
    arguments 167 lines
  • create_process unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Chevron Process",
      "examples": [
        {
          "steps": [
            {
              "name": "Discover",
              "timing": "Weeks 1–2",
              "bullets": [
                "Stakeholder interviews",
                "Current-state audit"
              ]
            },
            {
              "name": "Design",
              "timing": "Weeks 3–5",
              "bullets": [
                "Target architecture",
                "Prototype"
              ]
            },
            {
              "name": "Build",
              "timing": "Weeks 6–12"
            },
            {
              "name": "Launch",
              "timing": "Week 13"
            }
          ],
          "title": "Our delivery approach",
          "current": 1
        }
      ],
      "required": [
        "steps"
      ],
      "properties": {
        "steps": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 60,
                "description": "Phase name shown inside the chevron, e.g. \"Discover\". Shrinks from 15px to 11px, then wraps to two lines, then truncates."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "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."
              },
              "timing": {
                "type": "string",
                "maxLength": 60,
                "description": "Optional short timing line shown under the chevron, e.g. \"Weeks 1–2\", \"Q3\" or \"30 days\". Omit for none."
              },
              "bullets": {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 120
                },
                "maxItems": 5,
                "description": "Optional detail points listed under the chevron (up to 5). Short phrases work best; long ones wrap onto several lines."
              }
            },
            "x-fromString": "name"
          },
          "maxItems": 7,
          "minItems": 1,
          "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."
        },
        "title": {
          "type": "string",
          "default": "Our Approach",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "default": 1280,
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "current": {
          "type": "integer",
          "maximum": 6,
          "minimum": 0,
          "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)."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "currentLabel": {
          "type": "string",
          "default": "You are here",
          "maxLength": 40,
          "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\"."
        }
      },
      "description": "A chevron process diagram: 2–7 phases as chevrons left to right, with optional timing and bullets under each."
    }
    arguments 128 lines
  • create_org_chart unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "$defs": {
        "node": {
          "type": "object",
          "required": [
            "name"
          ],
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80,
              "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."
            },
            "role": {
              "type": "string",
              "maxLength": 100,
              "description": "Optional job title or responsibility, e.g. \"Engagement lead\". Wraps to two lines, then truncates."
            },
            "color": {
              "type": "string",
              "maxLength": 40,
              "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."
            },
            "children": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/node",
                "x-fromString": "name"
              },
              "maxItems": 30,
              "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."
            }
          },
          "description": "One person (or team) card. Children are the people who report to them."
        }
      },
      "title": "Org Chart",
      "examples": [
        {
          "root": {
            "name": "Dana Lee",
            "role": "Engagement lead",
            "children": [
              {
                "name": "Sam Ortiz",
                "role": "Tech lead",
                "children": [
                  {
                    "name": "Two engineers",
                    "role": "Build"
                  }
                ]
              },
              {
                "name": "Priya Shah",
                "role": "Design lead"
              },
              {
                "name": "Alex Chen",
                "role": "Product owner"
              }
            ]
          },
          "title": "Project team"
        }
      ],
      "required": [
        "root"
      ],
      "properties": {
        "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."
        },
        "title": {
          "type": "string",
          "default": "Team Structure",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "layout": {
          "enum": [
            "top-down",
            "left-right"
          ],
          "type": "string",
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "showInitials": {
          "type": "boolean",
          "default": true,
          "description": "Show an initials circle on each card, in the card's team colour. Default true. There are no photos."
        }
      },
      "description": "An org chart: a reporting or project-team tree of people cards joined by elbow connectors."
    }
    arguments 126 lines
  • create_mind_map unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "$defs": {
        "node": {
          "type": "object",
          "required": [
            "name"
          ],
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80,
              "description": "Topic label, ideally a few words. Long labels wrap onto two lines, then truncate."
            },
            "children": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/node",
                "x-fromString": "name"
              },
              "maxItems": 12,
              "description": "Sub-topics of this topic, top to bottom."
            }
          },
          "description": "A sub-topic. It takes the colour of its first-level branch."
        }
      },
      "title": "Mind Map",
      "examples": [
        {
          "center": "Customer retention",
          "branches": [
            {
              "name": "Onboarding",
              "children": [
                {
                  "name": "Setup wizard"
                },
                {
                  "name": "Templates"
                }
              ]
            },
            {
              "name": "Support",
              "children": [
                {
                  "name": "Live chat"
                }
              ]
            },
            {
              "name": "Pricing"
            }
          ]
        }
      ],
      "required": [
        "center",
        "branches"
      ],
      "properties": {
        "title": {
          "type": "string",
          "default": "Mind Map",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "center": {
          "type": "string",
          "maxLength": 80,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "layout": {
          "enum": [
            "balanced",
            "right"
          ],
          "type": "string",
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "branches": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 80,
                "description": "Branch label, drawn as a coloured pill."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "description": "Optional hex colour for this branch and everything under it, e.g. \"#10b981\". Without one, branches take the palette colours in order."
              },
              "children": {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/node",
                  "x-fromString": "name"
                },
                "maxItems": 12,
                "description": "Sub-topics of this branch, top to bottom."
              }
            },
            "x-fromString": "name"
          },
          "maxItems": 8,
          "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."
        }
      },
      "description": "A mind map: a central topic with coloured branches of sub-topics radiating out."
    }
    arguments 146 lines
  • create_cycle unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Cycle diagram",
      "examples": [
        {
          "style": "nodes",
          "title": "Continuous improvement loop",
          "center": "Customer value",
          "stages": [
            {
              "name": "Plan",
              "detail": "Set the quarter's bets"
            },
            {
              "name": "Build",
              "detail": "Ship small, ship often"
            },
            {
              "name": "Measure",
              "detail": "Track usage and outcomes"
            },
            {
              "name": "Learn",
              "detail": "Keep what works, drop what doesn't"
            }
          ]
        }
      ],
      "required": [
        "stages"
      ],
      "properties": {
        "style": {
          "enum": [
            "nodes",
            "segments"
          ],
          "type": "string",
          "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."
        },
        "title": {
          "type": "string",
          "default": "Cycle",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "center": {
          "type": "string",
          "maxLength": 80,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "stages": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 60,
                "description": "Stage name, 1–3 words reads best (e.g. \"Plan\", \"Build\"). Long names shrink and wrap to 2 lines."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "description": "Hex colour, e.g. \"#4f46e5\". Optional: stages without one take the next palette colour."
              },
              "detail": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional short description shown outside the ring next to the stage, wrapped to up to 3 lines (about 12 words)."
              }
            },
            "x-fromString": "name"
          },
          "maxItems": 8,
          "minItems": 1,
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        }
      },
      "description": "A cycle diagram: stages evenly spaced around a loop, joined by arrows, with an optional centre label."
    }
    arguments 113 lines
  • create_hub_spoke unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Hub and spoke",
      "examples": [
        {
          "hub": "Core platform",
          "title": "Platform ecosystem",
          "arrows": "none",
          "spokes": [
            {
              "name": "Mobile app",
              "detail": "iOS and Android"
            },
            {
              "name": "Partner API"
            },
            {
              "name": "Analytics"
            },
            {
              "name": "Billing"
            }
          ]
        }
      ],
      "required": [
        "hub",
        "spokes"
      ],
      "properties": {
        "hub": {
          "type": "string",
          "maxLength": 60,
          "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."
        },
        "title": {
          "type": "string",
          "default": "Hub and Spoke",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "arrows": {
          "enum": [
            "none",
            "out",
            "both"
          ],
          "type": "string",
          "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)."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "spokes": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 60,
                "description": "Satellite label, 1–3 words reads best (e.g. \"Mobile app\"). Long names shrink and wrap to 2 lines."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "description": "Hex colour, e.g. \"#0ea5e9\". Optional: satellites without one take the next palette colour."
              },
              "detail": {
                "type": "string",
                "maxLength": 160,
                "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)."
              }
            },
            "x-fromString": "name"
          },
          "maxItems": 10,
          "minItems": 1,
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "hubColor": {
          "type": "string",
          "maxLength": 40,
          "description": "Optional hex colour of the hub circle. Default: the first palette colour (indigo #4f46e5), with the spokes taking the following palette colours."
        }
      },
      "description": "A hub-and-spoke diagram: a central hub with evenly spaced satellites joined to it by spokes, in no particular order."
    }
    arguments 117 lines
  • create_pyramid unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Pyramid / Funnel",
      "examples": [
        {
          "mode": "funnel",
          "title": "Sales funnel",
          "layers": [
            {
              "name": "Leads",
              "detail": "Everyone who showed interest"
            },
            {
              "name": "Qualified",
              "detail": "Need and budget confirmed"
            },
            {
              "name": "Proposal"
            },
            {
              "name": "Won"
            }
          ]
        }
      ],
      "required": [
        "layers"
      ],
      "properties": {
        "mode": {
          "enum": [
            "pyramid",
            "funnel"
          ],
          "type": "string",
          "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."
        },
        "title": {
          "type": "string",
          "default": "Pyramid",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "layers": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 60,
                "description": "Layer label, e.g. \"Leads\" or \"Self-actualisation\". One to four words read best."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "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."
              },
              "detail": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional short description shown in a muted column to the right of the shape, aligned to this layer. Wraps to two lines."
              }
            },
            "x-fromString": "name"
          },
          "maxItems": 8,
          "minItems": 1,
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        }
      },
      "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."
    }
    arguments 105 lines
  • create_football_field unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Football Field Chart",
      "examples": [
        {
          "rows": [
            {
              "low": 38.2,
              "high": 49.6,
              "method": "52-week trading range"
            },
            {
              "low": 42,
              "high": 53,
              "detail": "8.0x–10.0x EV/EBITDA",
              "method": "Trading comps"
            },
            {
              "low": 50,
              "high": 61,
              "detail": "10.5x–12.5x EV/EBITDA",
              "method": "Precedent transactions"
            },
            {
              "low": 46,
              "high": 60,
              "detail": "WACC 9–11%, g 2–3%",
              "method": "DCF (perpetuity growth)"
            }
          ],
          "range": {
            "low": 48,
            "high": 55,
            "label": "Implied range"
          },
          "title": "Valuation summary ($ per share)",
          "markers": [
            {
              "label": "Current price",
              "value": 45.1
            },
            {
              "label": "Offer",
              "value": 52
            }
          ]
        }
      ],
      "required": [
        "rows"
      ],
      "properties": {
        "rows": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "method"
            ],
            "properties": {
              "low": {
                "type": "number",
                "maximum": 1000000000000,
                "minimum": -1000000000000,
                "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."
              },
              "high": {
                "type": "number",
                "maximum": 1000000000000,
                "minimum": -1000000000000,
                "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."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "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."
              },
              "detail": {
                "type": "string",
                "maxLength": 80,
                "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."
              },
              "method": {
                "type": "string",
                "maxLength": 60,
                "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."
              }
            }
          },
          "maxItems": 12,
          "minItems": 1,
          "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."
        },
        "range": {
          "type": "object",
          "properties": {
            "low": {
              "type": "number",
              "maximum": 1000000000000,
              "minimum": -1000000000000,
              "description": "Low end of the shaded band, e.g. 48."
            },
            "high": {
              "type": "number",
              "maximum": 1000000000000,
              "minimum": -1000000000000,
              "description": "High end of the shaded band, e.g. 55."
            },
            "label": {
              "type": "string",
              "maxLength": 40,
              "description": "Optional name shown above the band before its values, e.g. \"Implied range\" or \"Proposed offer 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)."
        },
        "title": {
          "type": "string",
          "default": "Valuation summary",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "default": 1280,
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "prefix": {
          "type": "string",
          "default": "$",
          "maxLength": 6,
          "description": "Text put before every value, default \"$\". Use \"€\", \"£\" or \"\" (none), e.g. \"\" for multiples."
        },
        "suffix": {
          "type": "string",
          "default": "",
          "maxLength": 6,
          "description": "Text put after every value, default \"\" (none). E.g. \"m\" for $ millions, \"/sh\" for per share, \"x\" for multiples, \"%\" for percentages."
        },
        "axisMax": {
          "type": "number",
          "maximum": 1000000000000,
          "minimum": -1000000000000,
          "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."
        },
        "axisMin": {
          "type": "number",
          "maximum": 1000000000000,
          "minimum": -1000000000000,
          "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."
        },
        "markers": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "label"
            ],
            "properties": {
              "color": {
                "type": "string",
                "maxLength": 40,
                "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."
              },
              "label": {
                "type": "string",
                "maxLength": 40,
                "description": "Marker name shown above its line, followed by the formatted value, e.g. \"Current price\" or \"Offer price\"."
              },
              "value": {
                "type": "number",
                "maximum": 1000000000000,
                "minimum": -1000000000000,
                "description": "Where the line sits on the value axis, in the chart's units, e.g. 45.1."
              }
            }
          },
          "default": [],
          "maxItems": 3,
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "decimals": {
          "type": "integer",
          "maximum": 3,
          "minimum": 0,
          "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."
        },
        "showValues": {
          "type": "boolean",
          "default": true,
          "description": "Print the low and high values just outside each end of every bar. Default true."
        }
      },
      "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."
    }
    arguments 219 lines
  • create_five_forces unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Porter's Five Forces",
      "examples": [
        {
          "title": "Five forces: US ride-hailing",
          "buyers": {
            "rating": "high",
            "bullets": [
              "Riders switch apps for a cheaper fare"
            ]
          },
          "rivalry": {
            "rating": "high",
            "bullets": [
              "Two players hold over 95% of trips",
              "Promotions and price matching are constant"
            ]
          },
          "suppliers": {
            "rating": "medium",
            "bullets": [
              "Drivers multi-home across both apps"
            ]
          },
          "conclusion": "Overall: moderately attractive for the two scaled players; buyer power and rivalry cap margins",
          "newEntrants": {
            "rating": "low",
            "bullets": [
              "Two-sided network effects favour incumbents",
              "Insurance and licensing costs are high"
            ]
          },
          "substitutes": {
            "rating": "medium",
            "bullets": [
              "Own car, transit, micromobility"
            ]
          }
        }
      ],
      "required": [
        "rivalry",
        "newEntrants",
        "substitutes",
        "suppliers",
        "buyers"
      ],
      "properties": {
        "title": {
          "type": "string",
          "default": "Five forces analysis",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "buyers": {
          "type": "object",
          "properties": {
            "color": {
              "type": "string",
              "maxLength": 40,
              "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."
            },
            "label": {
              "type": "string",
              "default": "Bargaining power of buyers",
              "maxLength": 50,
              "description": "Name shown in the box's header band. Default \"Bargaining power of buyers\"; override only to rename it."
            },
            "rating": {
              "enum": [
                "very low",
                "low",
                "medium",
                "high",
                "very high"
              ],
              "type": "string",
              "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."
            },
            "bullets": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 120
              },
              "default": [],
              "maxItems": 5,
              "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."
            }
          },
          "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\"] }."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "rivalry": {
          "type": "object",
          "properties": {
            "color": {
              "type": "string",
              "maxLength": 40,
              "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."
            },
            "label": {
              "type": "string",
              "default": "Competitive rivalry",
              "maxLength": 50,
              "description": "Name shown in the box's header band. Default \"Competitive rivalry\"; override only to rename it."
            },
            "rating": {
              "enum": [
                "very low",
                "low",
                "medium",
                "high",
                "very high"
              ],
              "type": "string",
              "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."
            },
            "bullets": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 120
              },
              "default": [],
              "maxItems": 5,
              "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."
            }
          },
          "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\"] }."
        },
        "suppliers": {
          "type": "object",
          "properties": {
            "color": {
              "type": "string",
              "maxLength": 40,
              "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."
            },
            "label": {
              "type": "string",
              "default": "Bargaining power of suppliers",
              "maxLength": 50,
              "description": "Name shown in the box's header band. Default \"Bargaining power of suppliers\"; override only to rename it."
            },
            "rating": {
              "enum": [
                "very low",
                "low",
                "medium",
                "high",
                "very high"
              ],
              "type": "string",
              "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."
            },
            "bullets": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 120
              },
              "default": [],
              "maxItems": 5,
              "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."
            }
          },
          "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\"] }."
        },
        "conclusion": {
          "type": "string",
          "maxLength": 200,
          "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."
        },
        "newEntrants": {
          "type": "object",
          "properties": {
            "color": {
              "type": "string",
              "maxLength": 40,
              "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."
            },
            "label": {
              "type": "string",
              "default": "Threat of new entrants",
              "maxLength": 50,
              "description": "Name shown in the box's header band. Default \"Threat of new entrants\"; override only to rename it."
            },
            "rating": {
              "enum": [
                "very low",
                "low",
                "medium",
                "high",
                "very high"
              ],
              "type": "string",
              "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."
            },
            "bullets": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 120
              },
              "default": [],
              "maxItems": 5,
              "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."
            }
          },
          "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\"] }."
        },
        "showRatings": {
          "type": "boolean",
          "default": true,
          "description": "Show each force's rating pill. Default true; false hides every rating without deleting it."
        },
        "substitutes": {
          "type": "object",
          "properties": {
            "color": {
              "type": "string",
              "maxLength": 40,
              "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."
            },
            "label": {
              "type": "string",
              "default": "Threat of substitutes",
              "maxLength": 50,
              "description": "Name shown in the box's header band. Default \"Threat of substitutes\"; override only to rename it."
            },
            "rating": {
              "enum": [
                "very low",
                "low",
                "medium",
                "high",
                "very high"
              ],
              "type": "string",
              "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."
            },
            "bullets": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 120
              },
              "default": [],
              "maxItems": 5,
              "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."
            }
          },
          "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\"] }."
        }
      },
      "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."
    }
    arguments 286 lines
  • create_sipoc unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "SIPOC Diagram",
      "examples": [
        {
          "end": "Order is delivered and invoiced",
          "start": "Customer places an order",
          "steps": [
            "Receive order",
            "Check credit",
            "Pick and pack",
            "Ship",
            "Invoice"
          ],
          "title": "SIPOC: order fulfilment",
          "inputs": [
            "Purchase order",
            "Price list",
            "Stock"
          ],
          "outputs": [
            "Delivered order",
            "Invoice"
          ],
          "process": "Order to delivery",
          "customers": [
            "Customer",
            "Finance"
          ],
          "suppliers": [
            "Customer",
            "Sales team",
            "Warehouse"
          ]
        }
      ],
      "required": [
        "steps"
      ],
      "properties": {
        "end": {
          "type": "string",
          "maxLength": 120,
          "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."
        },
        "start": {
          "type": "string",
          "maxLength": 120,
          "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."
        },
        "steps": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "maxItems": 7,
          "minItems": 1,
          "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."
        },
        "title": {
          "type": "string",
          "default": "SIPOC",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "default": 1280,
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "colors": {
          "type": "object",
          "properties": {
            "c": {
              "type": "string",
              "maxLength": 40,
              "description": "Hex colour for the Customers column."
            },
            "i": {
              "type": "string",
              "maxLength": 40,
              "description": "Hex colour for the Inputs column."
            },
            "o": {
              "type": "string",
              "maxLength": 40,
              "description": "Hex colour for the Outputs column."
            },
            "p": {
              "type": "string",
              "maxLength": 40,
              "description": "Hex colour for the Process column (its letter, step numbers and step boxes)."
            },
            "s": {
              "type": "string",
              "maxLength": 40,
              "description": "Hex colour for the Suppliers column, e.g. \"#4f46e5\"."
            }
          },
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "inputs": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "maxItems": 8,
          "description": "What the suppliers provide to the process (0–8), one card each, e.g. [\"Purchase order\", \"Stock levels\"]."
        },
        "outputs": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "maxItems": 8,
          "description": "What the process produces (0–8), one card each, e.g. [\"Shipped order\", \"Invoice\"]."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "process": {
          "type": "string",
          "maxLength": 80,
          "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."
        },
        "numbered": {
          "type": "boolean",
          "default": true,
          "description": "Number the process steps 1, 2, 3… in coloured circles. Default true; false shows plain step boxes."
        },
        "customers": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "maxItems": 8,
          "description": "Who receives the outputs (0–8), one card each, e.g. [\"Customer\", \"Finance\"]. Internal teams count as customers too."
        },
        "suppliers": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "maxItems": 8,
          "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."
        }
      },
      "description": "A SIPOC diagram: five columns (Suppliers, Inputs, Process, Outputs, Customers) that scope a process from who feeds it to who it serves."
    }
    arguments 175 lines
  • create_issue_tree unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "$defs": {
        "node": {
          "type": "object",
          "required": [
            "name"
          ],
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80,
              "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."
            },
            "color": {
              "type": "string",
              "maxLength": 40,
              "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."
            },
            "value": {
              "type": "string",
              "maxLength": 30,
              "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."
            },
            "children": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/node",
                "x-fromString": "name"
              },
              "maxItems": 6,
              "description": "The drivers, causes or sub-questions under this box, top to bottom (up to 6). Ideally mutually exclusive and collectively exhaustive (MECE)."
            },
            "operator": {
              "enum": [
                "+",
                "-",
                "x",
                "/"
              ],
              "type": "string",
              "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."
            }
          },
          "description": "One box in the tree. Its children are the drivers, causes or sub-questions it breaks down into."
        }
      },
      "title": "Issue Tree",
      "examples": [
        {
          "root": {
            "name": "Operating profit",
            "value": "$4.1m",
            "children": [
              {
                "name": "Revenue",
                "value": "$12.4m",
                "children": [
                  {
                    "name": "Customers",
                    "value": "3,100"
                  },
                  {
                    "name": "Revenue per customer",
                    "value": "$4,000"
                  }
                ],
                "operator": "x"
              },
              {
                "name": "Costs",
                "value": "$8.3m",
                "children": [
                  {
                    "name": "Cost of sales",
                    "value": "$5.2m"
                  },
                  {
                    "name": "Operating expenses",
                    "value": "$3.1m"
                  }
                ],
                "operator": "+"
              }
            ],
            "operator": "-"
          },
          "title": "Operating profit driver tree",
          "levels": [
            "Metric",
            "Drivers",
            "Sub-drivers"
          ]
        }
      ],
      "required": [
        "root"
      ],
      "properties": {
        "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": {
          "type": "string",
          "default": "Issue tree",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "levels": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "maxItems": 4,
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "numbered": {
          "type": "boolean",
          "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."
        }
      },
      "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."
    }
    arguments 154 lines
  • create_ecomap unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Ecomap",
      "examples": [
        {
          "title": "Lopez family ecomap",
          "center": {
            "name": "Lopez household",
            "members": [
              "Maria, 34",
              "Leo, 9"
            ]
          },
          "systems": [
            {
              "flow": "both",
              "name": "School",
              "strength": "strong"
            },
            {
              "flow": "to",
              "name": "Work",
              "detail": "Night shifts",
              "strength": "stressful"
            },
            {
              "name": "Extended family",
              "strength": "tenuous"
            },
            {
              "flow": "from",
              "name": "Health care"
            }
          ]
        }
      ],
      "required": [
        "center",
        "systems"
      ],
      "properties": {
        "title": {
          "type": "string",
          "default": "Ecomap",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "center": {
          "type": "object",
          "required": [
            "name"
          ],
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 40,
              "description": "Name of the client or household, e.g. \"Lopez household\" or \"Sam\". Bold white text, wrapped to up to 2 lines."
            },
            "color": {
              "type": "string",
              "maxLength": 40,
              "description": "Optional hex colour of the centre circle. Default: the first palette colour (indigo #4f46e5); the systems take the following palette colours."
            },
            "members": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 30
              },
              "default": [],
              "maxItems": 8,
              "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."
            }
          },
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "legend": {
          "type": "boolean",
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "systems": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "flow": {
                "enum": [
                  "none",
                  "to",
                  "from",
                  "both"
                ],
                "type": "string",
                "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)."
              },
              "name": {
                "type": "string",
                "maxLength": 40,
                "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."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "description": "Hex colour of this system's circle, e.g. \"#10b981\". Optional: systems without one take the next palette colour."
              },
              "detail": {
                "type": "string",
                "maxLength": 120,
                "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\"."
              },
              "strength": {
                "enum": [
                  "strong",
                  "moderate",
                  "tenuous",
                  "stressful"
                ],
                "type": "string",
                "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, -/-/-)."
              }
            },
            "x-fromString": "name"
          },
          "maxItems": 12,
          "minItems": 1,
          "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."
        }
      },
      "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."
    }
    arguments 164 lines
  • create_lab_fishbone unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Lab fishbone",
      "examples": [
        {
          "title": "Day 3 labs",
          "panels": [
            {
              "k": "5.6",
              "cl": "102",
              "cr": "1.1",
              "na": "138",
              "bun": "18",
              "glu": "112",
              "hco3": "24",
              "type": "bmp",
              "caption": "06:00"
            },
            {
              "hct": "39.5",
              "hgb": "13.2",
              "plt": "245",
              "wbc": "8.4",
              "type": "cbc",
              "caption": "06:00"
            }
          ]
        }
      ],
      "required": [
        "panels"
      ],
      "properties": {
        "flag": {
          "type": "boolean",
          "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."
        },
        "title": {
          "type": "string",
          "default": "Labs",
          "maxLength": 140,
          "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."
        },
        "units": {
          "enum": [
            "US",
            "SI"
          ],
          "type": "string",
          "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."
        },
        "width": {
          "type": "integer",
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "labels": {
          "type": "boolean",
          "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."
        },
        "panels": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "k": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "ca": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "cl": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "cr": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "mg": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "na": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "ph": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "pt": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "tp": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "alb": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "alp": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "alt": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "ast": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "bun": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "glu": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "hct": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "hgb": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "inr": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "plt": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "po2": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "ptt": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "wbc": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "hco3": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "pco2": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "phos": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "type": {
                "enum": [
                  "bmp",
                  "cbc",
                  "coag",
                  "lft",
                  "abg",
                  "chem"
                ],
                "type": "string",
                "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."
              },
              "flags": {
                "type": "object",
                "properties": {
                  "k": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for k."
                  },
                  "ca": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for ca."
                  },
                  "cl": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for cl."
                  },
                  "cr": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for cr."
                  },
                  "mg": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for mg."
                  },
                  "na": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for na."
                  },
                  "ph": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for ph."
                  },
                  "pt": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for pt."
                  },
                  "tp": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for tp."
                  },
                  "alb": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for alb."
                  },
                  "alp": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for alp."
                  },
                  "alt": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for alt."
                  },
                  "ast": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for ast."
                  },
                  "bun": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for bun."
                  },
                  "glu": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for glu."
                  },
                  "hct": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for hct."
                  },
                  "hgb": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for hgb."
                  },
                  "inr": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for inr."
                  },
                  "plt": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for plt."
                  },
                  "po2": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for po2."
                  },
                  "ptt": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for ptt."
                  },
                  "wbc": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for wbc."
                  },
                  "hco3": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for hco3."
                  },
                  "pco2": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for pco2."
                  },
                  "phos": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for phos."
                  },
                  "tbili": {
                    "enum": [
                      "high",
                      "low",
                      "normal"
                    ],
                    "type": "string",
                    "description": "Manual flag for tbili."
                  }
                },
                "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."
              },
              "tbili": {
                "type": "string",
                "maxLength": 8,
                "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."
              },
              "caption": {
                "type": "string",
                "maxLength": 40,
                "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."
              }
            }
          },
          "maxItems": 8,
          "minItems": 1,
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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)."
        }
      },
      "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."
    }
    arguments 488 lines
  • create_quadrant_matrix unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "$defs": {
        "quadrant": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 40,
              "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."
            },
            "color": {
              "type": "string",
              "maxLength": 40,
              "description": "Optional hex colour for this quadrant's tint (and its plot dots), e.g. \"#10b981\". Default: the accent (first palette colour)."
            },
            "bullets": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 100
              },
              "maxItems": 6,
              "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."
            }
          }
        }
      },
      "title": "2×2 Matrix",
      "examples": [
        {
          "items": [
            {
              "x": 2,
              "y": 8.5,
              "name": "Fix checkout errors"
            },
            {
              "x": 3.5,
              "y": 7,
              "name": "Self-serve onboarding"
            },
            {
              "x": 7.5,
              "y": 8,
              "name": "Enterprise SSO"
            },
            {
              "x": 9,
              "y": 6,
              "name": "Mobile app rebuild"
            },
            {
              "x": 3,
              "y": 2.5,
              "name": "Dark mode"
            },
            {
              "x": 7.5,
              "y": 2,
              "name": "Legacy report export"
            }
          ],
          "title": "Product initiatives: impact vs effort",
          "preset": "impactEffort"
        },
        {
          "title": "This week",
          "preset": "eisenhower",
          "quadrants": {
            "topLeft": {
              "bullets": [
                "Board deck due Friday",
                "Fix payment outage"
              ]
            },
            "topRight": {
              "bullets": [
                "Q4 hiring plan",
                "Pricing research"
              ]
            },
            "bottomLeft": {
              "bullets": [
                "Vendor invoice queries"
              ]
            },
            "bottomRight": {
              "bullets": [
                "Inbox zero"
              ]
            }
          }
        },
        {
          "items": [
            {
              "x": 8,
              "y": 8,
              "name": "Cloud storage",
              "size": 420
            },
            {
              "x": 3,
              "y": 7.5,
              "name": "Analytics",
              "size": 150
            },
            {
              "x": 8.5,
              "y": 2,
              "name": "On-prem servers",
              "size": 610
            },
            {
              "x": 2,
              "y": 1.5,
              "name": "Print services",
              "size": 60
            }
          ],
          "title": "Portfolio review",
          "preset": "bcg"
        }
      ],
      "required": [],
      "properties": {
        "mode": {
          "enum": [
            "list",
            "plot"
          ],
          "type": "string",
          "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)."
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "x": {
                "type": "number",
                "maximum": 10,
                "minimum": 0,
                "description": "Position along the horizontal axis, 0 (low) to 10 (high); 5 is the midline. Default 5."
              },
              "y": {
                "type": "number",
                "maximum": 10,
                "minimum": 0,
                "description": "Position along the vertical axis, 0 (low) to 10 (high); 5 is the midline. Default 5."
              },
              "name": {
                "type": "string",
                "maxLength": 40,
                "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."
              },
              "size": {
                "type": "number",
                "maximum": 1000000000000,
                "minimum": 0,
                "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."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "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."
              }
            }
          },
          "default": [],
          "maxItems": 30,
          "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."
        },
        "title": {
          "type": "string",
          "default": "2×2 matrix",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "default": 1280,
          "maximum": 2400,
          "minimum": 640,
          "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)."
        },
        "xAxis": {
          "type": "object",
          "properties": {
            "low": {
              "type": "string",
              "maxLength": 30,
              "description": "Text at the low end, e.g. \"Low\", \"Existing\" or \"Not urgent\"."
            },
            "high": {
              "type": "string",
              "maxLength": 30,
              "description": "Text at the high end, e.g. \"High\", \"New\" or \"Urgent\"."
            },
            "label": {
              "type": "string",
              "maxLength": 50,
              "description": "Axis name, centred under the matrix in bold, e.g. \"Effort\" or \"Relative market share\"."
            },
            "reverse": {
              "type": "boolean",
              "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)."
            }
          },
          "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."
        },
        "yAxis": {
          "type": "object",
          "properties": {
            "low": {
              "type": "string",
              "maxLength": 30,
              "description": "Text at the low end, e.g. \"Low\" or \"Not important\"."
            },
            "high": {
              "type": "string",
              "maxLength": 30,
              "description": "Text at the high end, e.g. \"High\" or \"Important\"."
            },
            "label": {
              "type": "string",
              "maxLength": 50,
              "description": "Axis name, centred beside the matrix in bold, e.g. \"Impact\" or \"Market growth\"."
            },
            "reverse": {
              "type": "boolean",
              "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)."
            }
          },
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "preset": {
          "enum": [
            "none",
            "eisenhower",
            "impactEffort",
            "bcg",
            "ansoff",
            "powerInterest",
            "perceptual",
            "riskLikelihood"
          ],
          "type": "string",
          "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)."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "showGrid": {
          "type": "boolean",
          "default": false,
          "description": "Plot mode: light gridlines at every whole unit (1–9) behind the items. Default false (the midlines only)."
        },
        "quadrants": {
          "type": "object",
          "properties": {
            "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)."
            },
            "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)."
            }
          },
          "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\"] } }."
        }
      },
      "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."
    }
    arguments 307 lines
  • create_fishbone unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Fishbone Diagram",
      "examples": [
        {
          "title": "Root cause analysis: Ward 4B",
          "problem": "Late medication administration",
          "categories": [
            {
              "name": "People",
              "causes": [
                {
                  "text": "Agency nurses unfamiliar with ward routine"
                },
                {
                  "text": "High patient-to-nurse ratio on nights"
                }
              ]
            },
            {
              "name": "Methods",
              "causes": [
                {
                  "sub": [
                    "Clashes with handover"
                  ],
                  "text": "All rounds timed for 08:00"
                }
              ]
            },
            {
              "name": "Equipment",
              "causes": [
                {
                  "text": "One medication cart for 28 beds"
                }
              ]
            },
            {
              "name": "Materials",
              "causes": [
                {
                  "text": "Pharmacy delivers after the morning round"
                }
              ]
            }
          ]
        }
      ],
      "required": [
        "problem",
        "categories"
      ],
      "properties": {
        "title": {
          "type": "string",
          "default": "Root cause analysis",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "default": 1280,
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "preset": {
          "enum": [
            "6m",
            "8p",
            "4s",
            "custom"
          ],
          "type": "string",
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "problem": {
          "type": "string",
          "maxLength": 120,
          "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."
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 40,
                "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."
              },
              "color": {
                "type": "string",
                "maxLength": 40,
                "description": "Optional hex colour for this bone, its cause lines and its name pill, e.g. \"#0ea5e9\". Default: the next palette colour."
              },
              "causes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "sub": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "maxLength": 60
                      },
                      "default": [],
                      "maxItems": 3,
                      "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."
                    },
                    "text": {
                      "type": "string",
                      "maxLength": 80,
                      "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."
                    }
                  },
                  "x-fromString": "text"
                },
                "default": [],
                "maxItems": 6,
                "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\" }."
              }
            },
            "x-fromString": "name"
          },
          "maxItems": 8,
          "minItems": 1,
          "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\"] }] }]."
        }
      },
      "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."
    }
    arguments 157 lines
  • create_swot unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "SWOT Analysis",
      "examples": [
        {
          "title": "SWOT: wholesale expansion",
          "subject": "Northside Roasters, FY26",
          "threats": [
            "Green coffee prices at a 40-year high"
          ],
          "strengths": [
            "Award-winning single-origin range",
            "Loyal following at our two cafés"
          ],
          "conclusion": "Go after office wholesale, but fund a second roaster first",
          "weaknesses": [
            "One 15 kg roaster, near capacity"
          ],
          "opportunities": [
            "Offices restocking coffee after hybrid return"
          ]
        }
      ],
      "required": [
        "strengths"
      ],
      "properties": {
        "title": {
          "type": "string",
          "default": "SWOT analysis",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "default": 1280,
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "colors": {
          "type": "object",
          "properties": {
            "threats": {
              "type": "string",
              "maxLength": 40,
              "description": "Threats colour, e.g. \"#ef4444\"."
            },
            "strengths": {
              "type": "string",
              "maxLength": 40,
              "description": "Strengths colour, e.g. \"#10b981\"."
            },
            "weaknesses": {
              "type": "string",
              "maxLength": 40,
              "description": "Weaknesses colour, e.g. \"#f59e0b\"."
            },
            "opportunities": {
              "type": "string",
              "maxLength": 40,
              "description": "Opportunities colour, e.g. \"#0ea5e9\"."
            }
          },
          "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)."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "labels": {
          "type": "boolean",
          "default": true,
          "description": "Show the axis labels: \"Helpful\" and \"Harmful\" over the columns, \"Internal\" and \"External\" beside the rows. Default true."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "subject": {
          "type": "string",
          "maxLength": 80,
          "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."
        },
        "threats": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "default": [],
          "maxItems": 8,
          "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 []."
        },
        "strengths": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "maxItems": 8,
          "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."
        },
        "conclusion": {
          "type": "string",
          "maxLength": 200,
          "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."
        },
        "weaknesses": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "default": [],
          "maxItems": 8,
          "description": "Internal, harmful: what holds the subject back, e.g. [\"One roaster, near capacity\"]. 0–8 short phrases. Top-right quadrant. Default []."
        },
        "opportunities": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "default": [],
          "maxItems": 8,
          "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 []."
        }
      },
      "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."
    }
    arguments 145 lines
  • create_decision_tree unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "$defs": {
        "node": {
          "type": "object",
          "required": [
            "name"
          ],
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80,
              "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."
            },
            "type": {
              "enum": [
                "decision",
                "chance",
                "outcome"
              ],
              "type": "string",
              "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."
            },
            "label": {
              "type": "string",
              "maxLength": 40,
              "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."
            },
            "payoff": {
              "type": "number",
              "maximum": 1000000000000,
              "minimum": -1000000000000,
              "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."
            },
            "children": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/node",
                "x-fromString": "name"
              },
              "maxItems": 5,
              "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."
            },
            "probability": {
              "type": "number",
              "maximum": 100,
              "minimum": 0,
              "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."
            }
          },
          "description": "One node in the tree: a decision, a chance event or an end outcome. Its children are the branches leaving it."
        }
      },
      "title": "Decision Tree",
      "examples": [
        {
          "root": {
            "name": "Launch strategy",
            "children": [
              {
                "name": "Launch now",
                "children": [
                  {
                    "name": "Strong demand",
                    "payoff": 4.2,
                    "probability": 0.6
                  },
                  {
                    "name": "Weak demand",
                    "payoff": -1.5,
                    "probability": 0.4
                  }
                ]
              },
              {
                "name": "License out",
                "payoff": 1.2
              }
            ]
          },
          "title": "Should we launch Atlas now?",
          "prefix": "$",
          "suffix": "m"
        },
        {
          "root": {
            "name": "Does it power on?",
            "children": [
              {
                "name": "Is it charging?",
                "label": "No",
                "children": [
                  {
                    "name": "Replace the charger",
                    "label": "No"
                  },
                  {
                    "name": "Book a repair",
                    "label": "Yes"
                  }
                ]
              },
              {
                "name": "Restart in safe mode",
                "label": "Yes"
              }
            ]
          },
          "title": "Laptop won't start"
        }
      ],
      "required": [
        "root"
      ],
      "properties": {
        "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."
        },
        "title": {
          "type": "string",
          "default": "Decision tree",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "prefix": {
          "type": "string",
          "default": "",
          "maxLength": 6,
          "description": "Text before every payoff and expected value, e.g. \"$\", \"€\" or \"£\". Default none."
        },
        "showEV": {
          "type": "boolean",
          "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."
        },
        "suffix": {
          "type": "string",
          "default": "",
          "maxLength": 6,
          "description": "Text after every payoff and expected value, e.g. \"m\", \"k\", \"bn\" or \" pts\". Default none."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        }
      },
      "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."
    }
    arguments 172 lines
  • create_stop_start_continue unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "title": "Stop Start Continue",
      "examples": [
        {
          "stop": [
            "Merging without code review",
            "Taking on unplanned work mid-sprint"
          ],
          "start": [
            "Pairing on risky stories"
          ],
          "title": "Sprint 14 retrospective",
          "subject": "Payments team",
          "continue": [
            "Daily stand-up at 9:30"
          ],
          "conclusion": "Actions: review rule in the repo by Friday; protect sprint scope"
        }
      ],
      "required": [],
      "properties": {
        "stop": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "default": [],
          "maxItems": 8,
          "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 []."
        },
        "order": {
          "enum": [
            "stop-start-continue",
            "start-stop-continue"
          ],
          "type": "string",
          "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."
        },
        "start": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "default": [],
          "maxItems": 8,
          "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 []."
        },
        "title": {
          "type": "string",
          "default": "Stop, start, continue",
          "maxLength": 140,
          "description": "Heading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it."
        },
        "width": {
          "type": "integer",
          "default": 1280,
          "maximum": 2400,
          "minimum": 640,
          "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."
        },
        "colors": {
          "type": "object",
          "properties": {
            "stop": {
              "type": "string",
              "maxLength": 40,
              "description": "Stop colour, e.g. \"#ef4444\"."
            },
            "start": {
              "type": "string",
              "maxLength": 40,
              "description": "Start colour, e.g. \"#10b981\"."
            },
            "continue": {
              "type": "string",
              "maxLength": 40,
              "description": "Continue colour, e.g. \"#0ea5e9\"."
            }
          },
          "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)."
        },
        "credit": {
          "type": "boolean",
          "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)."
        },
        "labels": {
          "type": "object",
          "properties": {
            "stop": {
              "type": "string",
              "maxLength": 30,
              "description": "Name of the Stop column, e.g. \"Stop doing\". Default \"Stop\"."
            },
            "start": {
              "type": "string",
              "maxLength": 30,
              "description": "Name of the Start column, e.g. \"Start doing\". Default \"Start\"."
            },
            "continue": {
              "type": "string",
              "maxLength": 30,
              "description": "Name of the Continue column, e.g. \"Keep doing\". Default \"Continue\"."
            }
          },
          "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."
        },
        "palette": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "default": [
            "#4f46e5",
            "#0ea5e9",
            "#10b981",
            "#f59e0b",
            "#ef4444",
            "#6b7280"
          ],
          "maxItems": 12,
          "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."
        },
        "subject": {
          "type": "string",
          "maxLength": 80,
          "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."
        },
        "continue": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "default": [],
          "maxItems": 8,
          "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 []."
        },
        "conclusion": {
          "type": "string",
          "maxLength": 200,
          "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."
        }
      },
      "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."
    }
    arguments 151 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id c1ccdf11dfa9e690.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/c1ccdf11dfa9e690/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/c1ccdf11dfa9e690/badge.svg)](https://brick.blue/agent/c1ccdf11dfa9e690?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.