返回市场
麦普高级 postgres 服务器

麦普高级 postgres 服务器

作者:syahiidkamil19 星标更新:2025-05-09

项目介绍

全访问权限的PostgreSQL MCP服务器

模型上下文协议 MIT许可

一个强大的模型上下文协议服务器,提供对PostgreSQL数据库的完全读写访问。与官方只读的MCP PostgreSQL服务器不同,此增强实现允许大型语言模型(LLMs)查询和修改数据库内容,并具备适当的事务管理和安全控制。

目录

🌟 功能

完全读写访问

  • 安全执行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(字符串):要描述的表名
    • 返回完整的模式信息,包括主键、外键、索引和列细节

📊 资源

该服务器提供了增强的数据库表模式信息:

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

🚀 与Claude Desktop集成使用

Claude Desktop集成

要使用此服务器与Claude Desktop,请按照以下步骤操作:

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

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

  3. 通过编辑claude_desktop_config.json配置Claude Desktop(通常位于macOS上的~/Library/Application Support/Claude/):

{
  "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将提示您批准:

允许一次对话框

始终仔细审查SQL更改后再批准!

安全的最佳实践:

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

这种“允许一次”的方法让您完全控制,防止意外更改数据库,同时仍能根据需要让Claude帮助管理数据任务。

⚙️ 环境变量

您可以在Claude Desktop配置中使用环境变量自定义服务器行为:

"env": {
  "TRANSACTION_TIMEOUT_MS": "60000",
  "MAX_CONCURRENT_TRANSACTIONS": "5"
}

关键环境变量:

  • TRANSACTION_TIMEOUT_MS:事务超时时间(毫秒,默认值:15000)

    • 如果您的事务需要更多时间,请增加此值
    • 超过此时间的事务将被自动回滚以确保安全
  • MAX_CONCURRENT_TRANSACTIONS:最大并发事务数(默认值:110)

    • 减少此数字以进行更保守的操作
    • 较高的值允许更多的同时写入操作
  • 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并结束对话
    • 您审查结果
    • 在新的对话中,您响应“是”以提交或“否”以回滚
    • Claude Desktop向您展示将要更改的具体内容并请求许可
    • 您点击“允许一次”以允许特定操作
    • Claude执行操作并返回结果

这给了您多次机会在更改永久应用于数据库之前进行验证。

⚠️ 安全考虑

当使用写访问权限连接Claude到您的数据库时:

数据库用户权限

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

-- 创建受限用户的示例(根据需要调整)
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;
-- 根据需要仅授予特定权限

安全使用最佳实践

  1. **始终使用“允许一次”**来审查每个写操作

    • 绝不要选择“总是允许”进行数据库修改
    • 花时间仔细审查SQL
  2. 连接到测试数据库以探索此工具

    • 考虑使用数据库副本/备份进行初始测试
  3. 限制数据库用户权限至必要范围

    • 避免使用超级用户或管理员账户
    • 当可能时,授予表特定权限
  4. 实施数据库备份在广泛使用前

  5. 绝不共享不应暴露给LLMs的敏感数据

  6. 验证所有SQL操作在批准前

    • 检查表名
    • 验证列名和数据
    • 确认WHERE子句适当
    • 查看正确的事务处理

Docker

该服务器可以轻松在Docker容器中运行:

# 构建Docker镜像
docker build -t mcp-postgres-full-access .

# 运行容器
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. 保留所有权利。