MCP Toolbox 的 alloydb-admin 数据源:通过 MCP 管理 AlloyDB 集群、实例与用户
【免费下载链接】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 开源项目中的alloydb-adminsource,讲解如何通过这一 MCP 数据源连接 Google AlloyDB API,在 AI Agent 工作流中完成集群、实例与数据库用户的管理任务。读完本文,你将掌握alloydb-admin的两种认证模式(ADC 与客户端 OAuth)、完整配置字段、十个内置管理工具的用法,以及源码层面的实现原理,可直接在本地或远程 MCP 部署中配置与使用。
About:alloydb-admin 是什么
alloydb-admin是 MCP Toolbox for Databases 提供的一个 source(数据源),它封装了 Google AlloyDB 的管理平面 API 客户端,使 MCP 工具能够对 AlloyDB 资源执行管理任务,例如:
- 创建、查询、列出集群(Cluster)
- 创建、查询、列出实例(Instance)(PRIMARY 主实例与 READ_POOL 读池)
- 创建、查询、列出数据库用户(User)
- 轮询**长时运行操作(long-running operation)**的状态
从源码结构看,该数据源对应仓库中的 internal/sources/alloydbadmin/alloydbadmin.go,其注册名SourceType常量即为"alloydb-admin"(见 源码第 35 行),并通过sources.Register在init()中完成注册。它内部基于google.golang.org/api/alloydb/v1这一官方 Go 客户端与服务端通信,服务端基地址为https://alloydb.googleapis.com。
两种认证方式
alloydb-admin支持两种与 AlloyDB API 进行认证的方式,在 source.md 中定义如下:
- Application Default Credentials(ADC):默认方式。数据源使用 ADC 向 API 认证,适用于服务账号、本地 gcloud 环境等标准 GCP 认证场景。
- 客户端侧 OAuth(Client-side OAuth):当
useClientOAuth设为true时,数据源期望客户端(例如 Web 浏览器场景下的前端应用)在每次请求中提供 OAuth 2.0 访问令牌。
源码对这两种模式的落地可以在Initialize与getService两个方法中看到:
Initialize(internal/sources/alloydbadmin/alloydbadmin.go#L66-L100):当UseClientOAuth为假时,调用google.FindDefaultCredentials(ctx, alloydbrestapi.CloudPlatformScope)获取默认凭据,并用oauth2.NewClient包装出携带 ADC TokenSource 的 HTTP 客户端;为真时则直接使用裸 HTTP 客户端(认证令牌由后续请求提供)。两种情况下都会包装UserAgentRoundTripper,以便在 API 请求中注入统一的 User-Agent。getService(internal/sources/alloydbadmin/alloydbadmin.go#L126-L137):在客户端 OAuth 模式下,每次调用都会用请求携带的accessToken构造oauth2.StaticTokenSource并创建独立的 AlloyDB service 实例;在 ADC 模式下则复用Initialize阶段创建的服务实例。
这一设计意味着:客户端 OAuth 模式下每个请求都可携带独立的用户级令牌,适合多租户或前端直连场景;而 ADC 模式将凭据解析收敛在初始化阶段,适合服务端长期运行的工作负载。
配置字段参考
alloydb-adminsource 的配置字段如下表所示(原文档 Reference 完整字段):
| field | type | required | description |
|---|---|---|---|
| type | string | true | 必须为"alloydb-admin"。 |
| defaultProject | string | false | 用于 AlloyDB 基础设施类工具默认采用的 Google Cloud 项目 ID。 |
| useClientOAuth | boolean | false | 若为true,数据源将使用客户端侧 OAuth 进行授权;否则使用 Application Default Credentials。默认值为false。 |
| readOnly | boolean | false | 若设为true,将抑制具有写能力的 admin 工具(如create_cluster、create_instance、create_user)。默认值为false。 |
这些字段与源码中Config结构体的 YAML 标签一一对应(internal/sources/alloydbadmin/alloydbadmin.go#L54-L60):
type Config struct { Name string `yaml:"name" validate:"required"` Type string `yaml:"type" validate:"required"` DefaultProject string `yaml:"defaultProject"` UseClientOAuth bool `yaml:"useClientOAuth"` ReadOnly bool `yaml:"readOnly"` }其中readOnly的行为由Source.IsReadOnly()(源码第 110-112 行)暴露给框架层,框架据此决定是否注册写型工具;defaultProject通过GetDefaultProject()提供给工具层,作为工具未显式传入 project 参数时的兜底值。
配置示例
原文档给出了两份 YAML 配置示例,一份使用 ADC 默认认证,一份启用客户端 OAuth:
kind: source name: my-alloydb-admin type: alloydb-admin --- kind: source name: my-oauth-alloydb-admin type: alloydb-admin useClientOAuth: true基于字段表可补充更完整的配置写法(以下为演示用途,实际按需选取字段):
kind: source name: my-alloydb-admin type: alloydb-admin defaultProject: my-gcp-project-id readOnly: falsekind: source name: my-oauth-alloydb-admin type: alloydb-admin useClientOAuth: true defaultProject: my-gcp-project-id注意name是必填项,且后续工具配置中的source字段必须引用此处定义的数据源名称。
可用的管理工具
alloydb-admin数据源配套了 10 个管理工具,均位于 docs/en/integrations/alloydb-admin/tools/ 目录,按功能可分为三类:
集群管理
- alloydb-create-cluster(文档):在指定项目和位置创建新的 AlloyDB for PostgreSQL 集群,集群将获得私网 IP。参数:
project(必填)、cluster(必填,唯一标识)、password(必填,初始用户密码)、location(可选,默认us-central1)、network(可选,VPC 网络名,默认default)、user(可选,初始超级用户名,默认postgres)。 - alloydb-list-clusters(文档):列出指定项目下全部或指定位置的集群详细信息(集群名、状态、配置等)。参数:
project(必填)、location(可选,默认-表示所有位置)。 - alloydb-get-cluster(文档):获取单个指定集群的详细信息。参数:
project、location、cluster均必填。
实例管理
- alloydb-create-instance(文档):在指定集群内创建新实例(
PRIMARY或READ_POOL),实例将获得公网 IP。参数:project、location、cluster、instance均必填;instanceType(可选,PRIMARY/READ_POOL,默认PRIMARY)、displayName(可选)、nodeCount(可选,读池节点数,仅READ_POOL需要,默认1)。该工具还会将password.enforce_complexity数据库标志置为on,要求新数据库密码满足复杂度规则。 - alloydb-list-instances(文档):列出指定项目、集群与位置下的实例信息(实例名、类型、IP、状态、配置等)。参数:
project(必填)、cluster(可选,默认-表示所有集群)、location(可选,默认-表示所有位置)。 - alloydb-get-instance(文档):获取单个指定实例的详细信息。参数:
project、location、cluster、instance均必填。
用户管理
- alloydb-create-user(文档):在指定集群内创建数据库用户,支持
ALLOYDB_BUILT_IN(内置密码用户)与ALLOYDB_IAM_USER(IAM 用户,官方推荐)两种类型。参数:project、cluster、location、user、userType均必填;password(仅内置用户需要)、databaseRoles(可选,授予新用户的数据库角色列表,如pg_read_all_data)。 - alloydb-list-users(文档):列出指定集群内的所有数据库用户。参数:
project、cluster、location均必填。 - alloydb-get-user(文档):获取指定集群内单个用户的详细信息。参数:
project、location、cluster、user均必填。
操作轮询工具
- alloydb-wait-for-operation(文档):轮询 AlloyDB Admin API 的操作状态端点,直到长时运行操作完成,采用指数退避策略。参数:
project、location、operation均必填。工具级可配置delay(初始轮询间隔,默认 3s)、maxDelay(最大间隔,默认 4m)、multiplier(倍率,默认 2.0)、maxRetries(最大尝试次数,默认 10)。官方文档特别提示:该工具面向带人工参与的开发者助手工作流,不应在生产环境的自主 Agent 中使用。
工具配置同样使用 YAML,例如在 source 之后声明工具并引用 source 名称:
kind: tool name: create_cluster type: alloydb-create-cluster source: my-alloydb-admin description: Use this tool to create a new AlloyDB cluster in a given project and location.源码中的调用链佐证
从源码可以看到这些工具的底层实现均是对 AlloyDB REST 客户端的类型安全封装(internal/sources/alloydbadmin/alloydbadmin.go#L143-L325):
CreateCluster组装Cluster请求体(含NetworkConfig.Network形如projects/{project}/global/networks/{network}的 VPC 引用与InitialUser初始用户),随后调用Projects.Locations.Clusters.Create(...).ClusterId(cluster).Do()。CreateInstance组装Instance请求体,固定启用公网 IP(EnablePublicIp: true),对READ_POOL类型设置ReadPoolConfig.NodeCount。CreateUser对ALLOYDB_BUILT_IN类型写入Password,并支持DatabaseRoles。- 创建类操作均返回长时运行操作(long-running operation),这正是
wait_for_operation工具存在的意义:GetOperations持续轮询直至op.Done为真,若操作失败会序列化错误信息返回;操作成功后,若响应中包含实例资源名,还会按connectionMessageTemplate模板生成 AlloyDB 连接信息(见 generateAlloyDBConnectionMessage)。
预构建配置:alloydb-postgres-admin
仓库在 internal/prebuiltconfigs/tools/alloydb-postgres-admin.yaml 中提供了一份可直接复用的预构建配置,启动时通过--prebuilt alloydb-postgres-admin加载(详见 prebuilt 配置文档)。该配置将上述 10 个工具组织为名为alloydb_postgres_admin_tools的 toolset,并支持以下环境变量:
ALLOYDB_POSTGRES_PROJECT(可选):作为 AlloyDB 基础设施工具的默认 GCP 项目 ID,对应 source 的defaultProject。ALLOYDB_POSTGRES_READONLY(可选):设为true时抑制写型 admin 工具(如create_cluster、create_instance、create_user),对应 source 的readOnly,默认false。
同时,工具执行所需的 IAM 权限(与各工具文档一致):
- AlloyDB Viewer(
roles/alloydb.viewer):list与get类工具所需。 - AlloyDB Admin(
roles/alloydb.admin):create类工具所需。
另外请确保目标 GCP 项目已启用AlloyDB API,且执行工具的用户或服务账号具备roles/alloydb.admin、roles/owner或roles/editor之一。
使用前置条件与限制
- 仅面向AlloyDB for PostgreSQL的管理平面(控制面)操作;数据平面的 SQL 访问由其他 source(如
alloydbpg)提供。 readOnly: true只抑制写型工具,不影响读型工具的注册。wait_for_operation依赖指数退避参数,超时上限由maxRetries与maxDelay共同决定,适用于人工确认节奏的开发场景。
综上,alloydb-admin是 MCP Toolbox 中 AlloyDB 基础设施自动化的入口:一份 source 配置即可让 Agent 完成从创建集群、扩容读池到授权用户的完整生命周期管理,且 ADC / 客户端 OAuth 双模式覆盖了服务端与浏览器端两类主流部署形态。
【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考