@ergut/mcp-bigquery-server

中文文档
1.0.4发布于 2026/04/20MITES Module近 30 天下载 8335

用于与 BigQuery 数据库交互的 MCP 服务器

中文使用文档
文档目录17 节
  1. 这是什么
  2. 快速示例
  3. 怎么样
  4. 我们能做什么
  5. 哪个设定适合你?
  6. 快速启动 QQ
  7. 先决条件
  8. 备选案文1:通过Smithery快速安装(建议——简单模式)
  9. 备选案文2:手动设置(保护模式——用于敏感数据)
  10. 配置
  11. 保护敏感数据QQ
  12. 安全模型:合作护栏,不是SQL防火墙
  13. 保护模式
  14. 外地访问限制
  15. 自动敏感场扫描仪
  16. 需要权限
  17. 本地构建( 可选) QQ

大查询 MCP 服务器

smithery badge

BigQuery MCP Server Logo

这是什么

这是允许您 LLMs( 如 Claude) 直接与您的大查询数据交谈的服务器 ! 把它当成一个友好的翻译,坐在你的AI助手和数据库之间,确保他们能够安全而高效地聊天.

快速示例

You: "What were our top 10 customers last month?"
Claude: *queries your BigQuery database and gives you the answer in plain English*

不再用手写 SQL 查询 - 只是自然地与您的数据聊天!

怎么样

这个服务器使用模型背景协议(MCP),它就像AI-数据库通信的通用翻译. 虽然MCP被设计为与任何AI模型一起工作,但现在它可以作为克洛德桌面的开发者预览.

这就是你要做的:

  1. 设置认证(见下文)
  2. 将您的工程细节添加到 Claude 桌面配置文件
  3. 开始自然地与你的大查询数据聊天!

我们能做什么

  • 用简单的英语提问来运行 SQL 查询
  • 访问数据集中的表格和已实现视图
  • 探索具有明确资源类型标签的数据集计划(表与视图)
  • 在可配置的安全限度内分析数据(通过配置.json配置)
  • 保护敏感数据 ——定义现场访问限制,以阻止AI代理阅读PII,PHI,财务数据和秘密. 代理人在如何使用聚合物或 EXCEPT 因此,在不披露个别记录的情况下仍然有用.
  • 自动发现敏感字段 ——自动扫描您整个大查询数据仓库,以查找匹配敏感图案的列(名称,电子邮件,SSN,医疗记录,API密钥等)并添加到限制列表中. 每次扫描时自动保护新的表格和列——不需要手动维护.
  • 完全可配置 - 一切由我们驱动 config.json。添加你自己的检测模式,以匹配您的组织命名惯例(例如, %guardian_name%, (中文(简体) ), %beneficiary%),调整扫描频率,设定计费限额,并定义每表字段限制. 扫描器在下次运行时会拾取您的自定义模式,并自动保护所有数据集中的任何匹配列.

哪个设定适合你?

简单模式保护模式
使用时间个人项目、非敏感数据PHI,PII,财务数据,HIPAA监管环境
安装npx 或Smithery——不需要本地设置切开这个叉子,用一个 config.json
实地限制无定义 preventedFields 以阻断敏感列
自动扫描器不详在所有数据集自动发现敏感列
设置备选案文1 下级备选案文2 下级

敏感数据的当地部署为何重要: LLM推断发生在云中. 当一个AI代理询问BigQuery时,结果被发送到LLM提供者的服务器(Anthropic,OpenAI等)进行处理——它们离开你的网络. 大查询 IAM 控制谁可以 到达 您的数据; 字段限制控制什么 AI 剂在 LLM 反应中浮出水面这些是不同的保护界限。 配置 preventedFields 确保 PHI 和 PII 永远不输入 LLM 对话框上下文,无论代理运行的查询次数如何.

快速启动 QQ

先决条件

  • 节点.js 14或以上
  • Google Cloud 工程已启用
  • 已安装 Google Cloud CLI 或服务账户密钥文件
  • Claude桌面( 目前唯一支持的 LLM 接口)

为 Claude 桌面自动安装大查询 MCP 服务器 史密斯术在终端中运行此命令 :

npx @smithery/cli install @ergut/mcp-bigquery-server --client claude

安装器会提示您:

  • 您的谷歌云项目 ID
  • 大查询位置( 默认为 us- Central1)

一旦配置完毕, Smithery 将自动更新您的 Claude 桌面配置并重新启动应用程序 .

备选案文2:手动设置(保护模式——用于敏感数据)

如果您处理敏感数据或需要外地访问限制:

说明: 这个 npx @ergut/mcp-bigquery-server 命令安装已发布的上游软件包,该软件包尚未包括“保护模式”。 直至 此公关 合并并发布新版本,使用下面的本地建筑.

  1. 使用 Google 云认证 (选择一种方法):

    • 使用 Google Cloud CLI( 伟大的开发) :
      gcloud auth application-default login
      
    • 使用服务账户(建议生产):
      # Save your service account key file and use --key-file parameter
      # Remember to keep your service account key file secure and never commit it to version control
      
  2. 切开这个叉并在当地建造:

    git clone https://github.com/drharunyuksel/mcp-bigquery-server
    cd mcp-bigquery-server
    npm install && npm run build
    
  3. 添加到您的 Claude 桌面配置 将此添加到您的 claude_desktop_config.json数字 :

    • 配置文件的基本配置 :

      {
        "mcpServers": {
          "bigquery": {
            "command": "node",
            "args": [
              "/path/to/mcp-bigquery-server/dist/index.js",
              "--project-id",
              "your-project-id",
              "--location",
              "us-central1",
              "--config-file",
              "/path/to/config.json"
            ]
          }
        }
      }
      
    • 有服务账户和配置文件 :

      {
        "mcpServers": {
          "bigquery": {
            "command": "node",
            "args": [
              "/path/to/mcp-bigquery-server/dist/index.js",
              "--project-id",
              "your-project-id",
              "--location",
              "us-central1",
              "--key-file",
              "/path/to/service-account-key.json",
              "--config-file",
              "/path/to/config.json"
            ]
          }
        }
      }
      
  4. 开始聊天! 打开 Claude 桌面, 开始询问您的数据 .

配置

服务器支持可选 config.json 用于高级配置的文件。 没有配置文件(即没有) --config-file 旗下),服务器运行在有安全默认的简单模式下(1GB查询限制,没有字段限制). 为了保护,通过 --config-file /path/to/config.json 当启动服务器时.

配置. json 结构

{
  "maximumBytesBilled": "1000000000",
  "preventedFields": {
    "healthcare.patients": ["first_name", "last_name", "ssn", "date_of_birth", "email"],
    "billing.transactions": ["credit_card_number", "bank_account"]
  },
  "sensitiveFieldPatterns": [
    "%first_name%", "%last_name%", "%email%",
    "%ssn%", "%date_of_birth%", "%password%"
  ],
  "sensitiveFieldScanFrequencyDays": 1
}
设置默认说明
maximumBytesBilled"1000000000" (1GB) (中文(简体) )每个查询计费的最大字节
preventedFields{}限制字段的逐行绘图
sensitiveFieldPatterns内置套装SQL 类似自动发现模式
sensitiveFieldScanFrequencyDays1自动扫描之间的天数( A)0 要禁用)

命令行参数

  • --project-id: (需要) 您的 Google Cloud 项目 ID
  • --location: (可选)大查询位置,默认为"US"
  • --key-file: (可选) 服务账户密钥 JSON 文件路径
  • --config-file: (可选) 配置文件路径, 默认为“ config.json”
  • --maximum-bytes-billed: (可选) 覆盖为查询计费的最大字节, 覆盖配置. json 值

使用服务账户的例子 :

npx @ergut/mcp-bigquery-server --project-id your-project-id --location europe-west1 --key-file /path/to/key.json --config-file /path/to/config.json --maximum-bytes-billed 2000000000

保护敏感数据QQ

数据仓库经常包含高度敏感的信息——病人记录,社会保障号码,财务数据,个人联系细节,认证机密等. 当一个AI代理可以直接访问 查询您的大查询仓库, 循环中没有人能阻止它读取敏感的列。简单的查询类似 SELECT * FROM patients 可能会在一次答复中披露数千PII/PHI记录.

