项目简介
这是一个基于Model Context Protocol (MCP) 实现的应用后端,专门为大型语言模型 (LLM) 提供与PostgreSQL数据库交互的能力。与只读的官方版本不同,该服务器允许LLM安全地执行读写操作,包括数据查询、修改、结构变更等,并内置了详细的模式信息和高级安全控制。
主要功能点
- 全面的数据库访问: 支持执行各种SQL语句,包括查询 (SELECT)、数据修改 (INSERT, UPDATE, DELETE)、结构定义 (CREATE, ALTER, DROP) 以及维护命令 (VACUUM, ANALYZE)。
- 丰富的模式信息: 提供数据库表的详细结构描述,包括列信息、数据类型、长度、可空性、默认值、主键、外键、索引以及表描述等。
- 高级事务管理: 对所有写操作自动启用事务,并支持显式的提交 (COMMIT) 和回滚 (ROLLBACK),确保数据一致性。
- 严格的安全控制: 内置SQL分类机制,只读查询自动执行;写操作需通过带有事务ID的特殊工具执行,并需要用户在客户端进行人工确认才能最终提交;支持配置事务超时,防止长时间未处理的事务。
- 详细的资源暴露: 将数据库表结构作为可访问的资源暴露给LLM客户端。
安装步骤
该服务器是一个Node.js应用。首先确保你的系统上安装了Node.js。
然后,该服务器通常通过支持MCP协议的LLM客户端(如Claude Desktop)来启动。客户端会执行一个命令来启动服务器进程。该仓库的代码会被打包成一个可执行的命令。
服务器配置 (MCP客户端配置)
为了让支持MCP的客户端(如Claude Desktop)使用此服务器,你需要在客户端的配置文件(例如 'claude_desktop_config.json')中添加对此MCP服务器的配置。
配置信息是一个JSON结构,通常包含在客户端配置文件的一个特定部分(例如 'mcpServers')。你需要为该服务器定义一个名称(例如 'postgres-full'),并指定客户端如何启动它:
- 'command': 启动服务器的可执行命令。通常是 'npx' 加上包名,例如 'npx mcp-postgres-full-access'。
- 'args': 传递给命令的参数列表。第一个参数必须是你的PostgreSQL数据库连接字符串,格式为 'postgresql://username:password@host:port/database'。请替换为你实际的连接信息。
- 'env': (可选) 一个包含环境变量的JSON对象,用于配置服务器的行为,例如:
- 'TRANSACTION_TIMEOUT_MS': 事务超时时间(毫秒),例如 '"60000"'。
- 'MAX_CONCURRENT_TRANSACTIONS': 最大并发事务数,例如 '"5"'。
- 'PG_STATEMENT_TIMEOUT_MS': 单条SQL语句的执行超时时间(毫秒),例如 '"30000"'。
- 其他配置选项请参考项目的环境变量说明。
配置完成后,你需要完全重启MCP客户端以加载新的服务器。
重要安全提示: 在配置数据库连接时,强烈建议创建一个具有最小必要权限的数据库用户,并使用该用户的连接字符串。避免使用数据库管理员账户。
基本使用方法
配置并重启客户端后,LLM(如Claude)将能够感知到此MCP服务器及其提供的能力(工具和资源)。
- 查询数据: 直接用自然语言向LLM提问关于数据库数据的问题。LLM会识别出需要使用 'execute_query' 工具,并在只读事务中执行SELECT语句。
- 修改数据或结构: 提出创建表、插入数据、更新记录等请求。LLM会使用 'execute_dml_ddl_dcl_tcl' 工具执行对应的SQL语句。
- 安全确认: 对于任何修改数据库的操作,该服务器会在执行后返回一个包含事务ID的结果,并提示本次对话结束,需要用户审查。在新的对话中,LLM可能会要求你确认是否提交或回滚。
- 提交或回滚: 你或LLM可以使用 'execute_commit' 或 'execute_rollback' 工具并提供事务ID,根据审查结果来决定是否保存更改。MCP客户端通常会在提交时显示确认弹窗(例如“Allow once”),请务必仔细审查要提交的SQL语句。
- 获取模式信息: LLM可以使用 'list_tables' 工具获取表列表,使用 'describe_table' 工具获取特定表的详细结构信息,或访问相关的资源URI来获取模式数据。
通过这种方式,LLM可以协助你进行复杂的数据库管理和数据分析任务,同时你保持对所有数据修改操作的最终控制权。
信息
分类
数据库与文件