# io.github.crosstabs/crosstabs (remote · mcp.crosstabs.com)

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

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

## Components

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

## Channel facts

- Endpoint: `https://mcp.crosstabs.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.4.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (delete_workspace).
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 74/100
  - 98% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (fair).
  - Tool/resource definitions use about 8729 tokens (~91/item across 95 items; 52 tools + 43 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 80/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 31% of tool parameters carry a description.
  - Structured output schemas are declared (8% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 54 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.
  - Supports UI / widget rendering.

## Install

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

io.github.crosstabs/crosstabs is a hosted endpoint at https://mcp.crosstabs.com/mcp, so there is nothing to install locally. 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 --transport http crosstabs-crosstabs 'https://mcp.crosstabs.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "crosstabs-crosstabs": {
      "url": "https://mcp.crosstabs.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "crosstabs-crosstabs": {
      "type": "http",
      "url": "https://mcp.crosstabs.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.crosstabs-crosstabs]
url = "https://mcp.crosstabs.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "crosstabs-crosstabs": {
      "type": "remote",
      "url": "https://mcp.crosstabs.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add crosstabs-crosstabs --url 'https://mcp.crosstabs.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  crosstabs-crosstabs:
    url: "https://mcp.crosstabs.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "crosstabs-crosstabs": {
      "Transport": "http",
      "Url": "https://mcp.crosstabs.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add crosstabs-crosstabs -t streamable-http -u 'https://mcp.crosstabs.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "crosstabs-crosstabs": {
      "type": "http",
      "url": "https://mcp.crosstabs.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-20 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

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

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

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

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional] New tool “analyze_survey”
- [functional] New tool “build_tab_book”
- [functional] New tool “compare_survey_waves”
- [functional] New tool “create_editable_report”
- [functional] New tool “get_started”
- [functional] New tool “run_demo_analysis”

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

- [functional improvement] Stability: unverified → 0.03

### 2026-09-13 (score 62)

First indexed and scored.

## MCP tools (52)

### `search` (~27 tokens)

Search Crosstabs methodology

Discover fixed Crosstabs methodology, limitations, and evidence pages.

Input parameters:

- `query` (string, required)

Output parameters:

- `results` (array)

### `fetch` (~25 tokens)

Fetch Crosstabs evidence

Fetch one fixed Crosstabs evidence record by identifier.

Input parameters:

- `id` (string, required)

Output parameters:

- `id` (string)
- `metadata` (object)
- `text` (string)
- `title` (string)
- `url` (string)

### `analyze_crosstab` (~153 tokens)

Analyze aggregate crosstab

Compute deterministic statistics from a bounded aggregate contingency matrix.

Input parameters:

- `columnLabels` (array)
- `columnVariable` (string)
- `inputSemantics` (string, required): Required caller attestation. Survey-weighted aggregates are not accepted by this public aggregate tool.
- `observed` (array, required): Rectangular 2×2 to 12×12 matrix of finite, non-negative safe integer frequency counts with a grand total no greater than 1,000,000,000,000.
- `percentage` (string)
- `rowLabels` (array)
- `rowVariable` (string)
- `weighted` (boolean): Must be false. This aggregate contract has no typed frequency or survey-design weight authority.

Output parameters:

- `analysisId` (string)
- `evidenceLinks` (array)
- `limitations` (array)
- `provenance` (object)
- `schemaVersion` (string)
- `statistics` (object)
- `table` (object)
- `warnings` (array)

### `render_crosstab` (~154 tokens)

Render aggregate crosstab

Render a deterministic evidence-linked aggregate crosstab widget.

Input parameters:

- `columnLabels` (array)
- `columnVariable` (string)
- `inputSemantics` (string, required): Required caller attestation. Survey-weighted aggregates are not accepted by this public aggregate tool.
- `observed` (array, required): Rectangular 2×2 to 12×12 matrix of finite, non-negative safe integer frequency counts with a grand total no greater than 1,000,000,000,000.
- `percentage` (string)
- `rowLabels` (array)
- `rowVariable` (string)
- `weighted` (boolean): Must be false. This aggregate contract has no typed frequency or survey-design weight authority.

Output parameters:

- `analysisId` (string)
- `evidenceLinks` (array)
- `limitations` (array)
- `provenance` (object)
- `schemaVersion` (string)
- `statistics` (object)
- `table` (object)
- `warnings` (array)

### `get_started` (~42 tokens)

Get client-specific connection guidance, a health check, and the first prompt to try. No account, workspace, or upload is required.

Input parameters:

- `client` (string)

### `run_demo_analysis` (~38 tokens)

Run an instant, upload-free tour using a fixed synthetic survey table. Returns an AI-ready answer, numbers, interpretation, warnings and next action.

### `get_headless_capabilities` (~26 tokens)

Describe the full accountless hosted MCP, privacy, retention and execution limits.

### `get_runtime_status` (~19 tokens)

Inspect this hosted runtime and its fixed resource limits.

### `create_workspace` (~50 tokens)

Create a private temporary workspace without signing in. Explain that uploads leave the device, then obtain consent. The secret token is the sole access credential and cannot be recovered.

Input parameters:

- `consentToUpload` (boolean, required)

### `get_workspace` (~53 tokens)

List this temporary workspace's files, recent jobs and expiry. Includes a private upload link.

Input parameters:

- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `delete_workspace` (~65 tokens)

Permanently delete the temporary workspace and all active project, file and job data. This revokes its token.

Input parameters:

- `confirmDelete` (boolean, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `get_job` (~90 tokens)

Read a queued analysis job. Wait at least two seconds between polls. Only succeeded jobs contain completed results; failed jobs contain an error. Use get_download_link for artifact IDs, or get_rendered_table for completed render_project_table jobs.

Input parameters:

- `jobId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `get_download_link` (~75 tokens)

