使用说明

项目简介

postgres-mcp 是一个 MCP (Model Context Protocol) 服务器的示例实现,它使得大型语言模型 (LLM) 能够通过标准化的 MCP 协议与 PostgreSQL 数据库进行交互。该服务器提供了资源 (Resources)、工具 (Tools) 和 Prompt 模板 (Prompts),允许 LLM 客户端获取数据库的结构信息、执行 SQL 查询等操作。

主要功能点

  • 数据库结构探索:允许 LLM 获取 PostgreSQL 数据库的 schema 和 table 的元数据信息。
  • 表信息查看:提供查看数据库表中字段详细信息的功能。
  • SQL 查询执行:支持执行 SQL SELECT 查询,并以 YAML 格式返回结果,方便 LLM 理解和处理。
  • 预定义 Prompt 模板:内置多种 Prompt 模板,用于描述 schema 和 table 信息,以及查询数据。

安装步骤

  1. 克隆仓库

    git clone https://github.com/Tibiritabara/postgres-mcp
    cd postgres-mcp
  2. 创建并激活虚拟环境

    python -m venv .venv
    source .venv/bin/activate  # 或 .venv\Scripts\activate (Windows)
  3. 安装 UV (可选,推荐)

    pip install uv
  4. 安装依赖

    uv sync # 如果安装了 uv
    # 或
    pip install -r requirements.txt # 如果没有安装 uv
  5. 配置环境变量

    • 复制 '.env.example' 文件并重命名为 '.env'。
    • 根据你的 PostgreSQL 数据库配置,修改 '.env' 文件中的环境变量,例如数据库主机、端口、用户名、密码和数据库名。

服务器配置

为了让 MCP 客户端连接到 postgres-mcp 服务器,你需要在客户端的 MCP 配置文件(例如 '.cursor/mcp.json')中添加如下服务器配置。请根据你的实际安装路径进行调整:

{
  "mcpServers": {
    "postgres-mcp-server": {
      "command": "/path/to/your/venv/bin/python",
      "args": ["-m", "src.main"],
      "env": {
        "APP_NAME": "mcp-demo",
        "DB_HOST": "localhost", // PostgreSQL 主机地址
        "DB_PORT": "5432",      // PostgreSQL 端口
        "DB_USER": "postgres",   // PostgreSQL 用户名
        "DB_PASSWORD": "postgres", // PostgreSQL 密码
        "DB_NAME": "postgres"     // PostgreSQL 数据库名
      }
    }
  }
}

配置参数说明:

  • command: 启动 MCP 服务器的命令。这里指向虚拟环境中的 Python 解释器。
  • args: 传递给 'command' 的参数,用于执行 'src/main.py' 模块,启动 FastMCP 服务器。
  • env: 环境变量配置,用于配置 PostgreSQL 数据库连接信息和应用名称。请务必根据你的 PostgreSQL 数据库实际情况修改 'DB_HOST', 'DB_PORT', 'DB_USER', 'DB_PASSWORD', 'DB_NAME' 的值。'/path/to/your/venv/bin/python' 需要替换为你的虚拟环境 python 解释器的实际路径。

基本使用方法

  1. 启动 MCP 服务器 在项目根目录下,运行以下命令启动服务器:

    python -m src.main

    服务器启动后,会监听 MCP 客户端的请求。

  2. 客户端交互 你可以使用 MCP 客户端库(例如 'mcp-client')与服务器进行交互。以下是一些示例代码,展示如何使用客户端获取资源和调用工具:

    from mcp.client import get_client
    
    # 假设服务器运行在本地默认端口
    client = get_client("stdio:") # 或 "http://localhost:8000" 如果服务器配置为 HTTP
    
    # 获取 schema 信息
    schema_info = client.get_resource("database://public")
    print("Schema Info:", schema_info)
    
    # 获取表信息
    table_info = client.get_resource("database://public/tables/users")
    print("Table Info:", table_info)
    
    # 执行 SQL 查询工具
    query_result = client.invoke_tool("query_database", {"query": "SELECT * FROM users LIMIT 5"})
    print("Query Result:", query_result)

    请确保你的 MCP 客户端已正确配置并连接到运行中的 postgres-mcp 服务器。

信息

分类

数据库与文件