PostgreSQL MCP Server

PostgreSQL MCP Server

用连接串接入 Postgres,向模型开放只读 query 与表结构资源。

核心功能

本页聚焦 src/postgres 目录的实际配置:启动参数就是一条 postgresql:// 连接串,可直接携带用户名与密码;用 Docker 连宿主机数据库时地址要换成 host.docker.internal。服务器据此暴露只读查询工具与每张表的结构资源。该目录已随参考实现一并归档。

功能亮点

连接串即配置

数据库地址、账号密码与库名全部通过一个命令行参数传入,无需额外配置文件。

容器网络写法

容器内访问宿主库时,要把连接串里的 localhost 换成宿主机专用域名。

表结构资源

每张表对应一条资源地址,返回列名与类型的 JSON,方便先看结构再写查询。

编辑器集成

VS Code 支持在 mcp.json 中用输入提示,启动时弹窗询问连接串。

适用场景

• 给模型接一个只读的业务库
• 让模型先读表结构再生成 SQL
• 容器化部署避免污染本地环境
• 在 VS Code 中按需输入连接串

安装配置

bash
# Docker 方式(claude_desktop_config.json)
{
  "mcpServers": {
    "postgres": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "mcp/postgres",
        "postgresql://host.docker.internal:5432/mydb"
      ]
    }
  }
}

# 带账号密码的连接串写法
postgresql://user:password@host:port/db-name

# macOS 上容器访问宿主机数据库时用 host.docker.internal 代替 localhost

# VS Code .vscode/mcp.json:用输入提示避免把连接串写死
{
  "inputs": [
    { "type": "promptString", "id": "pg_url", "description": "PostgreSQL URL (e.g. postgresql://user:pass@localhost:5432/mydb)" }
  ],
  "servers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "${input:pg_url}"]
    }
  }
}

# 自建镜像
docker build -t mcp/postgres -f src/postgres/Dockerfile .

使用方法

bash
调用 query 工具:
{ "sql": "SELECT status, count(*) FROM orders GROUP BY status" }
服务端在 READ ONLY 事务中执行,INSERT / UPDATE / DDL 语句不会生效。

读取 schema 资源:
postgres://<host>/<table>/schema
返回该表的列名与数据类型,建议先读资源确认字段命名,再拼接 SQL 交给 query,避免模型凭空猜列名。

连接串排错顺序:先用 psql 验证同一串能连通,再确认容器场景下主机地址是否需要替换。

关键指标

尚未核验对标产品,此处只列本工具自身指标,不做对比结论。

指标PostgreSQL MCP Server
价格免费
开源
上手难度入门

相关工具

优点

  • 一条连接串即完成接入,服务端不需要额外账号映射
  • 表结构以资源形式提供,模型可先读 schema 再写 SQL
  • 官方提供 Dockerfile,可把服务器跑在隔离网络中
  • VS Code 输入提示让连接串不必硬编码进仓库配置

缺点

  • src/postgres 已随参考实现归档,配置仍可用但不会再更新
  • 只读能力有限:仅支持查询,DDL 与写入一律不可用
  • 连接串含明文密码时会落在客户端配置文件里
  • README 只说明了 macOS 下容器访问宿主库的写法,其他平台需自行调整
  • 文档未提供结果集大小或查询超时的限制参数