Agentstack Mcp

io.github.inity13Published by GitHub account inity13v1.0.1Updated Oct 27, 2026

Deterministic reasoning stack for AI agents: simulate, decide & compute, plus cross-domain tools.

VerifiedStreamable HTTPWeb executableProductivity & WorkflowFinanceData & Analytics

Overview

AI-generated overview

Deterministic reasoning stack that lets an assistant run what-if simulations, rank options against weighted criteria, and compute exact finance and business…

What you can do
  • Run scenario simulations from templates or custom models, with sensitivity, break-even and side-by-side comparison
  • Rank named options against weighted criteria, score matrices, head-to-head comparisons and weight-robustness checks
  • Compute exact business and finance math: SaaS metrics, currency conversion, business days, compound growth, NPV, IRR, loan amortization and depreciation
  • Chain the three domains: value a projected cash-flow stream, rank options by simulated outcomes, stress-test a decision
  • Discover capabilities, templates, metrics and scoring methods, and check stack health
When to use it
Useful when an assistant needs reproducible, auditable numbers rather than free-form estimates: growth and pricing what-if planning, multi-criteria option selection, SaaS or finance metric calculations, and valuation or stress-testing of plans.
Requirements
Either the hosted endpoint (no install) or the npm package run locally over stdio with Node.js via npx. The free hosted tier needs no key but is limited to 20 calls per day per IP; paid plans return an API key sent in the X-API-Key header. The local stdio server can be subset with the AGENTSTACK_PROFILE environment variable.
Before you install
The hosted free tier is rate-limited per IP, and higher volume requires a paid subscription (Starter or Pro) with an X-API-Key. Scenario inputs and decision data are sent to the hosted service; use the local stdio server if that data should stay on your machine. Tools are read-only calculations and do not modify external data.

Installation

In SourceWeft

  1. Open Agentstack Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.inity13%2Fagentstack-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "agentstack": {
      "type": "http",
      "url": "https://agentstack-mcp.pages.dev/mcp"
    }
  }
}

README

AgentStack MCP

One deterministic reasoning stack for AI agents — behind a single Model Context Protocol (MCP) endpoint and one API key:

simulate (ScenarioSim) → decide (DecisionMatrix) → compute (PrecisionCalc)

plus cross-domain composite tools that chain the three. Every number runs through decimal.js at 40-digit precision (never floats), so identical inputs always produce byte-identical output. The server is stateless — no database, no sessions.

AgentStack bundles three standalone MCP servers so an agent installs one server, uses one key, and can run reasoning that spans all three domains. It imports the same engines directly (no HTTP proxying) — zero added latency, no cascading failure.

🌐 Live hosted server (free, no install)

https://agentstack-mcp.pages.dev/mcp
json
{ "mcpServers": { "agentstack": {    "type": "http", "url": "https://agentstack-mcp.pages.dev/mcp" } } }

Free tier: no key, 20 calls/day per IP. Paid plans (Starter $19/mo · 8,000/day, Pro $59/mo · 80,000/day) return an API key sent as X-API-Key. One key covers all three products and the composites — about half the cost of subscribing to them separately. Landing page: https://agentstack-mcp.pages.dev.


The three namespaces (24 tools)

namespaceenginetools
sim_*ScenarioSim — what-if / scenario simulationsim_run, sim_sensitivity, sim_break_even, sim_compare, sim_list_templates
decide_*DecisionMatrix — multi-criteria decision analysisdecide, decide_score, decide_sensitivity, decide_compare_two, decide_list_methods
calc_*PrecisionCalc — exact finance/business mathcalc_metric, calc_list_metrics, calc_currency_convert, calc_business_days, calc_compound_growth, calc_npv, calc_irr, calc_loan_amortization, calc_depreciation
meta—list_capabilities, health_check

Note on two deliberately-namespaced collisions: sim_sensitivity varies scenario inputs; decide_sensitivity varies criteria weights. They are different operations — the prefix disambiguates them for the agent.

Composite tools — the reason to use the stack

Deterministic end-to-end; each chains engines that no single server bundles:

ToolPipelineWhat it does
plan_to_valuationsimulate → computeProject a scenario, take a per-period cash-flow line (cashflow_metric), and value it: NPV at a discount rate, IRR, undiscounted total. initial_investment becomes the period-0 outflow (needed for IRR).
evaluate_options_with_scenariossimulate → decideProject each option as its own scenario, then rank the options against weighted criteria drawn from the scenario outcomes (key_results).
stress_test_decisionsimulate × decideStress one scenario assumption across every option and report how often the baseline winner survives (robustness) and where it flips.

