news 2026/9/15 0:51:19

MCP Toolbox 的 looker-get-connections 工具:用 MCP 一键枚举 Looker 全部数据库连接

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MCP Toolbox 的 looker-get-connections 工具:用 MCP 一键枚举 Looker 全部数据库连接

MCP Toolbox 的 looker-get-connections 工具:用 MCP 一键枚举 Looker 全部数据库连接

【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox

looker-get-connections是 MCP Toolbox 中 Looker 集成提供的一个只读工具,用于一次性返回 Looker 源中配置的全部数据库连接及其关键元数据(连接名、方言、默认 Schema、数据库、多数据库支持能力)。本文以 looker-get-connections 官方文档 为主体,结合仓库中该工具的 Go 实现与预置配置,讲解其功能、YAML 声明方式、输出结构以及底层实现原理,帮助你快速在自己的 MCP 配置中启用并正确使用它。

工具概览:无参数、全量返回

looker-get-connections的设计非常简单直接:它不接受任何参数,调用后返回 Looker 系统中配置的所有数据库连接。这在语义层驱动的 Agent 工作流中非常有用——LLM 往往需要先了解当前 Looker 实例上挂了哪些数据库、分别是什么方言,才能进一步发起查询、判断连接名合法性,或为下游工具(如 looker-get-connection-tables、looker-get-connection-schemas)提供正确的连接名参数。

从源码结构看,该工具的实现位于 lookergetconnections.go,通过常量resourceType = "looker-get-connections"在工具注册表中注册,并实现了tools.ToolConfigtools.Tool两个接口(ToolConfigTypeInitializeInvokeGetSourceNameValidateSource等)。其中Invoke方法不接受任何输入参数,直接通过 Looker SDK 拉取连接列表。

兼容的源类型

该工具声明了一个compatibleSource接口约束,要求其关联的源必须实现以下方法:

UseClientAuthorization() bool GetAuthTokenHeaderName() string LookerApiSettings() *rtl.ApiSettings GetLookerSDK(context.Context, string) (*v4.LookerSDK, error)

对应到配置层面,即type: looker的源。若声明的source不是兼容类型,工具在ValidateSource阶段就会返回“invalid source for …”错误,配置无法通过校验。

在配置文件中声明该工具

looker-get-connections本身是工具声明(kind: tool),必须关联到一个已经定义好的 Looker 源(kind: source)。官方文档给出的最小可运行示例:

kind: tool name: get_connections type: looker-get-connections source: looker-source description: | This tool retrieves a list of all database connections configured in the Looker system. Parameters: This tool takes no parameters. Output: A JSON array of objects, each representing a database connection and including details such as: - `name`: The connection's unique identifier. - `dialect`: The database dialect (e.g., "mysql", "postgresql", "bigquery"). - `default_schema`: The default schema for the connection. - `database`: The associated database name (if applicable). - `supports_multiple_databases`: A boolean indicating if the connection can access multiple databases.

字段参考表

fieldtyperequireddescription
typestringtrueMust be "looker-get-connections".
sourcestringtrueName of the source Looker instance.
descriptionstringtrueDescription of the tool that is passed to the LLM.

几个要点:

  • type必须严格为looker-get-connections。源码中该字段带validate:"required"标签,并且工具注册表按此字符串分发解析,写错类型将无法加载。
  • source必须指向一个type: looker的源名,例如上文示例中的looker-source
  • description是必填项。在Initialize中,如果cfg.Description == "",会直接返回description is required for tool ...错误。这段描述会被注入到 LLM 的上下文(tools.Manifest{Description: cfg.Description, ...}),用于让模型理解工具用途,因此建议写清参数与输出语义,如上例所示。
  • 可选的annotations字段可以覆盖工具的默认注解(该工具默认按只读注解NewReadOnlyAnnotations处理,因为它只做查询、不产生副作用)。

该 YAML 示例与仓库预置配置 looker-dev.yaml 中get_connections工具的声明完全一致,可直接参考使用。

