Deterministic multi-criteria decision analysis for AI agents — score, rank & explain options.
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.
Direct head-to-head comparison of exactly two options. Returns the winner, the score margin, how many criteria each option wins, and a per-criterion breakdown of who each criterion favours. Pass option_a and option_b (names) or a 2-element options array, plus criteria and scores.
Score matrix. Object form: {"Option A": {"Criterion 1": 8, ...}, ...}. Array form: [{"option":"Option A","scores":{...}}]. Or inline scores on each option object.
Weighted criteria. Each: {name, weight (relative, >=0), direction: 'benefit' (higher better, default) | 'cost' (lower better)}.
Named alternatives. Strings ["A","B"] or objects [{"name":"A","scores":{...}}].
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Direct head-to-head comparison of exactly two options. Returns the winner, the score margin, how many criteria each option wins, and a per-criterion breakdown of who each criterion favours. Pass option_a and option_b (names) or a 2-element options array, plus criteria and scores.
| Argument | Type | Description |
|---|---|---|
| method | string | |
| scores* | object | Score matrix. Object form: {"Option A": {"Criterion 1": 8, ...}, ...}. Array form: [{"option":"Option A","scores":{...}}]. Or inline scores on each option object. |
| options | array | Named alternatives. Strings ["A","B"] or objects [{"name":"A","scores":{...}}]. |
| criteria* | array | Weighted criteria. Each: {name, weight (relative, >=0), direction: 'benefit' (higher better, default) | 'cost' (lower better)}. |
| option_a | string | |
| option_b | string |
{
"type": "object",
"required": [
"criteria",
"scores"
],
"properties": {
"method": {
"enum": [
"weighted_sum",
"weighted_product",
"topsis"
],
"type": "string",
"default": "weighted_sum"
},
"scores": {
"type": "object",
"description": "Score matrix. Object form: {\"Option A\": {\"Criterion 1\": 8, ...}, ...}. Array form: [{\"option\":\"Option A\",\"scores\":{...}}]. Or inline scores on each option object."
},
"options": {
"type": "array",
"items": {
"type": [
"string",
"object"
]
},
"description": "Named alternatives. Strings [\"A\",\"B\"] or objects [{\"name\":\"A\",\"scores\":{...}}]."
},
"criteria": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"weight"
],
"properties": {
"name": {
"type": "string"
},
"weight": {
"type": "number"
},
"direction": {
"enum": [
"benefit",
"cost"
],
"type": "string",
"default": "benefit"
}
}
},
"description": "Weighted criteria. Each: {name, weight (relative, >=0), direction: 'benefit' (higher better, default) | 'cost' (lower better)}."
},
"option_a": {
"type": "string"
},
"option_b": {
"type": "string"
}
}
}Rank named options against weighted criteria and return the winner, full ranking, per-criterion score breakdowns, methodology, the weights used, and a plain-language explanation. This is the main tool. Provide options, criteria [{name, weight, direction}], and a scores matrix. method defaults to weighted_sum (also: weighted_product, topsis). 100% deterministic.
| Argument | Type | Description |
|---|---|---|
| method | string | |
| scores* | object | Score matrix. Object form: {"Option A": {"Criterion 1": 8, ...}, ...}. Array form: [{"option":"Option A","scores":{...}}]. Or inline scores on each option object. |
| options* | array | Named alternatives. Strings ["A","B"] or objects [{"name":"A","scores":{...}}]. |
| criteria* | array | Weighted criteria. Each: {name, weight (relative, >=0), direction: 'benefit' (higher better, default) | 'cost' (lower better)}. |
{
"type": "object",
"required": [
"options",
"criteria",
"scores"
],
"properties": {
"method": {
"enum": [
"weighted_sum",
"weighted_product",
"topsis"
],
"type": "string",
"default": "weighted_sum"
},
"scores": {
"type": "object",
"description": "Score matrix. Object form: {\"Option A\": {\"Criterion 1\": 8, ...}, ...}. Array form: [{\"option\":\"Option A\",\"scores\":{...}}]. Or inline scores on each option object."
},
"options": {
"type": "array",
"items": {
"type": [
"string",
"object"
]
},
"description": "Named alternatives. Strings [\"A\",\"B\"] or objects [{\"name\":\"A\",\"scores\":{...}}]."
},
"criteria": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"weight"
],
"properties": {
"name": {
"type": "string"
},
"weight": {
"type": "number"
},
"direction": {
"enum": [
"benefit",
"cost"
],
"type": "string",
"default": "benefit"
}
}
},
"description": "Weighted criteria. Each: {name, weight (relative, >=0), direction: 'benefit' (higher better, default) | 'cost' (lower better)}."
}
}
}Server health, version, and capabilities. No parameters.
No arguments.
{
"type": "object",
"properties": {}
}List the available scoring methods (weighted_sum, weighted_product, topsis) with descriptions, normalization details, score ranges, and when to use each. No parameters.
No arguments.
{
"type": "object",
"properties": {}
}Score options against criteria when the score matrix is supplied separately. Returns the full normalized scored matrix (per-option, per-criterion) plus a ranking, without the narrative winner explanation. Use create_decision if you want a winner + explanation.
| Argument | Type | Description |
|---|---|---|
| method | string | |
| scores* | object | Score matrix. Object form: {"Option A": {"Criterion 1": 8, ...}, ...}. Array form: [{"option":"Option A","scores":{...}}]. Or inline scores on each option object. |
| options* | array | Named alternatives. Strings ["A","B"] or objects [{"name":"A","scores":{...}}]. |
| criteria* | array | Weighted criteria. Each: {name, weight (relative, >=0), direction: 'benefit' (higher better, default) | 'cost' (lower better)}. |
{
"type": "object",
"required": [
"options",
"criteria",
"scores"
],
"properties": {
"method": {
"enum": [
"weighted_sum",
"weighted_product",
"topsis"
],
"type": "string",
"default": "weighted_sum"
},
"scores": {
"type": "object",
"description": "Score matrix. Object form: {\"Option A\": {\"Criterion 1\": 8, ...}, ...}. Array form: [{\"option\":\"Option A\",\"scores\":{...}}]. Or inline scores on each option object."
},
"options": {
"type": "array",
"items": {
"type": [
"string",
"object"
]
},
"description": "Named alternatives. Strings [\"A\",\"B\"] or objects [{\"name\":\"A\",\"scores\":{...}}]."
},
"criteria": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"weight"
],
"properties": {
"name": {
"type": "string"
},
"weight": {
"type": "number"
},
"direction": {
"enum": [
"benefit",
"cost"
],
"type": "string",
"default": "benefit"
}
}
},
"description": "Weighted criteria. Each: {name, weight (relative, >=0), direction: 'benefit' (higher better, default) | 'cost' (lower better)}."
}
}
}Test how robust the winner is to changes in criteria weights. Sweeps each criterion's weight +/- 'variation' (default 0.2 = 20%) over 'steps' (default 10) increments, recomputes the ranking, and reports a robustness score, which criteria are most likely to flip the result, and the flip points.
| Argument | Type | Description |
|---|---|---|
| steps | integer | Number of weight steps per criterion (2-100). |
| method | string | |
| scores* | object | Score matrix. Object form: {"Option A": {"Criterion 1": 8, ...}, ...}. Array form: [{"option":"Option A","scores":{...}}]. Or inline scores on each option object. |
| options* | array | Named alternatives. Strings ["A","B"] or objects [{"name":"A","scores":{...}}]. |
| criteria* | array | Weighted criteria. Each: {name, weight (relative, >=0), direction: 'benefit' (higher better, default) | 'cost' (lower better)}. |
| variation | number | Fractional weight sweep, 0<v<=1. 0.2 = +/-20%. |
{
"type": "object",
"required": [
"options",
"criteria",
"scores"
],
"properties": {
"steps": {
"type": "integer",
"default": 10,
"description": "Number of weight steps per criterion (2-100)."
},
"method": {
"enum": [
"weighted_sum",
"weighted_product",
"topsis"
],
"type": "string",
"default": "weighted_sum"
},
"scores": {
"type": "object",
"description": "Score matrix. Object form: {\"Option A\": {\"Criterion 1\": 8, ...}, ...}. Array form: [{\"option\":\"Option A\",\"scores\":{...}}]. Or inline scores on each option object."
},
"options": {
"type": "array",
"items": {
"type": [
"string",
"object"
]
},
"description": "Named alternatives. Strings [\"A\",\"B\"] or objects [{\"name\":\"A\",\"scores\":{...}}]."
},
"criteria": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"weight"
],
"properties": {
"name": {
"type": "string"
},
"weight": {
"type": "number"
},
"direction": {
"enum": [
"benefit",
"cost"
],
"type": "string",
"default": "benefit"
}
}
},
"description": "Weighted criteria. Each: {name, weight (relative, >=0), direction: 'benefit' (higher better, default) | 'cost' (lower better)}."
},
"variation": {
"type": "number",
"default": 0.2,
"description": "Fractional weight sweep, 0<v<=1. 0.2 = +/-20%."
}
}
}