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 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.
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-native clients connect to the Streamable HTTP transport at:
https://neumann.kromatic.com/mcpWith Claude Code, that is a single command:
claude mcp add neumann --transport http https://neumann.kromatic.com/mcpEvery 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.
Create an account with a single unauthenticated POST — no body, no browser, no human approval:
curl -X POST https://neumann.kromatic.com/api/v1/accountsThe 201 response carries account_id, api_key, credit_balance and created_at.
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.
| Tool | Description |
|---|---|
run_simulation | Run 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_graph | Check a graph for structural and simulation-readiness problems before spending anything. Free. |
estimate | Pre-flight a graph: its complexity, peak memory, run tier and credit cost, without running it. Free. |
solve_distribution_parameters | Turn a human estimate — “between X and Y, N% confident” — into engine-ready distribution_params. |
oat_sensitivity | One-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_analysis | Best, median and worst scenario summaries for a target node. |
get_results | Fetch the status and summary of a previously submitted run by run_id. |
buy_credits | Buy additional credits off-session with a saved payment method. See Credits and access — card payment is not enabled yet. |
feedback | Send 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.
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.
{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.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.

