使用说明

项目简介

本项目是一个基于 Model Context Protocol (MCP) 的服务器实现,专注于为大型语言模型 (LLM) 应用提供访问 PostgreSQL 数据库的能力。它通过标准化的 MCP 协议,将 PostgreSQL 数据库的操作封装成一系列易于 LLM 调用的工具,使得 LLM 可以安全、高效地与 PostgreSQL 数据库进行交互。

主要功能点

  • 执行 SQL 查询: 允许 LLM 执行 SELECT 查询语句,并获取查询结果。
  • 执行 SQL 语句: 允许 LLM 执行 INSERT, UPDATE, DELETE 等 SQL 语句,进行数据操作。
  • 事务处理: 支持在事务中执行多个 SQL 语句,保证数据操作的原子性。
  • Schema 信息查询: 提供查询数据库表结构信息的功能,帮助 LLM 理解数据库 schema。
  • 参数化查询: 所有 SQL 操作均支持参数化查询,有效防止 SQL 注入攻击,保障数据安全。

安装步骤

  1. 克隆仓库
    git clone https://github.com/habuvo/postgres-mcp.git
    cd postgres-mcp
  2. 安装依赖 确保已安装 Go 语言环境,然后执行命令下载项目依赖:
    go mod download
  3. 配置数据库连接 复制 '.env.example' 文件并重命名为 '.env',然后编辑 '.env' 文件,填入您的 PostgreSQL 数据库连接信息,例如:
    DB_HOST=localhost
    DB_PORT=5432
    DB_NAME=your_database_name
    DB_USER=your_username
    DB_PASSWORD=your_password
    DB_SSLMODE=disable
  4. 构建服务器 执行以下命令编译服务器程序:
    go build -o postgres-mcp
  5. 运行服务器 执行编译生成的可执行文件启动 MCP 服务器:
    ./postgres-mcp
    服务器默认使用 Stdio 协议,通过标准输入输出与 MCP 客户端通信。

服务器配置

MCP 客户端需要配置以下 JSON 格式的信息才能连接到 PostgreSQL MCP 服务器:

{
  "server_name": "PostgreSQL MCP Server",  // MCP 服务器名称,可自定义
  "command": "./postgres-mcp",         // 启动 PostgreSQL MCP 服务器的命令
  "args": [],                            // 启动命令参数,本项目无需参数
  "protocol": "stdio"                  // 使用 stdio 协议进行通信
}

基本使用方法

启动 PostgreSQL MCP 服务器后,MCP 客户端可以通过 JSON-RPC 协议调用服务器提供的工具。主要工具包括:

  • execute_tool: 执行非查询 SQL 语句,例如 INSERT, UPDATE, DELETE。

    • 请求参数包括 'statement' (SQL 语句,使用 '$1', '$2' 等占位符) 和 'arguments' (参数值数组)。
    • 返回执行结果,例如受影响的行数。
  • query_tool: 执行 SELECT 查询语句。

    • 请求参数同样包括 'statement' 和 'arguments'。
    • 返回查询结果,包含 'rows' (数据行数组), 'columns' (列名数组), 'rowCount' (行数)。
  • transaction_tool: 执行事务,包含多个 SQL 语句。

    • 请求参数包括 'statements' (SQL 语句数组) 和 'arguments' (对应每个语句的参数数组的数组)。
    • 返回每个语句的执行结果。
  • schema_tool: 获取表结构信息。

    • 请求参数包括 'table_name' (表名)。
    • 返回表的列信息,包括列名、数据类型、是否允许为空、默认值等。

客户端需要根据具体的工具和参数构造符合 MCP 协议的 JSON-RPC 请求,并发送给 PostgreSQL MCP 服务器。服务器会执行相应的数据库操作,并将结果以 JSON-RPC 响应返回给客户端。

例如,使用 'query_tool' 查询 'users' 表的数据,客户端需要发送类似以下的 JSON-RPC 请求(简化示例,实际请求需符合 JSON-RPC 规范):

{
  "tool_name": "query_tool",
  "parameters": {
    "statement": "SELECT * FROM users WHERE id = $1",
    "arguments": [1]
  }
}

服务器会执行查询,并返回包含查询结果的 JSON-RPC 响应。

信息

分类

数据库与文件