关于 PG_MCP_SERVER
PG_MCP_SERVER 是面向 PostgreSQL 与 PostGIS 的通用 MCP 服务,适合需要让 LLM 查询数据库结构信息的场景。它预先读取并缓存表结构,并支持 Stdio 与 SSE 传输。
主要功能
- 01预加载并缓存数据库结构
- 02提供表、列与约束信息
- 03读取外键、索引和空间信息
- 04支持 PostgreSQL 与 PostGIS
- 05支持 Stdio 和 SSE
适用场景
- 01为 LLM 提供数据库结构上下文
- 02检查表关系与索引信息
- 03处理含 PostGIS 几何数据的数据库
MCP 相关
通过 MCP Resources 在初始化时提供表名、列、约束、外键、索引及几何类型等信息,并使用工具描述和输入 schema 传达结构上下文。支持 Stdio 与 SSE。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
PG_MCP_SERVER
简介
通用 PostgreSQL MCP 服务。MCP 部分使用 go-mcp 实现,支持 Stdio 和 SSE 传输方式。
PostGIS 和 PgVector 的说明来自另一个开源项目:https://github.com/stuzero/pg-mcp-server 🙏🙏🙏 这种提供上下文的方式令人耳目一新。
⚠️ 数据库需要定义角色以防止 SQL 注入。授予
public架构SELECT权限,以防止敏感数据泄露。 ⚠️ 向新角色授予temp架构的所有权限,以确保数据隔离。
功能
在本地部署大模型时,需要高效管理上下文。每次调用都读取数据库架构会耗费时间,并占用大量令牌上下文。本项目采用预处理方式,原生支持从数据库获取表结构,并向大模型提供描述性信息:
- 利用工具描述和输入架构,隐式或显式地传达架构信息。
- 利用 MCP Resources 在初始化时读取表名、列、约束、外键、索引、几何类型和 EPSG 代码,帮助大模型建立基础认知。
安装
在 main.go 中:
// Here you can set the connection string for database interaction
schemaLoadConnID, err := dbService.RegisterConnection(tempCtx, "postgres://mcp_user:[email protected]:5432/postgres")
格式为 postgres://user:pass@host:port/db
或者,取消注释并设置 .env 中的 SCHEMA_LOAD_DB_URL 变量进行配置。
这里的 RegisterConnection 会为服务提供初始连接字符串,以便缓存数据库表信息。
🏁 建议创建专用服务角色。SQL 如下:
-- Create a new role and set a password
CREATE ROLE mcp_user WITH LOGIN PASSWORD 'mcp123456';
-- Set basic permissions for mcp_user
GRANT CONNECT ON DATABASE postgres TO mcp_user;
GRANT USAGE ON SCHEMA public TO mcp_user;
-- Grant SELECT permission on all existing tables in the public schema
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_user;
-- Automatically grant SELECT on future tables in public schema to mcp_user
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO mcp_user;
-- Create a temp schema
CREATE SCHEMA temp;
-- Grant all privileges on the temp schema to 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;
-- Grant all privileges on future tables in temp schema to mcp_user
ALTER DEFAULT PRIVILEGES IN SCHEMA temp
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO mcp_user;
Use code with caution.
运行
- 🐋 使用 Docker 运行
git clone https://github.com/cbc3929/pg_mcp_server.git
cd pg_mcp_server
docker build -t pg-mcp-server:latest .
docker run -d -p 8181:8181 --name my-mcp-server pg-mcp-server:latest
- 🀄 直接运行
- 克隆项目
git clone https://github.com/cbc3929/pg_mcp_server.git
cd pg_mcp_server
- 安装依赖
go mod tidy
或
go mod download
- 直接运行
确保已设置必要的环境变量,或存在.env文件
go run ./cmd/server/main.go
- 构建(可选)
go build -o pg_mcp_server ./cmd/server/main.go
./pg_mcp_server
扩展支持
PostGIS ✅
PgVector ✅
PgRouting ⭕
TODO / 尚未完成
temp架构中的表管理:应实现表清理/回收机制。- 单元测试。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。