ext-apps/examples/scenario-modeler-server
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Olivier Chafik a0dcf16843 CI: build the WSL job on ext4, skip the unused Chromium download, list tsconfig types
The Windows WSL job is the critical path of every CI run (589 to 752 s).
Its checkout sits on the Windows drive, which WSL reaches over 9P, and
writing node_modules there is what makes npm ci take about three minutes
where the Linux job takes 23 s. The step now copies the tree onto the
distro's ext4 filesystem before installing and building, as Microsoft's
WSL guidance recommends for I/O-heavy work.

The e2e job downloaded the full Chromium build (about 165 MB) on every
run, but a headless run with no channel launches chromium-headless-shell
and never opens it. `--only-shell` skips that download.

Every tsconfig now lists the @types packages it uses (node, bun,
vite/client, dom-speech-recognition) instead of relying on TypeScript
auto-including everything under node_modules/@types. On TypeScript 5.9
this is a no-op: identical diagnostics across all 48 projects and
byte-identical emitted .d.ts files. It is a prerequisite for TypeScript 7,
which drops the auto-inclusion; with these lists the Go compiler passes
all 48 projects, so that upgrade becomes a version bump once TypeDoc
supports it.

Two cache-based approaches were evaluated and rejected: an npm cache for
the WSL job (npm ci is slow there because of 9P, not downloads, and a
prefix-restored cache grows without bound) and a Playwright browser cache
(Playwright's docs advise against it; the download is under 10 s).
2026-09-08 18:38:58 +01:00
..
src feat: use structuredContent with outputSchema in example servers (#220) 2026-01-12 14:25:16 +00:00
.gitignore Improve consistency and organization of examples for AI learning 2026-01-13 20:48:02 -06:00
grid-cell.png feat: add example gallery with auto-generated screenshots (#253) 2026-01-13 15:12:18 +00:00
main.ts refactor: finish MCP SDK v2 migration 2026-07-14 17:07:30 -07:00
mcp-app.html Add color-scheme meta tag to all example apps 2025-12-15 11:42:18 -08:00
package.json Bump to 2.0.0 and widen SDK peer ranges to ^2.0.0 2026-09-08 13:58:22 +01:00
README.md Use apps.extensions.modelcontextprotocol.io domain for docs URLs 2026-02-24 11:38:54 -06:00
screenshot.png feat: add example gallery with auto-generated screenshots (#253) 2026-01-13 15:12:18 +00:00
server.ts refactor: finish MCP SDK v2 migration 2026-07-14 17:07:30 -07:00
tsconfig.json CI: build the WSL job on ext4, skip the unused Chromium download, list tsconfig types 2026-09-08 18:38:58 +01:00
tsconfig.server.json CI: build the WSL job on ext4, skip the unused Chromium download, list tsconfig types 2026-09-08 18:38:58 +01:00
vite.config.ts Add scenario-modeler-server example 2025-12-04 14:33:07 -06:00

Example: SaaS Scenario Modeler

A React-based demo MCP App that lets users adjust SaaS business parameters and see real-time 12-month projections of revenue, costs, and profitability with comparison against pre-built scenario templates.

Compare to Bootstrapped growth VC rocketship

MCP Client Configuration

Add to your MCP client configuration (stdio transport):

{
  "mcpServers": {
    "scenario-modeler": {
      "command": "npx",
      "args": [
        "-y",
        "--silent",
        "--registry=https://registry.npmjs.org/",
        "@modelcontextprotocol/server-scenario-modeler",
        "--stdio"
      ]
    }
  }
}

Local Development

To test local modifications, use this configuration (replace ~/code/ext-apps with your clone path):

{
  "mcpServers": {
    "scenario-modeler": {
      "command": "bash",
      "args": [
        "-c",
        "cd ~/code/ext-apps/examples/scenario-modeler-server && npm run build >&2 && node dist/index.js --stdio"
      ]
    }
  }
}

Features

  • Interactive Parameters: 5 sliders for Starting MRR, Growth Rate, Churn Rate, Gross Margin, and Fixed Costs
  • 12-Month Projections: Line chart showing MRR, Gross Profit, and Net Profit over time
  • Scenario Templates: 5 pre-built business strategies (Bootstrapped, VC Rocketship, Cash Cow, Turnaround, Efficient Growth)
  • Template Comparison: Overlay dashed lines to compare your scenario against any template
  • Summary Metrics: Key metrics including Ending MRR, Total Revenue, Total Profit, and break-even month
  • Theme Support: Adapts to light/dark mode preferences

Running

  1. Install dependencies:

    npm install
    
  2. Build and start the server:

    npm run start:http  # for Streamable HTTP transport
    # OR
    npm run start:stdio  # for stdio transport
    
  3. View using the basic-host example or another MCP Apps-compatible host.

Architecture

Server (server.ts)

Exposes a single get-scenario-data tool that returns:

  • 5 pre-built scenario templates with parameters, projections, and summaries
  • Default input values for the sliders
  • Optionally computes custom projections when customInputs are provided

The tool is linked to a UI resource via _meta.ui.resourceUri.

App (src/)

  • Built with React for reactive slider updates and derived state management
  • Uses Chart.js for the line chart visualization
  • All projection calculations run client-side for instant slider feedback
  • Components: SliderRow, MetricCard, ProjectionChart
  • Template comparison shown as dashed overlay lines on the chart