Skip to main content

rigor

Verified statistical inference for AI agents.

LLMs are decent at reciting statistics but bad at doing it reliably — a t-statistic or a required sample size is a number recalled from training data, not computed and checked. rigor is the alternative: classical hypothesis testing, effect sizes, power/sample-size calculation, and multiple-comparisons correction, computed from scratch and returned as a cited, assumption-checked answer.

Built as an MCP server: a scan of the current MCP ecosystem (Context7 for coding docs, several physics/engineering/chemistry/geo servers, even Bentley's STAAD integration) found statistics/experimental design as one of the few common agent needs nobody had covered yet.

The statistics themselves (rigor/distributions.py, inference.py, effect_size.py, power.py, corrections.py) are pure standard library, no dependencies. The package as a whole does depend on the official mcp SDK, since the MCP server is a first-class part of what it ships, not an add-on -- see Install.

Install

pip install rigor-mcp

(the PyPI distribution is rigor-mcp since plain rigor was already taken by an unrelated package; the importable package and the CLI command are both still just rigor.) This gets you both console commands, rigor (CLI) and rigor-mcp (MCP server) -- deliberately one install, no extras to get right, since uvx rigor-mcp (how most MCP clients would actually invoke this) has no way to request an extra.

What's in it

  • rigor/distributions.py — t, chi-squared, and F distributions built from scratch on stdlib (regularized incomplete gamma/beta), verified against exact closed-form identities (t(1) = Cauchy, chi2(2) = scaled exponential, t² = F(1, df)) rather than trusted transcription.
  • rigor/inference.py — one-/two-sample and paired t-tests, one-/two-proportion z-tests, chi-squared goodness-of-fit and independence, one-way ANOVA. Each returns a TestResult: statistic, degrees of freedom, two-tailed p-value, a confidence interval, a citation, and assumption warnings (e.g. small-n normality reliance, low expected cell counts).
  • rigor/effect_size.py — Cohen's d, Hedges' g, Cohen's h, Cramér's V.
  • rigor/power.py — power and required sample size for the two-sample t-test and two-proportion z-test. The two directions (given n, find power; given power, find n) are exact numerical inverses of each other by construction (bisection on the same underlying power function), and sanity-checked against the Cohen (1988) d=0.5/α=.05/power=.80 textbook reference case (n≈64).
  • rigor/corrections.py — Bonferroni and Benjamini-Hochberg (FDR) multiple-comparisons correction.
  • rigor/cli.py — a CLI over all of the above (rigor.py at the repo root is a thin shim so python3 rigor.py ... also works from a plain checkout, without installing anything).
  • rigor/mcp_server.py — an MCP tool wrapper exposing all 17 operations to any MCP client (Claude Code, Claude Desktop, etc.). Smoke-tested end-to-end over stdio against a real client — tool discovery plus representative calls checked against known reference values, including the full round-trip still landing the Cohen (1988) case at n=63.

Usage

CLI, once installed:

rigor ttest one-sample --data 5.1,4.9,5.3,5.0,4.8,5.2 --mu0 5.0
rigor power ttest-2samp --effect-size 0.5 --power 0.8
rigor --help   # full list of subcommands (ttest, ztest, chi2, anova, effect-size, power, correct)

or straight from a checkout without installing anything:

python3 rigor.py ttest one-sample --data 5.1,4.9,5.3,5.0,4.8,5.2 --mu0 5.0

MCP server, over stdio (the transport local clients like Claude Code expect):

pip install rigor-mcp
rigor-mcp

or from a checkout: pip install mcp && python3 -m rigor.mcp_server.

Register it with Claude Code:

claude mcp add rigor -- rigor-mcp

(or, from a checkout: claude mcp add rigor -- python3 -m rigor.mcp_server, run from this repo's root or with an absolute module path). For interactive poking with the MCP Inspector, run it as a script rather than the installed command — which means the package root has to be put on the path by hand, since the Inspector imports the file directly:

pip install "mcp[cli]"
PYTHONPATH=. mcp dev rigor/mcp_server.py

A transport-level edge case, handled

cohens_d correctly returns +inf/-inf for zero-variance samples (per its own documented contract), but non-finite floats serialize to JSON null over MCP's structured content — which used to fail the tool's own number-typed output schema and crash the call. The MCP cohens_d tool now returns {"value": float | null, "warnings": [...]} instead of a bare float, so that case is reported explicitly (null value, a warning naming the direction) rather than blowing up. Every other numeric tool here is bounded and always finite for valid input, so this treatment is specific to cohens_d.

Tests

python3 -m unittest discover -s tests -v

70 tests: 65 exercise the statistics directly; 5 spawn mcp_server.py as a real MCP client would and check results over the wire (skipped automatically if mcp isn't installed).

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rigor_mcp-0.1.1.tar.gz (28.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rigor_mcp-0.1.1-py3-none-any.whl (22.4 kB view details)

Uploaded Python 3

File details

Details for the file rigor_mcp-0.1.1.tar.gz.

File metadata

  • Download URL: rigor_mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 28.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for rigor_mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 f21c2714e90871e2f6504cd52aecb4de801d2c53766c4b0eb1718c7169963215
MD5 e6688fd2b598f63a98bfa63067a42cef
BLAKE2b-256 2264f6a9b181fe679639a7643aae155c2883251fc54d3d76e72fa60dd4d07e93

See more details on using hashes here.

Provenance

The following attestation bundles were made for rigor_mcp-0.1.1.tar.gz:

Publisher: publish.yml on mrnh/rigor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rigor_mcp-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: rigor_mcp-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 22.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for rigor_mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d3c804403d2ba6d607989112522540b2f8ebe38e7ed1b088c214f894111f064a
MD5 f8765984b1ced06fac0fb80fb6e43433
BLAKE2b-256 7e3243fd939680c29325ce06e750cbc68952d2ed5ba2a7cceccb587dc532f8a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for rigor_mcp-0.1.1-py3-none-any.whl:

Publisher: publish.yml on mrnh/rigor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page