SuperAPI AI 工具集

postgres-mcp-hardened

postgres-mcp-hardened 是一个用 Rust 编写的安全只读 PostgreSQL MCP 服务器,作为已弃用的 @modelcontextprotocol/server-postgres 的加固替代品。它让 AI 智能体以只读方式查询 PostgreSQL,在数据库层面强制只读,并叠加 AST 查询校验、语句超时、EXPLAIN 成本限制、OAuth 2.1 认证与审计日志。支持 Streamable HTTP 与 stdio 传输,可协商 MCP 2026-07-28、2025-11-25、2025-06-18 修订版。提供五种安装方式:.mcpb 一键包、npm 启动器、发布页二进制、容器镜像与源码构建,并附带 Sigstore 签名、校验和与 SLSA 构建溯源。项目处于 0.1.x 阶段,作者明确表示尚无外部用户在生产数据上运行。

访问官网

工具介绍

postgres-mcp-hardened 是一个用 Rust 编写的 Model Context Protocol(MCP)服务器,用于让 AI 智能体以只读方式查询 PostgreSQL。它定位为已弃用的 @modelcontextprotocol/server-postgres 的加固替代品,采用纵深防御策略。

用途与定位 官方 Postgres MCP 服务器于 2024 年弃用,但仍有大量下载量。其全部防御仅为一个数据库级只读事务,而项目文档指出这并不能阻止所有写入。postgres-mcp-hardened 保留回滚机制,并在其前面加入 AST 校验,同时补充原版从未具备的运维层。

主要能力

  • 只读访问:在数据库层面强制只读,并叠加真实 SQL 校验。
  • AST 校验:对语句进行抽象语法树校验,拒绝非只读语句(例如 DROP TABLE 返回 -32602 non-read-only statement)。
  • 超时与成本限制:提供语句超时与 EXPLAIN 成本守卫,避免单条查询无限运行。
  • 模式检查与列脱敏:支持 schema inspection 与 column redaction。
  • 认证与审计:支持 OAuth 2.1,并提供审计日志。
  • 传输协议:支持 Streamable HTTP 与 stdio,并协商 MCP 修订版 2026-07-28(当前默认)、2025-11-25 与 2025-06-18。
  • TLS:连接 PostgreSQL 时在服务器支持的情况下加密;接受 sslmode=require、verify-ca 与 verify-full,证书链与主机名始终验证,因此 require 的行为等同 verify-full。私有 CA 可通过 MCP_SSLROOTCERT 指向 PEM 包。

使用方式 提供五种接入途径:

  1. 一键安装:下载对应平台的 .mcpb 包并打开,连接字符串存入操作系统钥匙串而非明文配置文件。
  2. 通过 npm:包本身是启动器,运行时获取对应平台的原生二进制并校验校验和,运行时不涉及 Node 运行时。连接字符串放在 env 而非 args,避免出现在 ps 输出与 shell 历史中。
  3. 发布页二进制:单文件,适合没有 Node 的机器;并非静态二进制,-gnu 与 macOS 目标链接系统 C 库。
  4. 容器:distroless 镜像,以非 root 用户运行,同样有签名覆盖。注意 MCP_ADDR 必须绑定 0.0.0.0 而非 127.0.0.1;DATABASE_URL 中的 localhost 指容器自身,宿主机上的 PostgreSQL 需使用 host.docker.internal 或桥接地址。
  5. 源码构建:在克隆目录执行 cargo build --release;该 crate 不在 crates.io 上,因此不使用 cargo install。

验证与安全 每个发布二进制使用 Sigstore 无密钥签名,附带 .sig 与 .pem;建议固定身份而非仅验证签名,使用 --certificate-identity-regexp 与 --certificate-oidc-issuer。公开版本还附带 SLSA 构建溯源,可用 gh attestation verify 验证。

适用场景 适合需要让 AI 智能体安全查询 PostgreSQL 的开发与运维场景,尤其是希望以最小权限只读角色连接、并需要审计与成本控制的部署。项目提供离线只读守卫模式,可对语句给出判定结果,无需数据库或配置。

限制与已知风险

  • 项目处于 0.1.x 阶段,作者明确表示尚无外部用户在自己的数据上运行过。
  • THREAT_MODEL.md 记录了一个未解决的资源限制:49 字节的 SQL 可让 PostgreSQL 在规划阶段将常量折叠为 5.9 GB 后端内存,五秒 statement_timeout 无法阻止;建议设置内存限制(如 --memory 或 systemd 的 MemoryMax)。
  • 服务器空闲占用 7.7 MB,正常请求为个位数 MB,但恶意调用可将峰值内存推至 400 MB。
  • 当给定角色可写时,服务器拒绝以网络监听方式启动;但无法控制用户粘贴到客户端配置中的连接字符串。
  • 0.1.8 与 0.1.9 修复了四位独立评审者在 0.1.7 中发现的六个绕过;0.1.10 修复了剩余三个发现。
  • 官方文档未提供价格、收费或平台支持之外的商业信息。