返回 MCP 目录
public公开dns本地运行

mcpcpp

mcpcpp是一个用于实现模型上下文协议(MCP)的现代C++库,支持创建AI应用工具集成服务器和客户端,提供STDIO和SSE/HTTP双传输模式、动态配置加载等功能。

article

README

🚀 mcpcpp - C++ 模型上下文协议库

mcpcpp 是 模型上下文协议 (MCP) 的现代 C++ 实现,用于构建集成外部工具的人工智能应用程序。它基于 JSON-RPC 2.0 协议,支持多种传输模式,能轻松集成到 C++ 项目中。

🚀 快速开始

📦 安装

git clone https://github.com/nlpresearchai/mcpcpp.git
cd mcpcpp
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
sudo cmake --install .

💻 基础用法

#include <cppmcp/mcp_server.hpp>

int main() {
    // 创建服务器
    mcp::MCPServer server("my-server", "1.0.0");
    
    // 添加工具
    server.add_tool(
        "add",
        "Add two numbers",
        {
            {"type", "object"},
            {"properties", {
                {"a", {{"type", "number"}}},
                {"b", {{"type", "number"}}}
            }},
            {"required", {"a", "b"}}
        },
        [](const json& args) -> json {
            return {{"result", args["a"].get<double>() + args["b"].get<double>()}};
        }
    );
    
    // 运行服务器(STDIO 模式)
    server.run_stdio();
    
    return 0;
}

在项目中使用

CMakeLists.txt:

find_package(cppmcp REQUIRED)

add_executable(my_server main.cpp)
target_link_libraries(my_server PRIVATE cppmcp::cppmcp)

✨ 主要特性

  • 完整的 MCP 协议支持 - 基于 JSON-RPC 2.0 的协议(v2024-11-05)
  • 双传输模式 - 支持 STDIO 和 SSE/HTTP 模式
  • 工具集成 - 可将 C++ 函数注册为 AI 可调用的工具
  • 资源服务 - 提供数据、配置和文件服务
  • 提示模板 - 提供可复用的提示模板
  • 客户端库 - 可从 C++ 连接到 MCP 服务器
  • 动态配置 - 从 JSON 配置文件加载工具
  • 仅头文件选项 - 易于集成
  • 现代 C++17 - 类型安全且高效

📚 详细文档

核心组件

1. MCP 服务器 (mcp_server.hpp)

创建向 AI 应用程序公开工具、资源和提示的服务器。

mcp::MCPServer server("server-name", "1.0.0");

// 添加工具
server.add_tool("tool_name", "description", input_schema, 
    [](const json& args) { return result; });

// 添加资源
server.add_resource("uri://resource", "name", "description", "mime-type",
    []() { return "data"; });

// 添加提示
server.add_prompt("prompt_name", "description", arguments,
    [](const json& args) { return prompt; });

// 运行
server.run_stdio();  // 或 server.run_sse(port);

2. MCP 客户端 (mcp_client.hpp)

连接到 MCP 服务器并调用工具。

mcp::MCPClient client("client-name", "1.0.0");

// 连接
client.connect_sse("http://localhost:8080");
client.initialize();

// 列出并调用工具
auto tools = client.list_tools();
auto result = client.call_tool("add", {{"a", 5}, {"b", 3}});

// 读取资源
auto resources = client.list_resources();
auto data = client.read_resource("config://app");

3. 动态服务器 (dynamic_mcp_server.hpp)

从 JSON 文件加载服务器配置。

#include <cppmcp/dynamic_mcp_server.hpp>

dynamic_mcp::ConfigLoader loader("tasks_config.json");
loader.load();

// 服务器会根据 JSON 自动配置

📖 使用示例

查看 examples/ 目录:

  • simple_server.cpp - 最小的 MCP 服务器
  • server_with_tools.cpp - 包含多个工具、资源和提示的服务器
  • dynamic_server.cpp - 基于配置驱动的服务器
  • client_example.cpp - MCP 客户端的使用

构建示例

cd build
cmake .. -DCPPMCP_BUILD_EXAMPLES=ON
cmake --build .
./examples/simple_server stdio
./examples/server_with_tools sse 8080

🏗️ 项目结构

mcpcpp/
├── include/cppmcp/          # 公共头文件
│   ├── mcp_server.hpp       # 服务器 API
│   ├── mcp_client.hpp       # 客户端 API
│   └── dynamic_mcp_server.hpp  # 动态配置
├── src/                     # 实现代码
│   ├── mcp_server.cpp
│   ├── mcp_sse.cpp
│   ├── mcp_client.cpp
│   └── dynamic_mcp_server.cpp
├── examples/                # 使用示例
├── tests/                   # 单元测试
├── docs/                    # 文档
└── CMakeLists.txt          # 构建配置

🛠️ 构建

要求

  • C++17 编译器(GCC 7+、Clang 5+、MSVC 2017+)
  • CMake 3.14+
  • libcurl(用于 HTTP/SSE 支持)

依赖项(由 CMake 自动获取):

CMake 选项

-DCPPMCP_BUILD_EXAMPLES=ON   # 构建示例(默认:ON)
-DCPPMCP_BUILD_TESTS=ON      # 构建测试(默认:ON)
-DCPPMCP_BUILD_SHARED=ON     # 构建共享库(默认:ON)
-DCPPMCP_BUILD_STATIC=ON     # 构建静态库(默认:ON)

Ubuntu/Debian

sudo apt-get install build-essential cmake libcurl4-openssl-dev

macOS

brew install cmake curl

🧪 测试

cd build
cmake .. -DCPPMCP_BUILD_TESTS=ON
cmake --build .
ctest

🔌 与 AI 客户端集成

Claude Desktop

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "cppmcp-example": {
      "command": "/path/to/build/examples/simple_server",
      "args": ["stdio"]
    }
  }
}

自定义 Python 客户端

import httpx
import json

# 连接到 SSE 服务器
response = httpx.post(
    "http://localhost:8080/message",
    json={
        "jsonrpc": "2.0",
        "id": 1,
        "method": "initialize",
        "params": {
            "protocolVersion": "2024-11-05",
            "capabilities": {},
            "clientInfo": {"name": "python-client", "version": "1.0"}
        }
    }
)
print(response.json())

📊 性能

  • 低延迟 - 直接的 C++ 执行,无 Python 开销
  • 高吞吐量 - 每秒可处理数千个请求
  • 内存高效 - 最小化内存分配,优化数据结构
  • 异步就绪 - 支持非阻塞 SSE 连接

🤝 贡献

欢迎贡献代码!请按照以下步骤操作:

  1. 分叉仓库
  2. 创建功能分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 打开拉取请求

📄 许可证

本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。

🔗 相关项目

📬 联系

⭐ 星星历史

如果您觉得这个项目有帮助,请考虑给它点个星!


为人工智能和 C++ 社区用心打造 ❤️

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端