Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
Deterministic what-if & scenario simulation for AI agents: projections, sensitivity & break-even.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
웹, 데스크톱, 모바일의 Claude에서 쓸 수 있어요:
https://scenariosim-mcp.pages.dev/mcpClaude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"scenariosim": {
"command": "npx",
"args": [
"-y",
"scenariosim-mcp"
]
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add --transport http scenariosim https://scenariosim-mcp.pages.dev/mcpclaude mcp add scenariosim -- npx -y scenariosim-mcp프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"scenariosim": {
"url": "https://scenariosim-mcp.pages.dev/mcp"
}
}
}프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"scenariosim": {
"command": "npx",
"args": [
"-y",
"scenariosim-mcp"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"scenariosim": {
"type": "http",
"url": "https://scenariosim-mcp.pages.dev/mcp"
}
}
}프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"scenariosim": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"scenariosim-mcp"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요:
https://scenariosim-mcp.pages.dev/mcp메뉴 이름은 요금제나 시기에 따라 조금 다를 수 있어요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
아직 이 서버의 도구 목록을 읽지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 8일 점검
레지스트리 이름이 GitHub 계정 inity13 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요
아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요
아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
둘 다 가능해요. 내 컴퓨터에 설치해도 되고, 클라우드 버전에 연결해도 돼요.
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.0.2)은 3개월 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Happo
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Review Happo's visual and accessibility diffs: inspect comparisons, accept or reject, report flakes.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
A transparent, 100% deterministic Model Context Protocol (MCP) server that gives LLM agents a reliable what-if / scenario simulation engine.
Agents are good at describing a plan but unreliable at *projecting* it: they drift on multi-period arithmetic, mishandle compounding, and can't show their work. ScenarioSim offloads the simulation to an exact, explainable engine. You provide assumptions (growth rates, churn, pricing, costs, starting metrics, a time horizon); it returns projected outcomes over time, key metrics, the exact assumptions used, plus sensitivity analysis and break-even solving — each with a plain-language explanation.
Every number flows 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, no clocks or randomness in the result.
This is the third product in a suite built to the same engineering standard as PrecisionCalc MCP (deterministic high-precision finance/business math) and DecisionMatrix MCP (transparent multi-criteria decision analysis): identical project structure, output philosophy, and Cloudflare Pages deployment.
A public remote MCP server runs on Cloudflare's edge — point any Streamable-HTTP MCP client at it:
https://scenariosim-mcp.pages.dev/mcp
{ "mcpServers": { "scenariosim": {
"type": "http", "url": "https://scenariosim-mcp.pages.dev/mcp" } } }
It runs in open mode on the free tier (no key, 20 calls/day per IP). Paid plans (Starter $12/mo · 5,000/day, Pro $39/mo · 50,000/day) are available via Stripe Checkout — buy a plan, get an API key instantly, and send it as X-API-Key. Self-host for unlimited calls with no keys. Landing page + pricing: https://scenariosim-mcp.pages.dev.
Six tools, all returning a uniform, agent-parseable envelope:
| Tool | Purpose |
|---|---|
run_scenario | Main tool. Project a pre-built template or a free-form model over time → per-period projections, headline key_results, the assumptions_used, methodology, notes, and a plain-language explanation. |
sensitivity_analysis | Vary one or more inputs (one-at-a-time) and report the impact on a target metric — with an elasticity estimate, the output range, and a ranking of the most influential inputs. |
break_even | Solve for the input value required to make a target metric hit a target value (deterministic bisection). |
compare_scenarios | Run 2–3 scenarios side-by-side with deltas vs a baseline and an optional winner. |
list_templates | Discovery: every template with its inputs (defaults + units) and available outputs. |
health_check | Version, status, and capabilities. |
| id | models | primary output |
|---|---|---|
saas_growth | subscribers + MRR/ARR from acquisition (with its own growth) and churn | ending_mrr |
pricing_change | revenue/profit impact of a price change via price elasticity | cumulative_profit_after |
churn_impact | retention erosion + revenue lost vs a no-churn baseline | cumulative_revenue_lost |
cost_reduction | profit + margin impact of cutting costs | cumulative_savings |
hiring_plan | headcount, fully-loaded payroll, revenue capacity | cumulative_payroll |
cash_runway | cash balance forward + months-to-zero runway | runway_periods |
unit_economics | LTV, LTV:CAC, CAC payback, per-customer margin curve | ltv_cac_ratio |
marketing_funnel | visitors → leads → customers → revenue | total_revenue |
compound_growth | generic single-metric compound/linear projection | ending_value |
custom | free-form: any number of independently-growing metrics | *(first metric)* |
Every template accepts horizon (number of periods, 1–1200) and period_label (day/week/month/quarter/year, which also sets annualization). Inputs you don't provide fall back to documented defaults; unknown inputs are ignored and reported in notes. Call list_templates for the full input/output catalog.
Every successful response contains: status, scenario, period_label, horizon, key_results (+ key_results_detail with units and full-precision value_exact), projections, assumptions_used, methodology, notes, and a natural-language explanation.
{
"status": "success", "scenario": "saas_growth", "period_label": "month", "horizon": 12, "key_results": { "ending_customers": 449.7, "ending_mrr": 26982.1, "ending_arr": 323785.2, "total_churned_customers": 82.4, "cumulative_revenue": 232104.6 }, "projections": [ { "period": 0, "customers": 200, "mrr": 12000, "new_customers": 0, "churned_customers": 0 }, { "period": 1, "customers": 234, "mrr": 14040, "new_customers": 40, "churned_customers": 6 } ], "assumptions_used": { "template": "saas_growth", "starting_customers": "200", "new_customers_per_period": "40", "acquisition_growth_rate": "0", "churn_rate": "0.03", "arpu": "60", "horizon": 12, "period_label": "month" }, "methodology": { "model": "SaaS Growth", "primary_output": "ending_mrr", "precision": "decimal.js (40 significant digits)", "deterministic": true, "period_convention": "Period 0 is the starting state; periods 1..12 are projected. 12 month(s) per year." }, "notes": ["Churn is applied to the prior period's base before new customers are added."], "explanation": "Starting from 200 customers and adding 40 per month (churn 3%), after 12 months you reach ..." }
Errors never cross the tool boundary as exceptions — they come back as a structured, actionable envelope:
{
"status": "error", "error": { "type": "unknown_template", "message": "Unknown scenario template 'saaas'.", "hint": "Available templates: saas_growth, pricing_change, churn_impact, cost_reduction, hiring_plan, cash_runway, unit_economics, marketing_funnel, compound_growth. Call list_templates for details ..." } }
Design note — exact numbers: headline numbers in
key_resultsare
deterministically rounded (6 dp) for easy consumption;
key_results_detail[].value_exact
and
assumptions_usedcarry full-precision strings so no precision is lost in JSON.
All internal math is exact 40-digit decimal.
scenariosim-mcp/
├── worker-src/ │ ├── index.mjs # Cloudflare Pages Function (_worker.js): MCP over Streamable HTTP + billing routes │ ├── engine.mjs # The deterministic simulation engine: 9 templates + 6 tools + solver + validation │ └── billing.mjs # Stripe Checkout + KV-backed API keys, quota metering, webhook ├── server.mjs # Local stdio MCP server (same engine, no network/state) ├── site/ │ ├── index.html # Static landing / pricing / docs page │ ├── mcp.json # Machine-readable connection manifest │ ├── llms.txt # LLM-friendly summary │ └── _worker.js # Built bundle (esbuild output; git-ignored) ├── tests/ │ └── engine.test.mjs # 29 core simulation-logic tests (node --test) ├── examples/ │ └── agent_example.mjs # End-to-end MCP client demo over HTTP ├── package.json # build / deploy / dev / test scripts ├── wrangler.toml # Cloudflare Pages config ├── .env.example # Optional auth/rate-limit env reference ├── LICENSE # MIT └── README.md
Separation of concerns: engine.mjs is pure and transport-agnostic (import it directly in tests or any Node/Deno/edge runtime); index.mjs only handles the MCP JSON-RPC wiring, HTTP, CORS, and the auth/metering seam; server.mjs re-uses the same engine over stdio.
decimal.js (math) and esbuild (bundler).git clone <your-fork> scenariosim-mcp && cd scenariosim-mcp
npm install
npm test
npm run dev # -> http://127.0.0.1:8788/mcp
node examples/agent_example.mjs node examples/agent_example.mjs http://127.0.0.1:8788
node server.mjs
Quick manual call:
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_templates","arguments":{}}}'
Run the server locally over stdio with a single command — nothing to deploy:
npx -y scenariosim-mcp
Claude Desktop / any stdio MCP client (claude_desktop_config.json):
{ "mcpServers": { "scenariosim": { "command": "npx", "args": ["-y", "scenariosim-mcp"] } } }
This is the same deterministic engine as the hosted server, running on your machine.
~/.cursor/mcp.json{ "mcpServers": { "scenariosim": {
"url": "https://scenariosim-mcp.pages.dev/mcp" } } }
claude_desktop_config.jsonClaude Desktop launches stdio servers, so bridge to the HTTP endpoint with mcp-remote:
{ "mcpServers": { "scenariosim": {
"command": "npx", "args": ["-y", "mcp-remote", "https://scenariosim-mcp.pages.dev/mcp"] } } }
.vscode/mcp.json{ "servers": { "scenariosim": {
"type": "http", "url": "https://scenariosim-mcp.pages.dev/mcp" } } }
~/.codeium/windsurf/mcp_config.json{ "mcpServers": { "scenariosim": {
"serverUrl": "https://scenariosim-mcp.pages.dev/mcp" } } }
Point it at https://scenariosim-mcp.pages.dev/mcp (or your self-hosted URL). If you enable auth, add X-API-Key (or Authorization: Bearer ) in the client's headers.
run_scenario(template?, inputs?, metrics?, horizon?, period_label?)saas, pricing, runway, ltv, funnel also resolve). Omit it (or pass "custom") to run a free-form model.{ "churn_rate": 0.03, "arpu": 60 }. Also accepted as assumptions, or spread at the top level. Missing keys use documented defaults.{ name, start, growth_rate?, mode? } where mode is "compound" (default, x·(1+r)ⁿ) or "linear" (x·(1+r·n)).day/week/month/quarter/year (default month).sensitivity_analysis(template, variable|variables, target_metric?, variation?, steps?, values?, min?, max?, inputs?, horizon?)Sweeps each listed input across a range (default ±variation=0.2 around the baseline, steps=5) while all others stay at baseline, recomputing target_metric (defaults to the template's primary output) at each point. Returns per-variable sweep rows, an elasticity_estimate, the output_range, and a most_influential ranking. You can also give explicit values: [...] or a min/max grid instead of variation.
break_even(template, solve_for, target_metric?, target_value, bounds?, inputs?, horizon?)Solves for the value of solve_for (an input name) that makes target_metric equal target_value, via deterministic bisection with automatic bracket expans
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요