首页/数据库/mcp-postgres-full-access-extended

mcp-postgres-full-access-extended

查看源码
2025-5-12
Words 2617Read Time 7 min
Score:90

提供PostgreSQL数据库的完整读写访问,支持DML/DDL操作,增强模式元数据,适用于LLM和AI应用。

PostgreSQL 全访问 MCP 服务器

View on Smithery View on Smithery
本项目是 Syahiid Kamil 开发的 mcp-postgres-full-access 的独立维护和扩展版本。
这是一个功能强大的 Model Context Protocol (MCP) 服务器,提供对 PostgreSQL 数据库的完整读写访问。与官方只读的 MCP PostgreSQL 服务器不同,此增强实现允许大型语言模型 (LLMs) 在适当的事务管理和安全控制下查询和修改数据库内容。

目录

  • 功能
    • 完整读写访问
    • 丰富的模式信息
    • 高级安全控制
  • 工具
    • execute_query
    • execute_dml_ddl_dcl_tcl
    • execute_maintenance
    • execute_commit
    • execute_rollback
    • list_tables
    • describe_table
    • list_schemas
  • 资源
  • 与 Claude Desktop 集成
    • Claude Desktop 集成
    • 重要提示:使用“仅允许一次”以确保安全
  • 环境变量
  • 使用 Claude 进行完整数据库访问
  • 安全注意事项
    • 数据库用户权限
    • 安全使用的最佳实践
  • Docker
  • 许可证
  • 与官方 PostgreSQL MCP 服务器的比较

🌟 功能

完整读写访问

  • 安全执行 DML 操作(INSERT、UPDATE、DELETE)
  • 使用 DDL 创建、修改和管理数据库对象
  • 显式提交的事务管理
  • 安全超时和自动回滚保护

丰富的模式信息

  • 详细的列元数据(数据类型、描述、最大长度、可空性)
  • 主键标识
  • 外键关系
  • 索引信息(类型和唯一性标志)
  • 表行数估计
  • 表和列描述(如果可用)

高级安全控制

  • 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(字符串):要描述的表名
    • 返回完整的模式信息,包括主键、外键、索引和列详细信息
  • list_schemas
    • 获取数据库中所有模式的列表
    • 无需输入参数
    • 返回包含模式名称、所有者和表计数的数组

📊 资源

服务器为数据库表提供了增强的模式信息:
  • 表模式 (postgres://<host>/<table>/schema)
    • 每个表的详细 JSON 模式信息
    • 包括完整的列元数据、主键和约束
    • 自动从数据库元数据中发现

🚀 与 Claude Desktop 集成

Claude Desktop 集成

要使用此服务器与 Claude Desktop 集成,请按照以下步骤操作:
  1. 首先,确保您的系统已安装 Node.js
  1. 使用 npx 安装包或将其添加到您的项目中
  1. 通过编辑 claude_desktop_config.json(通常在 macOS 上位于 ~/Library/Application Support/Claude/)来配置 Claude Desktop:
  1. 将数据库连接字符串替换为实际的 PostgreSQL 连接详细信息
  1. 完全重启 Claude Desktop

重要提示:使用“仅允许一次”以确保安全

当 Claude 尝试提交对数据库的更改时,Claude Desktop 将提示您进行批准:
notion image
在批准之前,请务必仔细审查 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、name、price 和 inventory 列的新 products 表”
Claude:分析您的数据库并创建查询
Claude Desktop 将提示您批准此操作
您:审查并点击“仅允许一次”
Claude:“我已创建 products 表。您希望我添加一些示例数据吗?”
您:“是的,请添加 5 个示例产品”
Claude:创建 INSERT 语句并提示批准 您审查并通过“仅允许一次”批准

示例:使用安全查询进行数据分析

您:“按价格排序,我的前 3 个产品是什么?”
Claude:自动执行只读查询 向您显示结果

安全工作流程

关键安全功能是任何修改数据库的操作都采用两步法:
  1. Claude 分析您的请求并准备 SQL
  1. 对于只读操作(SELECT),Claude 自动执行
  1. 对于写操作(INSERT、UPDATE、DELETE、CREATE 等):
      • Claude 在事务中执行 SQL 并结束会话
      • 您审查结果
      • 在新的会话中,您响应“是”以提交或“否”以回滚
      • Claude Desktop 向您显示将要更改的内容并请求权限
      • 您点击“仅允许一次”以允许特定操作
      • Claude 执行操作并返回结果
这为您提供了多次机会,在更改永久应用到数据库之前进行验证。

⚠️ 安全注意事项

当将 Claude 连接到具有写访问权限的数据库时:

数据库用户权限

重要提示:创建一个具有适当权限的专用数据库用户:

安全使用的最佳实践

  1. 始终使用“仅允许一次” 审查每个写操作
      • 对于数据库修改,切勿选择“始终允许”
      • 花时间仔细审查 SQL
  1. 首次探索此工具时,连接到测试数据库
      • 考虑使用数据库副本/备份进行初始测试
  1. 限制数据库用户权限 仅授予必要的权限
      • 避免使用超级用户或管理员账户
      • 尽可能授予表特定权限
  1. 在广泛使用之前实施数据库备份
  1. 切勿暴露不应暴露给 LLMs 的敏感数据
  1. 在批准之前验证所有 SQL 操作
      • 检查表名
      • 验证列名和数据
      • 确认 WHERE 子句是否适当
      • 查看是否正确处理事务

Docker

服务器可以轻松在 Docker 容器中运行:
对于 macOS 上的 Docker,使用 host.docker.internal 连接到主机网络:

📄 许可证

此 MCP 服务器根据 MIT 许可证授权。

💡 与官方 PostgreSQL MCP 服务器的比较

功能
本服务器
官方 MCP PostgreSQL 服务器
读取访问
写入访问
模式详细信息
增强
基本
事务支持
显式带超时
只读
索引信息
外键详细信息
行数估计
表描述

作者

由 Syahiid Nur Kamil 创建 (@syahiidkamil)
由 kamusis 扩展 (@kamusis)
版权所有 © 2025 kamusis。保留所有权利。
上一篇
neo4j-server-remote
下一篇
mcp-dev-agent