PG_MCP服务器是一款通用的PostgreSQL MCP服务器,基于PostgreSQL + PostGIS实现,支持Stdio和SSE传输,在本地部署大语言模型时,能高效进行上下文管理。
在main.go
中:
// 这里可以设置数据库交互的连接字符串
schemaLoadConnID, err := dbService.RegisterConnection(tempCtx, "postgres://mcp_user:mcp123456@192.168.2.19:5432/postgres")
格式为postgres://user:pass@host:port/db
,或者可以通过.env文件配置,只需uncomment并设置SCHEMA_LOAD_DB_URL
变量即可。这里,RegisterConnection
给服务器一个初始连接字符串以缓存数据库表信息。
🏁 建议为服务器创建专用角色。以下是SQL语句:
-- 创建新角色并设置密码
CREATE ROLE mcp_user WITH LOGIN PASSWORD 'mcp123456';
-- 设置mcp_user的基本权限
GRANT CONNECT ON DATABASE postgres TO mcp_user;
GRANT USAGE ON SCHEMA public TO mcp_user;
-- 授予public模式下所有现有表的SELECT权限
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_user;
-- 自动授予public模式下新表的SELECT权限给mcp_user
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO mcp_user;
-- 创建temp模式
CREATE SCHEMA temp;
-- 授予temp模式上的所有权限给mcp_user
GRANT USAGE, CREATE ON SCHEMA temp TO mcp_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA temp TO mcp_user;
-- 自动授予temp模式下新表的SELECT、INSERT、UPDATE和DELETE权限给mcp_user
ALTER DEFAULT PRIVILEGES IN SCHEMA temp
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO mcp_user;
docker-compose up --build
这将构建并启动服务。
要直接运行,请确保您已经安装了所有依赖项。在终端中导航到项目根目录并运行:
go run main.go
在本地部署大语言模型时,上下文管理需要高效。每次调用时读取数据库架构会消耗时间和宝贵的上下文令牌。该项目采用了预处理方法。它原生支持从数据库获取表结构,并为LLM提供描述性信息:
PostGIS和PgVector的相关描述引用自另一个开源项目:https://github.com/stuzero/pg-mcp-server 🙏🙏paginator
这种提供上下文的思路令人耳目一新。
中文文档
⚠️ 重要提示
数据库需要定义角色以防止SQL注入。授予
public
模式上的SELECT
权限,以避免敏感数据泄露。授予新角色对temp
模式下所有表的SELECT
、INSERT
、UPDATE
和DELETE
权限,以确保数据隔离。