Composite responses report the pipeline they ran and carry each stage's structured output, so an agent can drill into any step.

Profiles — fight tool-selection noise

Append ?profile= to the endpoint to load only a subset:

profiletools
all (default)every tool (24)
financecalc_* + plan_to_valuation + meta
decisiondecide_* + evaluate_options_with_scenarios + stress_test_decision + meta
simulationsim_* + all composites + meta
json
{ "mcpServers": { "agentstack": {    "url": "https://agentstack-mcp.pages.dev/mcp?profile=finance" } } }

Response envelope

Namespaced tools return the exact envelope of their underlying product. Composite tools add composite, pipeline, per-stage blocks, methodology, notes, and a plain-language explanation. Errors are always structured data:

json
{ "status": "error", "error": { "type": "unknown_metric", "message": "...", "hint": "..." } }

Example — plan_to_valuation (trimmed):

json
{  "status": "success",  "composite": "plan_to_valuation",  "pipeline": ["scenariosim.run_scenario", "precisioncalc.net_present_value", "precisioncalc.internal_rate_of_return"],  "scenario": { "template": "saas_growth", "horizon": 12, "key_results": { "ending_mrr": 26982.1 } },  "cashflow_metric": "mrr",  "cashflows": [-150000, 14040, 15600, "..."],  "valuation": { "discount_rate": 0.01, "npv": 11157.386023, "irr": 0.02504, "value_creating": true },  "explanation": "Projecting 'saas_growth' over 12 month(s) and valuing the 'mrr' stream at 1%/period gives an NPV of ..."}

Project structure

agentstack-mcp/├── worker-src/│   ├── index.mjs           # Cloudflare Pages Function: MCP transport, namespacing, profiles, billing│   ├── composites.mjs      # the 3 cross-domain tools (simulate -> decide -> compute)│   ├── billing.mjs         # Stripe + KV: one key / one quota for the whole stack│   └── engines/            # vendored, unmodified product engines (100% deterministic)│       ├── scenariosim.mjs│       ├── decisionmatrix.mjs│       └── precisioncalc.mjs├── server.mjs              # local stdio MCP server (same engines + composites; AGENTSTACK_PROFILE env)├── site/                   # landing page + mcp.json + llms.txt + _worker.js (built)├── tests/composites.test.mjs├── examples/agent_example.mjs├── scripts/sync-engines.sh # re-vendor engines from the sibling repos├── package.json · wrangler.toml · server.json · smithery.yaml · Dockerfile · LICENSE└── README.md

Why vendor the engines? So this repo is self-contained and reproducible. The engines are the same deterministic modules that power the three standalone servers; npm run sync-engines re-copies them from the sibling repos when an upstream change lands.


Run it locally

bash
git clone <your-fork> agentstack-mcp && cd agentstack-mcpnpm installnpm test                      # composite-logic tests (no network)npm run dev                   # -> http://127.0.0.1:8788/mcpnode examples/agent_example.mjs            # hosted demonode examples/agent_example.mjs http://127.0.0.1:8788node server.mjs               # dependency-light stdio server (AGENTSTACK_PROFILE=finance to subset)

Quick manual call:

bash
curl -s http://127.0.0.1:8788/mcp \  -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_capabilities","arguments":{}}}'

Install via npm (stdio, no hosting)

Run the server locally over stdio with a single command — nothing to deploy:

bash
npx -y agentstack-mcp

Claude Desktop / any stdio MCP client (claude_desktop_config.json):

json
{ "mcpServers": { "agentstack": { "command": "npx", "args": ["-y", "agentstack-mcp"] } } }

This is the same deterministic engine as the hosted server, running on your machine.

Client configuration

Cursor — ~/.cursor/mcp.json

json
{ "mcpServers": { "agentstack": { "url": "https://agentstack-mcp.pages.dev/mcp" } } }

Claude Desktop — claude_desktop_config.json (via mcp-remote)

json
{ "mcpServers": { "agentstack": { "command": "npx", "args": ["-y", "mcp-remote", "https://agentstack-mcp.pages.dev/mcp"] } } }

VS Code — .vscode/mcp.json

json
{ "servers": { "agentstack": { "type": "http", "url": "https://agentstack-mcp.pages.dev/mcp" } } }

Windsurf — ~/.codeium/windsurf/mcp_config.json

json
{ "mcpServers": { "agentstack": { "serverUrl": "https://agentstack-mcp.pages.dev/mcp" } } }

