news 2026/9/15 19:04:59

MCP Toolbox for Databases 的 PostgreSQL 预构建配置完全指南:环境变量、权限与 30 余个内置诊断工具详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MCP Toolbox for Databases 的 PostgreSQL 预构建配置完全指南:环境变量、权限与 30 余个内置诊断工具详解

MCP Toolbox for Databases 的 PostgreSQL 预构建配置完全指南:环境变量、权限与 30 余个内置诊断工具详解

【免费下载链接】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(以下简称 Toolbox)为 PostgreSQL 提供的预构建配置(Prebuilt Configuration)。通过一个--prebuilt postgres参数,即可在 MCP 客户端中快速接入 PostgreSQL 数据源,获得涵盖 SQL 执行、表结构查询、性能监控、复制状态、锁与长事务诊断在内的 30 余个现成工具,无需手写任何 YAML 配置。读完本文,你将掌握该预构建配置的完整环境变量清单、权限要求、每个工具的用途与实现方式,以及如何在 Claude Code、Cursor、VS Code(Copilot)等主流 MCP 客户端中一键启用。


一、什么是预构建配置:一条命令接入 PostgreSQL

Toolbox 提供了一组"开箱即用"的预构建配置,将"数据源连接"与"工具定义"打包成一份内置 YAML。官方文档 docs/en/integrations/postgres/prebuilt-configs/postgresql.md 指出,PostgreSQL 预构建配置对应的启动参数为:

--prebuilt postgres

从源码看,预构建配置通过 Go 的embed机制打包进二进制。在 internal/prebuiltconfigs/prebuiltconfigs.go 中,//go:embed tools/*.yamlinternal/prebuiltconfigs/tools/目录下所有 YAML 文件嵌入运行时,其中就包括 internal/prebuiltconfigs/tools/postgres.yaml。--prebuilt参数可以指定多次,例如同时启用 PostgreSQL 与 MySQL;它属于"构建期(build-time)"使用场景,官方在 cmd/internal/options.go 中会打印明确警告:这些预构建配置面向"Agent 帮助受信任的开发者构建应用"的场景,其安全性不足以支撑"运行时(run-time)"面对不可信用户的场景

如果你希望只启用部分能力,可以使用--prebuilt postgres/<toolset>语法限定工具集(toolset),例如--prebuilt postgres/monitor。该格式在 cmd/internal/options.go 中解析:若指定的 toolset 不存在,会直接报错并列出可用选项,cmd/internal/options_test.go 的测试用例验证了这一行为:

toolset 'invalid-toolset' not found in prebuilt configuration 'postgres'. Available toolsets: data, health, monitor, replication, view-config

注意:--prebuilt postgres.sqlpostgres:sqlpostgres@sql这类写法都会被视为非法格式并报错提示"请使用/指定 toolset"(见 cmd/internal/options_test.go)。

二、连接参数:六种环境变量与默认值

预构建配置通过环境变量向 Toolbox 传递连接信息,全部变量定义在 internal/prebuiltconfigs/tools/postgres.yaml 中,映射到名为postgresql-source的 source 上:

环境变量是否必需默认值说明
POSTGRES_HOST可选localhostPostgreSQL 服务器的主机名或 IP 地址
POSTGRES_PORT可选5432PostgreSQL 服务器的端口号
POSTGRES_DATABASE必需要连接的数据库名
POSTGRES_USER必需数据库用户名
POSTGRES_PASSWORD必需数据库用户密码
POSTGRES_QUERY_PARAMS可选追加到数据库连接字符串的原始查询参数

对应的 YAML 片段如下:

kind: source name: postgresql-source type: postgres host: ${POSTGRES_HOST:localhost} port: ${POSTGRES_PORT:5432} database: ${POSTGRES_DATABASE} user: ${POSTGRES_USER} password: ${POSTGRES_PASSWORD} queryParams: ${POSTGRES_QUERY_PARAMS:}

这里的${ENV:default}语法表示"取环境变量值,未设置时使用冒号后的默认值"。因此即便不设置POSTGRES_HOSTPOSTGRES_PORT,Toolbox 也会默认连接本机localhost:5432——这对本地开发非常友好。POSTGRES_QUERY_PARAMS常用于追加sslmode=require之类的连接级参数,它对应 source 配置中的queryParams字段(类型为map[string]string),详见 docs/en/integrations/postgres/source.md。

2.1 自定义连接时的扩展字段

