使用 MCP Toolbox 搭建 AlloyDB for PostgreSQL MCP Server:配置、认证与数据库运维实战
【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox
导读
本文以 docs/ALLOYDBPG_README.md 为骨架,系统讲解如何在 MCP Toolbox for Databases 项目中部署 AlloyDB for PostgreSQL MCP Server,覆盖前置条件、安装方式、环境变量配置、MCP 客户端接入,以及工具集背后的源码级实现原理。读完本文,你将能够在一分钟内完成 AlloyDB 与 AI 开发工具的 MCP 对接,并通过自然语言完成建表查询、性能监控、扩展管理与故障排查等日常数据库运维工作。
一、AlloyDB for PostgreSQL MCP Server 是什么
AlloyDB for PostgreSQL 是 Google Cloud 提供的高性能 PostgreSQL 兼容托管数据库服务。本项目(MCP Toolbox for Databases)通过 internal/sources/alloydbpg/alloydb_pg.go 中注册的alloydb-postgres数据源类型(const SourceType string = "alloydb-postgres"),将该数据库能力封装为标准 Model Context Protocol(MCP)服务器。
配置了该 MCP Server 的编辑器或 AI 助手,可以对 AlloyDB 资源进行全生命周期控制:从 schema 探索、SQL 查询执行,到数据库运行状态监控,全部通过 MCP 工具调用完成,无需在 AI 与数据库之间手工切换工具。
二、核心能力概览
根据官方文档,启用该 MCP Server 后,AI 能力可以帮你完成以下四类任务:
- 探索 Schema 与数据:列出表、获取表详情、查看数据;
- 执行 SQL:直接在编辑器内运行 SQL 查询;
- 监控性能:查看活动查询、查询计划及其他性能指标(通过可观测性工具);
- 管理扩展:列出可安装与已安装的 PostgreSQL 扩展。
如果你的需求是 AlloyDB 基础设施层面的管理(如创建集群、实例、用户),请在 MCP 商店搜索AlloyDB for PostgreSQL Admin MCP Server。本仓库同样提供了对应的预构建配置,详见下文"三、配套的 Admin 与可观测性配置"。
三、前置条件与权限准备
在安装前,需要准备以下环境:
- Node.js:MCP Server 通过 npx 启动,需要已安装 Node.js;
- Google Cloud 项目:需已启用AlloyDB API;
- 应用默认凭据(ADC):确保环境中存在可用的 Application Default Credentials;
- IAM 权限:
roles/alloydb.client(AlloyDB Client):用于连接与查询;roles/serviceusage.serviceUsageConsumer(Service Usage Consumer):用于访问服务用量。
注意:如果 AlloyDB 实例使用私有 IP,MCP Server 必须运行在同一个 VPC 网络中才能建立连接(对应
ALLOYDB_POSTGRES_IP_TYPE=PRIVATE的场景,见下文)。
四、安装与配置
4.1 在 Antigravity MCP Store 安装
- 在 Antigravity MCP Store 中点击Install按钮;
- 在弹出的配置对话框中填写集群相关信息(集群列表参考),点击Save。之后可随时在Configure标签页更新配置;
- 安装完成后,在Tools标签页即可看到所有启用的工具。
首次使用时,安装过程会自动下载并使用 MCP Toolbox(
@toolbox-sdk/server)>=0.26.0版本。如需更新 MCP Toolbox:npm i -g @toolbox-sdk/server@latest若希望始终运行最新版本,可将 MCP Server 配置改为:
npx -y @toolbox-sdk/server@latest --prebuilt alloydb-postgres如果 Windows Defender 拦截了执行,可能需要配置 Microsoft Defender 防病毒排除项(allowlist)。
4.2 命令行方式启动
除图形化商店外,也可直接在命令行启动。从 cmd/root.go 和 cmd/internal/flags.go 可以看到,toolboxCLI 提供了--prebuilt与--stdio等关键参数:
npx -y @toolbox-sdk/server --prebuilt alloydb-postgres --stdio--prebuilt alloydb-postgres:加载预构建的 AlloyDB 工具配置。预构建配置通过 internal/prebuiltconfigs/prebuiltconfigs.go 中的//go:embed tools/*.yaml机制在编译期嵌入二进制,Get("alloydb-postgres")会从tools/alloydb-postgres.yaml读取全部工具定义;--stdio:以 MCP STDIO 传输方式监听(见 cmd/internal/flags.go 中flags.BoolVar(&opts.Cfg.Stdio, "stdio", false, ...)),这是桌面型 MCP 客户端最常用的接入方式;省略则默认以 HTTP 服务方式监听(默认127.0.0.1:5000)。
--prebuilt还支持工具集粒度过滤,例如--prebuilt alloydb-postgres/monitor只加载 monitor 分组中的工具(该用法在 cmd/root_test.go 的测试用例中得到验证)。
五、环境变量与自定义 MCP Server 配置
该 MCP Server 完全通过环境变量进行配置,官方文档给出的完整清单如下:
export ALLOYDB_POSTGRES_PROJECT="<your-gcp-project-id>" export ALLOYDB_POSTGRES_REGION="<your-alloydb-region>" export ALLOYDB_POSTGRES_CLUSTER="<your-alloydb-cluster-id>" export ALLOYDB_POSTGRES_INSTANCE="<your-alloydb-instance-id>" export ALLOYDB_POSTGRES_DATABASE="<your-database-name>" export ALLOYDB_POSTGRES_USER="<your-database-user>" # Optional export ALLOYDB_POSTGRES_PASSWORD="<your-database-password>" # Optional export ALLOYDB_POSTGRES_IP_TYPE="PUBLIC" # Optional: `PUBLIC`, `PRIVATE`, `PSC`. Defaults to `PUBLIC`. export ALLOYDB_POSTGRES_READONLY="true" # Optional: Restricts tools and enforces read-only session locking on the database connection. Defaults to `false`.各变量与预构建配置 internal/prebuiltconfigs/tools/alloydb-postgres.yaml 中 source 段的字段一一对应:
kind: source name: alloydb-pg-source type: alloydb-postgres project: ${ALLOYDB_POSTGRES_PROJECT} region: ${ALLOYDB_POSTGRES_REGION} cluster: ${ALLOYDB_POSTGRES_CLUSTER} instance: ${ALLOYDB_POSTGRES_INSTANCE} database: ${ALLOYDB_POSTGRES_DATABASE} user: ${ALLOYDB_POSTGRES_USER:} password: ${ALLOYDB_POSTGRES_PASSWORD:} ipType: ${ALLOYDB_POSTGRES_IP_TYPE:public} readOnly: ${ALLOYDB_POSTGRES_READONLY:false}5.1 关键参数说明
| 参数 | 必填 | 说明 |
|---|---|---|
ALLOYDB_POSTGRES_PROJECT | 是 | GCP 项目 ID |
ALLOYDB_POSTGRES_REGION | 是 | AlloyDB 集群所在区域 |
ALLOYDB_POSTGRES_CLUSTER | 是 | AlloyDB 集群 ID |
ALLOYDB_POSTGRES_INSTANCE | 是 | AlloyDB 实例 ID |
ALLOYDB_POSTGRES_DATABASE | 是 | 目标数据库名 |
ALLOYDB_POSTGRES_USER | 否 | 数据库用户名;留空时走 IAM 认证(见 5.3) |
ALLOYDB_POSTGRES_PASSWORD | 否 | 数据库密码;必须与用户名同时提供或同时留空 |
ALLOYDB_POSTGRES_IP_TYPE | 否 | PUBLIC/PRIVATE/PSC,默认PUBLIC |
ALLOYDB_POSTGRES_READONLY | 否 | true时限制工具范围,并在数据库连接上强制只读会话锁定,默认false |
5.2 MCP 客户端接入配置
将以下配置添加到 MCP 客户端(Gemini CLI 使用settings.json,Antigravity 使用mcp_config.json):
{ "mcpServers": { "alloydb-postgres": { "command": "npx", "args": ["-y", "@toolbox-sdk/server", "--prebuilt", "alloydb-postgres", "--stdio"] } } }5.3 认证机制源码解析:密码认证与 IAM 认证
在 internal/sources/alloydbpg/alloydb_pg.go 的getConnectionConfig函数中,认证方式由user/password组合决定:
- 用户名与密码同时提供:使用密码认证,构造
user=%s password=%s dbname=%s sslmode=disable application_name=%s形式的 DSN; - 用户名与密码都为空:从 ADC(Application Default Credentials)读取 IAM 主账号邮箱作为数据库用户,走 IAM 认证(
alloydbconn.WithIAMAuthN()); - 只提供密码不提供用户名:直接报错返回,提示"必须同时提供用户名和密码,或两者都留空"。
ReadOnly=true时,DSN 末尾会追加options='-c alloydb_session_read_only=locked',在连接建立时即锁定会话为只读。源码注释特别强调:必须使用下划线形式alloydb_session_read_only,而不能写成点号形式——PostgreSQL 会把带点的 GUC(如alloydb.session_read_only)当作自定义占位符而在连接时静默忽略,导致会话仍处于可写状态。此外,Initialize中若只读模式初始化失败且错误信息包含unrecognized configuration parameter与alloydb_session_read_only,会明确提示当前实例版本不支持该只读参数。
5.4 连接池与 IP 类型解析
连接建立在pgxpool之上(internal/sources/alloydbpg/alloydb_pg.go 的initAlloyDBPgConnectionPool):使用cloud.google.com/go/alloydbconn创建 Dialer,并通过DialFunc将连接目标指向projects/{project}/locations/{region}/clusters/{cluster}/instances/{instance}格式的资源名。getOpts根据ipType选择拨号方式:
private→alloydbconn.WithPrivateIP();public→alloydbconn.WithPublicIP()(默认);psc→alloydbconn.WithPSC();- 其他值 → 返回
invalid ipType错误。
该枚举在 internal/sources/ip_type.go 中统一校验,只接受public、private、psc三种取值。所有 SQL 执行(RunSQL)都会先经sqlcommenter.PrependComment注入 SQLCommenter 格式的追踪注释,便于在数据库端关联请求来源。
六、服务器工具集全景
配置完成后,MCP Server 会自动将以下工具暴露给 AI 助手(官方文档列出的 11 个核心工具):
| 工具名 | 说明 |
|---|---|
list_tables | 列出用户创建表的详细 schema 信息 |
execute_sql | 执行 SQL 查询 |
list_active_queries | 列出当前正在运行的查询 |
list_available_extensions | 列出可安装的扩展 |
list_installed_extensions | 列出已安装的扩展 |
get_query_plan | 获取 SQL 语句的查询计划 |
list_autovacuum_configurations | 列出 autovacuum 配置及其取值 |
list_memory_configurations | 列出内存配置及其取值 |
list_top_bloated_tables | 列出膨胀(bloat)最严重的表 |
list_replication_slots | 列出复制槽(replication slots) |
list_invalid_indexes | 列出无效索引 |
6.1 工具的 SQL 实现细节
从 internal/prebuiltconfigs/tools/alloydb-postgres.yaml 可以看出,许多"监控类"工具本质上是封装在postgres-sql类型上的预定义查询:
list_autovacuum_configurations:查询pg_settings中category = 'Autovacuum'的所有参数名与当前值,用于检查 vacuum 策略配置;list_memory_configurations:分两组查询内存参数——work_mem、maintenance_work_mem按setting * 1024换算为字节并用pg_size_pretty格式化;shared_buffers、wal_buffers、effective_cache_size、temp_buffers则按(setting * 8) * 1024换算(因为这些参数单位是 8KB 页),结果按参数名倒序排列;list_top_bloated_tables:基于pg_stat_user_tables统计n_live_tup/n_dead_tup,计算死元组占比dead_tuple_percentage,并输出last_vacuum、last_autovacuum、last_analyze、last_autoanalyze,按死元组数降序排列,支持limit参数(默认 50);list_replication_slots:查询pg_replication_slots,并用pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn))计算每个槽位阻止清除的滞留 WAL 大小——这是判断复制槽是否导致 WAL 堆积的关键指标;list_invalid_indexes:查询pg_index中indisvalid = FALSE的索引,输出 schema、索引名、表名、索引占用空间与pg_get_indexdef生成的完整索引定义,这类索引通常由失败的CREATE INDEX CONCURRENTLY产生,占磁盘空间但无法被查询规划器使用;get_query_plan:将输入 SQL 包装为EXPLAIN (FORMAT JSON) {{.query}};,仅返回优化器的估算计划(成本、行数),不实际执行(无 ANALYZE、无额外选项),可安全用于生产环境的计划检查、回归对比与查询调优。
6.2 工具分组(Groups)
预构建配置还将工具组织为 7 个语义分组,便于 AI 按意图选择:
| 分组 | 定位 | 主要工具 |
|---|---|---|
admin | 集群/实例的创建、状态监控与配置获取 | create_cluster、get_cluster、list_clusters、create_instance、get_instance、list_instances、database_overview、wait_for_operation |
access-management | 数据库用户与权限管理 | create_user、list_users、get_user、list_roles、list_pg_settings、database_overview |
data | schema 探索与自定义 SQL | execute_sql、list_tables、list_views、list_schemas、list_triggers、list_indexes、list_sequences、list_stored_procedure |
monitor | 慢查询诊断、执行计划与系统指标 | list_active_queries、list_query_stats、get_query_plan、get_query_metrics、get_system_metrics、long_running_transactions、list_locks、list_database_stats |
health | 存储优化、索引问题与表统计 | list_top_bloated_tables、list_invalid_indexes、list_table_stats、get_column_cardinality、list_autovacuum_configurations、list_tablespaces、database_overview、get_instance |
optimize | 扩展管理与引擎级参数调优 | list_available_extensions、list_installed_extensions、list_memory_configurations、list_pg_settings、database_overview、get_cluster |
replication | 复制健康度与高可用监控 | replication_stats、list_replication_slots、list_publication_tables、list_instances、get_instance、database_overview |
6.3 配套的 Admin 与可观测性配置
文档明确指出:AlloyDB 基础设施管理需要单独使用 AlloyDB for PostgreSQL Admin MCP Server。本仓库提供了两份相邻的预构建配置:
- internal/prebuiltconfigs/tools/alloydb-postgres-admin.yaml:提供
create_cluster、create_instance、list_clusters、list_instances、create_user、get_user等基础设施管理工具,其中wait_for_operation采用指数退避轮询(delay: 1s、maxDelay: 4m、multiplier: 2、maxRetries: 10),用于等待创建类异步操作完成; - internal/prebuiltconfigs/tools/alloydb-postgres-observability.yaml:提供基于 Cloud Monitoring 的 PromQL 指标查询工具
get_system_metrics(系统级指标,如 CPU 利用率、存储用量、复制延迟、连接数、等待事件等 34 个指标)与get_query_metrics(查询级 Insights 指标,如执行时间、锁等待、IO 时间等 18 个指标),以及 Database Insights 系列高级工具(聚合查询统计、等待事件聚合、时序趋势、索引推荐get_index_recommendations等)。
可观测性工具默认采用5m聚合窗口,典型 PromQL 示例(以 CPU 平均利用率为例):
avg_over_time({"__name__"="alloydb.googleapis.com/instance/cpu/average_utilization","monitored_resource"="alloydb.googleapis.com/Instance","instance_id"="alloydb-instance"}[5m])七、日常使用示例
配置完成后,MCP Server 会自动向 AI 助手提供 AlloyDB 能力,你可以直接用自然语言下达指令:
- "Show me all tables in the 'orders' database."(列出 orders 库的所有表 →
list_tables) - "What are the columns in the 'products' table?"(查看 products 表的列 →
list_tables/database_overview) - "How many orders were placed in the last 30 days?"(统计近 30 天订单 →
execute_sql)
需要排查慢查询时,可让 AI 调用list_active_queries找出运行中的长查询,再用get_query_plan获取 JSON 格式执行计划(不会实际执行语句),结合list_top_bloated_tables、list_replication_slots与get_system_metrics定位资源瓶颈——整个过程无需离开编辑器。
八、总结
AlloyDB for PostgreSQL MCP Server 是本仓库alloydb-postgres预构建配置与 internal/sources/alloydbpg/alloydb_pg.go 数据源实现的结合体:环境变量驱动配置、IAM/密码双认证、三种 IP 类型拨号、可选的只读会话锁定,配以覆盖查询、监控、扩展、健康与复制场景的工具集,让 AI 开发工具成为 AlloyDB 的"一等公民"数据库操作入口。建议部署前重点确认:ADC 凭据可用、roles/alloydb.client权限已授予、私有 IP 实例需与 MCP Server 同 VPC,以及按需开启ALLOYDB_POSTGRES_READONLY以降低误写风险。
【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考