深入解析 MCP Toolbox 的 alloydb-get-instance 工具:AlloyDB 实例详情查询实战指南
2026/9/14 10:14:57 网站建设 项目流程

深入解析 MCP Toolbox 的 alloydb-get-instance 工具:AlloyDB 实例详情查询实战指南

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

导读

alloydb-get-instance是 MCP Toolbox(MCP Toolbox for Databases,面向数据库的开源 MCP Server)中负责查询单个 AlloyDB 实例详情的只读管理工具。本文以该工具的官方文档为骨架,结合仓库内 工具实现、alloydb-admin 数据源实现 与 单元测试、集成测试,完整讲解其四个必填参数、YAML 配置方式、底层 REST 调用链与参数校验逻辑。读完本文,你将能够在自己的 MCP Toolbox 配置中独立接入并正确使用该工具,让 Agent 安全、只读地获取指定 AlloyDB 实例的元数据。

工具定位:面向单个实例的只读查询

alloydb-get-instance的核心职责非常聚焦:检索并返回某一个指定 AlloyDB 实例的详细信息。它不执行任何写操作,属于管理面(Admin)只读查询工具。

在 MCP Toolbox 的 AlloyDB Admin 工具集中,它与 alloydb-list-instances(列举某集群下的全部实例)、alloydb-get-cluster(查询集群)形成互补:列表工具回答"有哪些",本工具回答"这一个的详情是什么"。从源码看,它在初始化时使用tools.NewReadOnlyAnnotations生成 MCP Tool 注解(见 alloydbgetinstance.go),即该工具在 MCP 协议层即被声明为只读(ReadOnlyHint),可供 Agent 放心调度,不会产生副作用。

参数详解:四个必填字符串

依据原文档,该工具接受四个参数,全部为必填 string 类型

