
在 Google Cloud Run 上部署 MCP Toolbox 连接 LookerOAuth 认证与 Gemini CLI 实战指南【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox本篇技术指南以 MCP Toolbox for Databases 的官方示例文档为主体完整讲解如何将 Looker 的 MCP 服务端部署到 Google Cloud Run并通过 OAuth 与 Gemini CLI 实现终端用户级认证。读完本文你将掌握 Cloud Run 容器部署参数--prebuilt、--port、--mcp-prm-file等、PRM 保护资源元数据文件的配置方法以及 Gemini CLI 的 OAuth 授权流程让 AI 助手能够直接查询 Looker 的模型、Explore 与数据。背景为什么把 Looker MCP Toolbox 跑在 Cloud Run 上Looker 是一款基于 Web 的商业智能与数据管理工具其核心价值在于提供语义层Semantic Layer将底层数据库抽象为模型Model、Explore、维度和度量方便业务人员与 AI Agent 进行低门槛查询。在 MCP Toolbox 中Looker 以looker类型的 source 接入服务端通过 Looker SDKAPI v4.0与 Looker 实例通信详见 internal/sources/looker/looker.go 中的SourceType注册与Initialize实现。将 Toolbox 部署为 Cloud Run 服务有两大收益共享资源Toolbox 可作为多用户共享的 MCP 服务端借助 OAuth 传递每个终端用户的身份令牌无需在服务端保存 Looker 的 Client ID 与 Client Secret免运维Cloud Run 自动管理实例伸缩、负载均衡与 HTTPS 证书无需自建代理服务器。本部署方案依赖 Toolbox v0.14.0 及以上的 OAuth 与 PRMProtected Resource Metadata保护资源元数据能力。部署前需要理解的三类配置在动手操作 Cloud Run 控制台之前先弄清本次部署涉及的三个核心配置来源它们共同决定了服务端的行为1.--prebuilt预构建工具集--prebuiltlooker,looker-dev是本次部署的容器启动参数之一它告诉 Toolbox 加载两个预构建配置。其实现位于 cmd/internal/options.go 的LoadConfig参数按逗号切分后通过prebuiltconfigs.Get(sourceName)读取内置 YAML再解析为服务器配置。两个配置文件的差异如下预构建名配置文件覆盖工具lookerinternal/prebuiltconfigs/tools/looker.yaml数据发现与 BI 工具集looker_toolsget_models、get_explores、get_dimensions、get_measures、query、query_sql、get_looks、run_look、get_dashboards、run_dashboard等 23 个工具looker-devinternal/prebuiltconfigs/tools/looker-dev.yamlLookML 开发运维工具集looker_dev_toolshealth_pulse、health_analyze、dev_mode、get_projects、get_project_files、create_project_file、validate_project、Git 分支管理等 30 个工具两份配置文件中的 source 定义完全一致因此无论加载哪个工具集连接的都是同一个 Looker 实例。2. Looker source 的环境变量从 looker.yaml 第 15-26 行可以看到source 的每个字段都支持${ENV_NAME:default}形式的环境变量替换。本次 Cloud Run 部署涉及的关键变量环境变量默认值说明LOOKER_BASE_URL无必填Looker 服务器地址不含尾部/如https://looker.example.com本地部署的 Looker 可能需要追加 API 端口如https://looker.example.com:19999LOOKER_USE_CLIENT_OAUTHfalse置为true时服务端将客户端如 Gemini CLI传来的 OAuth 访问令牌直接转发给 Looker无需 Client ID/SecretLOOKER_CLIENT_ID/LOOKER_CLIENT_SECRET空使用服务端 API 认证时才需要开启客户端 OAuth 后无需设置见 docs/en/integrations/looker/source.mdLOOKER_VERIFY_SSLtrue是否校验 Looker 服务器证书仅在使用自签名证书时才应设为falseLOOKER_SHOW_HIDDEN_MODELS等true是否在工具输出中展示隐藏的模型 / Explore / 字段在源码 internal/sources/looker/looker.go 的newConfig中这些默认值被显式初始化如UseClientOAuth: false、Timeout: 600s。Initialize方法中有一处关键分支当use_client_oauth为false时要求必须提供client_id与client_secret否则返回错误而当其为true时则走transportWithAuthHeader通道把每次请求携带的Authorization头原样透传给 Looker——这正是无 Client Secret 的多用户共享得以成立的根本原因。3. PRM 文件MCP 服务端认证的元数据--mcp-prm-file/app/prm_file指定了手动编写的 PRM JSON 文件路径。根据 docs/en/reference/cli.md该参数会覆盖服务端自动生成的 PRM。PRM 向 MCP 客户端如 Gemini CLI声明本服务的资源地址、可用的授权服务器以及支持的 scope。第一步在 Cloud Run 中部署 Toolbox 服务进入 Google Cloud Console 的 Cloud Run 概览页按以下步骤创建服务1. 选择部署方式。点击 Deploy container部署容器而不是连接代码仓库。2. 配置镜像与基础信息。将 Image name 设置为官方镜像us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest将 Service name 设为looker-mcp-toolbox选择 Region并记录页面显示的 Endpoint URL后续配置 Gemini CLI 时要用到。将 Authentication 设置为 Public因为认证将由 Looker OAuth 层完成Cloud Run 本身放行公开访问。3. 设置伸缩与入口流量。Service scaling 选择 Auto最小实例数设为1避免冷启动导致 OAuth 回调超时Ingress 选择 All。4. 展开高级配置。打开 Containers, Networking, Security 下拉面板进入后续配置。5. 配置容器启动参数。在 Container settings 的 Container arguments 中填入--prebuiltlooker,looker-dev --port8080 --address0.0.0.0 --mcp-prm-file/app/prm_file各参数含义如下完整参数表见 docs/en/reference/cli.md--prebuiltlooker,looker-dev同时加载标准 BI 工具集与 LookML 开发工具集二者以逗号分隔该参数在 cmd/internal/options.go 中按逗号拆分为多个预构建配置分别加载--port8080服务监听端口与容器声明的端口一致Cloud Run 默认期望容器监听 8080--address0.0.0.0绑定所有网络接口使 Cloud Run 的请求能到达容器本地运行时默认仅监听127.0.0.1--mcp-prm-file/app/prm_file指定挂载的 PRM 文件路径。6. 配置环境变量。在 Variables Secrets 中新增两个变量变量名值LOOKER_BASE_URL你的 Looker 服务器 URL如https://my-company.looker.comLOOKER_USE_CLIENT_OAUTHtrue注意LOOKER_USE_CLIENT_OAUTHtrue之后source 不再要求LOOKER_CLIENT_ID与LOOKER_CLIENT_SECRET这是 OAuth 方案能免去服务端密钥的根本原因。7. 挂载 PRM 密钥卷。在 Container Volumes 中挂载一个 Secret Volume挂载路径为/app。创建名为prm_file的 Secret内容为 PRM JSON例如{ resource: https://your-cloud-run-url/mcp, authorization_servers: [https://your-looker-instance.looker.com], scopes_supported: [cors_api] }字段说明resource本 MCP 服务的资源标识即你的 Cloud Run 端点 URL 追加/mcpauthorization_servers允许进行 OAuth 授权的服务器即 Looker 实例地址。Looker 的 OAuth 流程要求应用预先注册client_guid与redirect_uri见下文第二步scopes_supported支持的 OAuth scope 列表Looker API 场景使用cors_api。8. 授予 Secret 读取权限。若 Cloud Run 使用的计算服务账号无法读取 Secret需要前往 IAM 为该身份授予 Secret Manager Secret Accessor 角色。9. 创建服务。点击右下角 Done再点击 Create 启动服务。10. 验证服务健康。在浏览器中访问端点 URL 加/.well-known/oauth-protected-resource。该端点由 Toolbox 按 OAuth 受保护资源元数据规范暴露返回 JSON 形式的 PRM 信息即代表服务与 PRM 挂载均正常。第二步在 Looker 中注册 OAuth 应用为了让 Looker 作为授权服务器参与 OAuth 流程需要在 Looker 的 API Explorer 应用中注册 OAuth 客户端应用可能需要管理员协助步骤参见 docs/en/integrations/looker/samples/looker_gemini_oauth/_index.md打开 API Explorer找到 Register OAuth App 并点击 Run It将client_guid设为gemini-cli将redirect_uri设为http://localhost:7777/oauth/callbackdisplay_name与description可填写 Gemini-CLI 或任意有意义的名称将enabled设为true勾选确认该 API 会变更数据的复选框点击 Run。第三步配置 Gemini CLI 通过 OAuth 连接1. 编辑$HOME/.gemini/settings.json加入如下配置段其中httpUrl使用第一步记录的 Endpoint URL 并追加/mcpmcpServers: { looker: { httpUrl: https://your-cloud-run-url/mcp, oauth: { clientId: gemini-cli, redirectUri: http://localhost:7777/oauth/callback } } },由于服务端已通过--mcp-prm-file提供了 PRM 元数据Gemini CLI 可以自动发现授权服务器与 scope因此无需在settings.json中手动填写authorizationUrl、tokenUrl与scopes这与本地直连 Looker 时的完整 OAuth 配置不同详见 docs/en/integrations/looker/samples/looker_gemini_oauth/_index.md。2. 启动 Gemini CLI 并授权。执行命令/mcp auth lookerGemini CLI 将启动 OAuth 流程在浏览器中打开 Looker 的授权页面。批准访问后客户端会持有访问令牌并在后续每次 MCP 请求中通过Authorization头发送给 ToolboxToolbox 端由GetLookerSDK将该令牌透传给 Looker API见 internal/sources/looker/looker.go 中transportWithAuthHeader.RoundTrip对Authorization头的处理从而以你本人的身份查询数据。3. 验证端到端链路。在 Gemini CLI 中提问What Looker models do I have access to?该提问会触发get_models工具返回当前用户在 Looker 中有权访问的 LookML 模型列表。能正常返回即代表Cloud Run 服务 → OAuth 令牌 → Looker API整条链路已打通。安全加固建议原文档特别提醒部署完成后务必阅读 Toolbox CLI Reference 中 Hardening Toolbox 一节并按需在 Container arguments 中追加安全参数。以下几条与 Cloud Run 场景强相关限制 Host 校验防 DNS Rebinding--allowed-hosts默认值为*在公网环境应将 Host 限定为你的服务域名例如--allowed-hostslooker-mcp-toolbox-xxxx.a.run.app。攻击者可能诱导浏览器向该域名发起请求从而绕过浏览器同源策略控制你的 Toolbox限制 CORS 来源--allowed-origins默认值为*若服务仅由命令行客户端如 Gemini CLI访问可显式收紧或仅列出可信前端地址限制请求体大小--http-max-request-bytes默认10485760约 10 MB可根据查询场景适当调整防止超大请求耗尽内存关闭不必要能力若你的场景用不到可考虑通过--disable-ext关闭自定义 MCP 扩展的宣告。需要重申的是预构建配置官方定位为面向可信开发者的 build-time 用途。若服务面向不可信调用方应在容器参数中叠加上述加固项并在 IAM、网络与 Secret 权限上遵循最小权限原则。总结通过本文的部署你已经得到一套完整的Looker MCP Toolbox Cloud Run Gemini CLI技术栈Cloud Run 负责弹性托管与 HTTPS 终结Toolbox 以--prebuiltlooker,looker-dev暴露 50 余个 Looker 数据与 LookML 开发工具PRM 文件与LOOKER_USE_CLIENT_OAUTHtrue协同实现无服务端密钥的终端用户 OAuth 认证。整个链路中AI 助手可以像业务分析师一样发现模型、构建查询、运行 Look 与仪表盘甚至直接在开发模式下编辑 LookML 项目——而这些能力都通过你本人的身份完成鉴权。【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考