# io.github.crosstabs/crosstabs (pypi · crosstabs)

Free survey crosstabs with local analysis and temporary hosted MCP project workflows.

- Trust score: 68/100 (medium)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- remote · `mcp.crosstabs.com`: 66/100, [markdown](https://verifymcp.io/servers/crosstabs-crosstabs/mcp.md), [page](https://verifymcp.io/servers/crosstabs-crosstabs/mcp)
- pypi · `crosstabs`: 68/100 (this document), [markdown](https://verifymcp.io/servers/crosstabs-crosstabs/crosstabs.md), [page](https://verifymcp.io/servers/crosstabs-crosstabs/crosstabs)

## Channel facts

- Registry: `pypi`
- Package: `crosstabs`
- Version: `1.4.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-21.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it.
  - 2 of 51 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 6/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: the license (MIT License) isn't a recognized OSI-approved license.
  - Actively maintained (last published 15 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 83/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 3495 tokens (~83/item across 42 items; 40 tools + 2 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 44/100
  - Stability check failed: the tool surface changed between 1.1.6 and 1.4.0: 0 tool removals, 31 breaking changes, 1 additions.
- **Tool Coverage**: 67/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 40 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 41 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.crosstabs/crosstabs MCP server?

io.github.crosstabs/crosstabs runs locally as a PyPI package, launched with uvx crosstabs. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add crosstabs-crosstabs -- uvx crosstabs
```

### Cursor

```json
{
  "mcpServers": {
    "crosstabs-crosstabs": {
      "command": "uvx",
      "args": [
        "crosstabs"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "crosstabs-crosstabs": {
      "command": "uvx",
      "args": [
        "crosstabs"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add crosstabs-crosstabs -- uvx crosstabs
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "crosstabs-crosstabs": {
      "type": "local",
      "command": [
        "uvx",
        "crosstabs"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add crosstabs-crosstabs --command uvx --arg crosstabs
```

### Hermes

```yaml
mcp_servers:
  crosstabs-crosstabs:
    command: "uvx"
    args: ["crosstabs"]
```

### Netclaw

```json
{
  "McpServers": {
    "crosstabs-crosstabs": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "crosstabs"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add crosstabs-crosstabs -t stdio -c uvx -a crosstabs
```

### Other

```json
{
  "mcpServers": {
    "crosstabs-crosstabs": {
      "command": "uvx",
      "args": [
        "crosstabs"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-21 (score 68, −2)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 44.

### 2026-09-19 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60.

### 2026-09-16 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50.

### 2026-09-14 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 44.

### 2026-09-12 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 34 to 37.

### 2026-09-10 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30.

### 2026-09-08 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 24.

### 2026-09-06 (score 64, +1)

- [functional] Package version: 1.3.0 → 1.4.0

## MCP tools (40)

### `get_runtime_status` (~29 tokens)

Report this executing statistical runtime; no plugin identity or local configuration.

Input parameters:

- `expectedPackageVersion`

### `chi_square_test` (~78 tokens)

Perform Pearson's chi-square test of independence.

Args:
    matrix: 2D contingency table as list of lists

Returns:
    Test statistic, p-value, effect size (Cramér's V), and interpretation

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `fishers_exact` (~78 tokens)

Fisher's exact test for 2×2 tables.

Args:
    matrix: 2×2 contingency table

Returns:
    Odds ratio, two-sided exact p-value, and large-sample 95% CI

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `mcnemar_test` (~79 tokens)

McNemar's test for paired categorical data.

Args:
    matrix: 2×2 table of paired, non-negative integer outcome counts

Returns:
    Coherent primary result plus exact and asymptotic secondary details

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `g_test` (~94 tokens)

G-test (likelihood ratio test) for contingency tables.
Uses the same asymptotic chi-square reference distribution as Pearson's
test, so it is not a small-sample exact-test substitute.

Args:
    matrix: Contingency table

Returns:
    G statistic, p-value, effect size

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `odds_ratio` (~89 tokens)

Calculate the sample odds ratio with a 95% Woolf interval.

Args:
    matrix: [[exposed outcome+, exposed outcome-],
             [unexposed outcome+, unexposed outcome-]]

Returns:
    JSON-safe estimate, status, interval, and explicit table orientation

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `relative_risk` (~88 tokens)

Calculate relative risk with 95% confidence interval for 2x2 table.

Args:
    matrix: [[exposed outcome+, exposed outcome-],
             [unexposed outcome+, unexposed outcome-]]

Returns:
    Relative risk, CI, and individual risks

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `risk_difference` (~115 tokens)

Calculate exposed-minus-unexposed risk difference for a 2×2 table.
Labels the reciprocal absolute difference as NNT for lower exposed risk
or NNH for higher exposed risk.

Args:
    matrix: [[exposed outcome+, exposed outcome-],
             [unexposed outcome+, unexposed outcome-]]

Returns:
    Risk difference, interval, direction, and NNT/NNH when applicable

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `cramers_v` (~76 tokens)

Calculate Cramér's V effect size (standard and bias-corrected).

Args:
    matrix: Contingency table

Returns:
    Standard and bias-corrected Cramér's V with interpretation

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `phi_coefficient` (~63 tokens)

Calculate phi coefficient for 2×2 table.

Args:
    matrix: 2×2 contingency table

Returns:
    Phi coefficient and interpretation

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `spearmans_rho` (~65 tokens)

Spearman's rank correlation coefficient.

Args:
    ranks_x: First set of ranks
    ranks_y: Second set of ranks

Returns:
    Rho coefficient and p-value

Input parameters:

- `ranks_x` (array, required)
- `ranks_y` (array, required)

### `kendalls_tau` (~64 tokens)

Kendall's tau-b rank correlation.

Args:
    ranks_x: First set of ranks
    ranks_y: Second set of ranks

Returns:
    Tau coefficient and p-value

Input parameters:

- `ranks_x` (array, required)
- `ranks_y` (array, required)

### `goodman_kruskal_gamma` (~71 tokens)

Goodman-Kruskal's gamma for ordinal association.

Args:
    matrix: Contingency table with ordinal rows and columns

Returns:
    Gamma coefficient with CI

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `cohens_kappa` (~68 tokens)

Cohen's Kappa for inter-rater agreement (unweighted).

Args:
    matrix: Square confusion matrix

Returns:
    Kappa coefficient with CI and interpretation

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `weighted_kappa` (~83 tokens)

Weighted Cohen's Kappa for ordinal agreement.

Args:
    matrix: Square confusion matrix
    weights: "linear" or "quadratic" (default)

Returns:
    Weighted kappa with CI and interpretation

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)
- `weights` (string)

### `cmh_test` (~100 tokens)

Cochran-Mantel-Haenszel test for stratified 2×2 tables.
Tests association while controlling for a stratifying variable.

Args:
    tables: List of 2×2 contingency tables (one per stratum)

Returns:
    CMH chi-square, common odds ratio, RBG interval, and interpretation

Input parameters:

- `inputSemantics` (string, required)
- `tables` (array, required)
- `weighted` (boolean, required)

### `linear_trend_test` (~120 tokens)

Linear-by-linear association test (Mantel-Haenszel trend test).

Args:
    matrix: Contingency table
    row_scores: Optional numeric scores for rows (default: 0, 1, 2, ...)
    col_scores: Optional numeric scores for columns

Returns:
    Z-statistic and p-value for linear trend

Input parameters:

- `col_scores` (array)
- `inputSemantics` (string, required)
- `matrix` (array, required)
- `row_scores` (array)
- `weighted` (boolean, required)

### `power_analysis` (~138 tokens)

Power or sample size calculation for comparing two proportions.

Args:
    p1: Proportion in group 1
    p2: Proportion in group 2
    n: Sample size per group (if provided, calculates power)
    alpha: Significance level (default 0.05)
    power: Target power if calculating sample size (default 0.80)

Returns:
    Two-sided normal-approximation power or required sample size

Input parameters:

- `alpha` (number)
- `n` (number)
- `p1` (number, required)
- `p2` (number, required)
- `power` (number)

### `bonferroni_correction` (~74 tokens)

Bonferroni correction for multiple testing.

Args:
    p_values: List of p-values to correct
    alpha: Family-wise error rate (default 0.05)

Returns:
    Adjusted p-values and significance

Input parameters:

- `alpha` (number)
- `p_values` (array, required)

### `fdr_correction` (~74 tokens)

Benjamini-Hochberg false discovery rate correction.

Args:
    p_values: List of p-values to correct
    alpha: FDR level (default 0.05)

Returns:
    Adjusted significance with FDR control

Input parameters:

- `alpha` (number)
- `p_values` (array, required)

### `standardized_residuals` (~93 tokens)

Calculate adjusted standardized residuals from a contingency table.

Values above |2| are nominal cell-level flags. When many cells are
inspected, use a multiplicity correction or an adjusted alpha.

Args:
    matrix: Contingency table

Returns:
    Residuals matrix with interpretation

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `post_hoc_chi_square` (~82 tokens)

Full post-hoc analysis after chi-square test.

Includes standardized residuals, adjusted residuals, and
chi-square contributions by cell.

Args:
    matrix: Contingency table

Returns:
    Complete post-hoc analysis

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `proportion_ci` (~92 tokens)

Calculate confidence interval for a proportion.

Args:
    successes: Number of successes
    total: Total sample size
    method: "wilson" (recommended), "agresti", or "normal"

Returns:
    Proportion with 95% CI

Input parameters:

- `countSemantics` (string, required)
- `method` (string)
- `successes` (number, required)
- `total` (number, required)

### `mosaic_plot_data` (~94 tokens)

Generate coordinates for mosaic plot visualization.

Args:
    matrix: Contingency table
    row_labels: Optional labels for rows
    col_labels: Optional labels for columns

Returns:
    Cell coordinates with residual-based coloring

Input parameters:

- `col_labels` (array)
- `inputSemantics` (string, required)
- `matrix` (array, required)
- `row_labels` (array)
- `weighted` (boolean, required)

### `stacked_bar_data` (~121 tokens)

Generate data for stacked bar chart.

Args:
    matrix: Contingency table
    by_rows: If True, groups are rows; if False, groups are columns
    row_labels: Optional labels for rows
    col_labels: Optional labels for columns

Returns:
    Stacked bar chart data with proportions

Input parameters:

- `by_rows` (boolean)
- `col_labels` (array)
- `inputSemantics` (string, required)
- `matrix` (array, required)
- `row_labels` (array)
- `weighted` (boolean, required)

### `check_assumptions` (~68 tokens)

Check chi-square test assumptions.

Verifies expected cell frequencies and provides recommendations.

Args:
    matrix: Contingency table

Returns:
    Assumption validity and recommendations

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `recommend_test` (~80 tokens)

Recommend appropriate statistical tests for your data.

Args:
    matrix: Contingency table
    data_type: "categorical" or "ordinal"

Returns:
    Ranked test recommendations with rationales

Input parameters:

- `data_type` (string)
- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `crosstab_from_data` (~85 tokens)

Create contingency table from raw data.

Args:
    data: List of data objects with row and column variables
    row_var: Name of row variable
    col_var: Name of column variable

Returns:
    Contingency table with labels

Input parameters:

- `col_var` (string, required)
- `data` (array, required)
- `row_var` (string, required)

### `crosstab_from_csv` (~87 tokens)

Parse CSV and create contingency table from two columns.

Args:
    csv_text: CSV content as string
    row_var: Name of row variable column
    col_var: Name of column variable column

Returns:
    Contingency table with labels

Input parameters:

- `col_var` (string, required)
- `csv_text` (string, required)
- `row_var` (string, required)

### `somers_d` (~75 tokens)

Somers' D (asymmetric ordinal measure).

Args:
    matrix: Contingency table with ordinal rows and columns

Returns:
    d(Y|X), d(X|Y), and symmetric versions

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `tau_c` (~65 tokens)

Stuart's tau-c for rectangular ordinal tables.

Args:
    matrix: Contingency table

Returns:
    Tau-c coefficient with standard error and p-value

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `lambda_coefficient` (~68 tokens)

Goodman-Kruskal Lambda (proportional reduction in error).

Args:
    matrix: Contingency table

Returns:
    Lambda values (asymmetric and symmetric)

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `uncertainty_coefficient` (~63 tokens)

Uncertainty Coefficient (entropy-based association measure).

Args:
    matrix: Contingency table

Returns:
    Uncertainty coefficients and mutual information

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `breslow_day_test` (~84 tokens)

Breslow-Day test for homogeneity of odds ratios across strata.

Args:
    tables: List of 2×2 contingency tables (one per stratum)

Returns:
    Test statistic, p-value, and whether ORs are homogeneous

Input parameters:

- `inputSemantics` (string, required)
- `tables` (array, required)
- `weighted` (boolean, required)

### `monte_carlo_chi_square` (~216 tokens)

Monte Carlo estimate of a fixed-margin chi-square p-value.

The workload envelope admits 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.
Work runs in chunks of at most 512 simulations under a 32 MiB estimated
numeric peak and a 30-second server deadline. MCP cancellation is observed
between chunks.

Args:
    matrix: Contingency table
    n_sim: Number of simulations from 1 through 100,000 (default 10000)
    seed: Random seed for reproducibility

Returns:
    Simulated p-value, observed statistic, method, seed, and workload receipt

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `n_sim` (integer)
- `seed` (integer)
- `weighted` (boolean, required)

### `correspondence_analysis` (~97 tokens)

Correspondence analysis for visualizing associations.

Args:
    matrix: Contingency table
    row_labels: Optional row labels
    col_labels: Optional column labels

Returns:
    2D coordinates for biplot and explained variance

Input parameters:

- `col_labels` (array)
- `inputSemantics` (string, required)
- `matrix` (array, required)
- `row_labels` (array)
- `weighted` (boolean, required)

### `chi_square_yates` (~74 tokens)

Chi-square with Yates continuity correction for 2×2 tables.

Args:
    matrix: 2×2 contingency table

Returns:
    Yates-corrected chi-square and p-value

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `attributable_risk` (~98 tokens)

Attributable or prevented risk measures for epidemiological studies.

Args:
    matrix: [[exposed outcome+, exposed outcome-],
             [unexposed outcome+, unexposed outcome-]]

Returns:
    Direction-appropriate impact measures, risk-difference interval,
    relative-risk status, orientation, and causal caveat

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

### `detect_outliers` (~96 tokens)

Detect outliers in numeric data.

Args:
    values: List of numeric values
    method: "zscore" or "iqr"
    threshold: Z-score cutoff (default 2.0) or IQR fence multiplier
        (default 1.5)

Returns:
    Outlier statistics and identified outliers

Input parameters:

- `method` (string)
- `threshold`
- `values` (array, required)

### `effect_size` (~68 tokens)

Calculate multiple effect sizes for contingency table.

Args:
    matrix: Contingency table

Returns:
    Cramér's V (corrected), phi, and contingency coefficient

Input parameters:

- `inputSemantics` (string, required)
- `matrix` (array, required)
- `weighted` (boolean, required)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/crosstabs-crosstabs/crosstabs#diagnostics

## Score history

- 2026-09-21: 68
- 2026-09-20: 70
- 2026-09-19: 70
- 2026-09-18: 69
- 2026-09-17: 69
- 2026-09-16: 69
- 2026-09-15: 68
- 2026-09-14: 68
- 2026-09-13: 67
- 2026-09-12: 67
- 2026-09-11: 66
- 2026-09-10: 66
- 2026-09-09: 65
- 2026-09-08: 65
- 2026-09-07: 64
- 2026-09-06: 64
- 2026-09-05: 63
- 2026-09-04: 48
- 2026-09-03: 68
- 2026-09-02: 67
- 2026-09-01: 67
- 2026-08-31: 67
- 2026-08-30: 66
- 2026-08-29: 66
- 2026-08-28: 65
- 2026-08-27: 65
- 2026-08-26: 64
- 2026-08-25: 62
- 2026-08-24: 61
- 2026-08-23: 61

## Common questions

### What is the io.github.crosstabs/crosstabs MCP server?

io.github.crosstabs/crosstabs is an MCP server listed in the public MCP registry as io.github.crosstabs/crosstabs. Free survey crosstabs with local analysis and temporary hosted MCP project workflows. This page covers its PyPI package (crosstabs).

### Is the io.github.crosstabs/crosstabs MCP server safe to use?

io.github.crosstabs/crosstabs scores 68 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.crosstabs/crosstabs MCP server expose?

io.github.crosstabs/crosstabs exposes 40 tools: get_runtime_status, chi_square_test, fishers_exact, mcnemar_test, g_test, and 35 more. Their descriptions and schemas cost roughly 3,452 tokens of context every time the server is loaded.

### Is the io.github.crosstabs/crosstabs MCP server still maintained?

io.github.crosstabs/crosstabs is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- PyPI project: https://pypi.org/project/crosstabs/
- Socket report: https://socket.dev/pypi/package/crosstabs
- Website: https://www.crosstabs.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/crosstabs-crosstabs/crosstabs.xml
- Changelog JSON feed: https://verifymcp.io/servers/crosstabs-crosstabs/crosstabs.json
- HTML version of this page: https://verifymcp.io/servers/crosstabs-crosstabs/crosstabs
