可易

用全托管远程 MCP 服务器更快构建数据分析代理

可易团队阅读约 6 分钟

按六步用 ADK 接入 BigQuery 全托管远程 MCP:建项目、启用 API、加载 cymbal_pets、配置 OAuth,并在 Gemini CLI 中复用同一端点。

目录

#用全托管远程 MCP 服务器更快构建数据分析代理

把 AI 代理接到企业数据上,不必做复杂的定制集成,也不必花上数周开发。随着上个月发布面向 Google 服务的全托管远程 模型上下文协议(Model Context Protocol,MCP)服务器,你现在可以用 BigQuery MCP 服务器,让 AI 代理以直接、安全的方式分析数据。这个全托管 MCP 服务器去掉了管理开销,使你可以把精力放在开发智能代理上。

BigQuery 的 MCP 服务器支持也可以通过开源的 MCP Toolbox for Databases 获得,适合需要更多灵活性和对服务器更多控制的人。本文讨论并演示新发布的 全托管远程 BigQuery 服务器。截至 2026 年 1 月,该服务器处于预览(preview)。

远程 MCP 服务器运行在服务自身的基础设施上,并向 AI 应用提供 HTTP 端点。这使得 AI MCP 客户端与 MCP 服务器之间可以按既定标准通信。

BigQuery MCP 架构示意

MCP 通过一组已定义的工具,让由大语言模型驱动的应用直接访问分析数据,从而加快构建 AI 代理的过程。使用 Google OAuth 身份验证把 BigQuery MCP 服务器与 ADK 集成可以比较直接,下面会讨论 代理开发工具包(Agent Development Kit,ADK) 和 Gemini CLI。LangGraph、Claude code、Cursor IDE 或其他 MCP 客户端这类平台和框架,也可以在不费太大功夫的情况下接入。

我们开始。

在 ADK 中使用 BigQuery MCP 服务器

要用 ADK 构建 BigQuery 代理原型,按六步进行:

  1. 前提条件:建立项目、必要设置和环境。
  1. 配置:启用 MCP 和所需 API。
  1. 加载示例数据集。
  1. 创建 OAuth 客户端。
  1. 创建 Gemini API 密钥。
  1. 创建并测试代理。

重要:在规划生产部署,或让 AI 代理使用真实数据时,请遵守 AI 安全与安全保障 以及 稳定性 指南。

步骤 1:前提条件 > 配置与环境

1.1 建立 Cloud 项目 创建或使用已有的、已启用结算的 Google Cloud 项目。

1.2 用户角色 确保你的用户账号对项目具备以下权限:

  1. roles/bigquery.user(用于运行查询)
  1. roles/bigquery.dataViewer(用于访问数据)
  1. roles/mcp.toolUser(用于访问 MCP 工具)
  1. roles/serviceusage.serviceUsageAdmin(用于启用 API)
  1. roles/iam.oauthClientViewer(oAuth)
  1. roles/iam.serviceAccountViewer(oAuth)
  1. roles/oauthconfig.editor(oAuth)

1.3 建立环境 使用已安装 gcloud CLI 的 macOS 或 Linux 终端。

在 shell 中,用你的 Cloud PROJECT_ID 运行下面的命令,并登录你的 Google Cloud 账号;ADK 访问 BigQuery 需要这一步。

# Set your cloud project id in env variable
BIGQUERY_PROJECT=PROJECT_ID

gcloud config set project ${BIGQUERY_PROJECT}
gcloud auth application-default login

按提示完成身份验证。

步骤 2:配置 > 用户角色与 API

2.1 启用 BigQuery 和 MCP API 运行下面的命令,启用 BigQuery API 和 MCP API。

gcloud services enable bigquery.googleapis.com --project=${BIGQUERY_PROJECT}
gcloud beta services mcp enable bigquery.googleapis.com --project=${BIGQUERY_PROJECT}

步骤 3:加载示例数据集 > cymbal_pets 数据集

