PostgreSQL MCP服务器
一种模型上下文协议(MCP)服务器,用于通过stdio或Streamable HTTP查询PostgreSQL数据库。
我构建这个是因为当有多个数据库时,客户端在参考Postgres MCP服务器时遇到了问题。此版本传递用户指定的服务器名称,以便联邦客户端可以清晰地区分工具名称空间。
安装
npm install
npm run build运行通过 npx 从Git仓库
一旦仓库在GitHub上可访问, npx 可以直接从Git URL安装它并运行 postgres-mcp 箱子:
npx --yes --package=github:OWNER/postgres-mcp postgres-mcp等效形式也适用:
npx --yes --package=git+https://github.com/OWNER/postgres-mcp.git postgres-mcp因为此包构建为 dist/,回购包括 prepare 脚本,以便npm在基于Git的安装过程中自动编译它。
配置
服务器使用通过提供的PostgreSQL连接字符串 DATABASE_URL.
连接字符串格式: postgresql://user:password@host:port/database
环境变量
DATABASE_URL
用于所有查询的必需PostgreSQL连接字符串。
MCP_SERVER_NAME
自定义MCP服务器名称。当并行运行多个PostgreSQL MCP实例时,这很有用。
例子:
MCP_SERVER_NAME="postgres-production" npm startREAD_ONLY_MODE
控制服务器是否强制只读模式。默认为 true 为了安全。
READ_ONLY_MODE=true(默认):阻止INSERT、UPDATE、DELETE、CREATE、ALTER、DROP操作READ_ONLY_MODE=false:允许数据库用户允许的所有操作
MCP_TRANSPORT
选择服务器的公开方式。
stdio(默认):作为本地MCP子流程启动http:暴露可流式传输的HTTP端点
HTTP传输设置
仅在以下情况下使用 MCP_TRANSPORT=http.
MCP_HTTP_HOST:绑定地址。默认为127.0.0.1MCP_HTTP_PORT:绑定端口。默认为3000MCP_HTTP_PATH:MCP端点路径。默认为/mcpMCP_HTTP_ALLOWED_HOSTS:非环回部署的可选逗号分隔主机头列表MCP_HTTP_ENABLE_DNS_REBINDING_PROTECTION:DNS重新绑定保护的可选覆盖(true或false)
用法
码头工人
塑造形象:
docker build -t postgres-mcp .运行HTTP MCP终结点:
docker run --rm \
-e DATABASE_URL="postgresql://myuser:mypassword@host.docker.internal:5432/mydb" \
-e MCP_SERVER_NAME="postgres-production" \
-e MCP_TRANSPORT=http \
-e MCP_HTTP_HOST=0.0.0.0 \
-e MCP_HTTP_PORT=8811 \
-p 8811:8811 \
postgres-mcp用法
标准运输
将服务器作为本地MCP子进程运行:
DATABASE_URL="postgresql://myuser:mypassword@localhost:5432/mydb" \
MCP_SERVER_NAME="postgres-production" \
npm start可流式HTTP传输
将服务器作为HTTP MCP终结点运行:
DATABASE_URL="postgresql://myuser:mypassword@localhost:5432/mydb" \
MCP_SERVER_NAME="postgres-production" \
MCP_TRANSPORT=http \
MCP_HTTP_HOST=127.0.0.1 \
MCP_HTTP_PORT=8811 \
npm run start:httpMCP端点将在 http://127.0.0.1:8811/mcp.
与Claude Desktop一起使用
将此添加到您的Claude Desktop配置中:
{
"mcpServers": {
"postgres": {
"command": "node",
"args": ["/path/to/postgres-mcp/dist/index.js"],
"env": {
"DATABASE_URL": "postgresql://myuser:mypassword@localhost:5432/mydb",
"MCP_SERVER_NAME": "postgres-production"
}
}
}
}可用工具
query
执行PostgreSQL查询。
参数:
query(必填):要执行的SQL查询maxRows(可选):服务器端的行上限应用于顶层SELECT查询。默认为10
例子:
{
"query": "SELECT * FROM users",
"maxRows": 25
}view_schemas
列出非系统PostgreSQL视图定义。
参数:
schema(可选):将结果限制到特定模式view(可选):将结果限制为特定的视图名称maxRows(可选):结果集的行上限
table_schemas
生成 CREATE TABLE 语句,包括表和列注释。
参数:
schema(可选):将结果限制到特定模式table(可选):将结果限制为特定的表名maxRows(可选):结果集的行上限
