MCP Toolbox 中的 cloud-sql-create-database 工具:通过 MCP 在 Cloud SQL 实例中创建数据库
【免费下载链接】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 提供了cloud-sql-create-database工具,让 LLM Agent 能够通过 Model Context Protocol 直接在指定的 Cloud SQL 实例中创建新数据库,无需人工登录控制台或调用 Cloud SQL Admin API。本文完整覆盖该工具的参数定义、YAML 配置方式与底层实现,并结合 MCP Toolbox 的源码与预置配置,讲清project参数默认值注入、破坏性操作标注和权限要求等细节,帮助你在自己的 Agent 应用中安全地编排 Cloud SQL 库的自动化创建流程。
工具定位:cloud-sql-admin 源的建库能力
cloud-sql-create-database工具属于 MCP Toolbox 的 Cloud SQL Admin 工具族,其前置依赖是一个cloud-sql-admin类型的 source。根据 Cloud SQL Admin Source 文档,该 source 封装了对 Cloud SQL Admin API 的访问,使工具能够执行创建用户、创建数据库等管理操作。
source 侧的鉴权支持两种模式:
- ADC(Application Default Credentials):默认模式,source 使用 ADC 与 API 认证;
- Client-side OAuth:当配置
useClientOAuth: true时,source 期望由客户端(如浏览器)为每个请求提供 OAuth 2.0 access token。
source 配置示例(引自 source 文档):
kind: source name: my-cloud-sql-admin type: cloud-sql-admin --- kind: source name: my-oauth-cloud-sql-admin type: cloud-sql-admin useClientOAuth: truesource 的完整参考字段如下:
| field | type | required | description |
|---|---|---|---|
| type | string | true | 必须为"cloud-sql-admin" |
| defaultProject | string | false | 用于 Cloud SQL 基础设施工具的 GCP project ID |
| useClientOAuth | boolean | false | 为true时使用客户端 OAuth 鉴权,否则使用 ADC。默认false |
| readOnly | boolean | false | 为true时屏蔽所有具备写能力的管理工具。默认false |
这些字段在源码 cloud_sql_admin.go 中均有对应:DefaultProject、UseClientOAuth、ReadOnly三个 YAML 标签直接映射到 source 的解析结构上,GetDefaultProject()与UseClientAuthorization()方法则分别向工具暴露默认项目配置与鉴权模式。
工具参数详解
工具的调用参数共 3 个,全部为必填字符串(引自 工具文档):
| parameter | type | required | description |
|---|---|---|---|
| project | string | true | The project ID. |
| instance | string | true | The ID of the instance where the database will be created. |
| name | string | true | The name for the new database. Must be unique within the instance. |
project 参数的动态默认值机制
值得注意的是,project参数对 LLM 呈现的形态会随 source 配置而变化。从工具源码 cloudsqlcreatedatabase.go 的buildParams函数可以看到两种分支:
- 当 source未配置
defaultProject时,project是一个普通的必填字符串参数,描述为 "The project ID",需要由 LLM 或用户在调用时提供; - 当 source已配置
defaultProject时,该值被烤进(baked into)project参数作为默认值,且参数描述变为:"The GCP project ID. This is pre-configured; do not ask for it unless the user explicitly provides a different one."——明确指示 LLM 不要重复向用户追问项目 ID。
这个设计在 MCP 工具调用中很关键:它既保证了参数 schema 的一致性,又避免了 Agent 在已经预配置项目的环境下产生冗余提问。参数解析与取值逻辑发生在resolveParams中,该方法在工具初始化后通过compatibleSource接口调用source.GetDefaultProject()拿到默认项目,再据此构建参数集。
配置示例与 Reference 字段
在 MCP Toolbox 的 server 配置文件中,将该工具装配进 server 的 YAML 如下(引自工具文档):
kind: tool name: create-cloud-sql-database type: cloud-sql-create-database source: my-cloud-sql-admin-source description: "Creates a new database in a Cloud SQL instance."工具配置层面的参考字段:
| field | type | required | description |
|---|---|---|---|
| type | string | true | 必须为"cloud-sql-create-database" |
| source | string | true | 要使用的cloud-sql-adminsource 的名称 |
| description | string | false | 工具的描述 |
从源码 cloudsqlcreatedatabase.go 可以补充两点文档未展开的实现细节:
- 默认描述:
Initialize方法中,若未显式提供description,会回退到内置的 "Creates a new database in a Cloud SQL instance."; - 破坏性操作标注:工具通过
tools.NewDestructiveAnnotations应用注解。从源码结构看,这意味着该工具会被 MCP 客户端标记为具有副作用/破坏性语义,便于 Agent 框架在调用前执行确认或审计策略。
单元测试 cloudsqlcreatedatabase_test.go 验证了上述 YAML 能被正确解析为Config结构体(Type、Source、Description字段逐一比对),确保配置格式与文档一致。
底层调用链:从工具调用到 Cloud SQL Admin API
工具Invoke方法的执行流程是:
- 将传入的 source 断言为
compatibleSource接口(要求 source 实现GetDefaultProject()、UseClientAuthorization()与CreateDatabase(...)三个方法),不匹配则返回客户端错误; - 从参数映射中取出
project、instance、name,任一缺失都会返回 Agent 错误(如 "missing 'project' parameter"); - 调用
source.CreateDatabase(ctx, name, project, instance, accessToken),其中accessToken在 client-side OAuth 模式下承载客户端提供的令牌; - 出错时通过
util.ProcessGcpError将 GCP API 错误转换为结构化的 Toolbox 错误返回给 MCP 客户端。
source 侧的实际 API 调用在 cloud_sql_admin.go 的CreateDatabase方法中:它构造一个sqladmin.Database资源对象(包含Name、Project、Instance三个字段),先通过GetService获取带鉴权的 Cloud SQL Admin API 服务实例,再执行service.Databases.Insert(project, instance, &database).Do(),即标准 Cloud SQL Admin API 的databases.insert调用;失败时错误被包装为 "error creating database" 并沿调用链向上传播。整个链路没有本地状态,是一次直接的 API 透传,因此调用耗时与 Cloud SQL 控制面的响应时间一致。
在预置配置中的装配方式
MCP Toolbox 内置了多个包含该工具的预置配置,均位于 internal/prebuiltconfigs/tools 目录:
- cloud-sql-postgres-admin.yaml
- cloud-sql-mysql-admin.yaml
- cloud-sql-mssql-admin.yaml
- cloud-sql-postgres.yaml
- cloud-sql-mysql.yaml
- cloud-sql-mssql.yaml
以cloud-sql-postgres-admin预置配置为例,其 source 与工具的装配方式为:
kind: source name: cloud-sql-admin-source type: cloud-sql-admin defaultProject: ${CLOUD_SQL_POSTGRES_PROJECT:} readOnly: ${CLOUD_SQL_POSTGRES_READONLY:false} --- kind: tool name: create_database type: cloud-sql-create-database source: cloud-sql-admin-source可以看出两点:
defaultProject通过环境变量CLOUD_SQL_POSTGRES_PROJECT注入(未设置时为空),这正好触发前述"project 参数动态默认值"机制;readOnly通过CLOUD_SQL_POSTGRES_READONLY控制,置为true时 source 会屏蔽create_database这类写工具,使预置配置可以安全地以只读形态部署。
权限要求
create_database工具的权限要求可在 Cloud SQL for PostgreSQL Admin 预置配置文档 中找到:它归属Cloud SQL Editor(roles/cloudsql.editor)角色,即"管理现有资源"的权限层级——低于create_instance、create_user所需的 Cloud SQL Admin 角色,也高于list_databases、get_instance等 Cloud SQL Viewer 只读工具。部署时为调用身份授予该角色即可使用建库能力,同时不必下放实例级管理权限,符合最小权限原则。
测试与验证
仓库提供了两层测试覆盖该工具:
- 单元测试 cloudsqlcreatedatabase_test.go:验证 YAML 配置解析,确保
kind: tool/type: cloud-sql-create-database的配置块被正确映射到Config结构; - 集成测试 cloud_sql_create_database_test.go:在
tests/cloudsql目录下针对真实 Cloud SQL 环境验证端到端建库流程。
小结
cloud-sql-create-database是 MCP Toolbox 中 Cloud SQL Admin 工具族的写入类工具,配置成本极低(一个cloud-sql-adminsource 加一个三行 tool 块),核心能力是透传 Cloud SQL Admin API 的databases.insert。工程上使用它时建议关注三点:为 source 配置defaultProject以减少 LLM 追问;利用readOnly开关和roles/cloudsql.editor最小角色控制写入权限;并留意该工具带有 destructive 注解,在 Agent 工作流中可对它施加调用前确认策略。
【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考