如果不用预构建配置而改用自定义 YAML,PostgreSQL source 还支持以下扩展字段(见 docs/en/integrations/postgres/source.md):

  • queryExecMode(string,可选):pgx 查询执行模式,合法值包括cache_statement(默认)、cache_describedescribe_execexecsimple_protocol,在连接池不支持预处理语句缓存时非常有用;
  • sqlCommenter(boolean,可选):覆盖全局--sql-commenter标志,配置后优先于全局设置;
  • connectTimeout(integer,可选):单次连接尝试的最大等待秒数(最小 1,例如 5),省略时不设超时。

2.2 权限要求

预构建配置本身不要求超级用户权限,只需数据库层面的常规权限即可完成查询类工作。官方文档明确:执行查询需要数据库级权限(例如SELECTINSERT)。如果你还需要执行 DDL 或写入操作,则需为相应数据库用户授予对应的数据库级权限。这一点与 docs/en/integrations/postgres/source.md 的说明一致:该 source 仅使用标准认证,你需要先创建一个可登录的 PostgreSQL 用户。

三、工具全景:30 余个内置工具的分类与实现

预构建配置在 source 之上注册了 30 余个工具。下表完整列出官方文档 postgresql.md 中的全部工具,并补充其底层类型与主要用途:

工具名底层实现用途
execute_sqlpostgres-execute-sql执行单条 SQL 语句
list_tablespostgres-list-tables列出用户表及详细 schema 信息(对象类型、列、约束、索引、触发器、属主、注释)
list_active_queriespostgres-list-active-queries列出当前正在运行(state='active')的 Top N 查询,按运行时长倒序
list_available_extensionspostgres-list-available-extensions发现服务器上可安装的所有 PostgreSQL 扩展
list_installed_extensionspostgres-list-installed-extensions列出所有已安装扩展(名称、版本、schema、属主、描述)
long_running_transactionspostgres-long-running-transactions识别并列出超过指定时长的事务
list_lockspostgres-list-locks识别活跃进程持有的所有锁
replication_statspostgres-replication-stats列出每个副本的进程 ID 与同步状态
list_autovacuum_configurationspostgres-sql列出 autovacuum 相关配置(来自 pg_settings)
list_memory_configurationspostgres-sql列出内存相关配置(work_mem、shared_buffers 等)
list_top_bloated_tablespostgres-sql按死元组占比列出最"膨胀"的表
list_replication_slotspostgres-sql列出复制槽及其阻止回收的 WAL 大小
list_invalid_indexespostgres-sql列出失效索引(通常由失败的 CREATE INDEX CONCURRENTLY 产生)
get_query_planpostgres-sql生成 SQL 语句的 EXPLAIN JSON 执行计划(不实际执行)
list_viewspostgres-list-views从 pg_views 列出视图(默认上限 50 行),返回 schema、view 名与属主
list_schemaspostgres-list-schemas列出数据库中的 schema
database_overviewpostgres-database-overview获取 PostgreSQL 服务器当前状态
list_triggerspostgres-list-triggers列出数据库中的触发器
list_indexespostgres-list-indexes列出数据库中的用户索引
list_sequencespostgres-list-sequences列出数据库中的序列
list_query_statspostgres-list-query-stats列出查询统计信息
get_column_cardinalitypostgres-get-column-cardinality获取列基数
list_table_statspostgres-list-table-stats列出表统计信息
list_publication_tablespostgres-list-publication-tables列出发布(publication)中的表
list_tablespacespostgres-list-tablespaces列出表空间
list_pg_settingspostgres-list-pg-settings列出 PostgreSQL 服务器配置参数
list_database_statspostgres-list-database-stats列出每个数据库的关键性能与活动统计
list_rolespostgres-list-roles列出所有用户创建的角色
list_stored_procedurepostgres-list-stored-procedure列出存储过程

3.1 实现上的两种工具形态

从上表可以看到,这 30 余个工具在 internal/prebuiltconfigs/tools/postgres.yaml 中由两种方式定义:

  1. 专用工具类型:如postgres-list-tablespostgres-list-lockspostgres-long-running-transactionspostgres-replication-stats等,对应 internal/tools/postgres/ 目录下独立的 Go 包(每个包包含实现与测试文件)。以postgres-list-tables为例,其实现位于 internal/tools/postgres/postgreslisttables/postgreslisttables.go,并配有完整测试。

  2. postgres-sql通用 SQL 工具:如list_autovacuum_configurationslist_memory_configurationslist_top_bloated_tableslist_replication_slotslist_invalid_indexesget_query_plan,直接在预构建 YAML 中内嵌查询语句。例如list_autovacuum_configurations的完整定义就是一条针对pg_settings的分类查询:

