PostgreSQL 完全访问 MCP 服务器
强大的模型上下文协议 (MCP) 服务器,提供对 PostgreSQL 数据库的完全读写访问权限。与只读的官方 MCP PostgreSQL 服务器不同,此增强版允许大型语言模型 (LLM) 查询和修改数据库内容,并具有适当的事务管理和安全控制。
目录
Related MCP server: MCP Server for MySQL
🌟 功能
完全读写访问权限
安全地执行 DML 操作(INSERT、UPDATE、DELETE)
使用 DDL 创建、更改和管理数据库对象
具有显式提交的事务管理
安全超时和自动回滚保护
丰富的架构信息
详细列元数据(数据类型、描述、最大长度、可空性)
主键标识
外键关系
带有类型和唯一性标志的索引信息
表行数估计
表格和列描述(如果有)
先进的安全控制
SQL查询分类(DQL、DML、DDL、DCL、TCL)
强制执行只读以确保安全查询
所有操作都在独立事务中运行
自动交易超时监控
可配置的安全限制
两步事务提交流程,需要用户明确确认
🔧 工具
执行查询
执行只读 SQL 查询(SELECT 语句)
输入:
sql(字符串):要执行的 SQL 查询所有查询都在只读事务中执行
结果包括执行时间指标和现场信息
执行_dml_ddl_dcl_tcl
执行数据修改操作(INSERT、UPDATE、DELETE)或模式更改(CREATE、ALTER、DROP)
输入:
sql(字符串):要执行的 SQL 语句自动包装在具有可配置超时的交易中
返回显式提交的事务 ID
重要的安全特性:对话将在执行后结束,允许用户在决定提交或回滚之前查看结果
执行提交
通过 ID 明确提交交易
输入:
transaction_id(字符串):要提交的事务的ID安全地处理提交或回滚后的清理
将更改永久应用于数据库
执行回滚
通过事务 ID 明确回滚事务
输入:
transaction_id(字符串):要回滚的事务的ID安全地丢弃所有更改并清理资源
在审查更改并决定不应用它们时很有用
列表表
获取数据库中所有表的综合列表
包括列数和表格描述
无需输入参数
描述表
获取特定表结构的详细信息
输入:
table_name(字符串):要描述的表的名称返回完整的架构信息,包括主键、外键、索引和列详细信息
📊 资源
服务器为数据库表提供增强的架构信息:
表模式(
postgres://<host>/<table>/schema)每个表的详细 JSON 架构信息
包括完整的列元数据、主键和约束
从数据库元数据中自动发现
🚀 与 Claude Desktop 一起使用
Claude 桌面集成
要将此服务器与 Claude Desktop 一起使用,请按照以下步骤操作:
首先,确保您的系统上安装了 Node.js
使用 npx 安装包或将其添加到你的项目中
通过编辑
claude_desktop_config.json(通常在 macOS 上位于~/Library/Application Support/Claude/)来配置 Claude Desktop:
将数据库连接字符串替换为实际的 PostgreSQL 连接详细信息
完全重启Claude Desktop
重要提示:使用“允许一次”以确保安全
当 Claude 尝试向您的数据库提交更改时,Claude Desktop 将提示您批准:

在批准 SQL 更改之前,请务必仔细检查!
安全最佳实践:
对于提交操作,始终单击“允许一次”(而不是“始终允许”)
批准前仔细检查交易 SQL
考虑使用具有有限权限的数据库用户
首次尝试此服务器时,如果可能,请使用测试数据库
这种“允许一次”方法让您可以完全控制以防止对数据库进行不必要的更改,同时仍允许 Claude 在需要时帮助完成数据管理任务。
⚙️ 环境变量
您可以使用 Claude Desktop 配置中的环境变量自定义服务器行为:
关键环境变量:
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、名称、价格和库存等列的新产品表”
Claude:分析你的数据库并创建查询
Claude Desktop 将提示您批准此操作
您:查看并点击“允许一次”
克劳德:“我已经创建了产品表。您想让我添加一些示例数据吗?”
您:“是的,请添加 5 个样品”
Claude:创建 INSERT 语句并提示批准 您使用“允许一次”进行审核和批准
示例:使用安全查询进行数据分析
您:“按价格计算,我的前 3 种产品是什么?”
Claude:自动执行只读查询 并显示结果
安全工作流程
关键的安全特性是对任何修改数据库的操作采用两步方法:
Claude 分析您的请求并准备 SQL
对于只读操作(SELECT),Claude 会自动执行
对于写入操作(INSERT、UPDATE、DELETE、CREATE 等):
Claude 在事务中执行 SQL 并结束对话
您查看结果
在新的对话中,您回复“是”表示提交,回复“否”表示回滚
Claude Desktop 向您展示将要更改的内容并请求许可
您点击“允许一次”即可允许特定操作
Claude执行操作并返回结果
这为您提供了多次机会在将更改永久应用到数据库之前验证更改。
⚠️ 安全注意事项
当使用写权限将 Claude 连接到数据库时:
数据库用户权限
**重要提示:**创建具有适当权限的专用数据库用户:
安全使用的最佳实践
**始终使用“允许一次”**来审查每个写入操作
切勿选择“始终允许”进行数据库修改
花时间仔细检查 SQL
首次探索此工具时连接到测试数据库
考虑使用数据库副本/备份进行初始测试
将数据库用户权限限制为仅必要的权限
避免使用超级用户或管理员帐户
尽可能授予特定于表的权限
在广泛使用之前实施数据库备份
切勿分享不应向 LLM 公开的敏感数据
在批准所有 SQL 操作之前对其进行验证
检查表名
验证列名和数据
确认 WHERE 子句是否合适
寻找适当的交易处理
Docker
该服务器可以轻松地在 Docker 容器中运行:
对于 macOS 上的 Docker,使用 host.docker.internal 连接到主机网络:
📄 许可证
此 MCP 服务器根据 MIT 许可证获得许可。
💡 与官方 PostgreSQL MCP 服务器的比较
特征 | 此服务器 | 官方 MCP PostgreSQL 服务器 |
读取访问 | ✅ | ✅ |
写访问 | ✅ | ❌ |
架构详细信息 | 增强型 | 基本的 |
交易支持 | 显式超时 | 只读 |
索引信息 | ✅ | ❌ |
外键详细信息 | ✅ | ❌ |
行数估计 | ✅ | ❌ |
表格说明 | ✅ | ❌ |
作者
由 Syahiid Nur Kamil 创建( @syahiidkamil )
版权所有 © 2024 Syahiid Nur Kamil。保留所有权利。