3.1 创建 cymbal_pets 数据集 这次演示使用 cymbal_pets 数据集。运行下面的命令,从公共存储桶加载 cymbal_pets 数据库:

# Create the dataset if it doesn't exist (pick a location of your choice)
# You can add --default_table_expiration to auto expire tables.
bq --project_id=${BIGQUERY_PROJECT} mk -f --dataset --location=US cymbal_pets

# Load the data
for table in products customers orders order_items; do
bq --project_id=${BIGQUERY_PROJECT} query --nouse_legacy_sql \
    "LOAD DATA OVERWRITE cymbal_pets.${table} FROM FILES(
        format = 'avro',
        uris = [ 'gs://sample-data-and-media/cymbal-pets/tables/${table}/*.avro']);"
done

步骤 4:创建 OAuth 客户端 ID

4.1 创建 OAuth 客户端 ID 我们将使用 Google OAuth 连接到 BigQuery MCP 服务器。

  1. 在 Google Cloud 控制台中,前往 Google Auth Platform > Clients > Create client
  • 将 Application type 的值选为 “Desktop app”
  • 客户端创建后,务必复制 Client ID 和 Secret,并妥善保存。

可选:如果你为 OAuth 客户端使用了另一个项目,用你的 CLIENT_ID_PROJECT 运行:

gcloud beta services mcp enable bigquery.googleapis.com --project=CLIENT_ID_PROJECT

注意[仅限 Cloud Shell 用户]: 如果你使用 Google Cloud Shell,或使用 localhost 以外的任何托管环境,必须创建 “Web application” 类型的 OAuth Client ID。

对于 Cloud Shell 环境:

  • “Authorized JavaScript origins” 的值使用下面这条命令的输出:

echo "https://8000-$WEB_HOST"

  • “Authorized redirect URIs” 的值使用下面这条命令的输出:

echo "https://8000-$WEB_HOST/dev-ui/"

(Cloud Shell 中的 URI 是临时的,会在当前会话结束后失效)

注意: 如果决定使用 Web 服务器,则需要使用 “Web Application” 类型的 OAuth Client,并填入相应的域名和重定向 URI。

步骤 5:Gemini 的 API 密钥

5.1 为 Gemini 创建 API 密钥 在 API Keys 页面 创建 Gemini API 密钥。使用 ADK 访问 Gemini 模型时需要这个密钥。

步骤 6:创建 ADK Web 应用

6.1 安装 ADK 要安装 ADK 并初始化代理项目,请按 ADK 的 Python 快速入门 中的说明操作。

6.2 新建 ADK 代理 现在,为我们的 BigQuery 远程 MCP 服务器集成创建一个新代理。

adk create cymbal_pets_analyst

#When prompted, choose the following:
#2. Other models (fill later)

6.3 配置 env 文件 运行以下 common,用下面这些变量及其实际值更新 cymbal_pets_analyst/.env 文件。

cat >> cymbal_pets_analyst/.env <<EOF
GOOGLE_GENAI_USE_VERTEXAI=FALSE
GOOGLE_CLOUD_PROJECT=BIGQUERY_PROJECT
GOOGLE_CLOUD_LOCATION=REGION
GOOGLE_API_KEY=AI_STUDIO_API_KEY
OAUTH_CLIENT_ID=YOUR_CLIENT_ID
OAUTH_CLIENT_SECRET=YOUR_CLIENT_SECRET
EOF

6.4 更新代理代码 编辑 cymbal_pets_analyst/agent.py,用下面的代码替换文件内容。

import os
from google.adk.agents.llm_agent import Agent
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
from google.adk.auth.auth_credential import AuthCredential, AuthCredentialTypes
from google.adk.auth import OAuth2Auth
from fastapi.openapi.models import OAuth2
from fastapi.openapi.models import OAuthFlowAuthorizationCode
from fastapi.openapi.models import OAuthFlows
from google.adk.auth import AuthCredential
from google.adk.auth import AuthCredentialTypes
from google.adk.auth import OAuth2Auth

