原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

BigQuery Data Platform

作者:deBilla版本 0.4.0i★ –i在你的电脑上运行
注册名称io.github.deBilla/data-platform-mcp

安装

概览

作者提供的说明(英文原文)

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

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 数据库与数据集

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: BQ_MCP_ENVIRONMENTS, BQ_MCP_DEFAULT_ENVIRONMENT, BQ_MCP_CONFIG, BQ_IMPERSONATE_SERVICE_ACCOUNT, BQ_PROJECT, BQ_LOCATION, BQ_CODE_ASSET_LOCATION, BQ_DATASET_ALLOWLIST, BQ_WARN_BYTES, BQ_MAX_BYTES_BILLED, BQ_MCP_AUDIT_LOG

你需要

  • PyPI已安装 Python 的 uv(用于 uvx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "data-platform": {
      "command": "uvx",
      "args": [
        "data-platform-mcp"
      ],
      "env": {
        "BQ_MCP_ENVIRONMENTS": "your-value",
        "BQ_MCP_DEFAULT_ENVIRONMENT": "your-value",
        "BQ_MCP_CONFIG": "your-value",
        "BQ_IMPERSONATE_SERVICE_ACCOUNT": "your-value",
        "BQ_PROJECT": "your-value",
        "BQ_LOCATION": "your-value",
        "BQ_CODE_ASSET_LOCATION": "your-value",
        "BQ_DATASET_ALLOWLIST": "your-value",
        "BQ_WARN_BYTES": "your-value",
        "BQ_MAX_BYTES_BILLED": "your-value",
        "BQ_MCP_AUDIT_LOG": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add data-platform --env BQ_MCP_ENVIRONMENTS=your-value --env BQ_MCP_DEFAULT_ENVIRONMENT=your-value --env BQ_MCP_CONFIG=your-value --env BQ_IMPERSONATE_SERVICE_ACCOUNT=your-value --env BQ_PROJECT=your-value --env BQ_LOCATION=your-value --env BQ_CODE_ASSET_LOCATION=your-value --env BQ_DATASET_ALLOWLIST=your-value --env BQ_WARN_BYTES=your-value --env BQ_MAX_BYTES_BILLED=your-value --env BQ_MCP_AUDIT_LOG=your-value -- uvx data-platform-mcp

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "data-platform": {
      "command": "uvx",
      "args": [
        "data-platform-mcp"
      ],
      "env": {
        "BQ_MCP_ENVIRONMENTS": "your-value",
        "BQ_MCP_DEFAULT_ENVIRONMENT": "your-value",
        "BQ_MCP_CONFIG": "your-value",
        "BQ_IMPERSONATE_SERVICE_ACCOUNT": "your-value",
        "BQ_PROJECT": "your-value",
        "BQ_LOCATION": "your-value",
        "BQ_CODE_ASSET_LOCATION": "your-value",
        "BQ_DATASET_ALLOWLIST": "your-value",
        "BQ_WARN_BYTES": "your-value",
        "BQ_MAX_BYTES_BILLED": "your-value",
        "BQ_MCP_AUDIT_LOG": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "data-platform": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "data-platform-mcp"
      ],
      "env": {
        "BQ_MCP_ENVIRONMENTS": "your-value",
        "BQ_MCP_DEFAULT_ENVIRONMENT": "your-value",
        "BQ_MCP_CONFIG": "your-value",
        "BQ_IMPERSONATE_SERVICE_ACCOUNT": "your-value",
        "BQ_PROJECT": "your-value",
        "BQ_LOCATION": "your-value",
        "BQ_CODE_ASSET_LOCATION": "your-value",
        "BQ_DATASET_ALLOWLIST": "your-value",
        "BQ_WARN_BYTES": "your-value",
        "BQ_MAX_BYTES_BILLED": "your-value",
        "BQ_MCP_AUDIT_LOG": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • BQ_MCP_ENVIRONMENTS env
    JSON map of environment name to BigQuery settings (project, location, impersonate, dataset_allowlist, byte caps). Omit when using a config file at ~/.config/data-platform-mcp/config.toml.
  • BQ_MCP_DEFAULT_ENVIRONMENT env
    Environment used when a tool call omits the environment argument.
  • BQ_MCP_CONFIG env
    Path to a TOML config file, overriding ~/.config/data-platform-mcp/config.toml.
  • BQ_IMPERSONATE_SERVICE_ACCOUNT env
    Read-only service account to impersonate, making read-only a property of the identity rather than of this code. Create it with `data-platform-mcp setup`.
  • BQ_PROJECT env
    GCP project whose BigQuery datasets are queried. Falls back to the project associated with Application Default Credentials.
  • BQ_LOCATION env
    BigQuery location for jobs and datasets. Defaults to US.
  • BQ_CODE_ASSET_LOCATION env
    Region holding BigQuery Studio notebooks and saved queries. Separate from BQ_LOCATION and usually different: code assets are regional and Dataform rejects multi-regions, so datasets in US typically p…
  • BQ_DATASET_ALLOWLIST env
    Comma-separated dataset IDs the server may read. Empty means all datasets.
  • BQ_WARN_BYTES env
    Scan size above which a query is returned for user confirmation instead of run. Defaults to 1 GiB.
  • BQ_MAX_BYTES_BILLED env
    Hard per-query scan cap; a query estimated above this never runs. Defaults to 5 GiB.
  • BQ_MCP_AUDIT_LOG env
    Path for the JSONL tool-call audit log, or 'off' to disable it. SQL text is never recorded, only a hash and a length.

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 deBilla 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“数据库与数据集”中的其他服务器比较i

  • 星标数多于此分类中其他 953 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 953 个服务器的 41% 更新
  • 基础检查结果等于或优于此分类中其他 953 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

BigQuery Data Platform 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.4.0)于上个月进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。

有什么可以替代它?

同一分类中有:Supabase, MongoDB MCP Server, Elasticsearch MCP Server

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Supabase

作者:supabase

MCP server for interacting with the Supabase platform

电脑或云端★ 2,993Apache-2.0昨天更新
安装

MongoDB MCP Server

作者:mongodb-js

MongoDB Model Context Protocol Server

在你的电脑上运行★ 1,157Apache-2.0前天更新
安装

MCP server for interacting with Elasticsearch

在你的电脑上运行★ 315Apache-2.014个月前更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

BigQuery MCP

A read-only Model Context Protocol server over Google BigQuery. It lets an AI client (Claude Code, Claude Desktop, …) answer plain-language data questions by discovering schema and running SELECT queries.

The AI does the natural-language → SQL translation; this server just safely executes against BigQuery under your own Google credentials.

  • Docs: https://debilla.github.io/bigquery-mcp/
  • Repo: https://github.com/deBilla/bigquery-mcp
  • PyPI: data-platform-mcp
  • MCP registry: mcp-name: io.github.deBilla/data-platform-mcp

Tools exposed

ToolPurposeCost
list_datasetsList datasets in the projectfree
list_tablesList tables/views in a datasetfree
get_table_schemaColumns (nested paths expanded), partitioning, size, row countfree
check_table_freshnessWhen each table was last written — catches stale sourcesfree
list_environmentsWhich BigQuery environments are configured, and the defaultfree
list_scheduled_queriesWhich scheduled query writes a table, and whether it is disabled or failingfree
get_scheduled_queryOne query's SQL, destination and recent runsfree
list_code_assetsNotebooks, saved queries and data canvases in BigQuery Studiofree
get_code_assetOne notebook or saved query's body, notebook outputs strippedfree
find_code_assets_using_tableWhich notebooks/saved queries read a tablequota, not $
list_notebook_schedulesScheduled Colab notebooks, with how many recent runs failedfree
list_notebook_runsIndividual notebook runs across every schedule — failures by defaultfree
get_notebook_scheduleOne schedule's cron, notebook and recent errorsfree
run_queryRun a validated, read-only SELECT and return rowsscans data

Only run_query costs anything, so the discovery tools are the ones to spend first. Two of them exist to prevent specific, repeated mistakes:

  • `get_table_schema` reports partitioning from table metadata, never from column names. A table with a partition_date column may not be partitioned — in which case no WHERE clause reduces the scan and every query reads the whole table. The response flags this explicitly when the table is large.
  • `check_table_freshness` finds tables that stopped being written to without being dropped. Those return stale data rather than an error, which is the failure mode nobody notices.
  • `find_code_assets_using_table` answers the other half. The scheduled-query tools say what *writes* a table; this says who *reads* it, which is the question before a schema change. It is also the one discovery tool that is not free: it opens every asset it considers, spending Dataform read quota, so it is capped 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 — assets it could not read are listed separately rather than counted as misses.
  • `list_scheduled_queries` says why. A stale table is usually a scheduled query that was disabled or is failing, and that lives in a different API (BigQuery Data Transfer) needing roles/bigquerydatatransfer.viewer. Without that role the two tools return an error naming it and everything else works normally. Most scheduled queries declare no destination because they write with DDL, so the target is read out of the SQL and reported as writes_to_from_sql — a heuristic, labelled as one.

BigQuery Studio notebooks and saved queries

These are not BigQuery resources. BigQuery Studio stores each code asset as a Dataform repository holding a single file, which means a third API and a third permission — roles/dataform.viewer — beyond BigQuery and the Data Transfer Service. Without it the three tools return an error naming the role and everything else works normally. They are also invisible in the Dataform UI, so nothing in the console hints that this is where they live.

Two things about that storage are worth knowing before you configure it:

  • Code assets are regional, and it is not the dataset region. Dataform rejects multi-regions, so a platform whose datasets are US keeps its notebooks in something like us-central1. No configuration is needed: when location is a multi-region the server probes the regions inside it, uses the one holding the assets, and says so — a multi-region cannot simply be inherited, because using it is guaranteed to fail rather than merely likely to. Pin code_asset_location (or BQ_CODE_ASSET_LOCATION) to skip the probing; an explicit value is never second-guessed, so a wrong one returns an empty list rather than an error. Every result echoes back the location it read.
  • Notebook bodies are mostly output. Across 52 real notebooks, cell outputs were 77% of the bytes — one was 1.44 MB of file for 80 KB of code. Outputs are stripped before anything is returned, and the saving is reported so you can see that what is missing was rendered charts rather than logic.

Reads are quota-limited by volume rather than by concurrency, and the quota refills over tens of seconds. Exhaustion is retried with backoff and, if it persists, reported as something to retry shortly rather than as a failure.


Scheduled Colab notebooks

A notebook in BigQuery Studio can have a schedule attached to it, and those runs are where scheduled work goes unwatched: nothing reports on them, so a notebook can fail nightly for weeks and the only symptom is a table that quietly stopped moving. On the platform this was built against, 354 of 7,061 runs had failed and none of it was visible.

Answering one question means joining three resources, which is most of why it was hard to see. The schedule is a Vertex AI Schedule (cron, timezone, paused or not); each run is a NotebookExecutionJob; the notebook is the same Dataform code asset list_code_assets lists — so a failing schedule leads straight to get_code_asset for the code that failed. That means a fourth API and a fourth permission, roles/aiplatform.viewer. Without it the three tools return an error naming the role and everything else works normally. No new dependency: this talks to Vertex AI over REST rather than pulling in google-cloud-aiplatform for two list endpoints.

Three things are worth knowing before trusting what you see:

  • A schedule reports itself healthy while its notebook fails. Every one of 49 live schedules reports its last scheduled run as OK — including one whose previous 79 runs had failed. OK means the scheduler successfully *launched* a job, not that the notebook ran. That field is what the console shows first, and it is exactly how this went unnoticed, so health here is always computed from execution jobs and the schedule's own status is never reported as one. A PAUSED schedule, meanwhile, is the single most common reason a notebook-written table went stale.
  • Outcome cannot be filtered server-side. Vertex AI rejects a jobState filter outright and caps pages at 100, so "show me the failures" means reading pages and filtering locally. Runs *are* ordered newest-first, which is what makes a bounded window affordable: lookback_days (30 by default, so monthly schedules show at least one run) stops the walk instead of scanning a year of history. 30 days is about 7 API calls; 90 is about 23.
  • Runs outlive the schedule that created them. Deleting and recreating a schedule is the normal way to edit one, so 7,061 live runs referenced 75 distinct schedules of which only 49 still existed. Those runs are real and their failures count, so they are labelled (schedule no longer exists) rather than dropped. For the same reason display names are not unique — two live schedules shared one — so an ambiguous name is an error listing the candidates and their ids, never a silently chosen first match.

data-platform-mcp doctor reports how many schedules are readable, how many are paused and how many failed in the last week.


Environments

One server answers questions about several targets — a warehouse and its staging copy, or two regions of the same project. Every tool takes an optional environment; omitting it uses the default.

# ~/.config/data-platform-mcp/config.toml

default_environment = "warehouse"

[environments.warehouse] project = "my-data-platform" impersonate = "data-platform-mcp-ro@my-data-platform.iam.gserviceaccount.com" dataset_allowlist = ["sales", "events"]

[environments.central] # same project, different region project = "my-data-platform" location = "us-central1"

See config.toml.example for every setting, or set BQ_MCP_ENVIRONMENTS to the same structure as JSON. A single `BQ_PROJECT` still works unchanged — it becomes one environment named default.

An environment can be named by its own name, an alias, the built-in shorthands (prod, stg, dev, live) or its project id. An unknown name is an error naming the valid options, never a silent fall back to the default: a typo that answered a production question from staging would be invisible in the reply. Every result echoes back the environment it came from.

Regions are why this matters most here. BigQuery cannot query across locations, and its error for trying names neither location, so it reads as a missing table. One environment per location; doctor reports which datasets are where.


Read-only as a property of the identity

The SELECT-only guard and the readOnlyHint annotations are promises about this code. Pointing the server at a service account that holds only roles/bigquery.jobUser and a dataset-scoped roles/bigquery.dataViewer makes it a fact about the credentials — enforced by IAM whatever the code does, and whatever your own roles allow:

data-platform-mcp setup --project my-data-platform --datasets sales,events

Creates the account, grants those two roles, and gives you roles/iam.serviceAccountTokenCreator on it so the server can impersonate it. Add --dry-run to see the commands first; it is safe to re-run.

With --datasets, the dataset allowlist stops being an if statement in this process and becomes a grant Google enforces.


macOS setup

Terminal.app is not Xcode. It ships with every Mac. What does *not* ship is the Xcode Command Line Tools, and an analyst's laptop usually has neither those nor Homebrew. Nothing here needs them — but it is easy to trip over by accident, because git, make, clang and the stock /usr/bin/python3 are stubs for that bundle: running any of them pops a system dialog offering to install about a gigabyte of developer tooling.

None of the commands below invoke one. They use only utilities macOS already has — curl, tar, sh, uname — because both installs are self-contained:

InstallWhy it needs nothing else
uvA standalone binary. Its installer never mentions Python, and it downloads its own to run the server.
Google Cloud CLIThe macOS tarball bundles its own Python (.install/bundled-python3-unix-darwin-*).

The whole terminal requirement is the three blocks below, once.

1. Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

which uvx # note this absolute path — Claude Desktop will need it

Typically /Users/ /.local/bin/uvx.

2. Install the Google Cloud CLI

Pick the build for your chip — uname -m prints arm64 for Apple Silicon, x86_64 for Intel:

# Apple Silicon

cu

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx