关于 PostgreSQL Full Access MCP Server
这是一个 PostgreSQL MCP 服务,向 LLM 提供读写数据库的能力,并配有事务管理和安全控制。与官方只读 PostgreSQL MCP 服务相比,它支持 DML、DDL 等修改操作,并提供更丰富的表结构信息。
主要功能
- 01只读查询与 DQL 执行
- 02DML、DDL、DCL、TCL 语句执行
- 03显式提交与回滚事务
- 04语句与事务超时控制
- 05表结构、主键、外键与索引信息
适用场景
- 01让 LLM 在审核后创建表或写入数据
- 02通过自然语言查询数据库数据
- 03查看表结构以辅助数据建模
MCP 相关
该服务通过 MCP 工具(如 execute_query、describe_table)和资源向 MCP 客户端暴露 PostgreSQL 的查询与修改能力。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
PostgreSQL Full Access MCP 服务
一个强大的 Model Context Protocol 服务,提供对 PostgreSQL 数据库的完整读写访问。与只读的官方 MCP PostgreSQL 服务不同,此增强实现允许大模型(LLM)在具备适当事务管理和安全控制的情况下,查询并修改数据库内容。
目录
🌟 功能
完整读写访问
- 安全执行 DML 操作(INSERT、UPDATE、DELETE)
- 使用 DDL 创建、修改和管理数据库对象
- 通过显式提交进行事务管理
- 安全超时和自动回滚保护
丰富的 schema 信息
- 详细的列元数据(数据类型、描述、最大长度、可空性)
- 主键标识
- 外键关系
- 包含类型和唯一性标志的索引信息
- 表行数估算
- 表和列描述(如果可用)
高级安全控制
- SQL 查询分类(DQL、DML、DDL、DCL、TCL)
- 对安全查询强制执行只读执行
- 所有操作都在隔离的事务中运行
- 自动事务超时监控
- 可配置的安全限制
- 两步事务提交过程,需用户显式确认
🔧 工具
-
execute_query
- 执行只读 SQL 查询(SELECT 语句)
- 输入:
sql(字符串):要执行的 SQL 查询 - 所有查询都在 READ ONLY 事务中执行
- 结果包含执行时间指标和字段信息
-
execute_dml_ddl_dcl_tcl
- 执行数据修改操作(INSERT、UPDATE、DELETE)或架构变更(CREATE、ALTER、DROP)
- 输入:
sql(字符串):要执行的 SQL 语句 - 自动包装在具有可配置超时的事务中
- 返回事务 ID 以便显式提交
- 重要安全特性:对话将在执行后结束,允许用户查看结果后再决定提交或回滚
-
execute_maintenance
- 在事务之外执行维护命令,如 VACUUM、ANALYZE 或 CREATE DATABASE
- 输入:
sql(字符串):要执行的 SQL 语句 - 必须是 VACUUM、ANALYZE 或 CREATE DATABASE - 返回包含执行时间指标的结果对象
-
execute_commit
- 通过其 ID 显式提交事务
- 输入:
transaction_id(字符串):要提交的事务的 ID - 在提交或回滚后安全地处理清理
- 将更改永久应用到数据库
-
execute_rollback
- 通过其 ID 显式回滚事务
- 输入:
transaction_id(字符串):要回滚的事务的 ID - 安全地丢弃所有更改并清理资源
- 在查看更改并决定不应用它们时很有用
-
list_tables
- 获取数据库中所有表的完整列表
- 包含列数和表描述
- 无需输入参数
-
describe_table
- 获取特定表结构的详细信息
- 输入:
table_name(字符串):要描述的表的名称 - 返回完整的架构信息,包括主键、外键、索引和列详细信息
📊 资源
该服务为数据库表提供增强的架构信息:
- 表架构(
postgres://<host>/<table>/schema)- 每个表的详细 JSON 架构信息
- 包含完整的列元数据、主键和约束
- 自动从数据库元数据中发现
🚀 与 Claude Desktop 配合使用
Claude Desktop 集成
要将此服务与 Claude Desktop 配合使用,请按照以下步骤操作:
-
首先,确保你的系统上安装了 Node.js
-
使用 npx 安装该包或将其添加到你的项目中
-
通过编辑
claude_desktop_config.json(在 macOS 上通常位于~/Library/Application Support/Claude/)来配置 Claude Desktop:
{
"mcpServers": {
"postgres-full": {
"command": "npx",
"args": [
"-y",
"mcp-postgres-full-access",
"postgresql://username:password@localhost:5432/database"
],
"env": {
"TRANSACTION_TIMEOUT_MS": "60000",
"MAX_CONCURRENT_TRANSACTIONS": "5",
"PG_STATEMENT_TIMEOUT_MS": "30000"
}
}
}
}
- 将数据库连接字符串替换为你的实际 PostgreSQL 连接详细信息
- 完全重启 Claude Desktop
重要:使用"仅允许一次"以确保安全
当 Claude 尝试将更改提交到你的数据库时,Claude Desktop 会提示你进行批准:

在批准之前,请务必仔细查看 SQL 更改!
安全最佳实践:
- 对于提交操作,始终点击"仅允许一次"(而不是"始终允许")
- 在批准前仔细查看事务 SQL
- 考虑使用具有有限权限的数据库用户
- 首次尝试此服务时,如果可能,请使用测试数据库
这种"仅允许一次"的方式让你完全掌控,防止对数据库进行不需要的更改,同时在需要时仍能让 Claude 帮助完成数据管理任务。
⚙️ 环境变量
你可以在 Claude Desktop 配置中通过环境变量自定义服务行为:
"env": {
"TRANSACTION_TIMEOUT_MS": "60000",
"MAX_CONCURRENT_TRANSACTIONS": "5"
}
关键环境变量:
-
TRANSACTION_TIMEOUT_MS:事务超时时间,单位为毫秒(默认值:15000)- 如果事务需要更多时间,可增大此值
- 超过此时间的事务将出于安全考虑自动回滚
-
MAX_CONCURRENT_TRANSACTIONS:最大并发事务数(默认值:10)- 降低此数值可让运行更保守
- 增大此数值可允许更多同时写入操作
-
ENABLE_TRANSACTION_MONITOR:启用/禁用事务监控("true" 或 "false",默认值:"true")- 监控并自动回滚被遗弃的事务
- 很少需要禁用
-
PG_STATEMENT_TIMEOUT_MS:SQL 查询执行超时时间,单位为毫秒(默认值:30000)- 限制任何单条 SQL 语句可运行的时间
- 重要的安全功能,可防止查询失控
-
PG_MAX_CONNECTIONS:最大 PostgreSQL 连接数(默认值:20)- 保持在数据库连接限制以内很重要
-
MONITOR_INTERVAL_MS:检查卡住事务的频率(默认值:5000)- 通常无需调整
🔄 在 Claude 中使用完整数据库访问
此服务让 Claude 能够在获得你批准的情况下,读取和写入你的 PostgreSQL 数据库。以下是一些示例对话流程:
示例:创建新表并添加数据
你:"我需要一个新产品表,包含 id、name、price 和 inventory 列"
Claude:分析你的数据库并创建查询
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
inventory INTEGER DEFAULT 0
);
Claude Desktop 将提示你批准此操作
你:查看并点击 "Allow once"
Claude:"我已创建 products 表。需要我添加一些示例数据吗?"
你:"是的,请添加 5 个示例产品"
Claude:创建 INSERT 语句并提示批准 你查看并使用 "Allow once" 批准
示例:使用安全查询进行数据分析
你:"我的产品中价格最高的 3 个是什么?"
Claude:自动执行只读查询 向你显示结果
安全工作流
关键安全功能是对任何修改数据库的操作采用两步式方法:
- Claude 分析你的请求并准备 SQL
- 对于只读操作(SELECT),Claude 会自动执行
- 对于写入操作(INSERT、UPDATE、DELETE、CREATE 等):
- Claude 在事务中执行 SQL 并结束对话
- 你查看结果
- 在新对话中,你回复 "Yes" 以提交,或回复 "No" 以回滚
- Claude Desktop 会准确显示将要更改的内容并请求许可
- 你点击 "Allow once" 以允许该特定操作
- Claude 执行该操作并返回结果
这让你在更改永久应用到数据库之前有多次机会进行核实。
⚠️ 安全注意事项
在让 Claude 以写入权限连接到你的数据库时:
数据库用户权限
重要: 创建一个具有适当权限的专用数据库用户:
-- Example of creating a restricted user (adjust as needed)
CREATE USER claude_user WITH PASSWORD 'secure_password';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_user;
GRANT INSERT, UPDATE, DELETE ON TABLE table1, table2 TO claude_user;
-- Only grant specific permissions as needed
安全使用的最佳实践
-
始终使用 "Allow once" 来查看每次写入操作
- 切勿为数据库修改选择 "Always allow"
- 花时间仔细查看 SQL
-
首次探索此工具时连接到测试数据库
- 考虑使用数据库副本/备份进行初步测试
-
限制数据库用户权限,仅授予必要权限
- 避免使用超级用户或管理员账户
- 尽可能授予表级权限
-
在大量使用前实施数据库备份
-
切勿分享不应暴露给大模型的敏感数据
-
在批准前核实所有 SQL 操作
- 检查表名
- 核实列名和数据
- 确认 WHERE 子句是否合适
- 查看事务处理是否正确
Docker
该服务可以轻松地在 Docker 容器中运行:
# Build the Docker image
docker build -t mcp-postgres-full-access .
# Run the container
docker run -i --rm mcp-postgres-full-access "postgresql://username:password@host:5432/database"
在 macOS 上使用 Docker 时,请使用 host.docker.internal 连接主机网络:
docker run -i --rm mcp-postgres-full-access "postgresql://username:[email protected]:5432/database"
📄 许可证
此 MCP 服务基于 MIT 许可证授权。
💡 与官方 PostgreSQL MCP 服务的对比
| 功能 | 此服务 | 官方 MCP PostgreSQL 服务 |
|---|---|---|
| 读取访问 | ✅ | ✅ |
| 写入访问 | ✅ | ❌ |
| Schema 详情 | 增强 | 基础 |
| 事务支持 | 显式支持并带超时 | 只读 |
| 索引信息 | ✅ | ❌ |
| 外键详情 | ✅ | ❌ |
| 行数估算 | ✅ | ❌ |
| 表描述 | ✅ | ❌ |
作者
由 Syahiid Nur Kamil 创建(@syahiidkamil)
版权所有 © 2024 Syahiid Nur Kamil。保留所有权利。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。