ScenarioSim MCP
A deterministic Model Context Protocol server that performs what-if scenario simulations for AI agents. It accepts assumptions like growth, churn, and pricing to return projected outcomes, sensitivity analysis, and break-even calculations using high-precision decimal math.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://scenariosim-mcp.pages.dev/mcpWhat its tools do
6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Project SaaS growth metrics over time
- Analyze sensitivity of inputs on target metrics
- Solve for break-even points
- Compare multiple business scenarios side-by-side
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- ScenarioSim 1.0.0-edge
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 6 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Tools
6 advertised
run_scenario
Main simulation tool. Run a deterministic what-if projection from a pre-built template (saas_growth, pricing_change, churn_impact, cost_reduction, hiring_plan, cash_runway, unit_economics, marketing_funnel, compound_growth) OR a free-form 'metrics' model. Returns period-by-period projections, headline key_results, the exact assumptions used (with defaults filled in), the methodology, notes, and a plain-language explanation. Pass 'template' + 'inputs' (assumptions), plus optional 'horizon' and 'period_label'. 100% deterministic (40-digit decimal math).
{
"type": "object",
"properties": {
"inputs": {
"type": "object",
"description": "Scenario assumptions as {name: value}. Which keys are valid depends on the template (call list_templates). Unlisted keys fall back to documented defaults; unknown keys are ignored and reported in notes. You may also pass assumptions at the top level."
},
"horizon": {
"type": "integer",
"default": 12,
"description": "Number of periods to project forward (1..1200). Default depends on template (usually 12)."
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"start"
],
"properties": {
"mode": {
"enum": [
"compound",
"linear"
],
"type": "string",
"default": "compound"
},
"name": {
"type": "string"
},
"start": {
"type": "number"
},
"growth_rate": {
"type": "number"
}
}
},
"description": "For a CUSTOM free-form scenario (template omitted or 'custom'): a list of independently-growing metrics. Each: {name, start, growth_rate (per period, default 0), mode: 'compound' (default) | 'linear'}."
},
"template": {
"type": "string",
"description": "Pre-built scenario template id: saas_growth, pricing_change, churn_impact, cost_reduction, hiring_plan, cash_runway, unit_economics, marketing_funnel, compound_growth (aliases like 'saas','pricing','runway','ltv' also resolve). Omit (or use 'custom') to run a free-form 'metrics' projection."
},
"period_label": {
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"type": "string",
"default": "month",
"description": "Label for each period; also sets annualization (periods/year)."
}
}
}sensitivity_analysis
Vary one or more input assumptions and show the impact on a target output metric (one-at-a-time sensitivity). Provide 'template', the input to sweep via 'variable' (or 'variables' array), and 'target_metric' (defaults to the template's primary output). Control the sweep with 'variation' (fractional +/- around the baseline, default 0.2), 'steps' (default 5), or explicit 'values' / 'min'+'max'. Returns per-variable sweeps, an elasticity estimate, the output range, and a ranking of the most influential inputs.
{
"type": "object",
"required": [
"template"
],
"properties": {
"max": {
"type": "number",
"description": "Sweep upper bound (with 'min')."
},
"min": {
"type": "number",
"description": "Sweep lower bound (with 'max')."
},
"steps": {
"type": "integer",
"default": 5,
"description": "Number of sweep points per variable (2-200)."
},
"inputs": {
"type": "object",
"description": "Scenario assumptions as {name: value}. Which keys are valid depends on the template (call list_templates). Unlisted keys fall back to documented defaults; unknown keys are ignored and reported in notes. You may also pass assumptions at the top level."
},
"values": {
"type": "array",
"items": {
"type": "number"
},
"description": "Explicit sweep values for a single 'variable'."
},
"horizon": {
"type": "integer",
"default": 12,
"description": "Number of periods to project forward (1..1200). Default depends on template (usually 12)."
},
"template": {
"type": "string",
"description": "Pre-built scenario template id: saas_growth, pricing_change, churn_impact, cost_reduction, hiring_plan, cash_runway, unit_economics, marketing_funnel, compound_growth (aliases like 'saas','pricing','runway','ltv' also resolve). Omit (or use 'custom') to run a free-form 'metrics' projection."
},
"variable": {
"type": "string",
"description": "A single input name to sweep."
},
"variables": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
},
"name": {
"type": "string"
},
"steps": {
"type": "integer"
},
"values": {
"type": "array",
"items": {
"type": "number"
}
},
"variation": {
"type": "number"
}
}
},
"description": "Multiple inputs to sweep (one at a time). Each: {name, variation?|values?|min?+max?, steps?}."
},
"variation": {
"type": "number",
"default": 0.2,
"description": "Fractional sweep around the baseline (0<v<=1). 0.2 = +/-20%."
},
"period_label": {
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"type": "string",
"default": "month",
"description": "Label for each period; also sets annualization (periods/year)."
},
"target_metric": {
"type": "string",
"description": "Output metric to track (see a template's 'outputs' via list_templates). Defaults to the template's primary output."
}
}
}break_even
Solve for the input value required to make an output metric hit a target value (deterministic bisection root-finding). Provide 'template', 'solve_for' (the input to solve), 'target_metric' (defaults to the primary output), and 'target_value'. Optionally pass 'bounds' [low, high] to constrain the search. Returns the required input value, the change from baseline, the achieved metric, and the residual. Assumes the metric is monotonic in the solved input over the range.
{
"type": "object",
"required": [
"template",
"solve_for",
"target_value"
],
"properties": {
"bounds": {
"type": "array",
"items": {
"type": "number"
},
"description": "Optional [low, high] search range for the solved input. Auto-derived + expanded if omitted."
},
"inputs": {
"type": "object",
"description": "Scenario assumptions as {name: value}. Which keys are valid depends on the template (call list_templates). Unlisted keys fall back to documented defaults; unknown keys are ignored and reported in notes. You may also pass assumptions at the top level."
},
"horizon": {
"type": "integer",
"default": 12,
"description": "Number of periods to project forward (1..1200). Default depends on template (usually 12)."
},
"template": {
"type": "string",
"description": "Pre-built scenario template id: saas_growth, pricing_change, churn_impact, cost_reduction, hiring_plan, cash_runway, unit_economics, marketing_funnel, compound_growth (aliases like 'saas','pricing','runway','ltv' also resolve). Omit (or use 'custom') to run a free-form 'metrics' projection."
},
"solve_for": {
"type": "string",
"description": "Name of the input variable to solve for."
},
"period_label": {
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"type": "string",
"default": "month",
"description": "Label for each period; also sets annualization (periods/year)."
},
"target_value": {
"type": "number",
"description": "The value the target_metric should reach."
},
"target_metric": {
"type": "string",
"description": "Output metric to hit (defaults to the template's primary output)."
}
}
}compare_scenarios
Run 2-3 scenarios and compare their key_results side by side, with deltas against the first (baseline) scenario. Provide a 'scenarios' array where each entry is {name?, template, inputs} (each may set its own horizon, or pass a shared top-level 'horizon'). Optionally rank on 'compare_metric' with 'goal' ('max' default | 'min') to pick a winner, and set include_projections:true to also return per-period series.
{
"type": "object",
"required": [
"scenarios"
],
"properties": {
"goal": {
"enum": [
"max",
"min"
],
"type": "string",
"default": "max",
"description": "Whether higher (max) or lower (min) is better for compare_metric."
},
"horizon": {
"type": "integer",
"description": "Optional shared horizon applied to scenarios that don't set their own."
},
"scenarios": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"inputs": {
"type": "object",
"description": "Scenario assumptions as {name: value}. Which keys are valid depends on the template (call list_templates). Unlisted keys fall back to documented defaults; unknown keys are ignored and reported in notes. You may also pass assumptions at the top level."
},
"horizon": {
"type": "integer",
"default": 12,
"description": "Number of periods to project forward (1..1200). Default depends on template (usually 12)."
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"start"
],
"properties": {
"mode": {
"enum": [
"compound",
"linear"
],
"type": "string",
"default": "compound"
},
"name": {
"type": "string"
},
"start": {
"type": "number"
},
"growth_rate": {
"type": "number"
}
}
},
"description": "For a CUSTOM free-form scenario (template omitted or 'custom'): a list of independently-growing metrics. Each: {name, start, growth_rate (per period, default 0), mode: 'compound' (default) | 'linear'}."
},
"template": {
"type": "string",
"description": "Pre-built scenario template id: saas_growth, pricing_change, churn_impact, cost_reduction, hiring_plan, cash_runway, unit_economics, marketing_funnel, compound_growth (aliases like 'saas','pricing','runway','ltv' also resolve). Omit (or use 'custom') to run a free-form 'metrics' projection."
},
"period_label": {
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"type": "string",
"default": "month",
"description": "Label for each period; also sets annualization (periods/year)."
}
}
},
"description": "2-3 scenarios to compare. Each: {name?, template, inputs, horizon?, period_label?} or {name?, metrics:[...]} for a custom model."
},
"compare_metric": {
"type": "string",
"description": "Metric to rank scenarios on (optional)."
},
"include_projections": {
"type": "boolean",
"default": false,
"description": "Include each scenario's full per-period projections."
}
}
}list_templates
Discovery tool: list every pre-built scenario template (id, label, category, description, primary output, documented inputs with defaults/units, and available output metrics), plus how to run a custom free-form scenario and the supported period labels. No required parameters.
{
"type": "object",
"properties": {}
}health_check
Server health, version, and capabilities (tools, templates, period labels, max horizon). No parameters.
{
"type": "object",
"properties": {}
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 409 ms
- 95th percentile latency
- 409 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 409 ms · metadata changed · 6 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http scenariosim-mcp-pages https://scenariosim-mcp.pages.dev/mcpCodex
codex mcp add scenariosim-mcp-pages --url https://scenariosim-mcp.pages.dev/mcpCursor
{
"mcpServers": {
"scenariosim-mcp-pages": {
"url": "https://scenariosim-mcp.pages.dev/mcp"
}
}
}Cline
{
"mcpServers": {
"scenariosim-mcp-pages": {
"type": "streamableHttp",
"url": "https://scenariosim-mcp.pages.dev/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"scenariosim-mcp-pages": {
"type": "http",
"url": "https://scenariosim-mcp.pages.dev/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http scenariosim-mcp-pages https://scenariosim-mcp.pages.dev/mcpClaude Desktop
https://scenariosim-mcp.pages.dev/mcpWindsurf
{
"mcpServers": {
"scenariosim-mcp-pages": {
"serverUrl": "https://scenariosim-mcp.pages.dev/mcp"
}
}
}Let your agent find its tools
Find servers like ScenarioSim MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.