mcpField
P
pgmoat

pgmoat

本地服务
github.com/Kitalon-Labs-LLC数据库04 天前更新

关于 pgmoat

pgmoat 是面向 AI Agent 的开源 Postgres MCP 服务,以只读方式提供数据库访问。它使用 Postgres 解析器检查查询,并结合行级安全、数据隐藏、预算限制和防篡改审计日志。

主要功能

  1. 01仅允许只读数据库访问
  2. 02用 Postgres 解析器检查查询
  3. 03隐藏指定表和列
  4. 04应用行级安全、行数限制与超时
  5. 05记录可验证的防篡改审计日志
  6. 06检查角色权限并导出可见架构

适用场景

  1. 01为 Agent 提供受控的数据库查询
  2. 02隐藏查询中不应暴露的敏感列
  3. 03按调用者身份应用行级安全策略
  4. 04验证审计日志的哈希链

MCP 相关

pgmoat 是 MCP 服务,通过工具向 MCP 客户端提供受治理的 Postgres 只读访问,并对查询应用解析、安全策略、限制和审计。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kitalon-labs-llc-pgmoat": {
"command": "npx",
"args": [
"-y",
"pgmoat"
],
"env": {
"PGMOAT_DATABASE_URL": "<PGMOAT_DATABASE_URL>"
}
}
}
}
启动命令npx -y pgmoat
需要配置的环境变量
PGMOAT_DATABASE_URL密钥Postgres connection URL (use a read-only role)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmpgmoat0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

pgmoat

CI npm version License: MIT

为 AI Agent 提供受管控的 Postgres 访问能力。

pgmoat 是一款开源 MCP 服务,可让 AI Agent 以只读方式访问 Postgres。它使用真实的 Postgres 解析器检查每条查询,隐藏你标记为隐藏的表和列,应用行数限制和超时,根据调用者身份绑定行级安全策略(RLS),并写入防篡改审计日志。

需要 Node.js 22.12 或更高版本,以及 Postgres 15 至 18。

快速开始

使用安全默认值连接到数据库,无需配置文件:

npx -y pgmoat postgresql://readonly_user:password@localhost:5432/mydb

将其添加到 Claude Code:

claude mcp add pgmoat -- npx -y pgmoat postgresql://readonly_user:password@localhost:5432/mydb

或添加到 Claude Desktop(claude_desktop_config.json):

{
  "mcpServers": {
    "pgmoat": {
      "command": "npx",
      "args": ["-y", "pgmoat", "--url-env", "PGMOAT_DATABASE_URL"],
      "env": { "PGMOAT_DATABASE_URL": "postgresql://readonly_user:password@localhost:5432/mydb" }
    }
  }
}

通过 --url-env 传递 URL,可避免密码出现在进程列表中。

请使用专用只读角色。如果该角色是超级用户或具有写入权限,pgmoat 会在启动时发出警告。

添加说明并隐藏敏感数据

export PGMOAT_DATABASE_URL=postgresql://readonly_user:password@localhost:5432/mydb
npx pgmoat init          # writes pgmoat.yaml; auto-hides columns like password_hash and token_hash
npx pgmoat validate      # checks the file against the schema and the database
npx pgmoat doctor        # checks the role for unsafe privileges
npx pgmoat start         # starts the server with ./pgmoat.yaml

pgmoat.yaml 文件示例如下:

version: 1
server:
  name: mydb
connection:
  url: ${PGMOAT_DATABASE_URL}
  schemas: [public]
mode: read-only
budgets:
  max_rows: 200
  max_query_ms: 5000
tables:
  users:
    description: "One row per login account"
    columns:
      password_hash: { hidden: true }
      email:         { sensitive: high }

命令

命令功能
pgmoat <postgres-url>使用安全默认值启动(无需配置文件)
pgmoat init根据数据库创建 pgmoat.yaml
pgmoat start根据 pgmoat.yaml 启动 MCP 服务
pgmoat validate根据架构和数据库检查 pgmoat.yaml
pgmoat doctor检查数据库角色是否具有不安全的权限
pgmoat audit verify验证审计日志哈希链
pgmoat schema-export将可见架构写入 Markdown 文件

运行 pgmoat --help 查看所有选项。

pgmoat 不会做什么

  • 它无法阻止提示词注入。 它会移除写入路径、隐藏你标记为隐藏的内容,并将返回的数据标记为不可信;但如果 Agent 还拥有其他工具(如网络访问、电子邮件),仍可能受骗,将可读取的数据发送到别处。
  • 它不能替代 Postgres 权限。 最强有力的控制措施是使用专用角色,并且只授予其所需权限。
  • 它无法保证 RLS 策略正确。 它会设置策略读取的会话变量。策略本身有缺陷,仍然会有缺陷。
  • 它无法保证在故障期间将审计日志送达远程目标。 它会缓冲、发出警报并记录丢弃情况。

Docker

docker run -i --rm \
  -e PGMOAT_DATABASE_URL="postgresql://readonly_user:[email protected]:5432/mydb" \
  ghcr.io/kitalon-labs-llc/pgmoat:latest

贡献

请参阅 CONTRIBUTING.md。如需报告漏洞,请按照 SECURITY.md 中的说明私下提交。

链接

许可证

MIT (c) 2026 Kitalon Labs

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。