# mcp_cpp_sdk **Repository Path**: innocenceman/mcp_cpp_sdk ## Basic Information - **Project Name**: mcp_cpp_sdk - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2025-10-18 - **Last Updated**: 2025-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MCP C++ SDK 现代 C++ 的 MCP SDK 与示例集,采用 CMake 构建,内置多种传输适配器(stdio、process、WebSocket、HTTP+SSE、HTTP+Streamable(NDJSON)、in-memory),并提供一键脚本完成本地 Mock 启动与自动化回归。 - 支持平台 - Windows:WinHTTP(WebSocket / HTTP+SSE / OAuth2)、进程管道 - Linux:libcurl(HTTP+SSE / HTTP+Streamable / OAuth2)、libwebsockets(WebSocket,可选) --- ## 快速开始(Linux) - 安装基础依赖(以 Debian/Ubuntu 为例): ```bash sudo apt-get update sudo apt-get install -y build-essential cmake libcurl4-openssl-dev ``` - 可选:本地安装 libwebsockets(用户目录,无需 root)以启用 WebSocket: ```bash # 以 4.3.3 为例 cmake -S libwebsockets-4.3.3 -B libwebsockets-4.3.3/build-user \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="$HOME/.local/lws" \ -DLWS_WITH_SSL=OFF -DLWS_WITH_ZLIB=OFF \ -DLWS_WITH_SHARED=ON -DLWS_WITH_STATIC=OFF \ -DLWS_WITH_IPV6=OFF -DLWS_WITHOUT_TESTAPPS=ON cmake --build libwebsockets-4.3.3/build-user -j cmake --install libwebsockets-4.3.3/build-user # 让 CMake 通过 pkg-config 检测到 export PKG_CONFIG_PATH="$HOME/.local/lws/lib64/pkgconfig:$HOME/.local/lws/lib/pkgconfig:$PKG_CONFIG_PATH" ``` ```bash cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build -j ``` -# 运行 WS/HTTP 示例(需要 Node 本地 Mock): ```bash # 安装依赖 npm install ws express # 启动 WS Mock(另一个终端) WS_HOST=127.0.0.1 WS_PORT=3000 node server.js # 启动 HTTP Mock(另一个终端,包含 SSE + NDJSON 两种流端点) PORT=8080 node sse_server.js # 运行客户端 build/examples/ws_client/ws_client "ws://127.0.0.1:3000/" --subprotocol jsonrpc # SSE 流: build/examples/http_client/http_client "http+sse://127.0.0.1:8080/mcp" # NDJSON 流(Streamable 模式): build/examples/http_client/http_client "http+stream://127.0.0.1:8080/mcp" --- ## 一键脚本(Linux) `scripts/test_all.sh` 会: - 构建工程 - 自动安装并启动本地 Mock(`server.js` / `sse_server.js`) - 运行 `inmemory_demo`、`feature_matrix`、`http_client`,以及(若 LWS 可用)`ws_client` - 生成日志于 `build/logs/` 运行: ```bash ./scripts/test_all.sh ``` --- ## 真实天气场景(SSE / Streamable NDJSON) - 场景说明: - `sse_server.js` 提供真实可用的 JSON-RPC 服务:内置工具 `get_weather` 会实时调用 Open‑Meteo(无需 API Key)获取指定城市的天气,随后通过所选流式通道(SSE 或 NDJSON)回传。 - `examples/weather_client/` 是端侧示例客户端,支持通过 URL 选择传输模式(`http+sse://...` 或 `http+stream://...`)。 - `nlohmann_json`:优先 `find_package`;若未找到,使用 `third_party/nlohmann_json/include` 头文件 - Windows:链接 `winhttp` - Linux:链接 `libcurl` 和 `pthread` - Linux(WebSocket,可选):若 `pkg-config` 检测到 `libwebsockets`,启用 `src/websocket_transport_lws.cpp` 与 `examples/ws_client` - 关键选项: - `MCP_BUILD_EXAMPLES`(默认 ON) - `MCP_ENABLE_LWS`(默认 ON;Linux 下若找到 LWS 则启用) - 例子构建: - 跨平台:`examples/inmemory_demo/`、`examples/everything_server/`、`examples/weather_server/`、`examples/protected_server/`、`examples/feature_matrix/` - Linux 专用:`examples/http_client/`,以及在启用 LWS 时 `examples/ws_client/` - Windows 专用:其余 `*_client` 示例(进程管道、WinHTTP 依赖) --- ## 目录结构 - `include/mcp/`:公共头文件(会话、客户端、传输接口等) - `src/`:实现(`json_rpc.cpp`、`session.cpp`、各传输适配器与 OAuth2 客户端) - `examples/`:示例(客户端/服务端/内存通道等) - `examples/weather_client/`:流式 HTTP 天气客户端(SSE/Streamable 可切换) - `server.js`、`sse_server.js`:Node 本地 Mock(WS 与 HTTP+SSE 与 HTTP+NDJSON Stream;提供真实 `get_weather` 工具) - `scripts/`:自动化脚本(`test_all.sh`、`test_weather_scenario.sh`) - `third_party/nlohmann_json/include/`:可选内置单头库备用 --- ## 排障指南(WS on Linux) - `LWS_FOUND` 为空 → 未启用 LWS: - 确认已安装到 `~/.local/lws` 并设置了 `PKG_CONFIG_PATH` - 重新 `cmake -S . -B build` 并观察 `CMakeCache.txt` 的 `LWS_FOUND` - 连接未到达服务器(看不到 `[WS HEADERS]`): - 解除代理干扰: ```bash unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY export NO_PROXY=127.0.0.1,localhost ``` - 日志级别:已启用 `LLL_HEADER|LLL_PARSER`,查看 `build/logs/ws_client.err.txt` - 握手失败: - Host 头应包含端口(例如 `127.0.0.1:3000`) - 子协议应为 `jsonrpc`(`--subprotocol jsonrpc`) ---