M

MCP PostgreSQL 全访问

@syahiidkamil/mcp-postgres-full-access
0 Stars 406 次浏览 syahiidkamil 更新于 2026-08-23

一种模型上下文协议服务器,为大型语言模型提供对 PostgreSQL 数据库的完全读写访问,允许通过事务管理和安全控制来查询和修改数据库内容。

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

{
  "mcpServers": {
    "postgres-full": {
      "args": [
        "-y",
        "mcp-postgres-full-access",
        "postgresql://username:password@localhost:5432/database"
      ],
      "command": "npx",
      "env": {
        "MAX_CONCURRENT_TRANSACTIONS": "5",
        "PG_STATEMENT_TIMEOUT_MS": "30000",
        "TRANSACTION_TIMEOUT_MS": "60000"
      }
    }
  }
}

服务介绍

PostgreSQL 全访问 MCP 服务器

Model Context Protocol
MIT License

一个强大的 Model Context Protocol 服务器,提供对 PostgreSQL 数据库的全读写访问。与仅限只读的官方 MCP PostgreSQL 服务器不同,这个增强实现允许大型语言模型(LLMs)在适当的事务管理和安全控制下查询和修改数据库内容。

目录

🌟 特性

全读写访问

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

丰富的模式信息

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

高级安全控制

  • SQL 查询分类(DQL, DML, DDL, DCL, TCL)
  • 对安全查询强制执行只读执行
  • 所有操作都在隔离事务中运行
  • 自动事务超时监控
  • 可配置的安全限制
  • 带有显式用户确认的两步事务提交过程

🔧 工具

  • execute_query

    • 执行只读 SQL 查询(SELECT 语句)
    • 输入:sql (字符串):要执行的 SQL 查询
    • 所有查询都在一个只读事务中执行
    • 结果包括执行时间指标和字段信息
  • execute_dml_ddl_dcl_tcl

    • 执行数据修改操作(INSERT, UPDATE, DELETE)或模式更改(CREATE, ALTER, DROP)
    • 输入:sql (字符串):要执行的 SQL 语句
    • 自动包装在一个可配置超时时间的事务中
    • 返回一个事务 ID 以供显式提交
    • 重要安全特性:执行后会话将结束,允许用户在决定提交或回滚之前审查结果
  • 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 一起使用,请按照以下步骤操作:

  1. 首先,确保您的系统上已安装 Node.js

  2. 使用 npx 或将其添加到您的项目中来安装包

  3. 通过编辑 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"
      }
    }
  }
}
  1. 将数据库连接字符串替换为您的实际 PostgreSQL 连接详细信息
  2. 完全重启 Claude Desktop

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

当 Claude 尝试提交更改到您的数据库时,Claude Desktop 会提示您进行批准:

Allow Once Dialog

在批准之前始终仔细审查 SQL 更改!

安全最佳实践:

  • 总是点击“允许一次”(而不是“始终允许”)进行提交操作
  • 在批准前仔细审查事务 SQL
  • 考虑使用权限有限的数据库用户
  • 如果可能,在首次尝试此服务器时使用测试数据库

这种“允许一次”的方法可以让你完全控制,以防止对数据库进行不必要的更改,同时仍然可以在需要时让 Claude 帮助你进行数据管理任务。

⚙️ 环境变量

你可以通过 Claude 桌面配置中的环境变量来自定义服务器行为:

"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 将提示你批准此操作

你:审查并点击“允许一次”

Claude:“我已经创建了产品表。你想让我添加一些示例数据吗?”

你:“是的,请添加 5 个示例产品”

Claude:创建 INSERT 语句并提示批准
你审查并使用“允许一次”批准

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

你:“按价格排序,我的前三名产品是什么?”

Claude:自动执行只读查询
显示结果

安全工作流程

关键的安全特性是对任何修改数据库的操作采用两步法:

  1. Claude 分析您的请求并准备 SQL
  2. 对于只读操作(SELECT),Claude 会自动执行
  3. 对于写入操作(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

安全使用的最佳实践

  1. 始终使用 "Allow once" 来审查每个写入操作

    • 永远不要为数据库修改选择 "Always allow"
    • 花时间仔细审查 SQL
  2. 首次探索此工具时连接到测试数据库

    • 考虑使用数据库副本/备份进行初步测试
  3. 限制数据库用户的权限 仅授予必要的权限

    • 避免使用超级用户或管理员账户
    • 尽可能授予表特定的权限
  4. 在大量使用前实施数据库备份

  5. 永远不要共享不应暴露给 LLM 的敏感数据

  6. 在批准之前验证所有 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:password@host.docker.internal:5432/database"

📄 许可证

此 MCP 服务器根据 MIT 许可证发布。

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

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

作者

由 Syahiid Nur Kamil 创建 (@syahiidkamil)


版权所有 © 2024 Syahiid Nur Kamil。保留所有权利。

相关 MCP 服务