io.github.Kromatic-Innovation/neumann
io.github.Kromatic-Innovation/neumannKromatic-Innovationstreamable-httpv0.1.3Scanned
Turns a guessed number into a sampled distribution — percentiles, NPV/IRR/payback, sensitivity.
10 tools: 1 can delete or cancel things, 1 do something that can't be undone, 6 change things and 2 only read.
- Reads private data · 0
- Reads text others write · 1
- Can send data out · 1
- 2 findings
Anlyon alternative
8 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
10 tools
Deletes or cancels 1Claude Code: deny
buy_creditsPurchases credits using a payment method already saved from a prior Stripe Checkout session.Reads text others writeNo findings
Why it is in this group
- The description's first verb is "purchase": a word that usually means money moves, which cannot be taken back.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Purchases credits using a payment method already saved from a prior Stripe Checkout session. Use this when an authenticated account is running low on credits and needs more to keep submitting runs or analyses, without a human re-entering card details. See GET /billing/pricing for the current per-credit price. Example: {"credits":100}
Annotations the server declares
- title: Buy credits
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
Can't be undone 1Claude Code: ask
feedbackSends feedback, a feature request, or a bug report straight to the Neumann team, CC'ing your sender_email so you keep a copy.Can send data outNo findings
Why it is in this group
- The description's first verb is "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe description's first verb is "send": it sends or publishes something to other people.
Description, as the server wrote it Sends feedback, a feature request, or a bug report straight to the Neumann team, CC'ing your sender_email so you keep a copy. Use this when something about the service is wrong, missing, or confusing and you want a human to see it directly rather than guessing at a workaround. Anonymous submissions are allowed. Example: {"feedback_type":"feature_request","message":"Add CSV export for run results.","sender_email":"agent@example.com"}
Annotations the server declares
- title: Send feedback to the Neumann team
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
Changes things 6Claude Code: ask
estimatePre-flight-sizes a graph without running it: estimated peak memory, engine complexity, which tier (small/large) it would run as, and the credit cost.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Pre-flight-sizes a graph without running it: estimated peak memory, engine complexity, which tier (small/large) it would run as, and the credit cost. Use this when you want to know what a run will cost or how heavy it is before committing to it, especially for a large or unfamiliar graph. Free; no credits debited. Example: {"graph":{"root_nodes":[{"id":"root","distribution_type":"normal","distribution_params":{"mean":100,"std":15}}],"calc_nodes":[{"id":"out","formula":"{e1}"}],"edges":[{"id":"e1","source":"root","target":"out"}],"run_params":{"trials":1000,"time_periods":12}}}
Annotations the server declares
- title: Pre-flight-size a simulation run
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
oat_sensitivityRuns a one-at-a-time tornado sensitivity analysis: sweeps each root node over a set of quantiles (others held at baseline) and measures how the target node responds, ranked by impa…No findings
Why it is in this group
- The description's first verb is "run": a word for a change.
Description, as the server wrote it Runs a one-at-a-time tornado sensitivity analysis: sweeps each root node over a set of quantiles (others held at baseline) and measures how the target node responds, ranked by impact. Use this when you need to know which uncertain input most drives an outcome, so you know what to de-risk or estimate more carefully first. Debits one credit for authenticated callers. Example: {"graph":{"root_nodes":[{"id":"root","distribution_type":"normal","distribution_params":{"mean":100,"std":15}}],"calc_nodes":[{"id":"out","formula":"{e1}"}],"edges":[{"id":"e1","source":"root","target":"out"}],"run_params":{"trials":1000,"time_periods":12}}}
Annotations the server declares
- title: Run a tornado sensitivity analysis
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
run_simulationRuns a Monte Carlo simulation over a graph of probabilistic root and calculated nodes, returning the full output distribution instead of one guessed number.No findings
Why it is in this group
- The name "run_simulation" says "run": a word for a change.
Description, as the server wrote it Runs a Monte Carlo simulation over a graph of probabilistic root and calculated nodes, returning the full output distribution instead of one guessed number. Use this when you need the range and likelihood of outcomes for a plan driven by uncertain inputs, not just its average case. Both tiers run to completion and return the full result in this same call, never a run_id to poll. Example: {"graph":{"root_nodes":[{"id":"root","distribution_type":"normal","distribution_params":{"mean":100,"std":15}}],"calc_nodes":[{"id":"out","formula":"{e1}"}],"edges":[{"id":"e1","source":"root","target":"out"}],"run_params":{"trials":1000,"time_periods":12}}}
Annotations the server declares
- title: Run a Monte Carlo simulation
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
scenario_analysisRuns a simulation once and summarises a target node's worst/median/best outcomes (any percentiles), each paired with a best-effort driving input per root node.No findings
Why it is in this group
- The description's first verb is "run": a word for a change.
Description, as the server wrote it Runs a simulation once and summarises a target node's worst/median/best outcomes (any percentiles), each paired with a best-effort driving input per root node. Use this when you need a quick worst-case/median/best-case narrative for a plan rather than the full distribution. Debits one credit for authenticated callers. Example: {"graph":{"root_nodes":[{"id":"root","distribution_type":"normal","distribution_params":{"mean":100,"std":15}}],"calc_nodes":[{"id":"out","formula":"{e1}"}],"edges":[{"id":"e1","source":"root","target":"out"}],"run_params":{"trials":1000,"time_periods":12}}}
Annotations the server declares
- title: Summarize best/median/worst scenarios
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
solve_distribution_parametersConverts a human-style estimate (a min/max range at a stated confidence, or a most-likely value) into the distribution_params a root node needs.1 finding
Why it is in this group
- The description's first verb is "convert": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "solve_distribution_parameters" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
Description, as the server wrote it Converts a human-style estimate (a min/max range at a stated confidence, or a most-likely value) into the distribution_params a root node needs. Use this when you have a rough verbal estimate like 'between 80 and 120, 90% confident' and need engine-ready parameters rather than guessing them yourself. Free; no credits debited. Example: {"distribution_type":"normal","min_estimate":80,"max_estimate":120,"percentile_range":0.9}
Annotations the server declares
- title: Convert an estimate into distribution parameters
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
Only reads 2Show 2 read-only tools
get_resultsFetches the status and, once available, the summarised result for a previously-submitted run by its run_id.No findings
Why it is in this group
- The name "get_results" says "get": a word for reading.
Description, as the server wrote it Fetches the status and, once available, the summarised result for a previously-submitted run by its run_id. Use this when you want to re-check or re-fetch a run you already submitted (e.g. via run_simulation) without resubmitting the graph -- run_simulation itself already blocks until done and returns the full result directly, so this is not a poll-until-ready step for it. Example: {"run_id":"run_8f3c2a"}
Annotations the server declares
- title: Fetch a run's results
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
validate_graphChecks a graph for structural problems (cycles, dangling edges, unknown distributions, missing refs) before you run it, returning a list of issues by rule and severity.No findings
Why it is in this group
- The name "validate_graph" says "validate": a word for reading.
Description, as the server wrote it Checks a graph for structural problems (cycles, dangling edges, unknown distributions, missing refs) before you run it, returning a list of issues by rule and severity. Use this when you built or edited a graph by hand and want to catch mistakes before spending a run on it. Free; no credits debited. Example: {"graph":{"root_nodes":[{"id":"root","distribution_type":"normal","distribution_params":{"mean":100,"std":15}}],"calc_nodes":[{"id":"out","formula":"{e1}"}],"edges":[{"id":"e1","source":"root","target":"out"}],"run_params":{"trials":1000,"time_periods":12}}}
Annotations the server declares
- title: Validate a simulation graph
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write1
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
The server marks "solve_distribution_parameters" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
- Infoshare_result
The description mentions "credential".
What this check looks forMatched text
description: "...the resulting share_url itself needs no credential to view. Example: {"run_id":"run_8f3c2a..."
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 0.1.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http neumann https://neumann.kromatic.com/mcpclaude mcp add --transport http neumann https://neumann.kromatic.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__neumann__validate_graph",
"mcp__neumann__get_results"
],
"ask": [
"mcp__neumann__run_simulation",
"mcp__neumann__oat_sensitivity",
"mcp__neumann__scenario_analysis",
"mcp__neumann__estimate",
"mcp__neumann__solve_distribution_parameters",
"mcp__neumann__feedback",
"mcp__neumann__share_result"
],
"deny": [
"mcp__neumann__buy_credits"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as neumann. Review it before you use it.
Capability tags behind 2 rules
- mcp__neumann__feedback outbound
- mcp__neumann__buy_credits untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/io.github.Kromatic-Innovation/neumann/verify?hash=10769d7c4c759192782555ddfe777039d4261f427d8c44ed174252edd7789104" | jq -e '.changed == false'Pinned hash 10769d7c4c75, from Oct 28, 2026, 12:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/io.github.Kromatic-Innovation/neumann/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/io.github.Kromatic-Innovation/neumann)Source: MCP Registry · repository. Synced Oct 28, 2026, 12:17 UTC.