kind: tool name: list_autovacuum_configurations type: postgres-sql source: postgresql-source description: List PostgreSQL autovacuum-related configurations (name and current setting) from pg_settings. statement: | SELECT name, setting FROM pg_settings WHERE category = 'Autovacuum';

这种"配置即代码"的设计让社区可以轻松扩展新的诊断工具,只需要往 YAML 中添加一条带statement的工具定义。

3.2 值得关注的诊断类工具细节

  • list_top_bloated_tables:基于pg_stat_user_tables统计死元组占比(n_dead_tup / (n_live_tup + n_dead_tup)),并返回最近 vacuum/analyze 时间,帮助你判断表是否需要手动 VACUUM。它还带有一个limit参数,默认 50。
  • list_replication_slots:查询pg_replication_slots,并通过pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)计算每个复制槽当前阻止回收的 WAL 大小(retained_wal),是排查 WAL 堆积问题的直接抓手。
  • list_invalid_indexes:查询pg_indexindisvalid = FALSE的索引,并给出索引大小与完整定义。此类索引通常由失败的CREATE INDEX CONCURRENTLY产生,占磁盘空间却无法被查询规划器使用。
  • get_query_plan:生成EXPLAIN (FORMAT JSON)执行计划且不执行语句,可用于成本与行数预估。官方在 YAML 描述中特别警告:该工具存在 SQL 注入风险,不要在生产环境使用(见 internal/prebuiltconfigs/tools/postgres.yaml)。
  • list_memory_configurations:将pg_settings中的内存参数统一换算为可读大小(pg_size_pretty),work_memmaintenance_work_mem按 KB 换算,shared_bufferswal_buffers等按页(8KB)换算后展示。

3.3 五大内置工具集(Toolset)

为方便按需启用,预构建 YAML 末尾将上述工具归入 5 个工具集(见 internal/prebuiltconfigs/tools/postgres.yaml):

  • data:数据读写与结构浏览,含execute_sqllist_tableslist_viewslist_schemaslist_triggerslist_indexeslist_sequenceslist_stored_procedure
  • monitor:运行时监控,含list_query_statsget_query_planlist_database_statslist_active_querieslong_running_transactionslist_locks
  • health:健康与性能体检,含list_top_bloated_tableslist_invalid_indexeslist_table_statsget_column_cardinalitylist_autovacuum_configurationslist_tablespacesdatabase_overviewlist_pg_settings
  • view-config:配置检视,含list_available_extensionslist_installed_extensionslist_memory_configurationslist_pg_settingsdatabase_overview
  • replication:复制与高可用,含replication_statslist_replication_slotslist_publication_tableslist_roleslist_pg_settingsdatabase_overview

不指定工具集时默认启用全部工具;指定时(如--prebuilt postgres/monitor)仅加载对应工具集,这在权限最小化或降低模型上下文负担时非常实用。

四、客户端接入实战:Claude Code / Cursor / VS Code / Gemini CLI 等八种配置

Toolbox 官方提供了与各主流 MCP 客户端对接的完整指南 docs/en/documentation/connect-to/ides/postgres_mcp.md,覆盖 Claude Code、Claude Desktop、Cline、Cursor、VS Code(Copilot)、Windsurf、Gemini CLI、Gemini Code Assist 共 8 个客户端。核心配置模式完全一致:command指向 toolbox 二进制,args传入--prebuilt postgres --stdioenv填入第二节的环境变量。

4.1 启动前的准备

  1. 创建或选择一个 PostgreSQL 实例(本地安装或 AlloyDB Omni 均可);
  2. 创建/复用数据库用户并准备好用户名与密码;
  3. 下载对应平台的 Toolbox 二进制(要求 V0.6.0+),chmod +x toolbox后执行./toolbox --version验证安装。

4.2 Claude Code 配置示例

在项目根目录创建.mcp.json

{ "mcpServers": { "postgres": { "command": "./PATH/TO/toolbox", "args": ["--prebuilt","postgres","--stdio"], "env": { "POSTGRES_HOST": "", "POSTGRES_PORT": "", "POSTGRES_DATABASE": "", "POSTGRES_USER": "", "POSTGRES_PASSWORD": "" } } } }

保存后重启 Claude Code 即可生效。其中--stdio表示以标准输入输出方式与 MCP 客户端通信。