定义 Looker 源:前置条件

由于工具本身无参数,它的可用性完全取决于关联源的配置。Looker 源(source.md)只使用 API 认证,你需要先在 Looker 中创建一个 API 用户,获取client_idclient_secret。一个典型配置如下:

kind: source name: looker-source type: looker base_url: ${LOOKER_BASE_URL} client_id: ${LOOKER_CLIENT_ID:} client_secret: ${LOOKER_CLIENT_SECRET:} verify_ssl: ${LOOKER_VERIFY_SSL:true} timeout: 600s use_client_oauth: ${LOOKER_USE_CLIENT_OAUTH:false} show_hidden_models: ${LOOKER_SHOW_HIDDEN_MODELS:true} show_hidden_explores: ${LOOKER_SHOW_HIDDEN_EXPLORES:true} show_hidden_fields: ${LOOKER_SHOW_HIDDEN_FIELDS:true}

注意事项(来自官方文档):

  • base_url形如https://looker.example.com不要带尾部斜杠;Looker 部署在本机时通常需要加上 API 端口,如https://looker.example.com:19999
  • verify_ssl几乎总是true(全小写),仅当 Looker 使用自签名证书时才改为false;任何非"true"的值都会被解释为false
  • client_id/client_secret是 Looker 服务器分配的一串随机字符;若使用 Looker OAuth 则无需填写。
  • 强烈建议用${ENV_NAME}环境变量替换方式注入敏感信息,不要把密钥硬编码进配置文件。
  • 如果使用 Conversational Analytics 相关工具,还需在源上配置projectlocation,并启用geminidataanalytics.googleapis.comcloudaicompanion.googleapis.com两个 GCP API 以及对应的 IAM 角色;但对于looker-get-connections这类常规工具,仅需 API 认证即可。

调用过程与输出结构

底层调用链

Invoke方法的核心逻辑如下:

  1. 通过source.GetLookerSDK(ctx, accessToken)获得 Looker SDK 客户端;
  2. 调用sdk.AllConnections("name, dialect(name), database, schema", ...),按字段列表拉取全部连接;
  3. 对每个连接再调用sdk.ConnectionFeatures(connName, "multiple_databases", ...),探测该连接是否支持多数据库;
  4. 将每条连接整理成 map 并聚合为一个 JSON 数组返回。

这里有一处值得注意的实现细节:返回字段名是dialect_nameschema,而不是文档描述中直译的dialectdefault_schema。源码中映射关系为:

vMap["name"] = *v.Name vMap["dialect_name"] = *v.Dialect.Name vMap["database"] = *v.Database // 仅当非空 vMap["schema"] = *v.Schema // 仅当非空 vMap["supports_multiple_databases"] = *conn.MultipleDatabases

因此该工具实际返回的 JSON 对象形如:

[ { "name": "my_mysql_conn", "dialect_name": "mysql", "database": "analytics", "schema": "public", "supports_multiple_databases": false }, { "name": "my_pg_conn", "dialect_name": "postgresql", "supports_multiple_databases": true } ]
  • name:连接的唯一标识,后续连接相关工具(tables/schemas/columns/databases)都需要它作为输入参数。
  • dialect_name:数据库方言名称(如mysqlpostgresqlbigquery等)。
  • database/schema:可能为空,源码中只有指针非空时才写入 map,因此字段可能缺席。
  • supports_multiple_databases:布尔值,来自 Looker 的连接特性探测结果。

错误处理与安全性

源码对调用做了防御性处理:SDK 返回 401 时映射为http.StatusUnauthorized的“unauthorized error”,其他错误走统一的ProcessGeneralError处理;工具在RequiresClientAuthorization/GetAuthTokenHeaderName中透传源的客户端授权配置,因此当源开启use_client_oauth时,会转发客户端的 OAuth 访问令牌,避免把长期凭证暴露给每个调用方。

测试验证

