项目简介
这是一个基于 Model Context Protocol (MCP) 的服务器,专为大型语言模型 (LLM) 设计,使其能够与 PostgreSQL 数据库进行交互。与官方的只读 MCP 服务器不同,本项目提供了对 PostgreSQL 数据库的完整读写能力,并内置了详细的 schema 信息和先进的安全机制。
主要功能点
- 全功能读写访问: 支持执行查询 (SELECT)、数据修改 (INSERT, UPDATE, DELETE)、数据库结构定义 (CREATE, ALTER, DROP) 以及事务控制。
- 丰富的 Schema 信息: 提供数据库表、列、主键、外键、索引等的详细结构信息,帮助 LLM 理解数据库结构。
- 高级安全控制: 区分读写操作,写操作强制通过带超时的事务进行,并采用两步提交流程,需要用户在客户端进行显式确认(如 Claude Desktop 的 "Allow once" 功能),确保数据安全。
- 事务管理: 支持显式提交和回滚事务,并包含自动监控和回滚超时事务的机制。
- 资源暴露: 将数据库的 schema 信息以 MCP Resources 的形式暴露给 LLM 客户端。
- 工具集成: 将各种数据库操作封装成可供 LLM 调用的 Tools。
安装步骤
- 安装 Node.js: 请确保您的系统已安装 Node.js (推荐使用 LTS 版本)。
- 安装服务器: 您可以通过 npm 全局安装此服务器:
或者使用 npx 直接运行,无需安装:npm install -g mcp-postgres-full-access-extendednpx mcp-postgres-full-access-extended "您的PostgreSQL连接字符串"
服务器配置 (用于 MCP 客户端)
本服务器需要通过 MCP 客户端(如支持 MCP 的 Claude Desktop)来运行和连接。您需要在客户端的配置文件(例如 'claude_desktop_config.json')中添加或修改 MCP 服务器配置。
配置通常包含一个 JSON 对象,指定服务器的名称、如何启动服务器的命令 ('command')、启动命令所需的参数 ('args'),以及可选的环境变量 ('env') 来调整服务器行为。
例如,在客户端配置文件中,您可以添加一个条目来启动本服务器:
- 'command': 通常设置为 '"npx"' 或 '"mcp-postgres-full-access-extended"' (如果已全局安装)。
- 'args': 包含一个字符串数组。第一个参数必须是您的 PostgreSQL 数据库连接字符串,格式通常为 'postgresql://用户名:密码@主机:端口/数据库名'。请务必替换为您自己的数据库连接信息。
- 'env': (可选) 一个 JSON 对象,用于设置环境变量。常用的环境变量包括:
- 'TRANSACTION_TIMEOUT_MS': 事务超时时间(毫秒),默认 15000。
- 'MAX_CONCURRENT_TRANSACTIONS': 最大并发事务数,默认 10。
- 'PG_STATEMENT_TIMEOUT_MS': 单个 SQL 语句执行超时时间(毫秒),默认 30000。
- 'PG_MAX_CONNECTIONS': 数据库连接池最大连接数,默认 20。
重要提示: 出于安全考虑,建议为 MCP 服务器创建一个具有最小必要权限的数据库用户,而不是使用数据库管理员账户。
基本使用方法
服务器启动并被 MCP 客户端正确配置后,LLM 即可通过 MCP 协议与数据库交互。
- 执行只读查询 (SELECT): 当您要求 LLM 查询数据时,它会调用 'execute_query' 工具。这类操作在只读事务中自动执行,结果将直接返回给您。
- 执行写操作 (INSERT, UPDATE, DELETE, CREATE, etc.): 当您要求 LLM 修改数据库时,它会调用 'execute_dml_ddl_dcl_tcl' 工具。
- LLM 会在事务中执行该 SQL 语句。
- 执行完成后,服务器会返回一个包含事务 ID 的结果,并提示您进行确认。
- 此时对话将结束。 您需要仔细审查 LLM 准备执行的 SQL 语句及其影响。
- 在一个新的对话中,回复 "Yes" 表示您同意提交事务(LLM 将调用 'execute_commit'),回复 "No" 表示您要回滚事务(LLM 将调用 'execute_rollback')。
- 在客户端(如 Claude Desktop)中,对于 'execute_commit' 操作,您将看到一个安全提示(例如 "Allow once" 对话框)。请务必再次仔细检查要提交的 SQL 语句,然后点击 "Allow once" 允许本次提交。
- 事务提交后,更改将永久保存到数据库;回滚则会撤销所有更改。
这个两步确认流程结合客户端的显式许可,为您提供了强大的安全保障,防止 LLM 在无人监督的情况下意外修改重要数据。
信息
分类
数据库与文件