这个服务器让管理员对AI代理可以访问的列进行精细控制,确保敏感数据保留被保护,同时仍然允许AI对非敏感字段进行有用的分析查询.

安全模型:合作护栏,不是SQL防火墙

重要内容: 此服务器中的字段限制和表格允许列表被设计为 人工智能特工的合作护卫而不是作为对抗攻击者的安全界限.

威胁模式是直截了当的:当一个AI代理询问您大查询仓库时,查询结果会被发送到LLM提供者的服务器. 现场限制使得毒剂无意中在这些结果中包括了敏感的一栏(PII,PHI,秘密). 当代理遇到限制错误时,它会读取错误消息中的指针并重写它的查询——使用集合函数, EXCEPT 条款,或只是删除所限制的字段。 在实践中,大赦国际人员立即和一贯地合作.

该系统使用基于regex的SQL分析来检测受限制的战地使用. 我们在开发过程中进行了穿透测试,并固定了几个绕行向量(结构化外形扩展、共通逃逸、隐含) SELECT *) (中文(简体) ). 然而,基于regex的解析不能保证覆盖每一个可能的 SQL 构造——可能存在涉及深层嵌入式CTE的边缘案例,异地大查询语法,或对抗式的查询设计. 执行逻辑旨在 关闭失败 (阻断模糊的查询而不是允许查询),但这不等同于数据库一级的安全政策.

这是:

  • 防止AI代理在正常使用时访问敏感数据的有效指导
  • 安全网,可捕捉常见的查询模式SELECT *,直接字段引用,别名)
  • 对通过穿透测试发现的已知绕行技术进行加固

这不是:

  • 替换大查询 IAM、列级安全或行级访问政策
  • 对恶意的人类故意编造绕行查询的辩护
  • 认证的 SQL 解析器 — 它使用图案匹配, 不是完整的 AST

对于需要严格合规保障的环境,将这些护栏和大Query的本土结合 列级安全 财务报告和审定财务报表 授权意见。 。 。 .

保护模式

服务器支持三种保护模式,通过 protectionMode 内 config.json数字 :

模式说明默认时间
off无保护——所有桌子和字段都可以使用没有配置文件
allowedTables表格允许列表——仅可查询列表中的表格必须明确设置
autoProtect敏感字段的自动扫描,执行 preventedFields配置文件不存在 protectionMode 键

allowedTables 模式

将AI代理限制在一组特定的表格内。 对任何其他表格的查询立即被拒绝。 在允许的表格中选择定义字段限制 :

{
  "protectionMode": "allowedTables",
  "maximumBytesBilled": "10000000000",
  "allowedTables": [
    "analytics.page_views",
    "analytics.sessions",
    "reporting.daily_summary"
  ],
  "preventedFieldsInAllowedTables": {
    "analytics.page_views": ["user_ip", "user_agent"]
  }
}
  • preventedFieldsInAllowedTables 是可选的——默认为 {} (允许的表格中没有字段限制)
  • 自动扫描的 没有 在此模式下运行——所有限制都是手动配置的
  • INFORMATION_SCHEMA 总是允许查询 用于计划发现

autoProtect 模式(外地限制)

原保护模式. 为敏感列自动扫描您的大查询数据集并强制执行 preventedFields手动输入 preventedFields 持续通过扫描(合并仅是添加剂)。 详见下文.

没有配置文件 protectionMode 继续工作——它们默认为 autoProtect 用于向后兼容.

外地访问限制

定义 preventedFields 在您的配置中阻止 AI 代理访问特定列 :

{
  "preventedFields": {
    "healthcare.patients": ["first_name", "last_name", "ssn", "date_of_birth", "email"],
    "billing.transactions": ["credit_card_number", "bank_account"]
  }
}

当AI代理试图访问一个被限制的字段时会发生什么:

SELECT first_name, last_name, diagnosis FROM healthcare.patients

服务器屏蔽了查询并返回一个清晰,启发性错误 :

Restricted fields detected for table "healthcare.patients" columns "first_name", "last_name".
You can only use these columns inside ["count", "countif", "avg", "sum"]
aggregate functions or exclude them with SELECT * EXCEPT (...).

