ImprintPrivacyAPI & MCPTermsPricingFor fundsContactEN/

We use EU-hosted PostHog to understand product usage. No advertising or third-party marketing cookies. Essential login and session cookies work regardless of this choice. Privacy policy

SIMVC
For fundsAPI keys
Developers

SimVC from your own workflow.

A key-authenticated REST API and an MCP server for the two things SimVC does: a simulated cohort of investors reading a pitch deck, and a thesis-level pressure test for a fund. Long-running work is a job — create, poll, read — or give a callback URL and be told once.

A pressure test, not a forecast. SimVC surfaces the objections and questions a deck creates in a simulated cohort of investors; it never computes or implies a probability of funding, and nothing in a response is a score to rank deals by.

Full API referenceQuickstartFor fundsMCP serverTroubleshootingVersioning

Access

API access is switched on per environment and, while design partners are onboarded, per account. When it is on, your account mints keys in Settings → API keys. A key opens /api/v1 and nothing else: it is a separate credential from your session, shown once, revocable, optionally expiring. Scopes: standard (decks, runs, reports, investors, calibrations, intelligence) and interview(adds drills). Runs spend the account’s credits exactly as the app does, and today’s caps apply.

Quickstart

# 1. who am I
curl -s https://simvc.app/api/v1/me -H "Authorization: Bearer $SIMVC_API_KEY"

# 2. upload a deck (multipart PDF, or JSON {"text": …, "name": …})
curl -s https://simvc.app/api/v1/decks -H "Authorization: Bearer $SIMVC_API_KEY" \
  -F file=@deck.pdf -F name="Acme seed"

# 3. start the simulation once the deck is "ready"
curl -s https://simvc.app/api/v1/runs -H "Authorization: Bearer $SIMVC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"deck_id":"<deck id>","cohort_size":150,"frame":{"stage":"seed","sector":"fintech"},
       "callback_url":"https://example.com/hooks/simvc"}'

# 4. poll every 15 s (or wait for the callback), then read
curl -s https://simvc.app/api/v1/runs/<run id> -H "Authorization: Bearer $SIMVC_API_KEY"
curl -s https://simvc.app/api/v1/runs/<run id>/report -H "Authorization: Bearer $SIMVC_API_KEY"

A 150-cohort run takes minutes, a 300 longer. Two runs may be active per account. The full contract is at /api/v1/openapi.json, and it works as a ChatGPT Action, in Zapier, Make and n8n HTTP steps, and through OpenAPI-to-MCP bridges.

For funds: pressure-test a deal before IC

The fund-side engine is the pressure test: your thesis and evaluation criteria against the deck, with the strongest counter-thesis, the evidence gaps ranked by decision impact, the contradictions, the decision conditions and up to fifteen resolving questions. The status belongs to the thesis, never to the company, and there is no INVEST/HOLD/PASS. The intelligence pilot has its own switch and allowlist; the routes answer 404 until it is on for your account.

  1. POST /intelligence/cases with the deck (text or a file) plus fund_thesis, evaluation_criteria, optional analyst_notes and round_context. Uploaded files are deleted after extraction.
  2. POST /intelligence/cases/{id}/pressure-test. Read report.summary.current_status and decision_hinges_on first, then counter_thesis and evidence_gaps.
  3. POST /intelligence/cases/{id}/reviews with what was wrong, missing or useful, whether it changed the investigation, and the minutes saved. This is how the next test for your account gets better.

With the MCP server the same three steps are simvc_pressure_test and simvc_record_correction, from the assistant you already use. The reference has the bodies.

Callbacks

Give callback_url when you create a run and SimVC POSTs once when it completes or fails — a pointer, never the report. Public hosts only, checked at creation and again at send time; three attempts, then it stops and you can always poll. Verify the signature before trusting the body:

X-SimVC-Signature: sha256=<hex>
# hex = HMAC-SHA256( key = SHA-256(your API key) as hex, message = raw request body )

MCP server

