项目简介

本项目是一个基于Model Context Protocol (MCP) 模式实现的后端服务器,专注于PostgreSQL数据库的数据访问和分析。它旨在为大型语言模型(LLM)应用提供结构化的数据库上下文信息和强大的数据操作能力,使其能够更有效地与数据库进行交互。

主要功能点

  • Schema探索: 允许LLM客户端浏览PostgreSQL数据库的schema结构,包括schema、表、列、视图和表关系等元数据信息,帮助LLM理解数据结构。
  • 只读SQL查询执行: 提供安全的SQL查询执行工具,仅支持只读操作,防止数据被意外修改。LLM可以通过此功能从数据库中检索数据。
  • 数据分析Prompt模板: 内置了一系列预定义的Prompt模板,用于常见的数据分析任务。LLM可以利用这些模板快速生成SQL查询,执行复杂的数据分析。
  • OpenAPI文档: 自动生成OpenAPI规范的API文档,方便开发者了解和集成服务器提供的各种接口。
  • 安全性: 具备多重安全特性,包括只读查询验证、SQL注入防护、速率限制和参数化查询等,保障数据安全和服务器稳定。

安装步骤

  1. 克隆仓库:

    git clone https://github.com/Maxim2324/mcp-server-test.git
    cd mcp-server-test
  2. 安装依赖:

    npm install
  3. 配置环境变量: 复制 '.env.template' 文件并重命名为 '.env',然后根据你的PostgreSQL数据库信息修改 '.env' 文件中的配置项,例如数据库连接地址、用户名、密码等。

  4. 启动服务器:

    npm start

    或者使用开发模式启动:

    npm run dev

服务器配置

MCP客户端需要配置以下server信息以连接到本MCP服务器:

{
  "serverName": "PostgreSQL-MCP-Server",  // MCP服务器名称,可自定义
  "command": "node",                     // 启动服务器的命令,这里使用 node.js 运行时
  "args": ["server.js"],                // 启动命令的参数,指向 server.js 文件
  "protocol": "http",                    // 通信协议,本项目使用 HTTP
  "host": "localhost",                   // 服务器主机名,如果部署在本地则为 localhost
  "port": 3000,                          // 服务器端口号,与 .env 文件中配置的 PORT 一致
  "apiBase": "/api"                       // API 基础路径,本项目API接口都以 /api 开头
}

参数注释:

  • 'serverName': 为你的MCP服务器指定一个易于识别的名称。
  • 'command': 运行服务器端代码的命令。对于Node.js项目,通常是 'node'。
  • 'args': 命令的参数,用于指定要执行的服务器入口文件,这里是 'server.js'。
  • 'protocol': MCP客户端与服务器通信的协议,本项目使用基于HTTP的JSON-RPC风格的API,因此设置为 '"http"'。
  • 'host': MCP服务器部署的主机地址。如果服务器运行在本地机器上,通常设置为 '"localhost"'。如果部署在远程服务器,则需要设置为服务器的IP地址或域名。
  • 'port': MCP服务器监听的端口号。默认情况下,本项目配置为 '3000',可以在 '.env' 文件中修改。
  • 'apiBase': API接口的基础路径。本项目的所有API端点都位于 '/api' 路径下。

基本使用方法

服务器启动后,MCP客户端可以通过HTTP请求与服务器进行交互。

常用API示例:

  • 获取所有Schema: 'GET http://localhost:3000/api/schemas'

  • 获取指定Schema下的所有表: 'GET http://localhost:3000/api/schemas/{schema}/tables'

  • 执行SQL查询: 'POST http://localhost:3000/api/query' 请求体 (JSON):

    {
      "sql": "SELECT * FROM users LIMIT 10"
    }
  • 获取Prompt模板列表: 'GET http://localhost:3000/api/prompts'

  • 根据Prompt模板生成SQL: 'POST http://localhost:3000/api/prompts/{templateId}/generate' 请求体 (JSON):

    {
      "params": {
        "schema": "public",
        "table": "orders"
      }
    }

更多API接口和详细使用方法请参考项目README.md文件和自动生成的OpenAPI文档('/api/openapi' 接口)。

信息

分类

数据库与文件