Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 1.4.0 instead.
Reason given by maintainers: Broken release; use 1.2.1 instead.

Crosstabs MCP Server

Python 3.10+ License: MIT MCP

The unpublished source candidate provides two local MCP servers: 39 statistical tools for focused contingency-table analysis and 29 headless research workflow tools that take an agent from project creation and dataset import through approved survey designs, tab books, tracker repair, editable reports, and portable export. Individual statistical tools report whether their inference is exact, asymptotic, or simulated.

Both commands are local stdio servers. The package contains no HTTP/SSE transport or cloud-deployment configuration; network transport arguments fail closed. Use the separate five-tool public MCP at crosstabs.com only for bounded aggregate matrices and public evidence.

crosstabs is an aggregate calculator. Its ordinary inferential tools require caller-attested inputSemantics="integer_frequency_counts" and non-negative integer frequency cells; they do not accept respondent, calibration, raking, or complex-survey weights. Use crosstabs-headless for a completed supported saved survey design and its disclosed design-aware inference.

Inferential aggregate calls also require weighted=false. The two descriptive aggregate visual tools, stacked_bar_data and correspondence_analysis, require inputSemantics="descriptive_aggregate_values"; their fractional values are not survey-weighted inference. mosaic_plot_data remains an inferential residual diagnostic and therefore requires integer frequency counts. Missing or unsupported semantics, fractional cells, non-finite values, negative values, and unsafe integers are rejected before any statistics are returned. proportion_ci separately requires countSemantics="integer_binomial_counts" and safe integer binomial counts for successes and total.

Features

Core Statistical Tests

Test Description
Chi-square Pearson's chi-square test of independence
G-test Likelihood-ratio alternative with an asymptotic p-value
Fisher's exact Two-sided fixed-margin exact p-value for 2×2 integer counts
McNemar's Exact two-sided binomial inference for fewer than 20 discordant pairs; continuity-corrected chi-square otherwise

Effect Sizes & Measures

Measure Use Case
Cramér's V Effect size for any table size (with bias correction)
Phi coefficient Effect size for 2×2 tables
Odds ratio Association strength with a large-sample Woolf log interval
Relative risk Risk comparison between groups
Risk difference Absolute risk reduction
Attributable risk Population-level impact

Ordinal Measures

Measure Description
Spearman's rho Rank correlation
Kendall's tau Concordance measure
Goodman-Kruskal gamma Ordinal association
Somers' D Asymmetric ordinal measure
Stuart's tau-c Rectangular table measure

Agreement & Reliability

Measure Description
Cohen's kappa Inter-rater agreement with an asymptotic normal interval
Weighted kappa Linear/quadratic agreement with an asymptotic normal interval

Advanced Analysis

Tool Description
CMH test Stratified analysis with a Robins-Breslow-Greenland pooled-OR interval
Breslow-Day Test homogeneity of odds ratios
Correspondence analysis Dimensionality reduction for tables
Monte Carlo chi-square Fixed-margin simulated p-value estimate
Power analysis Equal-group, two-sided normal approximation using Cohen's h
Multiple comparisons Bonferroni and FDR corrections

Installation

From PyPI (recommended)

pip install crosstabs

Inspect the public source distribution

python -m pip download --no-deps --no-binary=:all: crosstabs

The development repository is currently private. PyPI publishes the package's source archive; email support@crosstabs.com for issue reports or source-access questions.

Quick Start

Run the MCP Server

# Focused statistical calculators (Python 3.10+)
crosstabs

# End-to-end research workspace (Python 3.10+ and Node.js 22+)
crosstabs-headless

Or directly:

python -m crosstabs_mcp.server

Configure an MCP client

Add to your ~/.claude/claude_desktop_config.json:

{
  "mcpServers": {
    "crosstabs_workspace": {
      "command": "crosstabs-headless"
    },
    "crosstabs_statistics": {
      "command": "crosstabs"
    }
  }
}

The headless server stores project state and generated artifacts under the local application-data directory. Deterministic calculations stay on the machine. It makes no hosted-AI, account, or remote-project call. Manual open-end coding remains a browser-workspace feature rather than a local MCP operation.