AI代理从这个错误中学习,并自动调整它的查询. 它仍然可以运行不暴露个人敏感值的分析查询:

-- Allowed: aggregate functions don't expose individual values
SELECT COUNT(first_name) AS patient_count, diagnosis
FROM healthcare.patients
GROUP BY diagnosis

-- Allowed: explicitly excluding restricted fields
SELECT * EXCEPT(first_name, last_name, ssn, date_of_birth, email)
FROM healthcare.patients

查询模式参考 :

查询模式行为
SELECT restricted_col FROM table以错误消息被屏蔽
SELECT * FROM table被封锁(将暴露受限制的字段)
SELECT * EXCEPT(restricted_cols) FROM table允许
COUNT(restricted_col), (中文(简体) ), AVG(...), (中文(简体) ), SUM(...), (中文(简体) ), COUNTIF(...)允许( 汇总不显示个人价值)
MIN(restricted_col), (中文(简体) ), MAX(restricted_col)被屏蔽(返回实际个人价值)
SELECT non_restricted_col FROM table允许
SELECT id FROM table WHERE restricted_col = '...'封锁(见下文注)
SELECT id FROM table ORDER BY restricted_col封锁(见下文注)

注: 限制字段、命令BY和其他条款被封锁不只是SELECT里的田园 尽管查询结果并不包含被限制的一栏,但完整的SQL查询文本作为对话的一部分被发送给了LLM提供者. 查询像 WHERE email = '[email protected]' 表示受限值出现在发送到云的提示中. 执行检查整个查询,以防止受限制的数据以任何形式离开您的网络.

服务器侧日志 : 每个被屏蔽的查询都登录在服务器侧面,让管理员了解AI代理试图访问的内容:

Query tool error: Error: Restricted fields detected for table "healthcare.patients" columns "first_name", "last_name".

自动敏感场扫描仪

手动列出数百个表格中每一个敏感一栏是不切实际的。 服务器包括一个自动扫描仪,可以发现跨越的敏感列 全部 通过查询查询查询您最大的数据集 INFORMATION_SCHEMA.COLUMNS 与可配置的 SQL 像图案。 发现的字段自动添加到 preventedFields 在你的配置.

如何运作

  1. 扫描器运行 SQL 类似模式, 匹配您大查询项目中的所有列名
  2. 匹配图案的列 %first_name%, (中文(简体) ), %ssn%, (中文(简体) ), %email% 确定为敏感
  3. 发现的列被合并到您的配置中 preventedFields
  4. 合并是 仅添加剂 ——人工添加的限制永远不会被去除

服务器启动时自动扫描

MCP 服务器启动时, 它会检查配置文件是否基于 Stale sensitiveFieldScanFrequencyDays。如果 stale,它会自动扫描和更新配置 :

Config is stale (scan frequency: 1 day(s)), running sensitive field scan...
Scanning all datasets for sensitive fields...
Found 1166 sensitive column(s) across 278 table(s)
Scan complete: config updated with 278 tables.

这意味着 自动保护带有敏感列的新表格 没有手动配置。 随着数据仓库的扩大 扫描仪不断更新.

通过 CLI 手动扫描

随时进行扫描:

npm run scan-fields -- --project-id your-project-id --config-file ./config.json

您组织的自定义模式

默认模式涵盖常见的命名惯例(名称,电子邮件,SSN,出生日期,医疗记录号码,保险ID,密码,API密钥等),但每个组织都有自己的. 添加自定义模式以匹配您的方案 :

{
  "sensitiveFieldPatterns": [
    "%first_name%", "%last_name%", "%email%", "%ssn%",
    "%date_of_birth%", "%password%", "%api_key%",
    "%guardian_name%",
    "%emergency_contact%",
    "%beneficiary%",
    "%next_of_kin%"
  ]
}

在下一个自动扫描( 或手动) 上 npm run scan-fields),扫描仪将匹配您新模式的列取出并自动添加到 preventedFields。随着您数据仓库的增长和新表格的添加,任何匹配您模式的列都是 自动保护 没有人工干预.

扫描器配置

