Skip to main content

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.1.tar.gz (853.9 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.1-py3-none-any.whl (641.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: crosstabs-1.2.1.tar.gz
  • Upload date:
  • Size: 853.9 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.1.tar.gz
Algorithm Hash digest
SHA256 25c790ab0b639565d4bc4a3a2e186f2b9b0e29da1703d3bdc2545c039ecdaebe
MD5 b27792c8054cc45b7bc20bccb45b4416
BLAKE2b-256 a1271c95e72758497af29dbfc9e18699ec82970f1877dc92492cb4797dddd59a

See more details on using hashes here.

Provenance

The following attestation bundles were made for crosstabs-1.2.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: crosstabs-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 641.8 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f01b04d5a555822727682fb5de3ef81a76a15647fa1b6a40092acd7e2d690d5f
MD5 16808c075e10812ba1e0105c9b6b5b6f
BLAKE2b-256 c16fe70c1072e171103b9f66a5e39b692eee92d3b435e2a68fc2e3edb6b70b17

See more details on using hashes here.

Provenance

The following attestation bundles were made for crosstabs-1.2.1-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

This release

1.2.1 This release

2 files

1.2.0

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