使用说明
项目简介
本项目 'enhanced-postgres-mcp-server' 是一个基于 Model Context Protocol (MCP) 的服务器实现,专为 PostgreSQL 数据库设计。它扩展了官方的只读 PostgreSQL MCP 服务器,提供了读写数据库以及数据库结构管理的能力。借助此服务器,LLM 可以连接到 PostgreSQL 数据库,执行查询、修改数据,甚至创建和修改数据库表结构、函数、触发器和索引等。
主要功能点
- 数据查询 (Data Query): 执行只读 SQL 查询,获取数据库信息。
- 数据修改 (Data Modification): 执行 SQL 语句进行数据插入、更新和删除操作。
- 数据库结构管理 (Schema Management): 支持创建、修改数据库表、函数、触发器和索引等结构。
- 资源 (Resources): 提供数据库表结构的 JSON Schema 信息,方便 LLM 理解数据结构。
安装步骤
您可以通过 Docker 或 NPX 两种方式安装和运行此 MCP 服务器。
方法一:使用 Docker
- 构建 Docker 镜像:
在仓库根目录下,使用 Docker 命令构建镜像:
docker build -t mcp/postgres -f Dockerfile .
方法二:使用 NPX (Node.js 包执行器)
- 确保已安装 Node.js 和 npm: 如果您的环境中尚未安装 Node.js 和 npm,请先安装。
服务器配置
为了让 MCP 客户端(例如 Claude Desktop)连接到此服务器,您需要在客户端的配置文件(例如 'claude_desktop_config.json')中添加 MCP 服务器的配置信息。
针对 Docker 部署的配置示例:
{ "mcpServers": { "postgres": { "command": "docker", "args": [ "run", "-i", "--rm", "mcp/postgres", "postgresql://host.docker.internal:5432/mydb" // PostgreSQL 数据库连接 URL,需要替换为您的数据库地址 // host.docker.internal 用于 Docker Desktop for Mac,如果服务器和客户端不在同一 Docker 网络,可能需要调整为主机 IP 或域名 ] } } }
针对 NPX 部署的配置示例:
{ "mcpServers": { "postgres": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-postgres", // 使用 NPX 运行 @modelcontextprotocol/server-postgres 包 "postgresql://localhost/mydb" // PostgreSQL 数据库连接 URL,需要替换为您的数据库地址 // localhost 假设数据库运行在本地,mydb 是数据库名称 ] } } }
配置参数说明:
- 'server name': 服务器名称,例如 "postgres",在客户端中用于标识和调用此服务器。
- 'command': 启动服务器的命令,Docker 部署时为 "docker",NPX 部署时为 "npx"。
- 'args': 命令参数,根据部署方式和数据库连接信息进行配置。
- 对于 Docker,'args' 包括 'run', '-i', '--rm', 'mcp/postgres' (Docker 镜像名称) 和 PostgreSQL 连接 URL。
- 对于 NPX,'args' 包括 '-y' (自动确认安装包), '@modelcontextprotocol/server-postgres' (要执行的 npm 包) 和 PostgreSQL 连接 URL。
- PostgreSQL 连接 URL: 例如 'postgresql://user:password@host:port/database',请根据您的数据库实际连接信息进行替换。如果需要跳过 SSL 证书验证,可以添加 '?sslmode=no-verify' 参数。
基本使用方法
配置完成后,在 MCP 客户端中,您可以使用以下格式的指令与 PostgreSQL MCP 服务器进行交互:
-
查询数据:
/query SELECT * FROM 表名 LIMIT 5 -
插入数据:
/insert table="表名", data={"列名1": "值1", "列名2": "值2"} -
更新数据:
/update table="表名", data={"要更新的列名": "新值"}, where="条件" -
创建表:
/createTable tableName="新表名", columns=[{"name": "列名1", "type": "数据类型", "constraints": "约束"}, {"name": "列名2", "type": "数据类型"}] -
创建函数和触发器:
/createFunction name="函数名", parameters="参数列表", returnType="返回类型", language="语言", body="函数体" /createTrigger name="触发器名", tableName="表名", functionName="函数名", when="触发时机", events=["事件类型"], forEach="ROW/STATEMENT"
请参考仓库 'README.md' 文件中的 "Example Usage" 部分,了解更多工具的使用方法和示例。
信息
分类
数据库与文件