Headless workflow tools

create_project, import_dataset, profile_dataset, define_row_set, define_banner, apply_filter, set_weight, define_survey_design, run_table, run_tab_book, compare_waves, undo_change, replace_dataset, detect_schema_drift, repair_schema, generate_report_pack, refresh_report_pack, export_project, list_projects, inspect_project, get_audit_history, import_project, render_project_table, update_variable_metadata, propose_transformation, review_transformation, apply_transformation, undo_transformation, and run_complex_survey_method.

Project-package import is an explicit allowed-path, checksummed full-data copy. It never overwrites a project. Rendering uses a saved table/revision/evidence ID, not an ordinary re-analysis of caller-supplied cells. Inference-changing edits retain approval, revision and replay guards. The local JSON store enforces 8 MiB per serialized project (including undo/audit) and 32 MiB per database (including replay records); parser maxima are not persistence guarantees.

Mutations use expected revisions and idempotency keys. Results include structured warnings, evidence IDs, audit records, and MCP resources for generated files. For a detected multi-select row dimension, define_row_set may additionally set multipleResponseDenominator to cases or responses; ordinary and compound row sets reject that option rather than silently applying it.

Monte Carlo workload envelope

Fixed-margin Monte Carlo accepts at most 100 rows, 100 columns, and 1,000 cells, with a total frequency of 9,007,199,254,740,991. It admits 100,000 simulations and 20,000,000 cell-simulations. It samples chunks of at most 512 simulations under a 32 MiB estimated numeric peak and a 30-second server deadline. The returned workload object records the admitted dimensions, cell-simulation product, chunk size, memory estimate, memory ceiling, and deadline. The memory estimate covers the numeric simulation path, not the MCP transport's parsed JSON body. A supplied seed is reproducible for the same table, simulation count, and package versions. MCP cancellation is observed between chunks; an individual SciPy draw cannot be interrupted mid-chunk.

Usage Examples

Once configured, Claude can perform statistical analysis:

Chi-square Test

User: Test if there's an association between treatment and outcome:
      Treatment A: 50 success, 30 failure
      Treatment B: 20 success, 40 failure

Claude: [Uses chi_square_test with matrix [[50,30],[20,40]]]
        χ² = 11.67, p = 0.0006
        Cramér's V = 0.29 (small-medium effect)
        There is a significant association between treatment and outcome.

Odds Ratio

User: Compare an adverse outcome between exposure groups:
      Exposed: 30 outcome-present, 70 outcome-absent
      Unexposed: 15 outcome-present, 85 outcome-absent

Claude: [Uses odds_ratio with matrix [[30,70],[15,85]]]
        OR = 2.43 (95% CI: 1.21-4.87)
        Exposure is associated with 143% higher odds of the outcome.

The epidemiology tools (odds_ratio, relative_risk, risk_difference, and attributable_risk) use one explicit orientation: [[exposed outcome+, exposed outcome-], [unexposed outcome+, unexposed outcome-]]. They return machine-readable zero/infinite/undefined states rather than silently continuity-correcting point estimates. Attributable/prevented fractions require causal identification assumptions; an association alone does not establish the counterfactual effect of removing an exposure.

Fisher's Exact Test

User: I have a small sample: [[3,1],[1,5]]. Is it significant?

Claude: [Uses fishers_exact with the matrix]
        p = 0.190476 (two-tailed exact)
        Not statistically significant at α=0.05.

Available Tools

