hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Integrations
Provides advanced database interaction capabilities for PostgreSQL, including detailed schema inspection with metadata, read-only query execution with safety checks, and tools for exploring database structure while enforcing security constraints.
PostgreSQL 完全访问 MCP 服务器
强大的模型上下文协议 (MCP) 服务器,提供对 PostgreSQL 数据库的完全读写访问权限。与只读的官方 MCP PostgreSQL 服务器不同,此增强版允许大型语言模型 (LLM) 查询和修改数据库内容,并具有适当的事务管理和安全控制。
目录
🌟 功能
完全读写访问权限
- 安全地执行 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。保留所有权利。
This server cannot be installed
增强的模型上下文协议服务器,使 LLM 能够检查具有丰富元数据的数据库模式并执行具有安全检查的只读 SQL 查询。