Turns flow data (from, to and amount) into a Sankey diagram you can download and print.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user wants to check flow data before drawing a Sankey diagram, for example "do my flows balance" or "why will this Sankey not draw". Takes flows as from, to and amount (pasted text or a list), up to 200 flows and 100 nodes. Returns the problems found, each with its row (unreadable lines, blank names, zero, negative or ambiguous amounts, flows from a node to itself), loops named as paths, pairs that appear more than once, the column of each node, a balance table of inflow and outflow for middle nodes and totals per column. Does not draw the diagram and does not change the data.
Alternative to flows_text: [{"from":"Salary","to":"Budget","amount":"4000"}]. The amount may be text ("1,250.50") or a number. Up to 200 flows and 100 different nodes.
Flows pasted as text, one per line: from, to, amount, e.g. "Salary,Budget,4000\nBudget,Rent,1500\nBudget,Savings,800". Comma, tab or semicolon between values; an optional header row is skipped; names with commas go in double quotes. Up to 200 lines. Give this or flows.
Decimal mark of the amounts, "." (1,234.50) or "," (1.234,50). Needed only when an amount such as 1,234 or 1.234 could be read both ways; otherwise it is read from the amounts.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http sankey-diagram https://sankey-diagram.zovo.one/mcp
Use this when the user wants to check flow data before drawing a Sankey diagram, for example "do my flows balance" or "why will this Sankey not draw". Takes flows as from, to and amount (pasted text or a list), up to 200 flows and 100 nodes. Returns the problems found, each with its row (unreadable lines, blank names, zero, negative or ambiguous amounts, flows from a node to itself), loops named as paths, pairs that appear more than once, the column of each node, a balance table of inflow and outflow for middle nodes and totals per column. Does not draw the diagram and does not change the data.
| Argument | Type | Description |
|---|---|---|
| flows | array | Alternative to flows_text: [{"from":"Salary","to":"Budget","amount":"4000"}]. The amount may be text ("1,250.50") or a number. Up to 200 flows and 100 different nodes. |
| flows_text | string | Flows pasted as text, one per line: from, to, amount, e.g. "Salary,Budget,4000\nBudget,Rent,1500\nBudget,Savings,800". Comma, tab or semicolon between values; an optional header row is skipped; names with commas go in double quotes. Up to 200 lines. Give this or flows. |
| decimal_mark | string | Decimal mark of the amounts, "." (1,234.50) or "," (1.234,50). Needed only when an amount such as 1,234 or 1.234 could be read both ways; otherwise it is read from the amounts. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"flows": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"maxItems": 200,
"description": "Alternative to flows_text: [{\"from\":\"Salary\",\"to\":\"Budget\",\"amount\":\"4000\"}]. The amount may be text (\"1,250.50\") or a number. Up to 200 flows and 100 different nodes."
},
"flows_text": {
"type": "string",
"maxLength": 40000,
"description": "Flows pasted as text, one per line: from, to, amount, e.g. \"Salary,Budget,4000\\nBudget,Rent,1500\\nBudget,Savings,800\". Comma, tab or semicolon between values; an optional header row is skipped; names with commas go in double quotes. Up to 200 lines. Give this or flows."
},
"decimal_mark": {
"enum": [
".",
","
],
"type": "string",
"description": "Decimal mark of the amounts, \".\" (1,234.50) or \",\" (1.234,50). Needed only when an amount such as 1,234 or 1.234 could be read both ways; otherwise it is read from the amounts."
}
}
}Use this when the user wants a Sankey diagram, flow diagram or alluvial-style chart of amounts moving between stages, for example a budget (income to spending), an energy balance, a sales funnel or website traffic paths. Takes flows as from, to and amount (pasted text or a list), up to 200 flows and 100 nodes, plus a title, unit, node order, link colour and PDF page size. Returns node totals, a balance table, totals per column, a proportion check of link widths and node heights, label overlap results, an interactive diagram, and SVG, PDF and CSV downloads. Refuses loops, flows from a node to itself, zero or negative amounts and ambiguous amounts such as 1,234 without a decimal_mark. Does not read files, fetch data from other apps or save diagrams.
| Argument | Type | Description |
|---|---|---|
| unit | string | Unit or currency shown with amounts, e.g. "$", "€", "kWh" or "users". A single currency symbol goes before the number, other units after it. |
| flows | array | Alternative to flows_text: [{"from":"Salary","to":"Budget","amount":"4000"}]. The amount may be text ("1,250.50") or a number. Up to 200 flows and 100 different nodes. |
| title | string | Diagram title, e.g. "Monthly budget". Default "Sankey diagram". |
| color_by | string | Link colour, e.g. source (default: each link takes the colour of the node it leaves) or target (the node it enters). |
| page_size | string | PDF page: auto (default, the page fits the diagram at full size up to the 200 in PDF page limit; a larger diagram is scaled down and the result says so), letter or a4 (scaled to one page). |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.
| flows_text | string | Flows pasted as text, one per line: from, to, amount, e.g. "Salary,Budget,4000\nBudget,Rent,1500\nBudget,Savings,800". Comma, tab or semicolon between values; an optional header row is skipped; names with commas go in double quotes. Up to 200 lines. Give this or flows. |
| node_order | string | auto (default): nodes in each column are arranged to reduce crossings; given: nodes keep the order they first appear in the flows. |
| decimal_mark | string | Decimal mark of the amounts, "." (1,234.50) or "," (1.234,50). Needed only when an amount such as 1,234 or 1.234 could be read both ways; otherwise it is read from the amounts. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"unit": {
"type": "string",
"maxLength": 12,
"description": "Unit or currency shown with amounts, e.g. \"$\", \"€\", \"kWh\" or \"users\". A single currency symbol goes before the number, other units after it."
},
"flows": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"maxItems": 200,
"description": "Alternative to flows_text: [{\"from\":\"Salary\",\"to\":\"Budget\",\"amount\":\"4000\"}]. The amount may be text (\"1,250.50\") or a number. Up to 200 flows and 100 different nodes."
},
"title": {
"type": "string",
"maxLength": 80,
"description": "Diagram title, e.g. \"Monthly budget\". Default \"Sankey diagram\"."
},
"color_by": {
"enum": [
"source",
"target"
],
"type": "string",
"description": "Link colour, e.g. source (default: each link takes the colour of the node it leaves) or target (the node it enters)."
},
"page_size": {
"enum": [
"auto",
"letter",
"a4"
],
"type": "string",
"description": "PDF page: auto (default, the page fits the diagram at full size up to the 200 in PDF page limit; a larger diagram is scaled down and the result says so), letter or a4 (scaled to one page)."
},
"flows_text": {
"type": "string",
"maxLength": 40000,
"description": "Flows pasted as text, one per line: from, to, amount, e.g. \"Salary,Budget,4000\\nBudget,Rent,1500\\nBudget,Savings,800\". Comma, tab or semicolon between values; an optional header row is skipped; names with commas go in double quotes. Up to 200 lines. Give this or flows."
},
"node_order": {
"enum": [
"auto",
"given"
],
"type": "string",
"description": "auto (default): nodes in each column are arranged to reduce crossings; given: nodes keep the order they first appear in the flows."
},
"decimal_mark": {
"enum": [
".",
","
],
"type": "string",
"description": "Decimal mark of the amounts, \".\" (1,234.50) or \",\" (1.234,50). Needed only when an amount such as 1,234 or 1.234 could be read both ways; otherwise it is read from the amounts."
}
}
}