Skip to main content
Glama
devopam

MCPg - Production-grade PostgreSQL MCP Server

MCPg

MCP Toplist

一个生产级的 Model Context Protocol PostgreSQL 服务器。 它让 AI 代理能够安全地检查、查询、操作和调优 Postgres 数据库——提供 254 个工具,涵盖目录内省、查询智能、自然语言 SQL、结构差异、混合搜索、图查询、数据迁移、实时运维等。

PyPI version Python versions License: MIT CI OpenSSF Scorecard OpenSSF Best Practices Stars MCPg MCP server AllMCPs Verified

在线试用: 将 MCP 客户端——或 MCP Inspector——指向托管的只读演示端点 https://devopam-mcpg-demo.hf.space/mcp。它针对一次性演示数据提供只读工具;实际使用时,请在您自己的数据库旁边运行 MCPg(参见快速开始)。

📍 已收录于


方面

MCPg

安全性

默认只读 + AST 验证

传输方式

stdio + HTTP/SSE

安装

pip install mcpg

Postgres 版本

14–19

关键差异化

生产级可观测性 + 多租户

为什么选择 MCPg

  • 默认安全。 只读访问模式。每条用户提供的 SQL 语句在执行前都会通过经过验证的 AST 允许列表进行解析。标识符插值通过严格的 [A-Za-z_][A-Za-z0-9_]* 正则表达式流转——这一设计约束意味着用户输入永远不会通过字符串拼接到达数据库。DDL、shell 和 LISTEN/NOTIFY 等功能默认关闭,直到您选择启用。每个工具都会发布源自相同门控的 MCP ToolAnnotationsreadOnlyHintopenWorldHint),因此客户端可以自动批准读取操作并在无需猜测的情况下对写入操作进行门控。

  • 一个服务器,广泛覆盖。 应用数据访问(查询、搜索、游标、NL→SQL)以及 DBA 级操作(健康检查、索引调优、EXPLAIN 分析、锁、vacuum、转储、副本、迁移)都集成在单个 MCP 服务器中。代理无需切换工具即可切换任务。

  • 一切皆 PostgreSQL 原生。 无 ORM,无抽象开销——直接使用 psycopg3,支持所有 pg_* 系统视图,在可用时与 TimescaleDB、pgvector、PostGIS、Apache AGE 和 pg_stat_statements 集成,在不可用时优雅降级。

  • 面向生产,而非演示。 连接池、按请求 SET ROLE 多租户、带降级主机检测的只读副本路由、带专用连接的服务器端游标、速率限制、带正则表达式脱敏的审计跟踪、启动时 PG TLS 强制、OIDC JWT 承载认证、按会话的语句/锁超时。

  • 内置可观测性。 HTTP 传输上的 Prometheus /metrics 端点暴露 mcpg_tool_calls_total{tool,status} + mcpg_tool_duration_seconds。每次工具调用都会记录一条结构化的审计事件,其中包含凭据脱敏后的参数。

  • 测试驱动,多版本。 2,500+ 单元测试,外加在 CI 中针对真实 PostgreSQL 容器运行的集成套件——每次推送都会在 PG 14、15、16、17、18 上进行矩阵测试,另外还有 PG 19(测试版) 作为实验性(非阻塞)条目,在 issue #120 下跟踪。


Related MCP server: PostgreSQL MCP Server

安装

从 PyPI 安装(推荐)

pip install mcpg
# or, in an isolated venv exposed globally:
uv tool install mcpg

验证:

mcpg --version

Docker

从 GitHub Container Registry 拉取预构建镜像(在每个带标签的发布版本上发布——:latest 跟踪最新版本,或固定版本如 :0.6.5):

docker pull ghcr.io/devopam/mcpg:latest
docker run --rm --name mcpg -p 8000:8000 \
    -e MCPG_DATABASE_URL=postgresql://user:pass@host:5432/db \
    -e MCPG_ACCESS_MODE=read-only \
    ghcr.io/devopam/mcpg:latest