Add "headers": { "X-API-Key": "ssak_live_..." } once you have a key.


Example composite payloads

Rank growth strategies on their projected outcomes:

json
{ "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" }  ]} }

Value a plan's MRR stream:

json
{ "name": "plan_to_valuation", "arguments": {  "template": "saas_growth", "horizon": 12,  "inputs": { "new_customers_per_period": 60, "churn_rate": 0.05, "arpu": 60 },  "cashflow_metric": "mrr", "rate": 0.01, "initial_investment": 150000} }

Stress-test the decision:

json
{ "name": "stress_test_decision", "arguments": {  "template": "saas_growth", "horizon": 12,  "options": [ { "name": "Aggressive", "inputs": { "churn_rate": 0.05 } },               { "name": "Lean", "inputs": { "churn_rate": 0.02 } } ],  "criteria": [ { "metric": "ending_mrr", "weight": 3 } ],  "stress": { "variable": "churn_rate", "variation": 0.5, "steps": 5 }} }

Deploy on Cloudflare Pages

bash
npm installnpx wrangler loginnpm run deploy      # esbuild -> site/_worker.js, then wrangler pages deploy

Runs fully free / private with no bindings or secrets (fails open on the free tier). For billing: bind a KV namespace AGENTSTACK_KV, set PRICE_STARTER / PRICE_PRO in [vars], and add Stripe secrets:

bash
wrangler pages secret put STRIPE_SECRET_KEY    --project-name agentstack-mcpwrangler pages secret put STRIPE_WEBHOOK_SECRET --project-name agentstack-mcp

Routes: /mcp (Streamable HTTP), /checkout, /success, /portal, /webhook, /metrics.

Auth & rate limiting

Enforced in worker-src/billing.mjs: identify() reads X-API-Key / Authorization: Bearer and falls back to per-IP free tier; consumeQuota() is a KV daily counter (the single gating point). One key / one quota spans the whole stack. Marked NOTE (auth) / NOTE (rate limiting) seams show where to swap in JWT/mTLS or a token-bucket. None of it touches the deterministic math.

Relationship to the standalone servers

AgentStack is additive, not a replacement. The three products keep running on their own for single-domain use:

License

MIT — see LICENSE.

Source: README.md at commit 7f659dd

Tools

24

list_capabilities

Discovery: the three namespaces (sim_*, decide_*, calc_*), the cross-domain composite tools, the available ?profile= filters, and links to the standalone servers. Call this first to see everything AgentStack exposes. No parameters.

Takes no parameters.

health_check

Aggregated health/status for the whole stack (all three engines + composites). No parameters.

Takes no parameters.

sim_run

SIMULATE. Deterministic what-if projection from a 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 per-period projections, key_results, assumptions_used, methodology, and an explanation.

Parametersinputshorizonmetricstemplateperiod_label

sim_sensitivity

SIMULATE. Vary one or more scenario inputs and show the impact on a target output metric (one-at-a-time), with elasticity + most-influential ranking. Requires 'template' and 'variable' (or 'variables').

Parametersmaxminstepsinputsvalueshorizontemplaterequiredvariablevariablesvariationperiod_labeltarget_metric

sim_break_even

SIMULATE. Solve for the scenario input value required to make an output metric hit a target value (deterministic bisection). Requires 'template', 'solve_for', 'target_value'.

Parametersboundsinputshorizontemplaterequiredsolve_forrequiredperiod_labeltarget_valuerequiredtarget_metric

sim_compare

SIMULATE. Run 2-3 scenarios and compare their key_results side by side with deltas vs the first (baseline). Optional 'compare_metric' + 'goal' (max|min) picks a winner.

Parametersgoalhorizonscenariosrequiredcompare_metricinclude_projections

sim_list_templates

SIMULATE. List every scenario template (inputs, defaults, outputs) plus the custom-model format and period labels. No parameters.

Takes no parameters.

decide

DECIDE. Rank named options against weighted criteria and return the winner, full ranking, per-criterion breakdowns, methodology, weights, and an explanation. Provide options, criteria [{name, weight, direction}], and a scores matrix. method: weighted_sum (default) | weighted_product | topsis.

Parametersmethodscoresrequiredoptionsrequiredcriteriarequired

decide_score

DECIDE. Return the full normalized scored matrix (per-option, per-criterion) + ranking when scores are supplied separately, without the winner narrative.

Parametersmethodscoresrequiredoptionsrequiredcriteriarequired

decide_sensitivity