simvc-mcp runs on your machine and speaks MCP over stdio to Claude Desktop, Claude Code, Cursor and any stdio-capable host. It is a client of the API with your key in its environment: tools for the deck check, upload, simulation, report, investors, drills, the pressure test and your corrections; resources for reports and cases; two prompts. Hosted connectors for claude.ai and ChatGPT need the remote transport, which is not offered yet.

{
  "mcpServers": {
    "simvc": {
      "command": "uvx",
      "args": ["simvc-mcp"],
      "env": { "SIMVC_API_KEY": "sp_live_…", "SIMVC_API_URL": "https://simvc.app/api/v1" }
    }
  }
}
  • Claude Desktop: put the block above into claude_desktop_config.json (macOS ~/Library/Application Support/Claude/, Windows %APPDATA%\Claude\), then restart the app.
  • Claude Code: one command.
    claude mcp add simvc -e SIMVC_API_KEY=sp_live_… -e SIMVC_API_URL=https://simvc.app/api/v1 -- uvx simvc-mcp
  • Cursor and other stdio hosts: the same block in .cursor/mcp.json (project) or the host’s MCP settings; the command is uvx, the argument simvc-mcp, the two variables in env.
  • Until the package is published: uvx simvc-mcp resolves only once simvc-mcp is on PyPI. With access to the repository, run it from there instead.
    # until simvc-mcp is on PyPI: run it from the repository (needs access to it)
    uvx --from "git+https://github.com/patrick-jaritz/SimVC#subdirectory=backend/simvc_mcp" simvc-mcp
  • Check it works: ask the assistant to call simvc_whoami. A 404 means the API switch is off in that environment; a 401 means the key.

Troubleshooting

StatusCodeWhat it means
404api_disabledAPI access is switched off in this environment. Nothing is wrong with your key.
401unauthorizedThe key is missing, mistyped, revoked or expired. Mint a new one in Settings → API keys.
403insufficient_scopeDrills need a key with the interview scope; mint one with that scope.
403not_allowedKey creation is not open for this account yet (the onboarding allowlist).
409deck_not_readyIngest is still running. Poll GET /decks/{id} until ingest_status is ready.
409too_many_active_runsTwo runs are already in progress on this account. Wait for one to finish.
402purchase_requiredThe full report, the cohort browser and drills are Full Read or Season surfaces; the free run returns the verdict and the top three reasons.
429rate_limitedPer-key limit for that route (the reference lists each). Back off for a minute.
429account_cap_reached: trueThis account has used today's processing capacity.
503daily_cap_reached: truePlatform capacity for today is used up. Try again tomorrow.
400invalid_callback_urlThe callback host is private, unresolvable, or not http(s). Public hosts only.

Versioning

v1 is in beta. Additive changes (new fields, new routes, new error codes) ship without notice and never break a client that ignores fields it does not know. A rename or a removal only happens under a new base path (/api/v2), with both served for at least 90 days. Error codes are stable once documented. API changes are recorded in the changelog under an API heading. The contract carries the same words in info.x-versioning.

What comes back, and what never does

  • Ranked pass reasons with how many simulated investors raised each, the honest line and the polite one, the diligence questions, slide feedback, and simulation_meta — read rounds_run and collapsed before concluding anything.
  • Per-investor profiles: archetypes with their own mandate and pass logic, never real people or firms. Named investors and firms are scrubbed at emission, as in the app.
  • For funds: thesis, counter-thesis, evidence gaps ranked by decision impact, contradictions, a disagreement map, decision conditions, up to fifteen resolving questions. The status belongs to the thesis, never to the company. No INVEST/HOLD/PASS.
  • Never a score, a ranking or a probability of funding. The schema has no such field, a test keeps it that way, and the MCP tool descriptions tell the model not to compute one.

Where your data goes

The application and database run in the EU (Railway, Amsterdam). Deck content is sent to the configured AI providers through a broker in the USA with zero-data-retention requested and provider data collection denied on every call. Uploaded files for the pressure test are deleted after extraction; decks, runs, reports and cases stay with your account until you delete them — every object the API creates has a DELETE. The processor list is on the privacy page. A fund processing a founder’s deck is the controller of that data; a data-processing agreement is part of the design-partner onboarding.

Interested as a fund? Request design-partner access.