Rigor MCP server
Verified statistical inference for AI agents: hypothesis tests, sequential testing, power.
1 stars
Reviews
Write oneNobody has reviewed Rigor yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Rigor tools (37, 1 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
benjamini_hochberg_correctionAdjust a batch of p-values for multiple comparisons, controlling the false discovery rate. Less conservative than Bonferroni; the standard choice when testing many hypotheses at once.
bonferroni_correctionAdjust a batch of p-values for multiple comparisons, controlling the family-wise error rate. Conservative; use when any false positive among the batch is costly.
chi_square_goodness_of_fitTest whether observed category counts match an expected distribution -- e.g. "are these six days-of-week signup counts evenly distributed, or skewed towards weekends?" Returns the chi-squared statistic, degrees of freedom (len-1), p-value, a citation, and a warning if any expected count is below 5 (the usual threshold below which this approximation gets unreliable).
chi_square_independenceTest whether the row and column variables of a contingency table are independent (e.g. "does group membership relate to outcome?"). Returns the chi-squared statistic, degrees of freedom, p-value, a citation, and a warning if any expected cell count is below 5 (consider cramers_v afterwards for effect size).
cohens_dStandardized mean difference between two samples (pooled SD). Use alongside two_sample_t_test, which tells you whether a difference is significant but not how large it is. Rough guidance: ~0.2 small, ~0.5 medium, ~0.8 large -- context-dependent. Returns {"value": float or null, "warnings": [...]}. value is null only when both samples have zero variance and unequal means, where the effect size is m
cohens_hEffect size for a difference between two proportions (Cohen, 1988), via the arcsine-square-root transform -- more appropriate than a raw percentage-point difference since it stabilizes variance across the full [0, 1] range. p1 and p2 are interchangeable (the sign of the result just indicates direction); use alongside two_proportion_z_test, which tells you whether a difference is significant but no
cramers_vEffect size for a chi-squared test of independence (Cramer, 1946), normalized to [0, 1] regardless of table shape so it's comparable across tables of different sizes, unlike the raw chi-squared statistic. Call after chi_square_independence, passing its statistic and the same table's n/rows/cols. Returns a float in [0, 1]; rough guidance for a 2x2 table: ~0.1 small, ~0.3 medium, ~0.5 large -- the t
eta_squaredEffect size for a one-way ANOVA: proportion of total variance explained by group membership. Use alongside one_way_anova, which tells you whether groups differ but not how much of the variance that accounts for. Rough guidance: ~0.01 small, ~0.06 medium, ~0.14 large. Biased upward for small samples -- prefer omega_squared when that matters. Returns a float in [0, 1].
fisher_exact_testTest whether the row and column variables of a 2x2 contingency table are independent -- exact (via the hypergeometric distribution over all tables with the same margins), unlike chi_square_independence's chi-squared approximation. Use this instead whenever chi_square_independence warns an expected cell count is below 5, or whenever the sample is small. 2x2 tables only. Returns the sample odds rati
kruskal_wallisThe non-parametric alternative to one_way_anova -- use when that test's own small-df warning makes a normal-theory result suspect. Tests whether all groups are drawn from the same distribution, by ranking the combined data rather than assuming normal populations. A significant result means at least one group differs, not which one -- same caveat as one_way_anova.
levene_testTest whether two or more groups have equal population variances (homogeneity of variance) -- use this to decide equal_var for two_sample_t_test, or to sanity-check one_way_anova's equal-variance assumption. Uses the Brown-Forsythe variant (deviations from each group's median), more robust to non-normal data than the original mean-based Levene's test. Returns the same shape as one_way_anova (it's c
mann_whitney_uThe non-parametric alternative to two_sample_t_test -- use when that test's own small-n warning makes a normal-theory result suspect, or the data is ordinal/skewed. Tests whether values from sample a are systematically larger or smaller than values from sample b, by ranking the combined data rather than assuming normal populations. statistic is U for sample a; pair with rank_biserial_correlation f
mcnemar_exact_testExact version of mcnemar_test: an exact binomial test (p=0.5) on the discordant pairs instead of the chi-squared approximation -- the small-sample-safe alternative mcnemar_test's own warning points to, the same relationship fisher_exact_test has to chi_square_independence. ``statistic`` is b-c (the raw discordant-pair imbalance); the p-value is two-tailed.
mcnemar_testTest whether two paired proportions are equal -- e.g. the same subjects' yes/no answers before and after an intervention, or two raters' calls on the same items. Use this instead of two_proportion_z_test whenever the "two groups" are actually the same subjects measured twice; two_proportion_z_test assumes independent groups and gets the standard error wrong for paired data. Yates continuity-correc
naive_peeking_inflationDemonstrates, by simulation, why sequential_two_sample_mean_test / sequential_two_proportion_test exist: the actual false-positive rate of checking an *ordinary* fixed-sample test (two_sample_t_test, two_proportion_z_test, ...) after every new observation and stopping the first time it clears alpha, versus the alpha actually intended. Call this to show a skeptical stakeholder concretely what "just
omega_squaredEffect size for a one-way ANOVA, less biased than eta_squared for small samples since it subtracts out the variance explained by chance alone. Use alongside one_way_anova. Can be slightly negative when the true effect is near zero -- that's expected, not an error.
one_proportion_z_testTest whether an observed proportion (successes out of n) differs from a hypothesized proportion p0 -- e.g. "is this coin fair (p0=0.5) given 55 heads in 100 flips?" Uses the normal approximation, which degrades for small n or p0 near 0 or 1; a warning is included when that assumption looks shaky. Returns the z-statistic, two-tailed p-value, a confidence interval for the true proportion, a citation
one_sample_t_testTest whether a sample's mean differs from a hypothesized value mu0. Returns the t-statistic, degrees of freedom, two-tailed p-value, a confidence interval for the mean, and any assumption warnings.
one_way_anovaTest whether three or more independent groups have different means -- e.g. comparing average order value across three marketing channels. A significant result means at least one group differs from the others, not which one -- follow up with pairwise two_sample_t_test calls (correcting for multiple comparisons via bonferroni_correction or benjamini_hochberg_correction) to find which. Returns the F-
paired_t_testTest whether the mean difference between paired observations (e.g. before/after measurements on the same subjects, or matched pairs) is zero. a[i] and b[i] must be the two measurements of the same pair -- use two_sample_t_test instead if the two samples are independent (different subjects in each group). Returns the t-statistic, degrees of freedom (n-1), two-tailed p-value, a confidence interval f
pairwise_group_comparisonswrite actionRun every pairwise comparison across 2+ groups and correct for multiple comparisons in one call, instead of orchestrating k*(k-1)/2 separate two_sample_t_test/mann_whitney_u calls plus a separate correction call by hand -- and forgetting the correction is one of the most common real mistakes this package exists to prevent. The natural follow-up after a significant one_way_anova/kruskal_wallis resu
pearson_correlationTest for a *linear* association between two paired variables -- e.g. "does hours studied predict test score?" statistic is r itself (in [-1, 1]), not a t-statistic. Returns r, df (n-2), a two-tailed p-value (H0: r=0), a confidence interval for r via the Fisher z-transform, a citation, and warnings. Use spearman_correlation instead if the relationship may be monotonic but not linear, or if outliers
power_for_one_sample_t_testStatistical power to detect a given Cohen's d with n observations, using a one-sample (or paired) t-test. Use for paired_t_test too -- it's a one-sample t-test on the differences, so the same power formula applies. Use sample_size_for_one_sample_t_test instead to solve for n given a target power. Returns a float in [alpha, 1].
power_for_two_proportion_testStatistical power to detect a difference between two proportions (e.g. two conversion rates) with n_per_group observations in each group, using a two-proportion z-test. p1 and p2 are interchangeable (only their difference matters) -- e.g. current vs. new conversion rate. Use sample_size_for_two_proportion_test instead to solve for n given a target power. Returns a float in [alpha, 1].
power_for_two_sample_t_testStatistical power to detect a given Cohen's d with n_per_group observations per group, using a two-sample t-test. Power is the probability of correctly detecting a real effect of this size at the given alpha; a design with low power means a non-significant result would be inconclusive rather than good evidence the effect doesn't exist. Use sample_size_for_two_sample_t_test instead to solve for n g
rank_biserial_correlationEffect size for a Mann-Whitney U test. Call after mann_whitney_u, passing its statistic and the two sample sizes. Positive means sample 1's values tend to exceed sample 2's; negative means the reverse; 0 is no tendency either way. Returns a float in [-1, 1]; rough guidance mirrors Cohen's d: ~0.1 small, ~0.3 medium, ~0.5 large.
recommend_testNot sure which rigor tool fits your question? Answer a few characteristics of the data and get back which tool to call, why, what to call instead if this test's assumptions look shaky, and what to run alongside it (an effect size, a power calculation, a natural follow-up). Every test in this package already documents this guidance in its own docstring for the sibling comparisons it knows about --
sample_size_for_one_sample_t_testHow many observations are needed to detect a given Cohen's d with a one-sample (or paired) t-test at the target power. Use for paired_t_test too -- a paired t-test is a one-sample t-test on the differences, so the same power formula applies. Returns a continuous value and a rounded-up integer to actually use.
sample_size_for_two_proportion_testHow many observations per group are needed to detect a difference between two proportions (e.g. conversion rates) at the target power. p1 and p2 are interchangeable -- only their difference matters.
sample_size_for_two_sample_t_testHow many observations per group are needed to detect a given Cohen's d with a two-sample t-test at the target power. Returns a continuous value and a rounded-up integer to actually use.
sequential_two_proportion_testAlways-valid test of whether two proportions (e.g. two conversion rates in a live A/B test) differ, safe to call again after every new observation in either group -- the sequential-monitoring counterpart to two_proportion_z_test. Use this instead whenever the result will be checked more than once before the experiment ends, which is the normal case for a live dashboard rather than a one-shot analy
sequential_two_sample_mean_testAlways-valid test of whether two groups' means differ, safe to call again after every new observation in either group -- unlike two_sample_t_test, which needs a sample size decided in advance and gives no such guarantee if checked repeatedly and stopped at the first significant look (that repeated-checking failure mode is exactly what inflates false positives; see naive_peeking_inflation for a dem
simple_linear_regressionFit y = intercept + slope * x by ordinary least squares -- single predictor only. Reports the slope (change in y per unit of x), the intercept, R^2 (proportion of y's variance explained by x), and a significance test + confidence interval for the slope (H0: slope=0). Use pearson_correlation instead if you only need the strength of a linear association, not its actual units/magnitude.
spearman_correlationTest for a *monotonic* association between two paired variables, via the Pearson correlation of their ranks -- doesn't assume linearity and is far less sensitive to outliers' exact magnitude than pearson_correlation. Same return shape as pearson_correlation (statistic is rho itself, in [-1, 1]).
two_proportion_z_testTest whether two independent proportions differ -- the standard test behind comparing conversion rates between two groups (e.g. an A/B test). Returns the z-statistic, two-tailed p-value, a confidence interval for the difference in proportions, a citation, and warnings.
two_sample_t_testTest whether two independent samples have different means. Defaults to Welch's t-test (does not assume equal variances); pass equal_var=true for the classic pooled-variance test.
wilcoxon_signed_rankThe non-parametric alternative to paired_t_test -- use when that test's own small-n warning makes a normal-theory result suspect. Tests whether the median of the paired differences is zero, by ranking the absolute differences rather than assuming they're normally distributed. Pairs with a zero difference are dropped (and counted in a warning), the standard procedure. statistic is T = min(W+, W-).
Public scan report
scanner v0.1.5 · 2026-09-19 · same rubric, same numbers if you re-run it
- Code scan15 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 2 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Install directly
claude mcp add rigor-mcp -- uvx rigor-mcp
Rigor: common questions
- Is Rigor MCP server safe?
- Yes, by our scan: it is graded A (92/100). Read the Rigor safety report
- How do I install Rigor?
- It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
- Does Rigor need an API key?
- Not as far as the registry entry and our scan can tell: no credentials are declared or required.
- Is Rigor maintained?
- The last commit was 4 days ago (2026-09-17). The latest release is v0.5.0.