DECIDE. Test how robust the decision winner is to changes in CRITERIA WEIGHTS (distinct from sim_sensitivity, which varies scenario inputs). Sweeps each weight +/-variation and reports a robustness score + flip points.

Parametersstepsmethodscoresrequiredoptionsrequiredcriteriarequiredvariation

decide_compare_two

DECIDE. Head-to-head comparison of exactly two options with per-criterion win counts and margin. Pass option_a/option_b (or a 2-element options array), criteria, and scores.

Parametersmethodscoresrequiredoptionscriteriarequiredoption_aoption_b

decide_list_methods

DECIDE. List the scoring methods (weighted_sum, weighted_product, topsis) with normalization details and when to use each. No parameters.

Takes no parameters.

calc_metric

COMPUTE. Exact business/SaaS/finance metric: ltv, cac, ltv_cac_ratio, payback_period_months, contribution_margin, gross_margin, churn_rate, mrr_growth_rate, arr, break_even_units, nrr, grr, rule_of_40, magic_number. Rates/margins are decimals (0.05=5%). Call calc_list_metrics for schemas.

Parametersmetricrequiredparamsrequiredcurrency

calc_list_metrics

COMPUTE. List every supported metric with descriptions and required/optional params. No parameters.

Takes no parameters.

calc_currency_convert

COMPUTE. Convert between major currencies (USD, EUR, GBP, JPY, CAD, AUD, CHF, CNY, INR) with Decimal precision. Static offline table by default; live/historical ECB rates via date/live=true.

Parametersdateliveamountrequiredto_currencyrequiredfrom_currencyrequired

calc_business_days

COMPUTE. Business-day arithmetic honoring weekends + regional holidays. operation: add_business_days | count_business_days | next_business_day | previous_business_day. region: US | UK | EU | NONE.

Parametersdaysregionend_dateoperationrequiredstart_daterequiredcustom_holidays

calc_compound_growth

COMPUTE. Compound-interest/growth math. operation: future_value | present_value | cagr. rate is annual decimal; compounding: daily|weekly|monthly|quarterly|semiannually|annually|continuous.

Parametersrateyearscurrencyend_valueoperationrequiredbegin_valuecompoundingfuture_valuepresent_value

calc_npv

COMPUTE. Net Present Value (discounted cash flow). NPV = sum(CF_t/(1+rate)^t); cashflows[0] is period 0 (usually the negative outlay).

Parametersraterequiredcurrencycashflowsrequired

calc_irr

COMPUTE. Internal Rate of Return: per-period rate where NPV=0 (Newton + bisection). Requires a sign change in cashflows.

Parametersguesscashflowsrequired

calc_loan_amortization

COMPUTE. Level-payment loan: monthly payment, total interest, payoff, and (optional) full schedule.

Parameterscurrencyprincipalrequiredannual_raterequiredterm_monthsrequiredextra_paymentinclude_schedule

calc_depreciation

COMPUTE. Asset depreciation schedule. method: straight_line | declining_balance | sum_of_years_digits.

Parameterscostrequiredmethodrequiredcurrencysalvage_valuerequireduseful_life_yearsrequired

plan_to_valuation

COMPOSITE (simulate -> compute). Project a scenario, take a per-period cash-flow line from its projections ('cashflow_metric', e.g. 'mrr' or 'net_burn'), and value it exactly: NPV at a discount 'rate', IRR, and undiscounted total. Optional 'initial_investment' becomes the period-0 outflow (needed for IRR). Combines ScenarioSim + PrecisionCalc.

Parametersraterequiredinputshorizonmetricscurrencytemplaterequiredperiod_labelcashflow_metricrequiredinitial_investment

evaluate_options_with_scenarios

COMPOSITE (simulate -> decide). Project each option as its own scenario, then rank the options against weighted criteria drawn from the scenario OUTCOMES. Provide a base 'template', an 'options' array ([{name, inputs}]), and 'criteria' ([{metric, weight, direction}]) where each metric is a scenario key_result. Combines ScenarioSim + DecisionMatrix.

Parametersinputsmethodhorizonoptionsrequiredcriteriarequiredtemplateperiod_label

stress_test_decision

COMPOSITE (simulate x decide). Take an options-vs-scenarios decision and stress ONE scenario assumption across a range applied to every option; report how often the baseline winner survives (robustness) and where it flips. Same args as evaluate_options_with_scenarios plus 'stress': {variable, variation, steps}.

Parametersinputsmethodstressrequiredhorizonoptionsrequiredcriteriarequiredtemplateperiod_label

Version history

1
  1. v1.0.1LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts