Koskamo

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.

ScenarioSim MCP logo, by inity13Community listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by inity13
MCP endpoint (Streamable HTTP)
https://scenariosim-mcp.pages.dev/mcp
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

6 of 6 have a description · 0 of 6 declare behavior hints · 4 of 4 with parameters document them all

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

Community listingRegistry 1.0.2
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
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Tools

6 advertised

run_scenario
Advertised by the server during the last successful anonymous check.

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).

run_scenario input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

sensitivity_analysis input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

break_even input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

compare_scenarios input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

list_templates input schema
{
  "type": "object",
  "properties": {}
}
health_check
Advertised by the server during the last successful anonymous check.

Server health, version, and capabilities (tools, templates, period labels, max horizon). No parameters.

health_check input schema
{
  "type": "object",
  "properties": {}
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http scenariosim-mcp-pages https://scenariosim-mcp.pages.dev/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add scenariosim-mcp-pages --url https://scenariosim-mcp.pages.dev/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable scenariosim-mcp-pages in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "scenariosim-mcp-pages": {
      "url": "https://scenariosim-mcp.pages.dev/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "scenariosim-mcp-pages": {
      "type": "streamableHttp",
      "url": "https://scenariosim-mcp.pages.dev/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start scenariosim-mcp-pages and inspect its tools.
VS Code configuration
{
  "servers": {
    "scenariosim-mcp-pages": {
      "type": "http",
      "url": "https://scenariosim-mcp.pages.dev/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http scenariosim-mcp-pages https://scenariosim-mcp.pages.dev/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://scenariosim-mcp.pages.dev/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.