Skip to content

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.

Tools: 1 delete, 1 irreversible, 6 write, 2 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
  • share_resultCreates (or fetches the existing) public share link for a PERSISTED run from the stored-graph flow, renderable as HTML/JSON/SVG.1 finding

    Why it is in this group

    • The description's first verb is "create": a word for a change.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "...the resulting share_url itself needs no credential to view. Example: {"run_id":"run_8f3c2a..."

      What this check looks for
    Description, as the server wrote it
    Creates (or fetches the existing) public share link for a PERSISTED run from the stored-graph flow, renderable as HTML/JSON/SVG. Use this when you want to hand a result to someone without giving them API access -- only for a run saved via the stored-graph flow: a run_simulation result is ephemeral and has no usable run_id. Requires authentication (api_key argument or an Authorization: Bearer token) to CREATE the link; the resulting share_url itself needs no credential to view. Example: {"run_id":"run_8f3c2a"}

    Annotations the server declares

    • title: Share a run result
    • 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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    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.

1 warn1 info
  • The server marks "solve_distribution_parameters" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The description mentions "credential".

    Matched text

    description: "...the resulting share_url itself needs no credential to view. Example: {"run_id":"run_8f3c2a..."

    What this check looks for

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/mcp
claude mcp add --transport http neumann https://neumann.kromatic.com/mcp

Run 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.

.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.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.github.Kromatic-Innovation/neumann
[![anlyon.dev](https://anlyon.dev/badge/io.github.Kromatic-Innovation/neumann.svg)](https://anlyon.dev/servers/io.github.Kromatic-Innovation/neumann)

Source: MCP Registry · repository. Synced Oct 28, 2026, 12:17 UTC.