这是一个包含多个基于 Model Context Protocol (MCP) 的服务器实现的集合。每个服务器提供不同的领域知识和功能,以工具和资源的形式暴露给兼容的 MCP 客户端。

项目简介

该仓库是一个 Nx 工作空间,用于构建和管理多个独立的 MCP 服务器和客户端组件。它展示了如何使用 MCP SDK (Python 或 Node.js) 构建模块化的后端服务,为大型语言模型 (LLM) 提供结构化的上下文和可执行的能力。

主要功能点

  • 数据库洞察 (NL2SQL):将自然语言问题转换为 SQL 查询并在数据库中执行,获取结果。依赖于外部 LLM 服务进行转换和数据库连接。
  • 产品生命周期查询:提供产品版本、支持状态、生命周期阶段日期及到期时间等信息。
  • CVE 安全漏洞信息:获取并格式化 Red Hat 产品相关的 CVE (通用漏洞披露) 信息,包括摘要、受影响产品和修复建议。
  • 天气信息:提供天气预报、天气预警和日出/日落时间查询功能。
  • 技术资源搜索:帮助用户根据自然语言查询查找相关的 Red Hat 技术实验(Labs)或其他资源。

这些功能都通过 MCP 的工具 (Tool) 机制提供,客户端可以发现这些工具并通过标准化协议调用。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/hybridx/nl2sql.git
    cd nl2sql
  2. 安装依赖:
    • 安装 Node.js 依赖 (用于 Labs, Weather, CVE, Products 服务器及 Node.js 客户端):
      npm install
    • 安装 Python 依赖 (用于 NL2SQL 服务器和 FastAPI 代理):
      pip install -r backend/requirements.txt # 假设存在此文件,或手动安装: pip install fastmcp psycopg2-binary mysql-connector-python requests fastapi uvicorn python-dotenv
  3. 设置数据库 (仅 NL2SQL 服务器需要):
    • 需要一个 PostgreSQL 数据库用于存储 schema embedding。确保已安装 'pgvector' 扩展。
    • 需要一个 MariaDB 或兼容的数据库作为目标数据库,'nl2sql' 服务器将在此数据库上执行 SQL 查询。
    • 根据 'backend/config.py' 文件修改数据库连接信息。
  4. 配置 Ollama 服务 (仅 NL2SQL 服务器及某些客户端示例需要):
    • 确保您正在运行一个 Ollama 服务在 'http://localhost:11434'。
    • 根据 'backend/mcp_server.py' 和 'backend/schema_extractor.py' 的配置,需要加载特定的模型,例如 'mxbai-embed-large:latest' (用于 embedding) 和 'granite-code:8b' (用于 NL2SQL 的 SQL 生成)。
    • Node.js 客户端示例 ('mcp-client/client-setup') 使用 'llama3.2:3b' 模型进行对话和工具调用解析。
  5. 提取并存储数据库 Schema Embedding (仅 NL2SQL 服务器需要):
    • 运行脚本从您的 MariaDB 数据库中提取 schema 并将其 embedding 存储到 PostgreSQL 数据库中:
      python backend/schema_extractor.py
  6. 构建 Node.js 服务器 (Labs, Weather, CVE, Products):
    • 在仓库根目录运行 Nx 构建命令(通常'npm install'后会自动设置):
      npx nx build labs
      npx nx build weather
      npx nx build cve
      npx nx build products

服务器配置 (对 MCP 客户端而言)

MCP 服务器通常作为独立的进程运行,并通过标准输入/输出 (Stdio) 或其他协议与客户端通信。MCP 客户端需要知道如何启动或连接到服务器进程。

配置信息通常包含服务器名称、传输协议(如 'stdio')以及启动服务器进程的命令和参数。根据您希望连接的功能,需要启动不同的服务器脚本。

例如,对于不同的服务器:

  • NL2SQL 服务器:
    • 命令 (command): 'python' (或 'python3')
    • 参数 (args): '["backend/mcp_server.py"]'
  • Labs 服务器:
    • 命令 (command): 'node'
    • 参数 (args): '["packages/labs/build/index.js"]' (需要先运行构建步骤)
  • Weather 服务器:
    • 命令 (command): 'node'
    • 参数 (args): '["packages/weather/build/index.js"]' (需要先运行构建步骤)
  • CVE 服务器:
    • 命令 (command): 'node'
    • 参数 (args): '["packages/cve/build/index.js"]' (需要先运行构建步骤)
  • Products 服务器:
    • 命令 (command): 'node'
    • 参数 (args): '["packages/products/build/index.js"]' (需要先运行构建步骤)

兼容的 MCP 客户端(例如使用 '@modelcontextprotocol/sdk/client' 构建的客户端)会使用这些信息来启动服务器进程并建立通信。

基本使用方法

  1. 启动 MCP 服务器: 在终端中运行您需要的服务器脚本,例如:
    python backend/mcp_server.py
    # 或
    node packages/labs/build/index.js
    服务器启动后通常会打印一些信息到标准错误输出。
  2. 启动 MCP 客户端: 运行一个兼容的 MCP 客户端程序,并配置它连接到刚才启动的服务器的命令和参数。
  3. 客户端交互:
    • 客户端连接成功后,通常会执行初始化并获取服务器的能力列表(可用的工具和资源)。
    • 用户通过客户端输入请求(如自然语言问题)。
    • 客户端(可能结合 LLM 的工具调用能力)决定调用哪个 MCP 服务器的哪个工具。
    • 客户端向 MCP 服务器发送 JSON-RPC 请求调用指定的工具,并提供参数。
    • MCP 服务器执行工具函数,可能与数据库或外部 API 交互。
    • MCP 服务器将工具执行结果(如文本、HTML 资源等)通过 JSON-RPC 响应返回给客户端。
    • 客户端接收结果并展示给用户(可能由 LLM 进行进一步处理)。

例如,使用 Node.js 客户端示例 ('mcp-client/client-setup') 连接到 Labs 服务器:

node mcp-client/client-setup/index.js packages/labs/build/index.js

然后客户端会提示您输入查询,您可以尝试提问相关的技术资源问题。

要连接到不同的服务器,只需在启动客户端时指定相应的脚本路径。

信息

分类

网页与API