项目简介

MCP C++ SDK是一个跨平台的C++20开发工具包,用于实现Model Context Protocol (MCP)。它支持通过JSON-RPC协议与LLM客户端通信,提供统一的资源、工具和Prompt管理,并支持多种传输协议(如标准输入输出Stdio、内存传输InMemory)。该SDK旨在帮助开发者快速构建稳定、可扩展的MCP服务器,为LLM应用提供丰富的上下文信息和外部功能调用能力。

主要功能点

  • 资源管理: 托管和访问各种数据资源,支持URI模式定义和资源更新订阅,提供数据访问能力。
  • 工具调用: 允许LLM客户端发现、注册和调用外部工具,实现与外部系统的功能交互,扩展LLM的能力边界。
  • Prompt模板: 定义和渲染可定制的Prompt模板,支持LLM生成高质量的响应,提高交互灵活性。
  • 灵活的传输协议: 支持Stdio和内存传输,未来可扩展至SSE、WebSocket等,可根据部署环境选择合适的通信方式。
  • 会话管理与能力声明: 维护客户端会话,并声明服务器支持的MCP能力,实现客户端与服务器的协议协商。
  • 日志与心跳: 提供日志发送到客户端的功能,以及服务器与客户端之间的心跳机制,确保连接活跃和稳定性。
  • 异步操作与取消: 支持异步执行工具和资源读取操作,并能处理客户端发起的取消请求,提升用户体验。
  • 分页查询: 支持对工具、资源和Prompt列表进行分页查询,优化大规模数据展示。

安装步骤

  1. 克隆仓库:

    git clone https://github.com/vparla/mcp-cpp.git
    cd mcp-cpp
  2. 使用Docker构建(推荐跨平台方式):

    • 构建测试镜像 (可选,用于运行单元测试):
      docker buildx build -f Dockerfile.demo --target test --progress=plain --pull --load -t mcp-cpp-test .
    • 构建并运行演示服务器镜像:
      docker buildx build -f Dockerfile.demo --target demo --progress=plain --pull --load -t mcp-cpp-demo .
    • 运行服务器容器 (将当前目录挂载到容器内,方便测试和日志查看):
      docker run --rm --name mcp-cpp-demo --mount type=bind,src=$(pwd),dst=/work mcp-cpp-demo
      • Windows 用户提示: 在WSL2 Ubuntu中执行上述'docker buildx' 和 'docker run' 命令时,需将'$(pwd)' 替换为 '$(wslpath -w .)' 或 '/mnt/c/your/repo/path' 等实际的WSL2路径。
  3. 手动构建 (CMake):

    • 请参考仓库中的 'BUILD+TEST.MD' 文件获取详细的CMake构建指令,通常包括配置、构建和安装步骤,例如:
      mkdir build && cd build
      cmake .. -DCMAKE_BUILD_TYPE=Release
      cmake --build .
      # 可执行文件通常在 ./examples/mcp_server/mcp_server

服务器配置 (MCP客户端用于连接MCP服务器的配置信息,以JSON格式提供)

{
  "serverName": "MCP Demo Server",
  "command": "mcp-cpp-demo",
  "args": [],
  "description": "一个演示性的MCP服务器,通过Stdio传输协议提供Echo工具。"
}
  • 'serverName': 服务器的名称,用于客户端识别和显示。
  • 'command': 启动MCP服务器的可执行文件命令。
    • 在Docker环境下,这通常是 'mcp-cpp-demo' (指'Dockerfile.demo'中定义的'ENTRYPOINT')。
    • 如果是在本地编译运行,需替换为实际编译生成的可执行文件路径,例如 './build/examples/mcp_server/mcp_server'。
  • 'args': 启动服务器时需要传递的命令行参数列表,这里为空。
  • 'description': 对该服务器功能的简要描述,帮助用户理解其用途。

基本使用方法

  1. 启动MCP服务器: 按照上述“安装步骤”中的Docker运行方式启动 'mcp-cpp-demo' 容器。该容器会启动一个MCP服务器,并通过标准输入输出(Stdio)进行通信。

  2. 通过MCP客户端连接: 您的MCP客户端可以使用上述JSON配置信息来启动并连接到MCP服务器。连接成功后,客户端可以执行以下操作:

    • 初始化 (Initialize): 客户端向服务器发送初始化请求,协商双方支持的能力。
    • 列出工具 (ListTools): 客户端可以请求服务器列出所有已注册的工具。例如,'mcp-cpp-demo'服务器默认注册了一个名为 'echo' 的工具。
    • 调用工具 (CallTool): 客户端可以调用服务器上注册的工具。例如,调用 'echo' 工具并传递参数。
    • 列出资源/Prompt (ListResources/ListPrompts): 客户端可以发现服务器上托管的资源和Prompt模板。
    • 订阅资源更新 (SubscribeResources): 客户端可以订阅特定资源或所有资源的更新通知。
    • 获取Prompt (GetPrompt): 客户端可以根据名称和参数获取渲染后的Prompt内容。
  3. 示例代码 (C++客户端连接): 仓库中 'examples/mcp_client/main.cpp' 提供了一个简单的C++客户端示例,它连接到服务器、初始化并列出工具。您可以参考其实现来开发自己的MCP客户端。

信息

分类

AI与计算