Create a private browser download link for an uploaded file or generated artifact in this workspace. The link contains a secret in its fragment; never share it publicly.

Input parameters:

- `fileId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `get_rendered_table` (~68 tokens)

Render the canonical aggregate result of a succeeded render_project_table job. Respondent rows are never included in the widget.

Input parameters:

- `jobId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `analyze_survey` (~114 tokens)

Analyze a survey question

Run a governed crosstab for an existing hosted project. This task shortcut uses the same deterministic run_table engine and returns a job to poll with get_job.

Input parameters:

- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this task, reused only when retrying identical inputs.
- `tableId` (string, required)
- `waveId` (string)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `build_tab_book` (~114 tokens)

Build a survey tab book

Build a reusable tab book for an existing hosted project. This task shortcut uses the same deterministic run_tab_book engine and returns a job to poll with get_job.

Input parameters:

- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this task, reused only when retrying identical inputs.
- `tableIds` (array)
- `waveId` (string)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `compare_survey_waves` (~118 tokens)

Compare survey waves

Compare compatible saved survey waves. This task shortcut uses the same deterministic compare_waves engine and preserves all comparability warnings.

Input parameters:

- `fromWaveId` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this task, reused only when retrying identical inputs.
- `tableId` (string, required)
- `toWaveId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `create_editable_report` (~146 tokens)

Create an editable report

Generate an editable PPTX or DOCX report pack from an existing hosted project. Use get_download_link on the returned artifact ID after the job succeeds.

Input parameters:

- `expectedRevision` (integer, required)
- `format` (string, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this task, reused only when retrying identical inputs.
- `tableIds` (array)
- `templateId` (string)
- `waveId` (string)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `create_analysis_plan` (~129 tokens)

Create analysis plan

Create a portable revision-bound document for explicitly selected saved tables without mutating the project. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `expectedRevision` (integer, required)
- `name` (string)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableIds` (array, required)
- `waveId` (string)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `validate_analysis_plan` (~103 tokens)

Validate analysis plan

