一个小巧且可移植的C语言实现的MCP风格的JSON-RPC服务器,具有可插拔的传输接口。它包括:
该项目是探索AI代理在物联网/工业物联网和机器人(如运行Zephyr的ESP32边缘设备)中的应用的一部分,因此它是一个嵌入式目标的学习/参考实现。它专注于一个足够小的子集来测试外部客户端,但尚未准备好用于生产环境。
该库干净地分离了JSON-RPC协议逻辑与网络,因此只需少量更改即可在Linux和Zephyr上运行:
mcp_transport_t(初始化、轮询、发送、关闭),由简单的循环驱动。目前,HTTP传输:
MCP_HTTP_PORT覆盖)。/或/mcp均可工作)。有关架构和传输实现的更多细节,请参阅docs/architecture.md。
需求:CMake和C编译器
mkdir -p build && cd build
cmake .. -DMCP_ENABLE_EXAMPLES=ON
cmake --build . --config Release
./examples/linux/mcp_server/mcp-linux-mcp_server
服务器监听http://0.0.0.0:8080。请参阅下面的“使用curl进行测试(Linux和Zephyr)”。
# 设置
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# 构建和刷写
./scripts/build-zephyr.sh --init
./scripts/build-zephyr.sh -b esp32_devkitc/esp32/procpu --wifi-ssid "SSID" --wifi-pass "PASS"
cd examples/zephyr/mcp_server
west flash && west espressif monitor
# 构建和运行
./scripts/build-zephyr.sh -b native_sim
./examples/zephyr/mcp_server/build/zephyr/zephyr.exe
使用localhost:8080和本地卸载套接字。
详情请参阅examples/zephyr/mcp_server/README.md。
# 初始化会话并获取功能/协议版本
curl -s -X POST http://HOST:8080 -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":"1","method":"initialize","params":{}}'
# 列出服务器公开的可用工具
curl -s -X POST http://HOST:8080 -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":"2","method":"tools/list","params":{}}'
# 调用“echo”工具;此演示返回固定的问候语
curl -s -X POST http://HOST:8080 -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":"3","method":"tools/call","params":{"name":"echo","arguments":{"text":"hi"}}}'
将HOST替换为localhost(Linux/native_sim)或Zephyr设备IP(ESP32)。
所有传输都符合相同的最小接口(mcp_transport_t:初始化、轮询、发送、关闭)。当前和计划支持的传输:
| 传输 | 状态 | 备注 |
|---|---|---|
| HTTP | 已实现 | 简单的POST -> JSON-RPC,每个连接一个请求(尚无SSE) |
| MQTT | 计划中 | 主题模型(例如mcp/<server>/req,mcp/<client>/resp)用于发布/订阅边缘设备 |
| CoAP | 计划中 | 轻量级UDP用于受限设备;将JSON-RPC映射到确认/非确认消息 |
| Zenoh | 计划中 | 超低延迟分布式键值;类似于MQTT的最小发布/订阅模式 |
规范参考(MCP):定义了标准I/O和流式HTTP(可选SSE)。当前实现仅涵盖HTTP的POST部分。未来工作:SSE流式传输、标准I/O传输以及上述计划的协议。
mcp_server_init,mcp_server_run,mcp_server_registermcp_transport_http() 返回HTTP传输int handler(mcp_session_t *session, const mcp_message_t *req, char *resp_buf, size_t resp_buf_sz)处理程序必须用有效的JSON-RPC响应对象填充resp_buf。
mcp_transport_t添加额外的传输(CoAP,MQTT-SN)和TLS。id;实际代码中应使用请求的id。渲染文档(Just the Docs主题):https://servoagents.github.io/mcp-c/
本地预览:
docker run --rm -it -p 4000:4000 -v "$PWD/docs":/site -w /site ruby:3.2 bash -lc 'gem install bundler && bundle install && bundle exec jekyll serve -H 0.0.0.0'
然后打开http://localhost:4000/mcp-c/
欢迎贡献。
如果不确定方向(例如新的传输),首先打开一个问题进行对齐。
git checkout -b feature/xyz。.clang-format)。docs/中添加或更新文档。MIT许可证 - 详见LICENSE.txt。