docs: refresh final submission materials
OH-MCPStack 是一个面向 OpenHarmony / 泛在操作系统 的原生 MCP(Model Context Protocol)协议栈原型项目,对应赛题一:泛在操作系统原生的 MCP 协议栈设计。
项目核心目标是把 MCP 能力从上层 Agent 框架中下沉到系统用户态服务 mcpd,统一处理 Agent 与 MCP Server 之间的工具发现、工具调用、缓存、安全和统计,从而降低重复开发成本,减少上下文传输开销,并提升高频工具调用场景下的吞吐量。
mcpd
当前实现为 C++ 用户态系统服务原型,并提供 OpenHarmony 集成骨架。项目不修改内核,采用更易落地的用户态系统服务路线。
普通 MCP 应用通常是:
Agent / LangChain / HelloAgents | v MCP Server | v Tool / API / Data Source
这种方式存在几个问题:
tools/list
OH-MCPStack 将 MCP 协议栈下沉为系统服务:
Agent / LangChain / HelloAgents | v mcpd 系统 MCP 服务 | v MCP Server / Tool Server
mcpd 负责统一代理、缓存、安全和统计,上层 Agent 只需要访问系统提供的统一 MCP 入口。
cpp/mcpd
tools/call
schema_id
X-Agent-Token
X-Agent-Signature
X-Agent-Timestamp
X-MCP-Nonce
/healthz
/stats
/metrics
openharmony/
flowchart TD A["Agent / Client"] --> B["mcpd :18080"] B --> C["Token 认证"] B --> D["ACL 工具权限"] B --> E["Schema 缓存"] B --> F["工具结果缓存"] B --> G["Nonce 防重放"] B --> H["请求大小限制"] B --> I["统计 /stats"] B --> J["Mock MCP Server :18081"] J --> K["amap.maps_weather"] J --> L["amap.maps_text_search"] J --> M["amap.maps_direction_transit_integrated_by_address"] J --> N["amap.hotel_search"] J --> O["amap.restaurant_search"]
默认端口:
http://127.0.0.1:18080
http://127.0.0.1:18081
/rpc
mcpd 已从单文件原型拆成多个模块:
cpp/mcpd/ main.cpp 启动参数、配置加载和 HTTP Server 入口 state.h 核心状态、策略结构和模块接口声明 config.cpp 配置文件解析、默认 Agent/服务安装 router.cpp 上游 MCP 服务注册、工具名前缀路由 discovery.cpp tools/list compact、schema 缓存、渐进式工具搜索 cache.cpp 结果缓存、TTL、LRU、invalidate/clear handler.cpp JSON-RPC 方法分发、安全检查、统计接口 security.cpp HMAC-SHA256 请求签名
这样评审时能清楚看到协议栈由配置、路由、缓存、安全和工具发现等子模块组成,而不是单文件 demo。
本项目 C++ 原型只依赖系统编译器和 CMake。
推荐环境:
检查依赖:
g++ --version cmake --version
macOS 也可以使用系统 clang++。
clang++
cd /Users/wangyue/harmony/oh-mcpstack ./scripts/build_cpp.sh
Linux 服务器上可以指定编译器:
CXX=g++ ./scripts/build_cpp.sh
可以直接运行冒烟脚本,它会自动编译、启动 mock_mcp_server 和 mcpd,并执行基础调用:
mock_mcp_server
./scripts/run_cpp_smoke.sh
如果需要手动启动:
./build/cpp/mock_mcp_server --port 18081 ./build/cpp/mcpd --port 18080 --upstream http://127.0.0.1:18081/rpc
配置文件启动方式:
./build/cpp/mcpd --config configs/mcpd.demo.json
configs/mcpd.demo.json 将服务注册、Agent token、ACL、缓存上限和安全参数从 C++ 代码中解耦,便于在 OpenHarmony 设备、边缘节点和本地压测环境中切换部署。
configs/mcpd.demo.json
除了标准 tools/list,mcpd 还提供两个系统扩展接口:
ohmcp/tools.search
ohmcp/tools.get_schema
inputSchema/outputSchema
测试:
./scripts/test_cpp_progressive_discovery.sh
服务启动后可访问:
curl http://127.0.0.1:18080/healthz curl http://127.0.0.1:18080/stats curl http://127.0.0.1:18080/metrics
注意:/rpc 是 JSON-RPC POST 接口,不是网页。浏览器直接打开 http://127.0.0.1:18081/rpc 通常不会显示有意义内容。
http://127.0.0.1:18081/rpc
curl -s http://127.0.0.1:18080/rpc \ -H 'Content-Type: application/json' \ -H 'X-Agent-Token: demo-token' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{"compact":true}}'
curl -s http://127.0.0.1:18080/rpc \ -H 'Content-Type: application/json' \ -H 'X-Agent-Token: demo-token' \ -H 'X-MCP-Nonce: demo-001' \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"amap.maps_weather","arguments":{"city":"Suzhou"}}}'
curl -s http://127.0.0.1:18080/stats
当前 Mock MCP Server 提供 5 个旅行规划工具,用于对齐比赛参考案例中的 HelloAgents 旅行规划助手和高德 MCP 工具调用场景。
amap.maps_weather
amap.maps_text_search
amap.maps_direction_transit_integrated_by_address
amap.hotel_search
amap.restaurant_search
工具元数据包含:
name title description version category inputSchema outputSchema annotations x-ohmcp
其中 x-ohmcp 是本项目扩展字段,用于描述系统层优化能力:
x-ohmcp
{ "cacheable": true, "cacheTtlMs": 60000, "requiredPermission": "tool:weather", "securityLevel": "normal" }
cd /Users/wangyue/harmony/oh-mcpstack ./scripts/build_cpp.sh ./scripts/run_cpp_smoke.sh ./scripts/test_cpp_context_efficiency.sh ./scripts/test_cpp_result_cache.sh ./scripts/test_cpp_cache_controls.sh ./scripts/test_cpp_multi_service_router.sh ./scripts/test_cpp_security.sh N=3000 ./scripts/bench_cpp_performance.sh ./scripts/run_trip_planner_demo.sh
Linux 服务器:
CXX=g++ ./scripts/build_cpp.sh CXX=g++ ./scripts/run_cpp_smoke.sh CXX=g++ ./scripts/test_cpp_context_efficiency.sh CXX=g++ ./scripts/test_cpp_result_cache.sh CXX=g++ ./scripts/test_cpp_cache_controls.sh CXX=g++ ./scripts/test_cpp_multi_service_router.sh CXX=g++ ./scripts/test_cpp_security.sh CXX=g++ N=3000 ./scripts/bench_cpp_performance.sh CXX=g++ ./scripts/run_trip_planner_demo.sh
scripts/build_cpp.sh
scripts/run_cpp_smoke.sh
scripts/test_cpp_context_efficiency.sh
scripts/test_cpp_result_cache.sh
scripts/test_cpp_cache_controls.sh
scripts/test_cpp_multi_service_router.sh
scripts/test_cpp_security.sh
scripts/bench_cpp_performance.sh
scripts/bench_multi_agent.sh
scripts/bench_edge_docker.sh
scripts/run_trip_planner_demo.sh
完整测试报告见:
docs/test_report.md
优化效果:
该结果对应赛题要求中的“优化上下文长度,提升通信效率 10%”。
cached=false
cached=true
服务器环境下 N=3000 测试结果:
N=3000
说明:缓存未命中时 mcpd 多一层代理,可能慢于直连 MCP;本项目的性能收益主要体现在高频重复查询、可缓存工具和多 Agent 共享缓存场景。
服务器环境下模拟 10、50、100 个 Agent 并发调用 MCP 工具,每个 Agent 发送 200 个请求。100 Agent 场景结果:
100 Agent 下,mcpd Cache Hit 相对普通 MCP 直连 QPS 提升 988.96%,平均延迟降低 90.83%。详细报告见 docs/multi_agent_benchmark.md。
mcpd Cache Hit
docs/multi_agent_benchmark.md
使用 Docker 限制 CPU 和内存模拟边缘节点。50 Agent 场景结果:
详细报告见 docs/resource_limited_test.md。
docs/resource_limited_test.md
本项目提供旅行规划 Demo:
./scripts/run_trip_planner_demo.sh
Demo 任务:
上海到苏州三天两晚旅行规划
调用工具:
该 Demo 展示了 Agent 应用如何通过 mcpd 统一调用多个 MCP 工具,并复用系统层缓存和安全能力。
OpenHarmony 集成骨架位于:
主要文件:
openharmony/services/mcpd/BUILD.gn
openharmony/services/mcpd/bundle.json
openharmony/services/mcpd/init/mcpd.cfg
openharmony/services/mcpd/mcpd_main.cpp
openharmony/interfaces/innerkits/include/imcp_service.h
openharmony/interfaces/kits/arkts/oh_mcpstack.d.ts
当前采用 用户态系统服务 路线,而不是内核模块路线,原因是:
详细说明见:
docs/openharmony_integration.md
cpp/ common/ HTTP、JSON、MCP 基础库 mock_mcp_server/ 模拟高德 MCP Server mock_calendar_server/ 模拟日历 MCP Server mcpd/ 系统 MCP 服务原型 client/ C++ 命令行客户端 bench/ 性能测试程序 scripts/ build_cpp.sh run_cpp_smoke.sh test_cpp_context_efficiency.sh test_cpp_result_cache.sh test_cpp_cache_controls.sh test_cpp_multi_service_router.sh test_cpp_security.sh bench_cpp_performance.sh run_trip_planner_demo.sh docs/ competition_requirements.md design.md test_plan.md test_report.md openharmony_integration.md performance_benchmark.md multi_agent_benchmark.md resource_limited_test.md security_tests.md context_efficiency_test.md result_cache.md trip_planner_demo.md reference_cases.md tool_metadata.md openharmony/ services/mcpd/ interfaces/innerkits/ interfaces/kits/arkts/
当前项目已经完成第一阶段可运行原型,后续重点:
本项目采用 MIT License,见:
LICENSE
参考 docs/agent_integration.md。该文档说明了如何将 LangChain / HelloAgents 这类上层 Agent 框架从直连 MCP Server 改为连接系统 mcpd,并复用系统层路由、缓存、ACL 和渐进式工具发现能力。
docs/agent_integration.md
mcpd 支持可选的请求签名校验。配置中开启 security.require_signature=true 后,请求必须携带:
security.require_signature=true
X-Agent-Token: demo-token X-Agent-Timestamp: 1710000000 X-MCP-Nonce: unique-nonce X-Agent-Signature: sha256=<hmac_hex>
签名消息为:
timestamp + "\n" + nonce + "\n" + raw_json_body
签名算法为 HMAC-SHA256。该机制用于校验消息完整性、防篡改,并结合 nonce 防重放。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
OH-MCPStack
OH-MCPStack 是一个面向 OpenHarmony / 泛在操作系统 的原生 MCP(Model Context Protocol)协议栈原型项目,对应赛题一:泛在操作系统原生的 MCP 协议栈设计。
项目核心目标是把 MCP 能力从上层 Agent 框架中下沉到系统用户态服务
mcpd,统一处理 Agent 与 MCP Server 之间的工具发现、工具调用、缓存、安全和统计,从而降低重复开发成本,减少上下文传输开销,并提升高频工具调用场景下的吞吐量。1. 项目解决的问题
普通 MCP 应用通常是:
这种方式存在几个问题:
tools/list返回完整工具 schema,占用大量 LLM 上下文;OH-MCPStack 将 MCP 协议栈下沉为系统服务:
mcpd负责统一代理、缓存、安全和统计,上层 Agent 只需要访问系统提供的统一 MCP 入口。2. 当前已实现能力
cpp/mcpdtools/list转发tools/call转发schema_id,减少重复 schema 传输mcpdX-Agent-TokenX-Agent-Signature/X-Agent-Timestamp/X-MCP-NonceX-MCP-Nonce/healthz健康检查/stats统计接口/metricsPrometheus 文本指标openharmony/3. 总体架构
flowchart TD A["Agent / Client"] --> B["mcpd :18080"] B --> C["Token 认证"] B --> D["ACL 工具权限"] B --> E["Schema 缓存"] B --> F["工具结果缓存"] B --> G["Nonce 防重放"] B --> H["请求大小限制"] B --> I["统计 /stats"] B --> J["Mock MCP Server :18081"] J --> K["amap.maps_weather"] J --> L["amap.maps_text_search"] J --> M["amap.maps_direction_transit_integrated_by_address"] J --> N["amap.hotel_search"] J --> O["amap.restaurant_search"]默认端口:
mcpdhttp://127.0.0.1:18080http://127.0.0.1:18081/rpc/healthz/stats3.1 mcpd 模块拆分
mcpd已从单文件原型拆成多个模块:这样评审时能清楚看到协议栈由配置、路由、缓存、安全和工具发现等子模块组成,而不是单文件 demo。
4. 快速开始
4.1 环境要求
本项目 C++ 原型只依赖系统编译器和 CMake。
推荐环境:
检查依赖:
macOS 也可以使用系统
clang++。4.2 编译
Linux 服务器上可以指定编译器:
4.3 启动服务
可以直接运行冒烟脚本,它会自动编译、启动
mock_mcp_server和mcpd,并执行基础调用:如果需要手动启动:
配置文件启动方式:
configs/mcpd.demo.json将服务注册、Agent token、ACL、缓存上限和安全参数从 C++ 代码中解耦,便于在 OpenHarmony 设备、边缘节点和本地压测环境中切换部署。4.4 渐进式工具发现
除了标准
tools/list,mcpd还提供两个系统扩展接口:ohmcp/tools.search:按任务关键词返回少量相关工具,避免一次性把全部工具描述塞进上下文;ohmcp/tools.get_schema:按schema_id或工具名按需获取完整inputSchema/outputSchema。测试:
服务启动后可访问:
5. 示例调用
5.1 查询工具列表
5.2 调用天气工具
5.3 查看统计信息
6. MCP 工具集合
当前 Mock MCP Server 提供 5 个旅行规划工具,用于对齐比赛参考案例中的 HelloAgents 旅行规划助手和高德 MCP 工具调用场景。
amap.maps_weatheramap.maps_text_searchamap.maps_direction_transit_integrated_by_addressamap.hotel_searchamap.restaurant_search工具元数据包含:
其中
x-ohmcp是本项目扩展字段,用于描述系统层优化能力:7. 测试与复现
7.1 完整测试命令
Linux 服务器:
7.2 测试脚本说明
scripts/build_cpp.shscripts/run_cpp_smoke.shscripts/test_cpp_context_efficiency.shscripts/test_cpp_result_cache.shscripts/test_cpp_cache_controls.shscripts/test_cpp_multi_service_router.shscripts/test_cpp_security.shscripts/bench_cpp_performance.shscripts/bench_multi_agent.shscripts/bench_edge_docker.shscripts/run_trip_planner_demo.sh8. 阶段性测试结果
完整测试报告见:
8.1 上下文长度优化
优化效果:
该结果对应赛题要求中的“优化上下文长度,提升通信效率 10%”。
8.2 工具结果缓存
cached=false数量cached=true数量/stats中 result cache hits/stats中 result cache misses8.3 安全测试
8.4 性能 benchmark
服务器环境下
N=3000测试结果:优化效果:
说明:缓存未命中时
mcpd多一层代理,可能慢于直连 MCP;本项目的性能收益主要体现在高频重复查询、可缓存工具和多 Agent 共享缓存场景。8.5 多 Agent 并发压力测试
服务器环境下模拟 10、50、100 个 Agent 并发调用 MCP 工具,每个 Agent 发送 200 个请求。100 Agent 场景结果:
100 Agent 下,
mcpd Cache Hit相对普通 MCP 直连 QPS 提升 988.96%,平均延迟降低 90.83%。详细报告见docs/multi_agent_benchmark.md。8.6 Docker 资源受限边缘测试
使用 Docker 限制 CPU 和内存模拟边缘节点。50 Agent 场景结果:
详细报告见
docs/resource_limited_test.md。9. 端到端 Demo
本项目提供旅行规划 Demo:
Demo 任务:
调用工具:
该 Demo 展示了 Agent 应用如何通过
mcpd统一调用多个 MCP 工具,并复用系统层缓存和安全能力。10. OpenHarmony 集成方案
OpenHarmony 集成骨架位于:
主要文件:
openharmony/services/mcpd/BUILD.gnopenharmony/services/mcpd/bundle.jsonopenharmony/services/mcpd/init/mcpd.cfgopenharmony/services/mcpd/mcpd_main.cppopenharmony/interfaces/innerkits/include/imcp_service.hopenharmony/interfaces/kits/arkts/oh_mcpstack.d.ts当前采用 用户态系统服务 路线,而不是内核模块路线,原因是:
详细说明见:
11. 仓库结构
12. 与赛题要求的对应关系
mcpd服务 + OpenHarmony 集成骨架tools/list紧凑返回减少 53.08% 字节数13. 后续计划
当前项目已经完成第一阶段可运行原型,后续重点:
mcpd转发路径,例如连接复用、线程池、异步 I/O;14. License
本项目采用 MIT License,见:
9. Agent 框架接入说明
参考
docs/agent_integration.md。该文档说明了如何将 LangChain / HelloAgents 这类上层 Agent 框架从直连 MCP Server 改为连接系统mcpd,并复用系统层路由、缓存、ACL 和渐进式工具发现能力。HMAC-SHA256 签名安全增强
mcpd支持可选的请求签名校验。配置中开启security.require_signature=true后,请求必须携带:签名消息为:
签名算法为 HMAC-SHA256。该机制用于校验消息完整性、防篡改,并结合 nonce 防重放。