Solves and draws a decision tree for business choices from your own numbers.
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 a decision tree checked without a drawing, for example "do my probabilities add up to 1" or "is anything missing in this tree". Takes the same outline or node list and objective as make_decision_tree. Returns, for each chance node, the sum of its branch probabilities as a fraction and whether it is 1; end nodes without a payoff; probabilities on decision options; payoffs on nodes that have branches; single-option decisions; duplicate branch names; and the depth and node counts against the limits. When nothing is wrong it also gives the root expected value. Refuses a tree it is unable to read (unknown parent, a loop, two roots, over the limits), naming the line or id. Does not draw the tree or make files. Do not use it to estimate probabilities.
The tree as a JSON list instead of outline: each node has id, parent (not for the root), label, and p, cost or payoff as needed, e.g. [{"id":"r","label":"Launch?"},{"id":"a","parent":"r","label":"Do not launch","payoff":0}].
The tree as indented text, one node per line, children indented under their parent (spaces or tabs, "- " bullets allowed). The first line is the root. Fields after the label: p=<probability> on branches of a chance node, cost=<amount> on any branch, payoff=<amount> on end nodes; separate them with spaces or "|". A node whose branches have p is a chance node, a node with branches and no p is a decision, a node with no branches is an end node; "Decision:", "Chance:" or "End:" before a label states the type. Numbers: decimals (0.35, -1,200.50, $300), fractions (1/3), and percents for p (35%). Up to 300 nodes. Example: "Launch? | decision\n Launch | cost=200\n Strong demand | p=0.6 | payoff=1000\n Weak demand | p=0.4 | payoff=-300\n Do not launch | payoff=0".
max (default): choose the option with the highest expected value, for profit or gain. min: choose the lowest, when payoffs are costs, losses or time. Example: max.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http decision-tree https://decision-tree.zovo.one/mcp
Use this when the user wants a decision tree checked without a drawing, for example "do my probabilities add up to 1" or "is anything missing in this tree". Takes the same outline or node list and objective as make_decision_tree. Returns, for each chance node, the sum of its branch probabilities as a fraction and whether it is 1; end nodes without a payoff; probabilities on decision options; payoffs on nodes that have branches; single-option decisions; duplicate branch names; and the depth and node counts against the limits. When nothing is wrong it also gives the root expected value. Refuses a tree it is unable to read (unknown parent, a loop, two roots, over the limits), naming the line or id. Does not draw the tree or make files. Do not use it to estimate probabilities.
| Argument | Type | Description |
|---|---|---|
| nodes | array | The tree as a JSON list instead of outline: each node has id, parent (not for the root), label, and p, cost or payoff as needed, e.g. [{"id":"r","label":"Launch?"},{"id":"a","parent":"r","label":"Do not launch","payoff":0}]. |
| outline | string | The tree as indented text, one node per line, children indented under their parent (spaces or tabs, "- " bullets allowed). The first line is the root. Fields after the label: p=<probability> on branches of a chance node, cost=<amount> on any branch, payoff=<amount> on end nodes; separate them with spaces or "|". A node whose branches have p is a chance node, a node with branches and no p is a decision, a node with no branches is an end node; "Decision:", "Chance:" or "End:" before a label states the type. Numbers: decimals (0.35, -1,200.50, $300), fractions (1/3), and percents for p (35%). Up to 300 nodes. Example: "Launch? | decision\n Launch | cost=200\n Strong demand | p=0.6 | payoff=1000\n Weak demand | p=0.4 | payoff=-300\n Do not launch | payoff=0". |
| objective | string | max (default): choose the option with the highest expected value, for profit or gain. min: choose the lowest, when payoffs are costs, losses or time. Example: max. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"nodes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"p": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "number"
}
],
"description": "Probability of this branch when the parent is a chance node, e.g. 0.6, \"1/3\" or \"35%\"."
},
"id": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "number"
}
],
"description": "Unique id of the node, e.g. \"n1\"."
},
"cost": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "number"
}
],
"description": "Amount paid on this branch, e.g. 200."
},
"type": {
"type": "string",
"maxLength": 20,
"description": "decision, chance or end. Optional: inferred from the branches as in the outline."
},
"label": {
"type": "string",
"maxLength": 400,
"description": "Short name of the node or of the branch into it, e.g. \"Strong demand\"."
},
"parent": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "number"
}
],
"description": "Id of the parent node; leave out for the root only, e.g. \"n1\"."
},
"payoff": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "number"
}
],
"description": "Value at an end node, e.g. 1000 or -300."
}
},
"additionalProperties": {}
},
"maxItems": 2000,
"description": "The tree as a JSON list instead of outline: each node has id, parent (not for the root), label, and p, cost or payoff as needed, e.g. [{\"id\":\"r\",\"label\":\"Launch?\"},{\"id\":\"a\",\"parent\":\"r\",\"label\":\"Do not launch\",\"payoff\":0}]."
},
"outline": {
"type": "string",
"maxLength": 400000,
"description": "The tree as indented text, one node per line, children indented under their parent (spaces or tabs, \"- \" bullets allowed). The first line is the root. Fields after the label: p=<probability> on branches of a chance node, cost=<amount> on any branch, payoff=<amount> on end nodes; separate them with spaces or \"|\". A node whose branches have p is a chance node, a node with branches and no p is a decision, a node with no branches is an end node; \"Decision:\", \"Chance:\" or \"End:\" before a label states the type. Numbers: decimals (0.35, -1,200.50, $300), fractions (1/3), and percents for p (35%). Up to 300 nodes. Example: \"Launch? | decision\\n Launch | cost=200\\n Strong demand | p=0.6 | payoff=1000\\n Weak demand | p=0.4 | payoff=-300\\n Do not launch | payoff=0\"."
},
"objective": {
"enum": [
"max",
"min"
],
"type": "string",
"description": "max (default): choose the option with the highest expected value, for profit or gain. min: choose the lowest, when payoffs are costs, losses or time. Example: max."
}
}
}Use this when the user wants a decision tree drawn or solved: options of a decision, chance events with probabilities, and payoffs, for example "which option has the higher expected value" or "draw a decision tree for launching this product". Takes the tree as an indented outline or a JSON node list, the objective (max or min), a unit, decimals, a page size and a title. Rolls the tree back with fractions: the expected value of each node, the chosen option at each decision (ties listed), branch costs applied by a stated rule, and the risk profile of the chosen strategy. Refuses a tree whose chance probabilities do not add up to 1, naming the node and the sum, and end nodes without a payoff. Returns a summary, an interactive drawing, and PDF, SVG and CSV downloads. Up to 300 nodes. Does not estimate probabilities or give advice. Download links of large trees expire after about 1 hour.
| Argument | Type | Description |
|---|---|---|
| unit | string | Unit or currency shown with values, up to 12 characters, e.g. "$", "EUR" or "hours". |
| nodes | array | The tree as a JSON list instead of outline: each node has id, parent (not for the root), label, and p, cost or payoff as needed, e.g. [{"id":"r","label":"Launch?"},{"id":"a","parent":"r","label":"Do not launch","payoff":0}]. |
| title | string | Title printed on the drawing and used in file names, up to 80 characters, e.g. "Product launch". |
| outline | string | The tree as indented text, one node per line, children indented under their parent (spaces or tabs, "- " bullets allowed). The first line is the root. Fields after the label: p=<probability> on branches of a chance node, cost=<amount> on any branch, payoff=<amount> on end nodes; separate them with spaces or "|". A node whose branches have p is a chance node, a node with branches and no p is a decision, a node with no branches is an end node; "Decision:", "Chance:" or "End:" before a label states the type. Numbers: decimals (0.35, -1,200.50, $300), fractions (1/3), and percents for p (35%). Up to 300 nodes. Example: "Launch? | decision\n Launch | cost=200\n Strong demand | p=0.6 | payoff=1000\n Weak demand | p=0.4 | payoff=-300\n Do not launch | payoff=0". |
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.
| decimals | integer | Decimals shown in the drawing and summary, 0 to 6 (default 2), e.g. 2. The CSV also has the fraction. |
| objective | string | max (default): choose the option with the highest expected value, for profit or gain. min: choose the lowest, when payoffs are costs, losses or time. Example: max. |
| page_size | string | PDF page: letter (default) or a4. Landscape unless portrait needs fewer pages. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"unit": {
"type": "string",
"maxLength": 40,
"description": "Unit or currency shown with values, up to 12 characters, e.g. \"$\", \"EUR\" or \"hours\"."
},
"nodes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"p": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "number"
}
],
"description": "Probability of this branch when the parent is a chance node, e.g. 0.6, \"1/3\" or \"35%\"."
},
"id": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "number"
}
],
"description": "Unique id of the node, e.g. \"n1\"."
},
"cost": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "number"
}
],
"description": "Amount paid on this branch, e.g. 200."
},
"type": {
"type": "string",
"maxLength": 20,
"description": "decision, chance or end. Optional: inferred from the branches as in the outline."
},
"label": {
"type": "string",
"maxLength": 400,
"description": "Short name of the node or of the branch into it, e.g. \"Strong demand\"."
},
"parent": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "number"
}
],
"description": "Id of the parent node; leave out for the root only, e.g. \"n1\"."
},
"payoff": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "number"
}
],
"description": "Value at an end node, e.g. 1000 or -300."
}
},
"additionalProperties": {}
},
"maxItems": 2000,
"description": "The tree as a JSON list instead of outline: each node has id, parent (not for the root), label, and p, cost or payoff as needed, e.g. [{\"id\":\"r\",\"label\":\"Launch?\"},{\"id\":\"a\",\"parent\":\"r\",\"label\":\"Do not launch\",\"payoff\":0}]."
},
"title": {
"type": "string",
"maxLength": 400,
"description": "Title printed on the drawing and used in file names, up to 80 characters, e.g. \"Product launch\"."
},
"outline": {
"type": "string",
"maxLength": 400000,
"description": "The tree as indented text, one node per line, children indented under their parent (spaces or tabs, \"- \" bullets allowed). The first line is the root. Fields after the label: p=<probability> on branches of a chance node, cost=<amount> on any branch, payoff=<amount> on end nodes; separate them with spaces or \"|\". A node whose branches have p is a chance node, a node with branches and no p is a decision, a node with no branches is an end node; \"Decision:\", \"Chance:\" or \"End:\" before a label states the type. Numbers: decimals (0.35, -1,200.50, $300), fractions (1/3), and percents for p (35%). Up to 300 nodes. Example: \"Launch? | decision\\n Launch | cost=200\\n Strong demand | p=0.6 | payoff=1000\\n Weak demand | p=0.4 | payoff=-300\\n Do not launch | payoff=0\"."
},
"decimals": {
"type": "integer",
"maximum": 6,
"minimum": 0,
"description": "Decimals shown in the drawing and summary, 0 to 6 (default 2), e.g. 2. The CSV also has the fraction."
},
"objective": {
"enum": [
"max",
"min"
],
"type": "string",
"description": "max (default): choose the option with the highest expected value, for profit or gain. min: choose the lowest, when payoffs are costs, losses or time. Example: max."
},
"page_size": {
"enum": [
"letter",
"a4"
],
"type": "string",
"description": "PDF page: letter (default) or a4. Landscape unless portrait needs fewer pages."
}
}
}