def get_oauth2_mcp_tool():
    auth_scheme = OAuth2(
        flows=OAuthFlows(
            authorizationCode=OAuthFlowAuthorizationCode(
                authorizationUrl="https://accounts.google.com/o/oauth2/auth",
                tokenUrl="https://oauth2.googleapis.com/token",
                scopes={
                    "https://www.googleapis.com/auth/bigquery": "bigquery"
                },
            )
        )
    )
    auth_credential = AuthCredential(
        auth_type=AuthCredentialTypes.OAUTH2,
        oauth2=OAuth2Auth(
            client_id=os.environ.get('OAUTH_CLIENT_ID', ''),
            client_secret=os.environ.get('OAUTH_CLIENT_SECRET', '')
        ),
    )

    bigquery_mcp_tool_oauth = McpToolset(
        connection_params=StreamableHTTPConnectionParams(
            url='https://bigquery.googleapis.com/mcp'),
        auth_credential=auth_credential,
        auth_scheme=auth_scheme,
    )
    return bigquery_mcp_tool_oauth


root_agent = Agent(
    model='gemini-3-pro-preview',
    name='root_agent',
    description='Analyst to answer all questions related to cymbal pets store.',
    instruction='Answer user questions, use the bigquery_mcp tool to query the cymbal pets database and run queries.',
    tools=[get_oauth2_mcp_tool()],
)

6.5 运行 ADK 应用 在包含 cymbal_pets_analyst 文件夹的父目录中运行这条命令。

adk web --port 8000 .

打开浏览器,访问 http://127.0.0.1:8000/,或访问你运行 ADK 的主机,并从下拉框中选择你的代理名称。你现在有了自己的代理,可以回答关于 cymbal pets 数据的问题。当代理连接到 MCP 服务器时,它会启动 OAuth 流程,你可以授予访问权限。

你可以注意到,在第二个提示中不再需要指定项目 ID。这是因为代理可以从对话中推断出这一信息。

ADK 中向 cymbal pets 数据提问

可以问的一些问题:

  • my_project 里有哪些数据集?
  • cymbal_pets 数据集里有哪些表?
  • 获取 cymbal_pets 数据集中 customers 表的架构
  • 找出美国西部区域 cymbal pet 商店近 3 个月按体量排名前 3 的订单。识别下单客户及其电子邮件 ID。
  • 能不能改成前 10 个订单,而不是最靠前的那一个?
  • 过去 6 个月哪种产品卖得最多?

在 Gemini CLI 中使用 BigQuery MCP 服务器

要使用 Gemini CLI,可以在 ~/.gemini/settings.json 中使用下面的配置。如果已有配置,需要把它合并到 mcpServers 字段下。

{
  "mcpServers": {
    "bigquery": {
      "httpUrl": "https://bigquery.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/bigquery"
        ]
      }
    }
  }
}

然后用 gcloud 完成身份验证。

gcloud auth application-default login --clien-id-file YOUR_CLIENT_ID_FILE

运行 Gemini CLI。

gemini
Gemini CLI 连接 BigQuery MCP

给你的代理使用的 BigQuery MCP 服务器

你可以把 BigQuery 工具集成进开发工作流,并用大语言模型和 BigQuery MCP 服务器创建智能数据代理。集成基于单一标准协议,兼容各主要代理开发 IDE 和框架。当然,在为生产环境构建代理或将其用于真实数据之前,请务必遵循 AI 安全与安全保障 指南。

我们期待看到你如何利用 BigQuery MCP 服务器开发数据分析生成式 AI 应用。

PRIMARY_SOURCE: https://cloud.google.com/blog/products/data-analytics/using-the-fully-managed-remote-bigquery-mcp-server-to-build-data-ai-agents

  • #BigQuery
  • #MCP
  • #ADK
  • #OAuth
  • #数据分析