# BigQuery Data Platform (pypi · data-platform-mcp)

Read-only BigQuery tools for plain-language data questions, with a cost gate on every query

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

## Components

- pypi · `data-platform-mcp`: 72/100 (this document), [markdown](https://verifymcp.io/servers/debilla-data-platform-mcp/data-platform-mcp.md), [page](https://verifymcp.io/servers/debilla-data-platform-mcp/data-platform-mcp)

## Channel facts

- Registry: `pypi`
- Package: `data-platform-mcp`
- Version: `0.3.3`
- 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-20.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it.
  - 1 of 54 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 11 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 68/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2462 tokens (~223/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 60/100
  - Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **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 11 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 12 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 BigQuery Data Platform MCP server?

BigQuery Data Platform runs locally as a PyPI package, launched with uvx data-platform-mcp. 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 debilla-data-platform-mcp -- uvx data-platform-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "debilla-data-platform-mcp": {
      "command": "uvx",
      "args": [
        "data-platform-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "debilla-data-platform-mcp": {
      "command": "uvx",
      "args": [
        "data-platform-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add debilla-data-platform-mcp -- uvx data-platform-mcp
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add debilla-data-platform-mcp --command uvx --arg data-platform-mcp
```

### Hermes

```yaml
mcp_servers:
  debilla-data-platform-mcp:
    command: "uvx"
    args: ["data-platform-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "debilla-data-platform-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "data-platform-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add debilla-data-platform-mcp -t stdio -c uvx -a data-platform-mcp
```

### Other

```json
{
  "mcpServers": {
    "debilla-data-platform-mcp": {
      "command": "uvx",
      "args": [
        "data-platform-mcp"
      ]
    }
  }
}
```

## 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-19 (score 72, +1)

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

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

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

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

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

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

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

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

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

### 2026-09-08 (score 67, 0)

- [security regression] Malware scan: pass → unverified
- [functional regression] Schema quality: 1722 → 2462
- [functional regression] Schema quality: 1722 → 2348
- [functional] Package version: 0.2.0 → 0.3.3
- [functional] Package version: 0.2.0 → 0.3.1
- [functional] Package version: 0.2.0 → 0.3.0

### 2026-09-07 (score 67, +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-05 (score 66, +1)

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

## MCP tools (11)

### `list_environments` (~59 tokens)

List the configured BigQuery environments and which one is the default.

Call this when the user names an environment you have not seen, or when a
question could plausibly be about more than one. Free — reads only this
server's configuration.

### `list_datasets` (~74 tokens)

List the BigQuery datasets available in the data platform project.

Call this first to discover what data exists. Free — scans no data.

Args:
    environment: Which configured BigQuery environment to use. Omit to
        use the default. Call list_environments to see what exists.

Input parameters:

- `environment` (string)

### `list_tables` (~84 tokens)

List tables and views inside a dataset. Free — scans no data.

Args:
    dataset_id: The dataset to inspect, e.g. "events_raw".
    environment: Which configured BigQuery environment to use. Omit to
        use the default. Call list_environments to see what exists.

Input parameters:

- `dataset_id` (string, required)
- `environment` (string)

### `get_table_schema` (~195 tokens)

Get a table's columns, partitioning, size and freshness. Free — scans no data.

Call this before writing a query, for two reasons beyond column names:

\- `partitioning` says whether a WHERE clause can actually limit the scan. A
  date-shaped column name does NOT mean the table is partitioned; if this
  field is null, every query reads the whole table.
\- Nested columns are expanded to dotted paths and flagged `repeated`, which
  is what tells you a column needs UNNEST.

Args:
    dataset_id: The dataset, e.g. "events_raw".
    table_id: The table or view name.
    environment: Which configured BigQuery environment to use. Omit to
        use the default. Call list_environments to see what exists.

Input parameters:

- `dataset_id` (string, required)
- `environment` (string)
- `table_id` (string, required)

### `check_table_freshness` (~175 tokens)

Report when tables were last written, to catch stale or dead sources.

Several plausible-looking tables on this platform stopped being updated
without being dropped, so a query against one silently returns old data.
Check before trusting a table you have not used before.

Free — reads table metadata only, scanning no data.

Args:
    dataset_id: The dataset to check, e.g. "events_raw".
    table_id: A single table to check. Omit to report every table in the
        dataset, which is the faster way to spot a dead one.
    environment: Which configured BigQuery environment to use. Omit to
        use the default. Call list_environments to see what exists.

Input parameters:

- `dataset_id` (string, required)
- `environment` (string)
- `table_id` (string)

### `list_scheduled_queries` (~211 tokens)

List scheduled queries: what they write, when they run, and their state.

Use this to answer "what populates this table?" and "why is this table
stale?" — a disabled or failing scheduled query is the usual cause, and
check_table_freshness can see the staleness but not the reason.

The SQL is not included here; call get_scheduled_query for one of them.

Args:
    dataset: Only queries writing into this destination dataset.
    contains: Only queries whose name contains this text.
    include_disabled: Keep disabled queries in the result. They are the
        most likely explanation for a table that stopped updating, so this
        defaults to True.
    environment: Which configured environment to look in. Scheduled queries
        are regional, so this must be the environment whose location holds
        them.

Input parameters:

- `contains` (string)
- `dataset` (string)
- `environment` (string)
- `include_disabled` (boolean)

### `get_scheduled_query` (~114 tokens)

Get one scheduled query in full: its SQL, destination, and recent runs.

Call this after list_scheduled_queries to see why a query is failing, or
what SQL actually produces a table.

Args:
    query: The scheduled query's name, or the id from list_scheduled_queries.
    runs: How many recent runs to include, newest first.
    environment: Which configured environment to look in.

Input parameters:

- `environment` (string)
- `query` (string, required)
- `runs` (integer)

### `list_code_assets` (~217 tokens)

List Colab notebooks and saved queries in BigQuery Studio.

Use this for anything the user calls a Colab notebook, Colab Enterprise
notebook, "colab script", BigQuery notebook, saved query or data canvas --
BigQuery Studio stores all of them as code assets and this lists them all.

Free -- this reads metadata only and never opens an asset. Bodies are what
cost quota, so filter here first and open individual assets afterwards.

Args:
    environment: Which configured environment to read. Omit for the default.
    asset_type: Restrict to one of 'sql', 'notebook', 'data_canvas'.
        Saved queries usually outnumber notebooks by a wide margin, so
        this is the difference between a readable answer and 600 rows.
    name_contains: Case-insensitive substring match on the display name.
    limit: Maximum assets to return.

Input parameters:

- `asset_type` (string)
- `environment` (string)
- `limit` (integer)
- `name_contains` (string)

### `get_code_asset` (~100 tokens)

Return one Colab notebook or saved query's contents, by name or id.

Notebook outputs are stripped -- across 52 real notebooks they were 77% of
the bytes, and none of the logic.

Args:
    asset: Display name (as shown in BigQuery Studio) or the asset id.
    environment: Which configured environment to read. Omit for the default.

Input parameters:

- `asset` (string, required)
- `environment` (string)

### `find_code_assets_using_table` (~220 tokens)

Find which Colab notebooks and saved queries reference a table.

The question to ask before changing or dropping a table:
\``list_scheduled_queries`` says what writes it, this says who reads it.

Unlike the other tools here this one opens every asset it considers, which
costs Dataform read quota. It is bounded by ``max_assets`` and reports how
much of the project it actually covered -- a result is evidence about the
assets scanned, never proof that nothing else uses the table.

Args:
    table: Table name to search for. A bare name matches any qualification;
        'dataset.table' or a fully-qualified name narrows it.
    environment: Which configured environment to read. Omit for the default.
    asset_type: Restrict to 'sql', 'notebook' or 'data_canvas'.
    max_assets: Ceiling on how many bodies to read.

Input parameters:

- `asset_type` (string)
- `environment` (string)
- `max_assets` (integer)
- `table` (string, required)

### `run_query` (~309 tokens)

Run a read-only (SELECT/WITH) SQL query against BigQuery and return rows.

Cost safety: the query is ALWAYS dry-run first to estimate how much data it
will scan. If that estimate is above the warning threshold, the query does
NOT run — instead this returns `status: "confirmation_required"` with the
estimated size and cost. Stop there, tell the user the estimated scan and
cost, and ask. Only re-call with confirm_expensive=true once they have
agreed: that flag records the user's decision, not yours. Queries above the
hard cap never run, even with confirmation.

Always fully-qualify tables as `<project>.<dataset>.<table>`, and check
get_table_schema first — a WHERE clause only limits the scan on a table
that is actually partitioned.

Args:
    sql: A SELECT (or WITH ... SELECT) query.
    max_rows: Max rows to return, to keep responses small. 0 (the default)
        uses the server's configured limit.
    confirm_expensive: Set True only after the user has agreed to a query
        previously flagged as costly. Leave False for the first attempt.
    environment: Which configured BigQuery environment to query. Omit to
        use the default. Call list_environments to see what exists.

Input parameters:

- `confirm_expensive` (boolean)
- `environment` (string)
- `max_rows` (integer)
- `sql` (string, required)

## Diagnostics

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

## Score history

- 2026-09-20: 72
- 2026-09-19: 72
- 2026-09-18: 71
- 2026-09-17: 71
- 2026-09-16: 71
- 2026-09-15: 70
- 2026-09-14: 70
- 2026-09-13: 69
- 2026-09-12: 69
- 2026-09-11: 68
- 2026-09-10: 68
- 2026-09-09: 67
- 2026-09-08: 67
- 2026-09-07: 67
- 2026-09-06: 66
- 2026-09-05: 66
- 2026-09-04: 65
- 2026-09-03: 65
- 2026-09-02: 49

## Common questions

### What is the BigQuery Data Platform MCP server?

BigQuery Data Platform is an MCP server listed in the public MCP registry as io.github.deBilla/data-platform-mcp. Read-only BigQuery tools for plain-language data questions, with a cost gate on every query. This page covers its PyPI package (data-platform-mcp).

### Is the BigQuery Data Platform MCP server safe to use?

BigQuery Data Platform scores 72 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 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 BigQuery Data Platform MCP server expose?

BigQuery Data Platform exposes 11 tools: list_environments, list_datasets, list_tables, get_table_schema, check_table_freshness, and 6 more. Their descriptions and schemas cost roughly 1,758 tokens of context every time the server is loaded.

### Is the BigQuery Data Platform MCP server still maintained?

BigQuery Data Platform is still listed as active in the MCP registry. We last reached this channel on 20 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/data-platform-mcp/
- Socket report: https://socket.dev/pypi/package/data-platform-mcp
- Repository: https://github.com/deBilla/bigquery-mcp
- Website: https://debilla.github.io/bigquery-mcp/
- Changelog RSS feed: https://verifymcp.io/servers/debilla-data-platform-mcp/data-platform-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/debilla-data-platform-mcp/data-platform-mcp.json
- HTML version of this page: https://verifymcp.io/servers/debilla-data-platform-mcp/data-platform-mcp
