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 自动获取):
- nlohmann/json - JSON 解析
- cpp-httplib - HTTP 服务器
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 连接
🤝 贡献
欢迎贡献代码!请按照以下步骤操作:
- 分叉仓库
- 创建功能分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 打开拉取请求
📄 许可证
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。
🔗 相关项目
- Model Context Protocol - 官方 MCP 规范
- mcp Python SDK - 官方 Python 实现
- mcp TypeScript SDK - 官方 TypeScript 实现
📬 联系
- 问题反馈:GitHub Issues
- 讨论交流:GitHub Discussions
⭐ 星星历史
如果您觉得这个项目有帮助,请考虑给它点个星!
为人工智能和 C++ 社区用心打造 ❤️
微信扫一扫