PostgreSQL模型上下文协议服务

为PostgreSQL提供模型上下文协议(MCP)支持的服务,实现模式内省、安全查询执行和权限控制。

  • by i-panov
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 i-panov/pg_mcp

使用说明

pg_mcp

PostgreSQL的MCP服务器。通过以下方式提供模式自检和查询执行工具 模型上下文协议.

特征

  • 执行任意SQL查询
  • 执行只读查询(SELECT安全)
  • 内省模式、表、视图、函数、触发器、索引
  • 安全控制的三种权限模式

需求

  • 锈1.75+(2024年版)
  • PostgreSQL 15+
  • Podman或Docker(用于集成测试)

设置

cp .env.example .env
# Edit .env with your database credentials
DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres
DEFAULT_SCHEMA=public
PERMISSION_MODE=restricted

构建与运行

cargo build --release
./target/release/pg_mcp

服务器通过stdio(MCP协议)进行通信。

工具

工具 说明
execute_sql 执行任意SQL(INSERT、UPDATE、DELETE、SELECT等)
execute_query 通过read only事务执行只读查询
list_schemas 列出所有架构
list_tables 列出架构中的表
list_views 列出架构中的普通视图
list_materialized_views 列出架构中的物化视图
list_procedures 列出模式中的函数/过程
list_triggers 列表触发器(可选表筛选器)
list_indexes 列出表的索引
get_table_structure 列、约束、外键
get_view_definition 视图的SQL定义
get_function_definition 函数的SQL定义

权限模式

模式 execute_sql execute_query 架构工具
unrestricted ✅ ✅ ✅
readonly ❌ ✅ ✅
restricted ❌ ❌ ✅

违约: restricted.通过设置 PERMISSION_MODE env-var(不区分大小写)。

查询行为

execute_sql:执行任意SQL。失败时返回错误。

execute_query:将查询包装在 READ ONLY 交易。列值通过类型感知进行序列化: bool, int2/int4/int8, float4/float8, numeric, json/jsonb 保留为其原生JSON类型。其他类型以字符串形式返回。

安全

  • SQL错误被净化以剥离连接字符串(通过以下方式防止密码泄漏 sqlx::Error).
  • execute_sql 仅在以下情况下可用 unrestricted 模式。
  • execute_query 被封锁了 restricted 模式。