We are currently in Staging

Neumann MCP Server

Neumann is Kromatic’s Monte Carlo simulation MCP server. Describe a model as a graph — probabilistic inputs, formulas that combine them — and Neumann runs it over thousands of trials and returns the resulting distribution, not a single number.

Getting started is one HTTP call: POST /api/v1/accounts returns an API key. Then point an MCP client at the Streamable HTTP transport at https://neumann.kromatic.com/mcp.

Neumann is newly launched, and it sleeps when idle. Production carries no application traffic yet, so its machines are allowed to stop when nothing is running and start again on the next request. Your first call may take noticeably longer than later ones while a machine boots — give the first request a generous client timeout and retry rather than treating a slow cold start as an outage. Once warm, calls are served immediately.
Related pages:
  • The Kromatic MCP estate — every public Kromatic MCP server
  • Fermi — the companion estimation server, good for producing the input ranges you feed Neumann, with its own separate authentication

Neumann serves its own machine-readable discovery documents — server.json, /.well-known/mcp.json, llms.txt and agents.md — from https://neumann.kromatic.com, built for whichever host you fetch them from. They are the canonical source for machine clients; this page is the human-readable version.

What Neumann is for

Use Neumann when a plan depends on several uncertain quantities at once and you want to know the shape of the outcome rather than a single best guess: revenue under uncertain demand and price, runway under uncertain burn, delivery dates under uncertain task durations. You supply root nodes (each an input drawn from a distribution), calc nodes (formulas over the values flowing into them), and edges naming those flows; Neumann samples the roots thousands of times and reports percentiles and summary statistics for every node.

Fermi and Neumann compose: ask Fermi for a calibrated range for each uncertain input, then hand those ranges to Neumann as root nodes to see what they imply together.

MCP endpoint

MCP-native clients connect to the Streamable HTTP transport at:

https://neumann.kromatic.com/mcp

With Claude Code, that is a single command:

claude mcp add neumann --transport http https://neumann.kromatic.com/mcp

Every tool also has a plain HTTP twin for clients that do not speak MCP: GET https://neumann.kromatic.com/mcp/tools lists them and POST https://neumann.kromatic.com/mcp/tools/<name> calls one. Simulations can additionally be submitted to POST https://neumann.kromatic.com/api/v1/runs, which supports streaming progress for long runs.

Authentication — API key or opaque bearer token

Create an account with a single unauthenticated POST — no body, no browser, no human approval:

curl -X POST https://neumann.kromatic.com/api/v1/accounts

The 201 response carries account_id, api_key, credit_balance and created_at.

Which credential goes where, in one line: a raw signup api_key goes in the X-API-Key header or the api_key tool argument; an opaque nmn_oat_ or nmn_pat_ token goes in Authorization: Bearer. Never the reverse — a raw API key sent as a bearer token is rejected.

Opaque tokens are minted by POST https://neumann.kromatic.com/api/v1/tokens and shown in plaintext exactly once; Neumann stores only a hash. Use one when your MCP client can set an Authorization header but cannot pass a per-call argument.

Available tools

ToolDescription
run_simulationRun a Monte Carlo simulation on a supplied graph. Small runs return the summarised result inline; large runs return a run_id to stream or poll.
validate_graphCheck a graph for structural and simulation-readiness problems before spending anything. Free.
estimatePre-flight a graph: its complexity, peak memory, run tier and credit cost, without running it. Free.
solve_distribution_parametersTurn a human estimate — “between X and Y, N% confident” — into engine-ready distribution_params.
oat_sensitivityOne-at-a-time sensitivity analysis: sweep each root over quantiles, measure how a target node responds, and return the drivers ranked as a tornado.
scenario_analysisBest, median and worst scenario summaries for a target node.
get_resultsFetch the status and summary of a previously submitted run by run_id.
buy_creditsBuy additional credits off-session with a saved payment method. See Credits and access — card payment is not enabled yet.
feedbackSend feedback, a feature request or a bug report to the Neumann team.

validate_graph and estimate are free, so the cheap way to work is to validate, estimate the cost, and only then run.

The live tool descriptors, including the full argument schemas, are served by Neumann itself at https://neumann.kromatic.com/mcp/tools. Treat that endpoint as authoritative if it ever disagrees with this table.

Worked example

Monthly revenue from an uncertain number of units sold at an uncertain price, over 5,000 trials. This uses the plain HTTP twin of run_simulation, which is the easiest way to see the request and response shape:

curl -X POST https://neumann.kromatic.com/mcp/tools/run_simulation \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <your api_key>" \
  -d '{
  "graph": {
    "contract_version": "1.0",
    "root_nodes": [
      {
        "id": "units_sold",
        "name": "Units sold per month",
        "distribution_type": "normal",
        "distribution_params": {
          "mean": 1000,
          "std": 150
        }
      },
      {
        "id": "price_per_unit",
        "name": "Price per unit (USD)",
        "distribution_type": "triangle",
        "distribution_params": {
          "min_val": 18,
          "mode_val": 25,
          "max_val": 40
        }
      }
    ],
    "calc_nodes": [
      {
        "id": "revenue",
        "name": "Monthly revenue (USD)",
        "formula": "{e_units} * {e_price}"
      }
    ],
    "edges": [
      {
        "id": "e_units",
        "source": "units_sold",
        "target": "revenue"
      },
      {
        "id": "e_price",
        "source": "price_per_unit",
        "target": "revenue"
      }
    ],
    "run_params": {
      "trials": 5000,
      "time_periods": 1
    }
  },
  "seed": 42
}'

A run this small comes back inline, with a run_id, a completed status, the run tier and the credits debited, plus per-node results: percentiles (p10, p50, p90) and basic_stats (mean, std, min, max) for each node and time period. Passing a seed makes the run reproducible.

The one gotcha worth knowing: {time_period} is 1-based inside formulas — the first period is 1 — while post-simulation aggregations such as npv, irr and payback index periods from 0. A mask written {time_period} == 0 inside a formula silently never fires.

Credits and access

Neumann is a paid, per-credit product. A new account starts with a grant of free credits so you can try it immediately, and each run spends credits according to its tier — a large run costs more than a small one, and estimate will tell you which tier a graph falls into before you run it. A Kromatic membership does not include Neumann access or a discount; the two are priced separately.

Buying additional credits is not enabled yet. Card payment is still being switched on, so the buy_credits tool and the checkout endpoints currently return a “billing unavailable” error. If you run out of starter credits, or you know up front that you need more, reach us through the contact form and we will sort it out directly.

The price per credit is published by the service itself at https://neumann.kromatic.com/billing/pricing, so it is always the live number rather than a figure copied onto this page.

Questions? Reach out via our contact form.

Contact our experts

Kromatic has 56 partners in 16 countries waiting to talk with you.
poster
* Required Fields
Already have an account?
*
*
*
*
*
*
Powered bylogo
Copyright © 2026 Kromatic
We are currently in Staging