该工具的配置解析行为由 lookergetconnections_test.go 覆盖:

  • TestParseFromYamlLookerGetConnections:验证一段最小的 YAML(kind: tool/name/type: looker-get-connections/source/description)能被正确解析为Config,并断言字段值一致;
  • TestFailParseFromYamlLookerGetConnections:验证声明了未知字段(如method: GOT)时解析失败并给出明确的错误定位信息。

这说明“仅typesourcedescription三个必填字段、无其他可选参数”的行为是经过测试保证的,配置时不必也不能添加额外字段。

典型使用场景

在 MCP 驱动的 Looker 语义层问答工作流中,looker-get-connections通常承担“侦察”角色,常见组合:

  1. 连接发现:LLM 先调用get_connections,了解当前实例上有哪些数据库连接及各自方言;
  2. 元数据下钻:选定一个name后,配合 looker-get-connection-tables、looker-get-connection-schemas、looker-get-connection-table-columns 获取表、Schema、字段级别的元数据;
  3. 健康检查辅助:仓库中 lookerhealthpulse.go 的checkDBConnections也调用了AllConnections并按连接逐一执行TestConnection,可见连接枚举是 Looker 可观测性与运维类工具共用的基础能力。

小结

  • looker-get-connections是一个无参数、只读的工具,一次调用返回 Looker 实例的全部数据库连接与关键属性,是 Agent 理解 Looker 数据环境的入口。
  • 配置只需三要素:type: looker-get-connections、指向type: looker源的source,以及会被注入 LLM 上下文的description
  • 实际返回字段以源码为准:namedialect_namedatabaseschemasupports_multiple_databases;其中databaseschema在为空时不会出现在结果中。
  • 完整可运行的示例可参考仓库预置配置 looker-dev.yaml 与 Looker 工具文档目录 tools/。

【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 0:46:33

VS Code搭建STM32嵌入式AI编程环境:从工具链到AI插件

1. 为什么选择VS Code做嵌入式AI编程前端1.1 从Keil到VS Code:嵌入式开发工具的演变做嵌入式这些年,我最早是用Keil,后来换IAR,再后来被ST官方推到STM32CubeIDE上,前几年又切到了VS Code。每次换工具都有人说我折腾&am…

作者头像 李华
网站建设 2026/9/15 0:43:35

航拍孢子目标检测:小目标、高密度、低对比度专项调优指南

简介:本资源是面向农业智能监测、环境健康评估及生物学研究的航拍孢子目标检测YOLO数据集,专为YOLO系列模型(含YOLOv12等新版本)训练与验证设计,解决孢子颗粒在复杂背景下的高精度、多实例定位难题,适用于病…

作者头像 李华
网站建设 2026/9/15 0:38:45

跨链技术架构详解:从物理部署到协议选型的工程实践

1. 先搞清楚:为什么说跨链技术是个架构问题,而不是协议问题这两年和跨链打交道的次数越多,我越觉得一个事情很关键——跨链技术真正的难点其实不在于跑通一次资产转移,而在于怎么把两条完全异构、互相独立的链,拼成一个…

作者头像 李华
网站建设 2026/9/15 0:36:45

Redis宕机恢复:RDB与AOF持久化机制详解

1. Redis宕机恢复机制概述Redis作为高性能内存数据库,其数据持久化与恢复机制一直是运维工作的重点。当Redis实例意外宕机时,能否快速恢复数据直接关系到业务连续性。Redis提供了两种核心机制来应对这一挑战:RDB快照和AOF日志。在实际生产环境…

作者头像 李华
网站建设 2026/9/15 0:35:38

AI写作实用指南:高效赋能内容创作的方法与优势解析

读研/做科研,最忌讳“囤工具”——下载一堆软件,每款都浅尝辄止,反而浪费时间、拖慢效率。 这篇不贪多,只推荐4款「文献-数据-写作」全流程核心工具,每款都精细化拆解操作步骤、适配场景、避坑细节,甚至补…

作者头像 李华