Go to file
adelaidacamerano 70c42cbd7e
CI / supply-chain (push) Successful in 28m0s Details
CI / test (push) Successful in 2h19m26s Details
docs: submission deliverables - demo video, slides pdf, cjk-font demo gif
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-10 15:34:22 +00:00
.cargo chore: workspace scaffolding, Apache-2.0 license, native-cpu build config 2026-07-06 14:48:23 +00:00
.github/workflows chore(supply-chain): cargo-deny audit (advisories/bans/licenses/sources) in CI 2026-07-10 13:13:28 +00:00
crates feat(mcp): resource list_changed notifications (runtime resource addition) 2026-07-10 15:03:38 +00:00
docs docs: submission deliverables - demo video, slides pdf, cjk-font demo gif 2026-07-10 15:34:22 +00:00
scripts docs: animated terminal demo GIF embedded in README (asciinema + agg) 2026-07-07 14:24:15 +00:00
.gitignore chore: workspace scaffolding, Apache-2.0 license, native-cpu build config 2026-07-06 14:48:23 +00:00
Cargo.lock perf(ohmcpd): mimalloc global allocator for the daemon binary 2026-07-10 14:32:41 +00:00
Cargo.toml perf(ohmcpd): mimalloc global allocator for the daemon binary 2026-07-10 14:32:41 +00:00
LICENSE chore: workspace scaffolding, Apache-2.0 license, native-cpu build config 2026-07-06 14:48:23 +00:00
README.md feat(mcp): resource list_changed notifications (runtime resource addition) 2026-07-10 15:03:38 +00:00
bench-results.json perf(ohmcpd): mimalloc global allocator for the daemon binary 2026-07-10 14:32:41 +00:00
deny.toml chore(supply-chain): cargo-deny audit (advisories/bans/licenses/sources) in CI 2026-07-10 13:13:28 +00:00

README.md

ohmcp — OpenHarmony 原生 MCP 协议栈

面向 OpenHarmony 泛在操作系统的原生 MCPModel Context Protocol协议栈参考实现。 以 Rust 编写,针对端侧多 Agent 场景重新设计传输层与上下文通道,在与官方 MCP SDK 同语义的 JSON-RPC 基线对比下,实现显著的通信效率与延迟优化。

OpenHarmony 开源任务挑战赛 · 赛题一《泛在 OS 原生 MCP 协议栈》参赛作品。

核心设计

crate 说明
帧格式 ohmcp-core OHMF 二进制帧17 字节定长头magic/版本/标志/类型/request_id/长度),替代 JSON-RPC 文本信封
传输 ohmcp-transport Unix Domain Socket 帧化读写;写路径批量聚合减少 syscall读路径增量零拷贝解码可选双向共享内存大 payload 通道memfd 环形缓冲 + SCM_RIGHTS fd 传递上下行零套接字拷贝DSoftBus Session 适配 PoCsoftbus.rs
上下文优化 ohmcp-cache LZ4 透明压缩512B 阈值);内容寻址结果缓存 sha256(tool ‖ args),命中时仅回传 32 字节 CACHE_REF
安全 ohmcp-security HMAC-SHA256 挑战应答认证令牌不过网X25519 临时密钥交换(前向保密);会话级 ChaCha20-Poly1305 AEAD帧头入 AAD 防篡改);工具粒度 ACL
服务端 ohmcpd 用户态守护进程,每连接异步任务,共享工具注册表与服务端缓存
客户端 ohmcp-client 单连接多路复用;“机会主义内联读”分发(顺序调用零任务切换,并发调用自动复用)
测试 ohmcp-bench 与 JSON-RPC 基线(对齐官方 SDK 传输语义)的七场景对比基准

性能vs 官方 SDK 语义 JSON-RPC 基线)

同机 UDS、同一工具执行逻辑仅协议栈不同ohmcp 全程开启认证 + 加密):

场景 吞吐提升 p50 延迟 线上字节
latency-echo5k 小消息) +20% ~ +65% 17% ~ 36% 3.8%
bulk-kb-search5k 大结果) +15% ~ +20% 10% ~ 13% 81.0%
bulk-doc-64k整文档拉取 +5% ~ +24% 13% ~ 21% 95.6%
bulk-doc-64k共享内存通道 +52% 32% 99.8%
upload-256k双向共享内存 +81% ~ +170% 47% ~ 67% 99.99%
repeat-cached热点重复调用 +37% ~ +59% 26% ~ 36% 94.1%
pipeline-64单连接 64 路复用) +138% ~ +157% 59% ~ 64%
concurrent-1616 Agent +30% ~ +41% 23% ~ 33%

(每场景 3 次运行取吞吐中位数,区间为多次完整基准运行观测范围)

七场景吞吐对比

复现:

cargo run --release -p ohmcp-bench -- --json bench-results.json
cargo run --release -p ohmcp-bench --bin demo   # 端到端多 Agent 演示

端到端演示输出

端到端多 Agent 演示

=== ohmcp 多 Agent 演示(认证 + 加密开启) ===

[voice-assistant] 可用工具: ["echo", "kb.search", "kb.dump", "kb.blob", "device.status", "math.sum"]
[voice-assistant] kb.search 首次调用: 991 字节, 98µs
[voice-assistant] kb.search 重复调用(线上仅 32 字节 CACHE_REF: 47µs
[voice-assistant] 本地缓存: 1 命中 / 0 未命中
[system-scheduler] device.status: {"content":[{"type":"text","text":"{\"battery\":87,...}"}]}
[calc-agent] math.sum: {"content":[{"type":"text","text":"100"}]}
[doc-agent] kb.dump 经共享内存通道: 65959 字节结果, 320µs套接字仅 12 字节引用)
[doc-agent] 收到资源更新推送: ohmcp://docs/protocol
[doc-agent] 重读更新后内容: 协议文档已更新v2
[calc-agent] 越界调用被拒: server error: {"code":-32601,"message":"unknown tool: fs.delete_all"}
[rogue-agent] 错误令牌被拒: auth failed: Some("invalid token")

=== 演示完成:多 Agent 复用单守护进程,全程加密,缓存/订阅生效 ===

快速开始

# 构建(.cargo/config.toml 默认启用 target-cpu=native
cargo build --release

# 启动守护进程(开启认证)
./target/release/ohmcpd --socket /tmp/ohmcpd.sock --token my-secret

# 客户端调用(库 API
use ohmcp_client::OhmcpClient;

let c = OhmcpClient::connect("/tmp/ohmcpd.sock", "agent-1", Some(b"my-secret")).await?;
let tools = c.list_tools().await?;
let result = c.call_tool("kb.search", serde_json::json!({"query": "鸿蒙", "top_k": 5})).await?;

测试

cargo test --workspace                     # 42 单元 + 17 端到端集成测试59 项全绿
cargo clippy --workspace --all-targets -- -D warnings   # 零警告CI 强制)

CIGitHub Actionsfmt + clippy(-D warnings) + 全量测试 + 基准烟雾。

文档

许可证

Apache-2.0。全部代码为原创实现,第三方仅以 crates.io 依赖形式引用。