4.3 其他客户端的差异点

  • Claude Desktop:在 Settings > Developer 中编辑配置文件,重启后可在聊天界面看到 MCP 锤子图标;
  • Cline:在 VS Code 扩展的 MCP Servers 中配置,连接成功显示绿色 active 状态;
  • Cursor:在.cursor/mcp.json中配置,成功后可在 Settings > Cursor Settings > MCP 看到绿色状态;
  • VS Code(Copilot):在.vscode/mcp.json中配置,注意其顶层键是servers而非mcpServers
  • Windsurf:在 Cascade 助手的 MCP 配置中填写同样的 JSON;
  • Gemini CLI / Gemini Code Assist:在工作目录的.gemini/settings.json中配置(Code Assist 需先在扩展中启用 Agent Mode)。

4.4 验证与使用

连接成功后,直接向 AI 助手提问即可触发工具调用,例如"列出数据库中的表"(调用list_tables)、"创建一个新表"(调用execute_sql)、"有没有长时间运行的事务"(调用long_running_transactions)。官方同时提示:预构建工具仍处于 pre-1.0 阶段,版本之间工具可能有变动,但 LLM 会自动适应当前可用的工具集,对大多数用户影响不大(见 docs/en/documentation/connect-to/ides/postgres_mcp.md)。

五、权限与安全最佳实践

结合官方文档与源码,使用 PostgreSQL 预构建配置时有几点安全建议:

  1. 最小权限原则:日常只读诊断场景,为 Toolbox 创建仅具备SELECT等数据库级权限的专用账号,避免使用超级用户;
  2. 善用工具集裁剪:通过--prebuilt postgres/<toolset>只暴露所需工具,减少攻击面与模型上下文占用;
  3. 明确使用边界:预构建配置面向"受信任开发者 + Agent 辅助构建"场景,不应用于面向不可信用户的运行时服务(见 cmd/internal/options.go 中的官方警告);get_query_plan等工具存在 SQL 注入风险,严禁在生产直接暴露;
  4. 避免硬编码密钥:官方建议在自定义配置中使用${ENV_NAME}环境变量替换而非将密码写入配置文件(见 docs/en/integrations/postgres/source.md),预构建配置本身即遵循此模式。

六、扩展阅读

  • 预构建配置完整定义(含全部工具与工具集):internal/prebuiltconfigs/tools/postgres.yaml
  • PostgreSQL source 配置字段参考:docs/en/integrations/postgres/source.md
  • 各 MCP 客户端接入指南:docs/en/documentation/connect-to/ides/postgres_mcp.md
  • 预构建配置加载与解析实现:internal/prebuiltconfigs/prebuiltconfigs.go、cmd/internal/options.go
  • 单个工具的源码与测试示例:internal/tools/postgres/(如postgreslisttablespostgreslongrunningtransactionspostgreslistlockspostgresreplicationstats等)
  • 工具清单文档:docs/en/integrations/postgres/tools/postgres-execute-sql.md 及tools/目录下其余 20 余篇工具页

【免费下载链接】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 19:02:25

洛克王国HTML5游戏源码实战:Canvas渲染、状态机与回合制战斗系统解析

简介&#xff1a;洛克王国HTML5游戏源码是一份基于HTML5技术构建的网页游戏学习工程&#xff0c;面向Web前端开发者、游戏爱好者及课堂教学场景&#xff0c;主要解决无需安装、跨平台运行的游戏原型演示与二次开发需求。完整压缩包共88个文件&#xff0c;涵盖73个PNG游戏素材、…

作者头像 李华
网站建设 2026/9/15 18:56:26

605 套终端配色:iTerm2 与 30+ 终端快速上手

605 套终端配色&#xff1a;iTerm2 与 30 终端快速上手 【免费下载链接】iTerm2-Color-Schemes Over 450 terminal color schemes/themes for iTerm/iTerm2. Includes ports to Terminal, Konsole, PuTTY, Xresources, XRDB, Remmina, Termite, XFCE, Tilda, FreeBSD VT, Termi…

作者头像 李华
网站建设 2026/9/15 18:54:09

如何用 deck.gl 的 JSON 模块从后端下发图层配置渲染可视化

如何用 deck.gl 的 JSON 模块从后端下发图层配置渲染可视化 【免费下载链接】deck.gl WebGL2 powered visualization framework 项目地址: https://gitcode.com/GitHub_Trending/de/deck.gl 当后端已经能产出一段描述可视化的 JSON 文本时&#xff0c;前端可以不用为每种…

作者头像 李华
网站建设 2026/9/15 18:53:19

使用 Encore 将单体(Monolith)拆分为微服务:完整实战指南

使用 Encore 将单体&#xff08;Monolith&#xff09;拆分为微服务&#xff1a;完整实战指南 【免费下载链接】encore The infrastructure platform for the intelligence era 项目地址: https://gitcode.com/GitHub_Trending/encor/encore 本指南基于 Encore Go 应用模型…

作者头像 李华