PostgreSQL MCP 服务器

PostgreSQL MCP 服务器是一个通过 STDIO 和实验性 SSE HTTP 接口提供 PostgreSQL 模式探索和查询工具的服务。

  • by dharmit01
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 dharmit01/postgres-mcp

使用说明

PostgreSQL MCP服务器

一个模型上下文协议(MCP)服务器,通过STDIO(主传输)和一个实验性的SSE HTTP接口公开PostgreSQL模式探索和查询工具。

特性

  • 工具:
    • health_check –快速连接检查
    • get_schema –完整列列表(不包括系统模式)
    • list_tables –列出用户表
    • describe_table –描述一个特定的表(“schema.table”)
    • select –安全的SELECT查询执行
    • execute –INSERT/UPDATE/DELETE/DDL(非SELECT)返回 rowCount
    • run_query 无限制的SQL(谨慎使用)
  • 通过CLI参数或环境变量进行配置
  • 通过连接池 pg
  • 可与STDIO上任何兼容MCP的IDE/客户端配合使用
  • 用于实验的可选SSE端点(postgres-mcp-sse 二进制)

安装

npm install -g postgres-mcp-server

(或者克隆此仓库并运行 npm install && npm run build,然后使用 node dist/index.js.)

配置

提供完整的连接URL或离散参数。

环境变量

变量 目的
PG_URL / DATABASE_URL 完整连接URL(覆盖离散字段)
PGHOST 主持人
PGPORT 端口(默认值5432)
PGUSER 用户名
PGPASSWORD 密码
PGDATABASE 数据库名称
PGSSL require, disable,或 allow
PGPOOL_MAX 池最大连接数(默认值10)
PG_IDLE_TIMEOUT 空闲超时毫秒(默认30000)
PG_STATEMENT_TIMEOUT 语句超时毫秒
PG_APP_NAME application_name值

CLI标志

上述任何一项(小写)都可以作为 --host, --port, --user等等。例子:

postgres-mcp --host localhost --database mydb --user me --password secret

STDIO使用情况(主要)

在大多数启用MCP的工具中,您可以配置命令。JSON代码片段示例(例如,假设的IDE配置):

{
  "name": "Postgres",
  "command": "postgres-mcp",
  "args": ["--host", "localhost", "--database", "mydb", "--user", "me"],
  "env": {"PGPASSWORD": "secret"}
}

客户端将执行MCP初始化握手,然后列出并调用工具。

直接调用示例

您可以使用参考MCP客户端(如果可用)或通过stdio发送JSON-RPC(高级)进行手动测试。

简单的健康检查(使用 jq 为了可读性)使用最小的模拟客户端超出了本文的范围,但服务器已经为任何兼容的MCP客户端做好了准备。

实验性SSE服务器

启动SSE服务器:

postgres-mcp-sse --host localhost --database mydb --user me --password secret

终点:

  • GET /tools –列出工具
  • POST /tool/:name –调用工具(JSON body=params)
  • GET /stream/:name –调用工具并流式传输单个事件(仅限演示)

例子:

curl -X POST http://localhost:3333/tool/list_tables | jq

安全说明

  • run_query 不受限制;在嵌入共享环境时限制其使用。
  • 除了参数化支持之外,不会执行SQL清理;始终首选参数数组(params)以避免注射。
  • SSE层是一个演示层,不进行身份验证;在生产场景中保护或禁用。

发展

在本地克隆和构建:

git clone <repo>
cd postgres-mcp
npm install
npm run build
node dist/index.js --host localhost --database mydb --user me --password secret

在开发模式下直接使用TypeScript运行:

npm run dev -- --host localhost --database mydb

工具输出

所有工具响应都以文本内容的形式返回,其中包含JSON编码的有效载荷,以实现兼容性。未来的增强功能可以为每个工具添加结构化内容和输出模式。

路线图/想法

  • 为常见管理任务添加提示资源
  • 为大型结果集添加流式处理(分页)
  • 添加基于角色的限制
  • 添加结构化输出模式

许可证

MIT(必要时进行调整)。