mcpField
P
PG_MCP_SERVER

PG_MCP_SERVER

本地服务
github.com/cbc3929数据库081 周前更新

关于 PG_MCP_SERVER

PG_MCP_SERVER 是面向 PostgreSQL 与 PostGIS 的通用 MCP 服务,适合需要让 LLM 查询数据库结构信息的场景。它预先读取并缓存表结构,并支持 Stdio 与 SSE 传输。

主要功能

  1. 01预加载并缓存数据库结构
  2. 02提供表、列与约束信息
  3. 03读取外键、索引和空间信息
  4. 04支持 PostgreSQL 与 PostGIS
  5. 05支持 Stdio 和 SSE

适用场景

  1. 01为 LLM 提供数据库结构上下文
  2. 02检查表关系与索引信息
  3. 03处理含 PostGIS 几何数据的数据库

MCP 相关

通过 MCP Resources 在初始化时提供表名、列、约束、外键、索引及几何类型等信息,并使用工具描述和输入 schema 传达结构上下文。支持 Stdio 与 SSE。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"pg_mcp_server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
启动命令docker run -i --rm build

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocibuild

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

PG_MCP_SERVER

适用于 PostgreSQL + PostGIS 的自定义实现

简介

中文文档

通用 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
  • 🀄 直接运行
  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 ✅
PgVector ✅
PgRouting ⭕

TODO / 尚未完成

  • temp 架构中的表管理:应实现表清理/回收机制。
  • 单元测试。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。