The fourth in a suite of deterministic MCP servers for AI agents — and the one that ties the first three together.
Over the last stretch I shipped three focused, deterministic MCP servers:
- ScenarioSim — what-if / scenario simulation
- DecisionMatrix — multi-criteria decision analysis
- PrecisionCalc — exact finance / business math
They're great on their own, but agents kept needing all three in the same task — and installing three servers, juggling three keys, and hand-gluing their outputs is friction. So here's AgentStack MCP: one endpoint, one key, all three — plus composite tools that chain them.
simulate → decide → compute
{ "mcpServers": { "agentstack": {
"type": "http", "url": "https://agentstack-mcp.pages.dev/mcp" } } }
Free tier: no key, 20 calls/day. The tools are namespaced so an agent always knows which engine it's calling:
-
sim_*— ScenarioSim (run, sensitivity, break-even, compare, templates) -
decide_*— DecisionMatrix (decide, score, sensitivity, compare_two, methods) -
calc_*— PrecisionCalc (metrics, currency, NPV, IRR, loan, depreciation, …)
The part that's actually new: composite tools
These chain the engines to do reasoning no single server can, deterministically end-to-end:
evaluate_options_with_scenarios (simulate → decide) — project each option as its own scenario, then rank the outcomes against weighted criteria:
{ "name": "evaluate_options_with_scenarios", "arguments": {
"template": "saas_growth", "horizon": 12,
"options": [
{ "name": "Aggressive", "inputs": { "new_customers_per_period": 60, "churn_rate": 0.05 } },
{ "name": "Lean", "inputs": { "new_customers_per_period": 20, "churn_rate": 0.02 } }
],
"criteria": [
{ "metric": "ending_mrr", "weight": 3, "direction": "benefit" },
{ "metric": "total_churned_customers", "weight": 1, "direction": "cost" }
]
} }
plan_to_valuation (simulate → compute) — project a plan, then value its cash-flow line: NPV, IRR, undiscounted total.
stress_test_decision (simulate × decide) — stress one scenario assumption across every option and report how often the chosen option survives (robustness) and where it flips.
Fighting tool bloat with profiles
Bundling 24 tools risks drowning an agent's tool-selection. So the endpoint takes a ?profile= filter:
https://agentstack-mcp.pages.dev/mcp?profile=finance
-
finance→calc_*+plan_to_valuation -
decision→decide_*+ the two decision composites -
simulation→sim_*+ all composites -
all(default) → everything
Why it's built this way
- Deterministic: everything runs through decimal.js at 40-digit precision. Same inputs → byte-identical output, across all three engines and the composites.
- No proxying: AgentStack imports the same engines directly, so there's zero added latency and no cascading failure — not three network hops behind one URL.
- Additive, not a replacement: the three standalone servers keep running for single-domain use.
- One key, one quota: ~half the price of subscribing to the three separately.
- Stateless + MIT: self-host on Cloudflare Pages, Node, Deno, or Bun.
Links
- Live endpoint: https://agentstack-mcp.pages.dev/mcp
- Site + docs: https://agentstack-mcp.pages.dev
- GitHub (MIT): https://github.com/inity13/agentstack-mcp
-
MCP Registry:
io.github.inity13/agentstack-mcp
If your agents plan, choose, and do the numbers, give them one calculator that does all three — and never drifts. Feedback welcome.
Top comments (0)