Windows PowerShell 上,将末尾的 \ 替换为反引号 `(或将命令放在一行上);安装指南 提供了可直接复制的 Linux/macOS、PowerShell 和 Command Prompt 代码块。

或者从源码自行构建:

docker build -t mcpg https://github.com/devopam/MCPg.git

多阶段镜像:运行时阶段移除构建工具链,以 uid=10001 / gid=10001 身份运行,使用 nologin shell,应用文件归 root 所有且对运行时用户只读。

从源码(开发者)

git clone https://github.com/devopam/MCPg && cd MCPg
uv sync

uv sync 会创建一个包含所有运行时 + 开发依赖的虚拟环境,并暴露 mcpg 控制台脚本。

更多详情请参阅安装指南


快速开始

一键安装: Add to Cursor Install in VS Code Claude Desktop ——Windsurf、JetBrains、Zed、Cline、Antigravity、Qwen Code、Perplexity、ChatGPT、Copilot Studio、Continue 和 HTTP 客户端的设置请参阅集成指南

在 Claude Desktop 中一键安装(.mcpb)

最新发布下载 mcpg-<version>.mcpb,然后双击它(或将其拖入 Claude Desktop 的 Settings → Extensions)。系统会提示您输入 PostgreSQL 连接 URL——存储在操作系统密钥链中——以及访问模式(默认为只读)。安装就这么简单:该捆绑包约 2 kB,主机端会从 PyPI 为您的平台解析固定的 mcpg 版本。

或手动配置(stdio 传输)

将此内容放入您的 claude_desktop_config.json(macOS:~/Library/Application Support/Claude/claude_desktop_config.json;Windows:%APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "mcpg": {
      "command": "uvx",
      "args": ["mcpg"],
      "env": {
        "MCPG_DATABASE_URL": "postgresql://user:pass@localhost:5432/mydb"
      }
    }
  }
}

重启 Claude Desktop。MCPg 工具集现在可供模型使用。您可以向 Claude 提问,例如:

"这个数据库中有哪些 schema?对于每个 schema,总结最大的三张表。"

"为什么这个查询很慢?SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at DESC"

还没有有趣的数据?填充演示数据集

MCPG_DATABASE_URL=postgresql://... mcpg --demo

一条命令即可将一个小型、精选的电商数据集(3,000 个订单、900 条产品评论、故意埋入的缺陷)填充到 mcpg_demo schema 中——经过精心设计,让索引顾问、查询计划分析、全文搜索、PII 审计和图投影在您第一次尝试时就有真实内容可查。参见导览查看录制的演练,随时可用 mcpg --demo-drop 将其移除。

作为 HTTP 服务器运行(用于 IDE 集成、Web 应用等)

MCPG_DATABASE_URL=postgresql://user:pass@localhost:5432/mydb \
MCPG_TRANSPORT=streamable-http \
MCPG_HTTP_PORT=8000 \
mcpg

然后将任何支持 MCP 的客户端指向 http://localhost:8000/mcp(或使用 /sse 进行 SSE 传输)。设置 MCPG_HTTP_AUTH_TOKEN=... 以使用静态承载令牌,或设置 MCPG_AUTH_MODE=oidc 以针对 OIDC 颁发者进行完整的 JWT 验证。


配置

MCPg 完全通过环境变量进行配置——没有配置文件,没有标志(CLI 的 --version / --demo / --demo-drop 是一次性命令,不是配置)。唯一必需的是 MCPG_DATABASE_URL;其他所有变量都有安全的默认值。

常见场景

场景

设置

本地探索,只读

MCPG_DATABASE_URL

读写应用数据访问

MCPG_ACCESS_MODE=restricted

DBA 工具包(DDL、vacuum 等)

MCPG_ACCESS_MODE=unrestricted + MCPG_ALLOW_DDL=true

带承载认证的 HTTP 传输

MCPG_TRANSPORT=streamable-http + MCPG_HTTP_AUTH_TOKEN=…

多租户 SaaS

MCPG_DEFAULT_ROLE=tenant_a + MCPG_ALLOWED_ROLES=tenant_a,tenant_b,…

只读副本扇出

MCPG_REPLICA_URLS=postgresql://…?sslmode=require,postgresql://…?sslmode=require

NL→SQL — 单一提供商

设置任意一个厂商密钥(ANTHROPIC_API_KEYOPENAI_API_KEYGEMINI_API_KEYXAI_API_KEYGROQ_API_KEYHF_TOKEN、…… — 22 个内置提供商)。MCPg 自动选择默认提供商。

NL→SQL — 多个提供商,由调用方选择

设置所有您想启用的厂商密钥。每次调用 translate_nl_to_sql 时都可以传入 provider="…"(任何已配置的内置或自定义提供商)。

完整参考

核心

变量

默认值

描述

MCPG_DATABASE_URL

必填

主 PostgreSQL DSN。支持 URI(postgresql://…)和关键字(host=… user=…)形式。远程主机要求 sslmode=require(或更强)。

MCPG_ACCESS_MODE

read-only

read-only | restricted(允许写入工具)| unrestricted(与门控变量配合时还解锁 DBA 工具)。

MCPG_TRANSPORT

stdio

stdio(默认,用于 Claude Desktop)| streamable-http | sse

MCPG_LOG_LEVEL

INFO

DEBUG | INFO | WARNING | ERROR | CRITICAL

MCPG_HTTP_HOST

127.0.0.1

HTTP 传输的绑定地址。在容器内设置为 0.0.0.0

MCPG_HTTP_PORT

8000

HTTP 传输的监听端口(1–65535)。

能力门控(面向更高爆炸半径工具的可选启用)

变量

默认值

描述

MCPG_ALLOW_DDL

false

公开 DDL 工具(run_ddlcreate_graphdrop_graph、hypertable 工具、迁移工具)。需要 MCPG_ACCESS_MODE=unrestricted

MCPG_ALLOW_SHELL

false

公开基于子进程的工具(dump_databaserestore_databaserun_pg_binary)。所需的 PG 客户端二进制文件必须在 PATH 中。

MCPG_ALLOW_LISTEN

false

公开 LISTEN/NOTIFY 工具(subscribe_channelpoll_notificationsunsubscribe_channellist_notification_subscriptions)。

认证(仅 HTTP 传输)

变量

默认值

描述

MCPG_AUTH_MODE

static

static(将 bearer 令牌与 MCPG_HTTP_AUTH_TOKEN 比较)| oidc(完整的 JWT 验证)。

MCPG_HTTP_AUTH_TOKEN

MCPG_AUTH_MODE=static 时必需的 bearer 令牌。恒定时间比较。

MCPG_OIDC_ISSUER

OIDC 签发者 URL(当 MCPG_AUTH_MODE=oidc 时必填)。

MCPG_OIDC_AUDIENCE

预期的 aud 声明(当 MCPG_AUTH_MODE=oidc 时必填)。

MCPG_OIDC_JWKS_URL

自动发现

覆盖 JWKS 端点(否则从签发者的 .well-known 自动发现)。

MCPG_OIDC_ROLE_CLAIM

JWT 声明,其值成为每个请求的 PG 角色(SET LOCAL ROLE)。与多租户驱动组合使用。

HTTP 加固(仅 HTTP 传输)

变量

默认值

描述

MCPG_HTTP_MAX_BODY_BYTES

1048576

(1 MiB)请求体超过此大小时返回 413。按流式字节计数,因此缺失或伪造的 Content-Length 无法绕过此限制。

MCPG_HTTP_ALLOWED_ORIGINS

逗号分隔的 CORS 允许列表。未设置 = 无 CORS 中间件(不发出跨源头)。

MCPG_HTTP_HSTS_MAX_AGE

31536000

Strict-Transport-Security 的 max-age。0 禁用 HSTS 头。除非应用已自行设置,否则始终会添加安全头(CSP、X-Frame-Options、X-Content-Type-Options、Referrer-Policy)。

MCPG_HTTP_REQUEST_TIMEOUT_SECONDS

0

每个请求的实际耗时上限(超时返回 504)。0 = 禁用。如果你依赖长连接的 SSE / streamable-http 流,请不要设置此值——硬性上限同样会切断这些流。

多租户(SET ROLE

变量

默认值

描述

MCPG_DEFAULT_ROLE

应用于每个查询的静态 PG 角色。已通过标识符校验。

MCPG_ALLOWED_ROLES

逗号分隔的允许列表。设置后,X-MCPG-Role 头 / OIDC 角色声明必须在此列表中。

只读副本

变量

默认值

描述

MCPG_REPLICA_URLS

逗号分隔的副本 DSN。force_readonly 查询在健康副本间轮询;失败时回退到主库;30 秒的降级副本重试窗口。

多数据库(只读辅助数据库)

变量

默认值

描述

MCPG_SECONDARY_DATABASE_URLS

以逗号或换行符分隔的 name=dsn 条目,用于指定此服务器可额外服务的 只读 数据库(例如 analytics=postgresql://…?sslmode=require,reporting=postgresql://…?sslmode=require)。支持读取的工具接受一个可选的 database 参数,用于按名称选择辅助数据库;省略该参数则使用主数据库。辅助数据库为只读——由 PostgreSQL 强制(每个查询都在 READ ONLY 事务中运行),因此写入 / DDL / shell / migrate 始终以主数据库为目标。名称必须是简单标识符([a-z0-9_]+)、唯一,且不能是 primaryMCPG_DATABASE_URL 的保留 id)。与主 DSN 相同的 TLS 规则。调用 list_databases 可查看已配置的 id 及其可达性。

连接池 / 超时 / TLS

变量

默认值

描述

MCPG_POOL_MIN_SIZE

1

连接池的最小连接数。

MCPG_POOL_MAX_SIZE

5

连接池的最大连接数。必须 ≥ MCPG_POOL_MIN_SIZE

MCPG_STATEMENT_TIMEOUT_MS

30000

每次从连接池获取连接时,为该会话设置 statement_timeout。失控查询会自动终止。

MCPG_LOCK_TIMEOUT_MS

5000

每会话的 lock_timeout。挂起的锁等待会自动终止。

MCPG_ENABLE_ANALYTICAL_QUERIES

true

公开 run_analytical_query(在独立连接池上执行长时间运行的读取)。设置为 false 可停用该工具。

MCPG_ANALYTICAL_TIMEOUT_MS

120000

run_analytical_query 的默认单次调用预算(2 分钟)。

MCPG_ANALYTICAL_MAX_TIMEOUT_MS

600000

run_analytical_query 的硬性上限;单次调用的 timeout_ms 会被限制在此值以内(10 分钟)。必须 ≥ MCPG_ANALYTICAL_TIMEOUT_MS

MCPG_ANALYTICAL_MAX_CONCURRENCY

2

独立分析连接池的大小——可同时执行的 run_analytical_query 调用的最大数量。

MCPG_ALLOW_INSECURE_TLS

false

绕过启动时的 TLS 检查(该检查会拒绝未使用 sslmode=require 或更强设置的远程 DSN)。环回主机始终豁免。

MCPG_SHUTDOWN_DRAIN_SECONDS

30

收到 SIGTERM 时,最多等待这么长时间让进行中的工具调用完成,然后才关闭连接池和游标。

子进程工具(仅限 MCPG_ALLOW_SHELL=true

变量

默认值

描述

MCPG_SHELL_TIMEOUT_SEC

60

调用 pg_dump / pg_restore / psql 的最大挂钟时间。

MCPG_SHELL_MAX_OUTPUT_BYTES

67108864

(64 MiB)每次子进程调用捕获 stdout 的上限。

MCPG_SUBPROCESS_BIN_ALLOWLIST

逗号分隔的绝对目录,解析出的 pg_dump / pg_restore / psql 必须位于这些目录之下。留空则信任 PATH。可防止这些二进制程序被 PATH 垫片(shim)覆盖。

MCPG_SUBPROCESS_CPU_SECONDS

每个子进程的 RLIMIT_CPU(秒)。仅限 POSIX;未设置则继承。

MCPG_SUBPROCESS_MEMORY_MB

每个子进程的 RLIMIT_AS(MiB)。仅限 POSIX;未设置则继承。

LISTEN/NOTIFY(仅 MCPG_ALLOW_LISTEN=true 时)

变量

默认值

描述

MCPG_LISTEN_QUEUE_MAX

1000

每个通道的缓冲区;溢出时丢弃最旧的通知。

审计

变量

默认值

描述

MCPG_AUDIT_PERSIST

false

为 true 时,每次 run_write / run_ddl 调用都会持久化到 mcpg_audit.events 表(自动幂等创建)。

MCPG_AUDIT_REDACT_KEYS

逗号分隔的正则片段,追加到秘密名称模式(默认已覆盖 passwordpasswdsecrettokenapi[_-]?keybearerauthorizationdatabase_urldsnconninfo)。

MCPG_AUDIT_INTEGRITY

false

为 true 时,每条持久化事件都会用与前一条事件链式衔接的 HMAC 签名;verify_audit_chain 工具沿链校验并上报第一个断点。需要 MCPG_AUDIT_HMAC_KEY

MCPG_AUDIT_HMAC_KEY

审计 HMAC 链的密钥。当 MCPG_AUDIT_INTEGRITY=true 时必填。绝不会出现在 repr/日志中。

密钥后端

默认情况下,每条机密都直接从环境中读取。设置 MCPG_SECRETS_BACKEND=file 可改为从挂载的文件加载 API 密钥 / bearer token / HMAC 密钥 —— 文件中的名称优先;文件中缺失的项会回退到环境变量,因此只写部分字段的文件也能工作。

变量

默认值

描述

MCPG_SECRETS_BACKEND

env

env(从环境中读取每条机密)| file(在环境之上叠加机密文件)。

MCPG_SECRETS_FILE_PATH

MCPG_SECRETS_BACKEND=file 时必填。指向一个扁平的 name → value 映射的路径:始终支持 JSON,或当安装了 PyYAML 时支持 YAML(.yaml/.yml)。覆盖 ANTHROPIC_API_KEY / OPENAI_API_KEY / GEMINI_API_KEY / GOOGLE_API_KEY / MCPG_NL2SQL_API_KEYMCPG_HTTP_AUTH_TOKENMCPG_AUDIT_HMAC_KEY

速率限制

变量

默认值

说明

MCPG_RATE_LIMIT_ENABLED

false

启用按工具划分的令牌桶速率限制。

MCPG_RATE_LIMIT_MAX_REQUESTS

60

一个窗口内所有工具的全局上限。

MCPG_RATE_LIMIT_WINDOW_SECONDS

60

全局配额对应的时长窗口。

MCPG_RATE_LIMIT_HEAVY_MAX

5

重工具(run_writerun_ddldump_database 等)的上限。

MCPG_RATE_LIMIT_HEAVY_WINDOW

60

重工具配额对应的时长窗口。

缓存与功能开关

变量

默认值

说明

MCPG_CACHE_ENABLED

true

启用或禁用自适应缓存层。

MCPG_CACHE_TTL_SECONDS

300

默认缓存存活时间(秒)。

MCPG_CACHE_MAXSIZE

1024

内存缓存的 LRU 最大容量上限。

MCPG_REDIS_URL

可选的外部 Redis 后端连接字符串,用于外部多节点缓存。

MCPG_ENABLE_HEAVY_DIAGNOSTICS

true

切换计算密集型的诊断、图形和顾问类工具的开关。

MCPG_ELICIT_CONFIRM_WRITES

false

为 true 时,每个写 / DDL / shell / listen / migrate 分类下的工具调用(任何 readOnlyHint 注解不为 true 的工具)在执行前都需要用户接受一次交互式确认(ctx.elicit())。这是尽力而为的机制,而非强制边界:它仅对以下客户端生效——这些客户端在 initialize 时既传递了请求 context,又声明了 elicitation 能力;任一省略都会让客户端静默绕过该闸门,工具照常运行。

自然语言 SQL

MCPg 在启动时会自动从环境中发现每个已配置的提供商,你配置多少个提供商的密钥,就会有多少个可调用。内置了十九个提供商。 其中三家为第一方(Anthropic、OpenAI、Gemini),其余十六个使用 OpenAI 兼容 API,并由厂商预设好端点:DeepSeek、Qwen、OpenRouter、Perplexity、xAI(Grok)、Groq、Mistral、Together、Fireworks、DeepInfra、Cerebras、Nebius、Hugging Face、GitHub Models、SambaNova 和 Moonshot(Kimi)。每个内置提供商都是即插即用的——设置该供应商通行的 API-key 环境变量后即可自动发现——并且任何其他 OpenAI 兼容提供商或本地模型服务器(Ollama、vLLM、LM Studio)仍可仅通过配置接入,通过 MCPG_NL2SQL_CUSTOM_PROVIDERS。整个内置列表只是一个声明式注册表,位于 nl2sql.py 中,因此新增一个提供商或刷新一个已退役的默认模型,只需普普通通的一行数据改动。

MCPG_NL2SQL_PROVIDER 未设置时,MCP 的默认选择按注册表顺序自动选取——anthropic → openai → gemini 排在前面,因此现有部署不受影响。translate_nl_to_sql 可接受可选的 provider="…" 参数来按单次调用路由;get_server_info 会报告哪些提供商已配置。

Variable

Default

Description

<VENDOR>_API_KEY

设置某个供应商的惯例密钥即可启用该提供商。标准 slug:ANTHROPIC_API_KEYOPENAI_API_KEYDEEPSEEK_API_KEYOPENROUTER_API_KEYPERPLEXITY_API_KEYXAI_API_KEYGROQ_API_KEYMISTRAL_API_KEYTOGETHER_API_KEYFIREWORKS_API_KEYCEREBRAS_API_KEYNEBIUS_API_KEYSAMBANOVA_API_KEYMOONSHOT_API_KEY

(不遵循该约定的密钥)

少数供应商不遵循 <VENDOR>_API_KEYGeminiGEMINI_API_KEYGOOGLE_API_KEYQwenDASHSCOPE_API_KEYQWEN_API_KEYHugging FaceHF_TOKENGitHub ModelsGITHUB_TOKENDeepInfraDEEPINFRA_TOKEN

MCPG_NL2SQL_PROVIDER

自动选择

任意内置 slug(见上表)或自定义名称。固定默认提供商,当调用工具时未携带 provider= 即使用此提供商。若未设置且存在任意供应商密钥 → MCPg 按注册表顺序自动选择。

MCPG_NL2SQL_API_KEY

针对已配置的 MCPG_NL2SQL_PROVIDER 的显式密钥。仅对该提供商覆盖供应商惯例环境变量。需要设置 MCPG_NL2SQL_PROVIDER

MCPG_NL2SQL_MODEL

提供商默认值

覆盖默认模型(例如 claude-sonnet-4-6gpt-4o-minigrok-3-mini)。仅适用于默认提供商。

MCPG_NL2SQL_BASE_URL

默认提供商的端点覆盖(私有网关 / 区域端点)。

MCPG_NL2SQL_CUSTOM_PROVIDERS

自带提供商——无需改动代码。 以逗号/换行分隔的 `name=base_url