Preflight a portable analysis plan against the current workspace project and return actionable validation issues. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `plan` (required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `run_analysis_plan` (~107 tokens)

Run analysis plan

Validate and execute a portable plan against one loaded project revision, returning aggregate evidence and review findings. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `plan` (object, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `preview_raking_weights` (~167 tokens)

Preview raking weights

Preview explicit population margins against the saved active wave. Returns aggregate balance, trimming and effective-base diagnostics with a revision-bound review fingerprint; respondent weights remain in the temporary hosted workspace. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `baseWeightId` (required)
- `expectedRevision` (integer, required)
- `maxIterations` (integer, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `targets` (array, required)
- `tolerance` (number, required)
- `trim` (required)
- `waveId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `apply_raking_weights` (~249 tokens)

Apply reviewed raking weights

Recompute a reviewed weighting fingerprint and atomically save a new sampling-weight column and definition with human approval, warning acknowledgement, revision checks and replay. Does not authorize ordinary or complex-survey inference. Queues a hosted job; use get_job to retrieve its result. Obtain actual user approval before calling; do not fabricate approval fields.

Input parameters:

- `acknowledgedWarningCodes` (array, required)
- `approval` (object, required)
- `baseWeightId` (required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `maxIterations` (integer, required)
- `previewFingerprint` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableIds` (array, required)
- `targetVariable` (object, required)
- `targets` (array, required)
- `tolerance` (number, required)
- `trim` (required)
- `waveId` (string, required)
- `weightId` (string, required)
- `weightName` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `create_project` (~98 tokens)

Create project

Create an empty, versioned research project. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `idempotencyKey` (string, required)
- `name` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `import_project` (~124 tokens)

Import project

Verify and import a full-data Crosstabs project package as a new workspace copy. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `idempotencyKey` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `uploadId` (string, required): ID of a file uploaded into this workspace. Local paths and arbitrary URLs are not accepted.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `import_dataset` (~133 tokens)

Import dataset

Validate and import respondent records into a project wave. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `uploadId` (string, required): ID of a file uploaded into this workspace. Local paths and arbitrary URLs are not accepted.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `profile_dataset` (~91 tokens)

Profile dataset

Return bounded types, missingness and cardinality diagnostics. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `define_row_set` (~165 tokens)

Define row set

Create or replace a reusable ordered row-variable set, with an optional cases-or-responses denominator for one detected multi-select question. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `definition` (object, required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `multipleResponseDenominator` (string): Optional display denominator for an assigned row set that names exactly one detected multi-select question.
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableIds` (array, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `define_banner` (~122 tokens)

Define banner

Create or replace a reusable multilevel banner. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `definition` (object, required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableIds` (array, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `apply_filter` (~122 tokens)

Apply filter

Create and assign an auditable project filter. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `definition` (object, required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableIds` (array, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `set_weight` (~140 tokens)

Set weight

Create and assign a validated weighting definition. Queues a hosted job; use get_job to retrieve its result. Obtain actual user approval before calling; do not fabricate approval fields.

Input parameters:

- `approval` (object, required)
- `definition` (object, required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableIds` (array, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `run_table` (~107 tokens)

Run table

Compute one crosstab with diagnostics and evidence metadata. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableId` (string, required)
- `waveId` (string)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `render_project_table` (~127 tokens)

Render project table

Render one revision-bound saved table execution through the canonical workspace evidence widget. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `evidenceId` (string, required)
- `expectedRevision` (integer, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableId` (string, required)
- `waveId` (string)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `update_variable_metadata` (~171 tokens)

Update variable metadata

Apply an approved label, coding, missing-value, measurement, role, and display-format update without rewriting respondent rows. Queues a hosted job; use get_job to retrieve its result. Obtain actual user approval before calling; do not fabricate approval fields.

Input parameters:

- `approval` (object, required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `label` (string, required)
- `metadata` (object, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `variableName` (string, required)
- `waveId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `propose_transformation` (~118 tokens)

Propose transformation

Create a draft, data-free transformation recipe for later review. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `definition` (object, required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `review_transformation` (~153 tokens)

Review transformation

Approve or reject a draft transformation recipe with recorded human approval. Queues a hosted job; use get_job to retrieve its result. Obtain actual user approval before calling; do not fabricate approval fields.

Input parameters:

- `approval` (object, required)
- `decision` (string, required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `note` (string, required)
- `projectId` (string, required)
- `recipeId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `apply_transformation` (~158 tokens)

Apply transformation

Apply an approved transformation to one workspace wave with recorded human approval and reversible provenance. Queues a hosted job; use get_job to retrieve its result. Obtain actual user approval before calling; do not fabricate approval fields.

Input parameters:

- `approval` (object, required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `recipeId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `runId` (string, required)
- `waveId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `undo_transformation` (~122 tokens)

Undo transformation

Mark one applied transformation run undone and restore its derived variable in this workspace. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `runId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `run_complex_survey_method` (~206 tokens)

Run complex-survey method

Run a declared-design OLS, logistic, or K-means method and record bounded canonical evidence. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `clusters` (integer)
- `eventValue`
- `expectedRevision` (integer, required)
- `filterId`
- `idempotencyKey` (string, required)
- `method` (string, required)
- `missingPolicy` (string)
- `outcome` (string)
- `predictors` (array)
- `projectId` (string, required)
- `referenceValue`
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `seed` (integer)
- `surveyDesignId` (string, required)
- `variables` (array)
- `waveId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `run_tab_book` (~108 tokens)

Run tab book

Compute the selected tab-book recipe with progress and cancellation. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableIds` (array)
- `waveId` (string)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `compare_waves` (~114 tokens)

Compare waves

Compare compatible tables across project waves. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `fromWaveId` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableId` (string, required)
- `toWaveId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `undo_change` (~114 tokens)

Undo change

Reverse a recorded reversible project mutation. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `targetEventId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `replace_dataset` (~176 tokens)

Replace dataset

Import a replacement wave without overwriting prior source data. Queues a hosted job; use get_job to retrieve its result. Obtain actual user approval before calling; do not fabricate approval fields.

Input parameters:

- `approval` (object, required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `label` (string, required)
- `projectId` (string, required)
- `renames` (object)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `uploadId` (string, required): ID of a file uploaded into this workspace. Local paths and arbitrary URLs are not accepted.
- `waveId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `detect_schema_drift` (~124 tokens)

Detect schema drift

Inspect wave compatibility and propose repairs without mutation. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `projectId` (string, required)
- `renames` (object)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `uploadId` (string, required): ID of a file uploaded into this workspace. Local paths and arbitrary URLs are not accepted.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `repair_schema` (~224 tokens)

Repair schema

Apply an approved, reversible schema repair plan. Queues a hosted job; use get_job to retrieve its result. Obtain actual user approval before calling; do not fabricate approval fields.

Input parameters:

- `approval` (object, required)
- `approvedOperationIds` (array, required)
- `categoryOrders` (object)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `label` (string, required)
- `labelAliases` (object)
- `planId` (string, required)
- `projectId` (string, required)
- `renames` (object)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `typeConversions` (object)
- `uploadId` (string, required): ID of a file uploaded into this workspace. Local paths and arbitrary URLs are not accepted.
- `valueRecodes` (object)
- `waveId` (string, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `generate_report_pack` (~142 tokens)

Generate report pack

Generate an editable evidence-linked PPTX or DOCX pack. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `expectedRevision` (integer, required)
- `format` (string, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableIds` (array)
- `templateId` (string)
- `waveId` (string)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `refresh_report_pack` (~168 tokens)

Refresh report pack

Refresh generated regions while preserving declared manual regions. Queues a hosted job; use get_job to retrieve its result. Obtain actual user approval before calling; do not fabricate approval fields.

Input parameters:

- `approval` (object, required)
- `expectedRevision` (integer, required)
- `generationId` (string, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `uploadId` (string, required): ID of a file uploaded into this workspace. Local paths and arbitrary URLs are not accepted.
- `waveId` (string)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `export_project` (~107 tokens)

Export project

Export a definition-only package by default or an explicit full-data package to the temporary hosted workspace. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `dataPolicy` (string)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `list_projects` (~96 tokens)

List projects

List redacted summaries from the workspace project store. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `cursor` (string)
- `limit` (integer)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `inspect_project` (~93 tokens)

Inspect project

Inspect a redacted workspace project graph, capabilities and current revision. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `get_audit_history` (~106 tokens)

Get audit history

Return paginated append-only project audit events. Queues a hosted job; use get_job to retrieve its result.

Input parameters:

- `afterSequence` (integer)
- `limit` (integer)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

### `define_survey_design` (~158 tokens)

Define survey design

Create an approved immutable Taylor or replicate-weight survey design, or assign an identical existing design, atomically across selected tables. Queues a hosted job; use get_job to retrieve its result. Obtain actual user approval before calling; do not fabricate approval fields.

Input parameters:

- `approval` (object, required)
- `definition` (object, required)
- `expectedRevision` (integer, required)
- `idempotencyKey` (string, required)
- `projectId` (string, required)
- `requestId` (string, required): A new UUID for this job, reused only when retrying identical inputs.
- `tableIds` (array, required)
- `workspaceToken` (string, required): Secret workspace capability returned by create_workspace. Treat as a password; never place in a query string.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/crosstabs-crosstabs/mcp#diagnostics

## Score history

- 2026-09-21: 66
- 2026-09-20: 66
- 2026-09-19: 65
- 2026-09-18: 65
- 2026-09-17: 64
- 2026-09-16: 64
- 2026-09-15: 63
- 2026-09-14: 63
- 2026-09-13: 62

## 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 hosted endpoint (https://mcp.crosstabs.com/mcp).

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

io.github.crosstabs/crosstabs scores 66 out of 100 on VerifyMCP. 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 52 tools: search, fetch, analyze_crosstab, render_crosstab, get_started, and 47 more. Their descriptions and schemas cost roughly 6,019 tokens of context every time the server is loaded.

### Does the io.github.crosstabs/crosstabs MCP server require authentication?

No. We connected to io.github.crosstabs/crosstabs without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### 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

- Remote endpoint: https://mcp.crosstabs.com/mcp
- Website: https://www.crosstabs.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/crosstabs-crosstabs/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/crosstabs-crosstabs/mcp.json
- HTML version of this page: https://verifymcp.io/servers/crosstabs-crosstabs/mcp