参数类型必填说明
projectstring要查询的 GCP 项目 ID
locationstring实例所在区域(例如us-central1
clusterstring集群 ID
instancestring要检索的实例 ID

这四个参数在运行时并非"传了就完事",工具内部会逐一做严格校验。在 Invoke 方法 中,projectlocationclusterinstance任何一个缺失或不是字符串,都会立即返回 Agent 可读的错误(util.NewAgentError,提示 "invalid or missing ... parameter; expected a string"),而不会向 GCP API 发起无效请求。

关于 project 参数的智能预填

从源码结构看,project参数有一个值得注意的优化细节:buildParams会根据数据源是否配置了defaultProject动态调整参数定义(alloydbgetinstance.go):

  • 未配置默认项目时,参数描述为The GCP project ID.,需要 Agent 向用户询问;
  • 已配置默认项目时,参数被预填默认值,描述变为 "This is pre-configured; do not ask for it unless the user explicitly provides a different one",引导 Agent 优先使用既定项目、仅在用户显式指定时才询问,从而减少交互轮次。

前置条件:必须绑定 alloydb-admin 数据源

该工具不能独立使用,必须挂载到一个alloydb-admin类型的 source 上。工具通过compatibleSource接口约束源的能力(alloydbgetinstance.go),要求源必须实现GetInstance(ctx, project, location, cluster, instance, accessToken)方法。若配置中引用的 source 不是alloydb-admin类型,ValidateSource会直接报错:"invalid source for ... not a compatible type"。

alloydb-admin源(配置说明见 source.md)本质是 Google AlloyDB REST API 的客户端封装,支持两种认证方式:

  1. Application Default Credentials(ADC,默认):初始化时通过google.FindDefaultCredentials获取凭据,适用于服务器端运行;
  2. 客户端 OAuth(Client-side OAuth):在 source 配置中将useClientOAuth设为true,由客户端(如浏览器)每次请求时提供 OAuth 2.0 访问令牌(见 alloydbadmin.go)。

一个最小可用的 source 配置如下:

kind: source name: my-alloydb-admin type: alloydb-admin

若希望由客户端提供令牌,则追加useClientOAuth: true。此外源还支持defaultProject(预填默认 GCP 项目,正是上文project参数预填的来源)与readOnly(设为true时抑制写类管理工具)。

配置示例:在工具清单中声明该工具

原文档给出的标准配置片段如下:

kind: tool name: get_specific_instance type: alloydb-get-instance source: my-alloydb-admin-source description: Use this tool to retrieve details for a specific AlloyDB instance.

各字段含义(来自原文档 Reference 表,并经 Config 结构体 印证):

字段类型必填说明
typestring必须为alloydb-get-instance
sourcestring一个alloydb-admin类型 source 的名称
descriptionstring传给 Agent 的工具描述,帮助模型判断何时调用

关于description:它是可选的,但若省略,工具会在Initialize时自动填充默认描述 "Retrieves details about a specific AlloyDB instance."(alloydbgetinstance.go)。对于要让 Agent 精准选工具的场景,建议总是编写一句业务语义清晰的描述。

开箱即用的预置配置

仓库还提供了可直接参考的预置配置 alloydb-postgres-admin.yaml,其中把get_instance声明为type: alloydb-get-instance,并与create_clustercreate_instancelist_instancesget_clusterget_user等工具共同组织进alloydb_postgres_admin_tools工具集。若你只想要只读查询能力,可以只保留 source 与本工具对应的片段:

kind: source name: alloydb-admin-source type: alloydb-admin defaultProject: ${ALLOYDB_POSTGRES_PROJECT:} readOnly: ${ALLOYDB_POSTGRES_READONLY:false} --- kind: tool name: get_instance type: alloydb-get-instance source: alloydb-admin-source

其中${VAR:}是环境变量占位符语法,冒号后为默认值(空),便于把项目 ID 等敏感信息从配置中抽离。

底层原理:从参数到 AlloyDB REST 调用的完整链路

理解源码有助于排障与性能预期。一次alloydb-get-instance调用在仓库内部经历如下链路:

  1. 配置注册:工具包在init()中通过tools.Register("alloydb-get-instance", newConfig)将类型注册进全局注册表(alloydbgetinstance.go),注册机制见 tools.go。
  2. 参数校验Invoke依次校验四个必填参数的类型与空值,任一不合法即返回 Agent 错误,不触网。
  3. REST 调用:调用数据源的GetInstance方法,构造资源路径并请求 AlloyDB API:
urlString := fmt.Sprintf("projects/%s/locations/%s/clusters/%s/instances/%s", project, location, cluster, instance) resp, err := service.Projects.Locations.Clusters.Instances.Get(urlString).Do()

(见 alloydbadmin.go)

这对应 Google AlloyDB REST API 的projects.locations.clusters.instances.get端点。响应为 AlloyDBInstance资源对象,包含实例类型(PRIMARY / READ_POOL)、数据库标志、网络配置、节点数等元数据,工具将其原样返回给 Agent。

  1. 错误归一化:API 调用失败时,工具通过util.ProcessGcpError将 GCP 错误转换为 MCP Toolbox 统一错误格式(alloydbgetinstance.go),确保上层 Agent 拿到结构化、可理解的错误信息,而不是原始 HTTP 报文。

认证与授权的两种路径

工具本身Authorized恒返回true,真正的鉴权委托给数据源:当 source 配置了useClientOAuth时,RequiresClientAuthorization返回truegetService会使用调用方传入的accessToken构造带StaticTokenSource的新客户端;否则复用初始化阶段基于 ADC 构建的共享客户端(alloydbadmin.go)。这意味着"谁在调用"决定令牌来源,部署在 GCP 内的服务可用 ADC,面向 Web 客户端则走 OAuth 流程。

测试验证:解析、集成与 MCP 三层保障

仓库对该工具提供了三层测试,可作为理解其行为的补充证据:

  • YAML 解析单元测试alloydbgetinstance_test.go:验证kind: tool / type: alloydb-get-instance配置能被正确反序列化为Config,并覆盖了authRequired声明认证服务列表的场景(解析后写入AuthRequired字段)。
  • 集成测试alloydb_integration_test.go:在本地起服务后通过http://127.0.0.1:5000/api/tool/alloydb-get-instance/invoke发起真实调用,验证对真实 AlloyDB 实例的查询返回。
  • MCP 协议测试alloydb_mcp_test.go:通过 MCP 工具调用接口传入参数并断言返回,验证工具在 MCP 会话中的端到端可用性。

典型使用场景与注意事项

  • 场景一:Agent 运维巡检:让 Agent 先调用alloydb-list-instances枚举实例,再对某个关心的实例调用alloydb-get-instance获取其类型、节点配置、状态等详情,用于容量评估或故障排查。
  • 场景二:创建操作的后续确认:配合alloydb-create-instance(其返回的是长时运行操作)与alloydb-wait-for-operation使用,在操作完成后通过本工具核对实例最终状态。
  • 注意事项
    • 四个参数均为必填且拼写必须与集群/实例实际 ID 完全一致,否则 API 会返回 404 类错误;
    • location应使用 AlloyDB 支持的区域名称(如us-central1),与集群创建时一致;
    • 若 source 配置了readOnly: true,写类工具会被抑制,但本工具不受影响——它本身就是只读工具,可在只读模式下放心使用。

总结

alloydb-get-instance是 MCP Toolbox AlloyDB Admin 工具集中最常用的只读查询入口之一:四个必填参数定义清晰、配置声明简单(一行type+ 一行source)、底层直连 AlloyDB REST API 且自带参数校验与错误归一化。结合本文展示的 工具源码、数据源实现 与 预置配置,你可以快速将其纳入自己的 MCP 工具清单,让 Agent 安全、准确地获取任意指定 AlloyDB 实例的完整信息。

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询