Tool Name Description
chi_square_test Chi-square test of independence
g_test G-test (likelihood ratio)
fishers_exact Fisher's exact test (2×2)
mcnemar_test McNemar's test for paired data
odds_ratio Odds ratio with CI
relative_risk Relative risk with CI
risk_difference Risk difference with CI
cramers_v Cramér's V effect size
phi_coefficient Phi for 2×2 tables
cohens_kappa Cohen's kappa
weighted_kappa Weighted kappa
spearmans_rho Spearman's rank correlation
kendalls_tau Kendall's tau-b
goodman_kruskal_gamma Gamma coefficient
somers_d Somers' D
tau_c Stuart's tau-c
cmh_test Cochran-Mantel-Haenszel
breslow_day_test Breslow-Day test
linear_trend_test Linear-by-linear association
correspondence_analysis Correspondence analysis
monte_carlo_chi_square Fixed-margin Monte Carlo p-value estimate
power_analysis Two-sided normal-approximation power/sample size using Cohen's h
bonferroni_correction Bonferroni p-value adjustment
fdr_correction Benjamini-Hochberg FDR
standardized_residuals Cell residuals
post_hoc_chi_square Post-hoc chi-square decomposition
proportion_ci Confidence interval for proportion
check_assumptions Validate chi-square assumptions
recommend_test Method suggestions with assumption caveats
mosaic_plot_data Data for mosaic visualization
stacked_bar_data Data for stacked bar chart
attributable_risk Attributable risk measures
chi_square_yates Yates' continuity correction
effect_size Multiple contingency-table effect sizes
lambda_coefficient Goodman–Kruskal lambda
uncertainty_coefficient Theil's uncertainty coefficient
detect_outliers Outlier detection
crosstab_from_data Build table from raw data
crosstab_from_csv Build table from CSV

Development

Run Tests

pip install -e ".[dev]"
pytest tests/ -v

Project Structure

mcp-server-python/
├── crosstabs_mcp/
│   ├── __init__.py
│   ├── headless_launcher.py # Node version check and bundled-server launcher
│   ├── headless-mcp.mjs     # Local-first 29-tool workflow MCP server
│   ├── server.py          # Main MCP server
│   └── advanced_stats.py  # Compatibility statistical kernels and contracts
├── tests/
│   ├── test_statistics.py       # Statistical behavior tests
│   └── test_reference_parity.py # Public SciPy reference parity
├── scripts/                    # Distribution verification
├── LICENSE
├── pyproject.toml
├── uv.lock
└── README.md

Requirements

  • Python 3.10+
  • mcp >= 1.0.0
  • fastmcp >= 0.1.0
  • numpy >= 1.24.0
  • scipy >= 1.10.0
  • pandas >= 2.0.0
  • statsmodels >= 0.14.0

License

MIT License - see LICENSE for details.

Contributing

The development repository is currently private. Send corrections and proposed changes to support@crosstabs.com.

Links

Download files

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

Source Distribution

crosstabs-1.2.0.tar.gz (853.4 kB view details)

Uploaded Source

Built Distribution

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

crosstabs-1.2.0-py3-none-any.whl (641.7 kB view details)

Uploaded Python 3

File details

Details for the file crosstabs-1.2.0.tar.gz.

File metadata

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

File hashes

Hashes for crosstabs-1.2.0.tar.gz
Algorithm Hash digest
SHA256 c183c6eb4229c3e427eae3e4cf0bb3b2904c2e711a98101e3ff2749e6a9f0332
MD5 e1115724ca63fae8664d2f7e614be3d0
BLAKE2b-256 f1cc21fdbc8f02f1ff2c63b1435522287656054795c16e9f7528bea1fe1dffa2

See more details on using hashes here.

Provenance

The following attestation bundles were made for crosstabs-1.2.0.tar.gz:

Publisher: release-python-mcp.yml on crosstabs/crosstabs-lite

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

File details

Details for the file crosstabs-1.2.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for crosstabs-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b19dcfb69499ab4a7f6599211171b70cc96803abb163be2c37704c7938549c78
MD5 3dfdb9b8a7d59d03b6a8356833ecea73
BLAKE2b-256 e26328deed68c508598da4228d0d77496ac607f9416d62a74d80f1d4eeaa87fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for crosstabs-1.2.0-py3-none-any.whl:

Publisher: release-python-mcp.yml on crosstabs/crosstabs-lite

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

Release history Release notifications | RSS feed

1.4.0

2 files

1.3.0

2 files

1.2.2

2 files

1.2.1

2 files

This release

1.2.0 This release

2 files

1.1.6

2 files

1.1.5

2 files

1.1.4

2 files

1.1.3

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page