使用说明

项目简介

oatpp-mcp 是一个使用 C++ Oat++ Web 框架开发的 Model Context Protocol (MCP) 服务器库。它旨在帮助开发者快速搭建 MCP 后端服务,以便 LLM 应用能够安全、高效地访问上下文信息和外部功能。该库特别强调了 API 工具的自动生成,能够将现有的 Oat++ API Controller 快速转换为 LLM 可调用的工具。

主要功能点

  • 资源 (Resources) 管理: 支持托管和管理各种类型的资源,例如文件、数据库记录等,并允许 LLM 客户端通过 URI 访问这些资源。
  • 工具 (Tools) 注册与执行: 允许注册自定义工具,扩展 LLM 的能力,例如日志记录工具、API 接口调用工具等。特别支持从 Oat++ API Controller 自动生成工具。
  • Prompt 模板 (Prompts) 定义与渲染: 支持定义和管理 Prompt 模板,为 LLM 提供可定制的交互模式,例如代码审查 Prompt。
  • 传输协议: 支持 STDIO 和 HTTP SSE 两种传输协议,方便不同场景下的部署和使用。
  • 服务器特性: 实现了 MCP 服务器规范中的 Prompts, Resources, Tools 等核心功能,并提供会话管理和能力声明。
  • API 工具自动生成: 可以根据现有的 Oat++ API Controller 自动生成对应的 Tool,极大地简化了将现有 API 集成到 MCP 服务器的过程。

安装步骤

  1. 安装 Oat++ 框架: 确保已安装 Oat++ 框架及其依赖,参考 Oat++ Repository 的安装指南。
  2. 克隆 oatpp-mcp 仓库:
    git clone https://github.com/oatpp/oatpp-mcp.git
    cd oatpp-mcp
  3. 编译和安装 oatpp-mcp 模块:
    mkdir build && cd build
    cmake ..
    make install

服务器配置

MCP 客户端需要配置 MCP 服务器的启动命令 (command) 及其参数 (args) 以建立连接。以下是基于 oatpp-mcp 仓库信息生成的服务器配置示例(JSON 格式):

{
  "serverName": "oatpp-mcp-server",
  "command": "/path/to/oatpp-mcp-executable",  // 请替换为 oatpp-mcp 可执行文件的实际路径,通常在 build 目录下
  "args": [],  // oatpp-mcp 服务器可执行文件通常不需要额外的启动参数
  "transport": "stdio" // 或者 "sse",根据客户端和服务器的配置选择传输协议
}

配置参数注释:

  • 'serverName': 服务器名称,可以自定义,用于在客户端标识服务器。
  • 'command': 必须配置。指向编译后的 oatpp-mcp 服务器可执行文件的绝对路径。编译后通常在 'build' 目录下,具体路径需要根据你的编译环境确定。
  • 'args': 启动参数列表,对于 oatpp-mcp 示例,通常为空数组 '[]'。如果服务器需要额外的配置参数,可以在这里添加。
  • 'transport': 必须配置。指定客户端与服务器通信的传输协议。
    • '"stdio"': 使用标准输入输出流 (STDIO) 进行通信。适用于本地调试或简单的命令行交互场景。
    • '"sse"': 使用 HTTP Server-Sent Events (SSE) 协议通过 HTTP 进行通信。需要服务器以 HTTP SSE 模式运行,并配置相应的 HTTP 服务端口。

选择传输协议:

  • STDIO: 配置 '"transport": "stdio"' 并确保 MCP 客户端配置为使用 STDIO 连接。服务器端启动时,需要使用 'server.stdioListen()' 方法。
  • SSE: 配置 '"transport": "sse"' 并确保 MCP 客户端配置为使用 SSE 连接和正确的服务器地址 (例如 'http://localhost:3001/mcp/sessions/{sessionId}')。服务器端启动时,需要将 'server.getSseController()' 添加到 HTTP 服务器的路由中,并运行 HTTP 服务器,例如示例中的 'runHttpServer(server)' 函数。

基本使用方法

  1. 启动 MCP 服务器:

    • STDIO 模式: 编译并运行 'oatpp-mcp' 项目,确保服务器端代码中调用了 'server.stdioListen()'。
    • SSE 模式: 编译并运行 'oatpp-mcp' 项目,确保服务器端代码中将 'server.getSseController()' 添加到了 HTTP 路由,并运行了 HTTP 服务器 (例如,通过 'runHttpServer(server)' 启动)。
  2. 配置 MCP 客户端:

    • 根据你选择的传输协议 (STDIO 或 SSE),配置 MCP 客户端连接到 oatpp-mcp 服务器。你需要提供服务器的启动命令和参数 (如上面的 JSON 配置示例)。
  3. 与 MCP 服务器交互:

    • 客户端连接成功后,即可按照 MCP 协议规范,向服务器发送 JSON-RPC 请求,例如:

      • 获取服务器能力 ('initialize' 方法)
      • 列出可用工具 ('tools/list' 方法)
      • 调用工具 ('tools/call' 方法)
      • 列出可用 Prompt ('prompts/list' 方法)
      • 调用 Prompt ('prompts/get' 方法)
      • 读取资源 ('resources/read' 方法)
      • 等等。
    • 服务器会根据请求,返回 JSON-RPC 响应或发送通知。你可以利用提供的示例代码和测试用例来了解如何添加自定义的 Prompts, Resources, 和 Tools,以及如何通过客户端与服务器进行交互。

示例代码参考:

  • 'README.md' 中提供了 STDIO 和 SSE 模式下启动服务器的 C++ 代码示例。
  • '/test/oatpp-mcp/app/ServerTest.cpp' 文件中包含了更完整的服务器配置和功能测试代码,可以作为进一步学习和参考的入口。
  • '/test/oatpp-mcp/app/tools', '/test/oatpp-mcp/app/resources', '/test/oatpp-mcp/app/prompts' 目录下提供了示例 Tool, Resource, 和 Prompt 的实现,可以参考学习如何扩展服务器功能。

信息

分类

AI与计算