设置默认说明
sensitiveFieldPatterns包含姓名、联系人、身份、保险和秘密的内设套件SQL 喜欢匹配列名的图案
sensitiveFieldScanFrequencyDays1 (日语)隔几天自动扫描 设定 0 以禁用自动扫描.

需要权限

你需要一个这个:

  • roles/bigquery.user (建议)
  • 或两者兼有:
    • roles/bigquery.dataViewer
    • roles/bigquery.jobUser

本地构建( 可选) QQ

运行一个本地建筑而不是 npx 用于促进、测试更改或运行被绑定的版本。 支持简单模式和保护模式.

# Clone and install
git clone https://github.com/ergut/mcp-bigquery-server
cd mcp-bigquery-server
npm install

# Build
npm run build

然后更新您的 Claude 桌面配置以指向您的本地建筑 :

  • 简单模式 (没有配置文件) :

    {
      "mcpServers": {
        "bigquery": {
          "command": "node",
          "args": [
            "/path/to/your/clone/mcp-bigquery-server/dist/index.js",
            "--project-id",
            "your-project-id",
            "--location",
            "us-central1"
          ]
        }
      }
    }
    
  • 保护模式 (带有配置文件):

    {
      "mcpServers": {
        "bigquery": {
          "command": "node",
          "args": [
            "/path/to/your/clone/mcp-bigquery-server/dist/index.js",
            "--project-id",
            "your-project-id",
            "--location",
            "us-central1",
            "--key-file",
            "/path/to/service-account-key.json",
            "--config-file",
            "/path/to/config.json"
          ]
        }
      }
    }
    

## Current Limitations ⚠️

- The configuration examples above are shown for Claude Desktop and Claude Code, but any MCP-compatible client can use this server — provide the same JSON configuration to your AI agent and it will adapt to its own setup
- Queries are read-only with configurable processing limits (set in config.json)
- While both tables and views are supported, some complex view types might have limitations
- A config.json file is optional; without one the server uses safe defaults

## Support & Resources 💬

- 🐛 [Report issues](https://github.com/ergut/mcp-bigquery-server/issues)
- 💡 [Feature requests](https://github.com/ergut/mcp-bigquery-server/issues)
- 📖 [Documentation](https://github.com/ergut/mcp-bigquery-server)

## License 📝

MIT License - See [LICENSE](LICENSE) file for details.

## Author ✍️ 

Salih Ergüt

## Sponsorship

This project is proudly sponsored by:

<div align="center">
  <a href="https://www.oredata.com">
    <img src="assets/oredata-logo-nobg.png" alt="OREDATA" width="300"/>
  </a>
</div>

## Version History 📋

See [CHANGELOG.md](CHANGELOG.md) for updates and version history.

版本与发布记录

@ergut/mcp-bigquery-server 共发布 5 个版本,首次发布于 2024/12/04;过去 12 个月发布了 1 个版本。

版本发布日期距今
1.0.4latest2026/04/206 个月前
1.0.32025/04/031.6 年前
1.0.22025/04/031.6 年前
1.0.12025/04/031.6 年前
0.1.02024/12/041.9 年前

关于 @ergut/mcp-bigquery-server 的常见问题

@ergut/mcp-bigquery-server 是什么?

用于与 BigQuery 数据库交互的 MCP 服务器

如何安装 @ergut/mcp-bigquery-server?

在项目目录运行 npm install @ergut/mcp-bigquery-server,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mcp-server-bigquery,可以用 npx mcp-server-bigquery 直接运行。

@ergut/mcp-bigquery-server 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/ergut__mcp-bigquery-server 是否存在。

@ergut/mcp-bigquery-server 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@ergut/mcp-bigquery-server 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=14.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@ergut/mcp-bigquery-server 可以商用吗?

@ergut/mcp-bigquery-server 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@ergut/mcp-bigquery-server 的下载量有多少?

根据 npm 官方下载统计,@ergut/mcp-bigquery-server 在 2026/10/14 – 2026/11/12 这 30 天内被下载 8,335 次,日均约 278 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ergut/mcp-bigquery-server 还在维护吗?

最新版本 1.0.4 发布于 2026/04/20(6 个月前);至今共发布 5 个版本,其中过去 12 个月发布了 1 个;首次发布于 2024/12/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。