model条目,用于声明内建之外*额外*的兼容 OpenAI 的提供商(本地 Ollama / vLLM / LM Studio,或任何小众供应商)。密钥按惯例取自_API_KEY;对于不遵循该约定的,可追加 |KEY_ENV_VAR;回环端点允许无密钥。每个名称都可以通过 provider=` 调用。

MCPG_NL2SQL_MAX_TOKENS

2048

生成 token 数的上限(硬限制:16384)。


使用示例

MCP 工具由智能体(Claude、Cursor、Continue……)根据你的自然语言指令调用。下面是一些有代表性的往返示例:

检查模式

你: public 模式中有哪些表?按行数计算,哪些表最大?

智能体(使用 list_tables + summarize_table × N): 共六张表:customers(1.2M 行)、orders(4.7M)、line_items (18.3M)、products(340)、addresses(1.4M)、audit_log (45.8M——最大,且没有保留策略,持续累积)。

诊断慢查询

你: 为什么 SELECT * FROM orders o JOIN line_items l ON o.id = l.order_id WHERE o.created_at > now() - interval '7 days' 需要 8 秒?

智能体(使用 why_is_this_slow + recommend_indexes): EXPLAIN ANALYZE 显示,对 orders(4.7M 行)按 created_at 过滤时进行了顺序扫描。 orders.created_at 上没有索引。建议: CREATE INDEX CONCURRENTLY orders_created_at_idx ON orders (created_at DESC); 预期改进:约减少 95%(索引扫描只需触及约 33K 行,而非整张表)。 应用前先对其运行 validate_migration,确认不会有锁相关的意外。

将自然语言转换为 SQL

你: 找出本月下过单但前三个月从未下过单的客户——显示他们的邮箱和当前累计消费金额。

智能体(使用 translate_nl_to_sql):

SELECT c.email, SUM(l.price * l.quantity) AS lifetime_spend
FROM customers c
JOIN orders o ON o.customer_id = c.id
JOIN line_items l ON l.order_id = o.id
WHERE EXISTS (
  SELECT 1 FROM orders o2 WHERE o2.customer_id = c.id
    AND o2.created_at >= date_trunc('month', now()))
  AND NOT EXISTS (
  SELECT 1 FROM orders o3 WHERE o3.customer_id = c.id
    AND o3.created_at >= date_trunc('month', now()) - interval '3 months'
    AND o3.created_at <  date_trunc('month', now()))
GROUP BY c.email;

绘制模式图

你: 帮我画一张 public 模式的 ER 图。

智能体(使用 generate_schema_diagram): 返回一张可以直接粘贴到 GitHub / Notion / Obsidian 的 Mermaid 图。

审计数据库

你: 这个数据库现在的运行状况如何?

智能体(使用 audit_database): 返回一份分级报告: 内存与 I/O 评分 92(GOOD)、事务与连接 78(WARNING:回滚率 0.4%,请检查应用日志)、并发与锁 60 (CRITICAL:14 个后台进程在等待)、整洁度与膨胀 88(GOOD)、慢查询 70(WARNING:最高频的 查询模板执行 5000 次,平均 90 ms——参见 optimize_query)。

执行受保护的写入

你: 软删除所有超过 5 年的订单。

智能体(使用 run_write 并设置 MCPG_AUDIT_PERSIST=true): 通过 safe-SQL 内核校验 该语句,在事务中执行,返回受影响的行数,并将该调用(sql + 参数——其中机密已通过正则脱敏——+ 状态) 持久化到 mcpg_audit.events,供事后审查。

还有数十个配方——多租户路由、RLS 测试、NL→SQL、混合向量 + FTS 搜索、Apache AGE Cypher、TimescaleDB、ORM 模式导出、服务端游标——请参阅 docs/cookbook.md


内含功能

以下是精简的分类列表。完整且最新的工具参考请参阅 docs/tools.md;逐步导览请参阅 docs/tour.md

  • 目录内省 — 模式、表、列、索引、约束、视图、函数、触发器、序列、分区、策略、角色、授权、枚举、域、复合类型、FDW、发布、订阅、扩展、生成列。

  • 查询智能run_selectrun_select_parallelexplain_queryanalyze_query_planwhy_is_this_slowrecommend_indexesanalyze_workloadcheck_database_healthdetect_n_plus_oneaudit_database

  • 搜索fuzzy_search(trigram)、full_text_searchvector_searchhybrid_search(pgvector + FTS,通过 RRF)、geo_search(PostGIS k-NN)。

  • 自然语言 → SQLtranslate_nl_to_sql(内置 22 家提供商——Anthropic、OpenAI、Gemini、xAI、Groq、Mistral、Hugging Face……——以及任何自定义的兼容 OpenAI 的端点;输出与手写查询一样,会经过同一个 safe-SQL 内核)。

  • 可视化generate_schema_diagram(ER)、generate_fk_cascade_graphON DELETE CASCADE 的爆炸半径)、generate_graph_diagram(Apache AGE 属性图)。

  • 结构差异与迁移compare_schemasvalidate_migration、分阶段的 prepare_migration / complete_migration / cancel_migration 工作流。

  • Apache AGE 图与 Cypherlist_graphsdescribe_graphrun_cyphercreate_graphdrop_graphgenerate_graph_diagram

  • 综合与建议工具summarize_tablefind_unused_objectsfind_sensitive_columns(PII 启发式)、lint_naming_conventionstest_rls_for_rolelist_locksfind_blocking_chainsread_pg_stat_io(PG16+)、generate_test_data

  • 实时运维与维护list_active_queriesverify_connection_encryption(活动链路的 TLS 状态)、run_maintenance(VACUUM/ANALYZE)、prune_audit_events(审计保留策略)、cancel_queryterminate_backendrun_writerun_ddlenable_extension

  • 数据传输export_query / export_table(CSV/JSON)、dump_database / restore_databaseimport_csv / import_json(COPY FROM STDIN)、copy_table_between_databases

  • 服务端游标open_cursorfetch_cursorclose_cursorlist_cursors,用于对数百万行的数据执行分页读取。

  • TimescaleDBlist_hypertableslist_chunkscreate_hypertableadd_compression_policyadd_retention_policy

  • ORM 模式导出器 — Prisma、Drizzle、SQLAlchemy、sqlc、Diesel、jOOQ、Ent、Ecto。

  • 事件流subscribe_channelpoll_notificationsunsubscribe_channellist_notification_subscriptions,将 PostgreSQL 的 LISTEN/NOTIFY 桥接到 MCP 轮询模型。

  • 可观测性 — Prometheus /metrics 端点 + 面向 stdio 的 get_metrics_exposition 工具;结构化审计追踪,支持基于正则表达式的凭证脱敏。


文档


安全

  • 漏洞报告:参见 SECURITY.md。90 天协调披露窗口;报告发送至 devopam@gmail.com

  • 纵深防御:能力门控、SafeSQL 内核、标识符白名单、审计脱敏、启动时强制 PG TLS、速率限制、OIDC JWT 校验、每会话超时。

  • 参见 docs/security-hardening.md 了解已发布(✅)和已排队(⬜)加固项的动态路线图。

隐私政策

MCPg 是自托管的:你的数据库内容永远不会离开你的基础设施,并且没有任何形式的遥测或回传。唯一有记录的例外是可选加入的 translate_nl_to_sql 工具,它会将你的问题以及模式上下文(名称,而非行数据)发送给由配置的 LLM 提供商。完整政策——数据收集、使用、存储、第三方共享、保留期限和联系方式——见 PRIVACY.md


发布说明与变更日志

完整版本历史参见 CHANGELOG.md,发布流程参见 docs/release-process.md,可下载的构建产物参见 GitHub Releases 页面。


贡献

欢迎提交 Pull Request——有关开发循环设置、测试约定和每个 PR 的审查清单,请参见 CONTRIBUTING.md


许可证

MIT——参见 LICENSE。SQL 安全内核(src/mcpg/sql/)是第一方代码,根据 MIT 许可的 crystaldba/postgres-mcp 重新编写;来源参见 NOTICE

封装的扩展——你应该了解的许可证

MCPg 的源代码采用 MIT 许可证,但它封装的 PostgreSQL 扩展各自带有自己的许可证。这些封装本身保持一定距离(SQL 级调用,不静态或动态链接到 MCPg 的 Python 进程),因此 MCPg 项目本身不是其中任何一个的衍生作品。部署基于 MCPg + 特定扩展构建的服务的运维人员,需要承担该扩展许可证所施加的任何义务——与直接安装该扩展相同。下表列出了每个封装扩展的许可证,以便你做出明智的选择。

扩展

许可证

面向运维人员的说明

pgvector

PostgreSQL 许可证(BSD 风格)

宽松许可;无特殊义务。

pg_partman

PostgreSQL 许可证

宽松许可。

pg_cron

PostgreSQL 许可证

宽松许可。

pg_turboquant

MIT

宽松许可。

pg_buffercache / pg_walinspect / pgstattuple

PostgreSQL contrib

宽松许可。

TimescaleDB

Apache 2.0(社区版)+ Timescale 许可证(TSL,源代码可用),适用于某些功能

混合——请参阅 Timescale 的文档,了解哪些功能受 TSL 限制。

Apache AGE

Apache 2.0

宽松许可。

pg_search (ParadeDB)

AGPL-3.0

运行网络服务、允许用户与 pg_search 交互的运维人员受 AGPL 网络条款约束——通常是向这些用户提供 pg_search(及其任何修改)源代码的义务。MCPg 的封装不会将该义务延伸到 MCPg 本身;当你通过网络部署并"传播"该扩展时,你才承担该义务。如果你的服务再分发模式与 AGPL 的网络条款不兼容,请选择不同的 BM25 实现(BM25 计划列出了替代方案)。

此矩阵只是一个起点——要获得针对你具体部署的具有约束力的答案,请查阅扩展的上游 LICENSE 文件,以及(如果法律上重要的话)咨询你自己的法律顾问。

免责声明。 已尽最大努力将 MCPg 提升到生产级,但它仍然是一个积极开发中的项目,可能存在问题。有关赔偿详情,请参阅许可证条款。

Install Server
A
license - permissive license
B
quality
A
maintenance

Maintenance

Maintainers
8dResponse time
4dRelease cycle
19Releases (12mo)
Commit activity
Issues opened vs closed

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    A Model Context Protocol server that enables powerful PostgreSQL database management capabilities including analysis, schema management, data migration, and monitoring through natural language interactions.
    18
    2,467
    198
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides AI assistants with secure, read-only access to PostgreSQL databases while offering comprehensive tools for schema exploration, query validation, and performance optimization.
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/devopam/MCPg'

If you have feedback or need assistance with the MCP directory API, please join our Discord server