PostgreSQL MCP服务器

一个通用的PostgreSQL MCP服务器,支持PostGIS和PgVector扩展,用于高效管理LLM上下文和数据库结构信息。

  • by cbc3929
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 cbc3929/pg_mcp_server

使用说明

PG_MCP_SERVER

Custom Implementation for PostgreSQL + PostGIS Support

引言

中文文档

一个通用的PostgreSQL MCP服务器。MCP部分使用 去mcp,支持Stdio和SSE传输。

PostGIS和PgVector的描述来自另一个开源项目:https://github.com/stuzero/pg-mcp-server 🙏🙏🙏 这种提供上下文的方法令人耳目一新。

⚠️ 数据库需要定义角色以防止SQL注入。授予 SELECT 允许 public 防止敏感数据暴露的模式。 ⚠️ 为新角色授予所有权限 temp 模式,以确保数据隔离。

特性

在本地部署LLM时,需要高效地管理上下文。在每次调用时读取数据库模式会消耗时间和重要的令牌上下文。本项目采用预处理方法。它本机支持从数据库中获取表结构,并向LLM提供描述性信息:

  • 利用工具描述和输入模式隐式或显式地传达模式信息。
  • 在初始化过程中利用MCP资源读取表名、列、约束、外键、索引、几何图形类型和EPSG代码,为大型模型创建基本理解。

安装

在……里面 main.go:

// Here you can set the connection string for database interaction
schemaLoadConnID, err := dbService.RegisterConnection(tempCtx, "postgres://mcp_user:mcp123456@192.168.2.19: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
  • 🀄 直接运行
  1. 克隆项目
git clone https://github.com/cbc3929/pg_mcp_server.git
cd pg_mcp_server
  1. 安装依赖项
go mod tidy

或

go mod download
  1. 直接运行
    确保设置了必要的环境变量或存在.env文件
go run ./cmd/server/main.go
  1. 构建(可选)
go build -o pg_mcp_server ./cmd/server/main.go
./pg_mcp_server

扩展支持

PostGIS✅
Pg矢量✅
Pg路由⭕

全部/未完成

  • 临时模式中的表管理:应实现表清理/回收机制。
  • 单元测试。