ClientMCP
2026-11-12
简单描述一下这个项目
UI for humans. MCP for agents. 把一个正在运行的浏览器、桌面或手机应用,暴露成一个标准的 MCP server。agent 调用的就是界面上按钮背后的那个函数,操作的是同一份状态:用户能看到 agent 做的改动,agent 也能看到用户做的改动。
网站:https://clientmcp.dev/
解决什么问题
agent 想操作一个应用,通常只能从外面下手:截图加模拟点击,或者调一个单独的后端 API,但后端看不到应用里当前打开的东西。ClientMCP 让工具直接就是应用里已有的函数,一个动作只实现一次,UI 和 agent 共用,不用截图、不用脚本操作 DOM、也不用模拟输入。
怎么工作
应用(Client SDK) ──WebSocket──▶ Bridge ◀──MCP Streamable HTTP── Agent(任何 MCP 客户端)
- 应用里不开端口:应用只发起一条出站 WebSocket 连到 bridge,跑在 NAT 后面的浏览器标签页也能用。
- Bridge:在 WebSocket 和 MCP 之间做转换。一份 Rust 核心,两种运行方式:静态 Linux 二进制 / Docker,或者 Cloudflare Workers + Durable Objects。
- 任何 MCP 客户端都能接:只需要 MCP Streamable HTTP 和一个 bearer token。
- 离线也是一种状态:应用关了就没有工具;重新打开时 agent 会收到
tools/list_changed。 - 耗时调用:慢的调用走 SSE 并保持连接,用户可以慢慢确认。
- 无状态 token:HS256 JWT,密钥可以不停机轮换。
快速上手
-
跑一个 bridge:
&& -
生成 token:
-
在应用里暴露函数:
; ; "add_todo", ; await ; -
接上 agent(以 Claude Code 为例):
JavaScript SDK 没有依赖,支持浏览器、Node.js 22+、Deno、Bun;Rust 应用可以用 clientmcp-client。
注意
- bridge 是被信任的一方:它终止 TLS,能看到所有参数和结果,agent 和应用之间不是端到端加密。
- v1 只支持 tools,不支持 resources、prompts 和进度通知。
- 参数来自大模型,可能被提示词注入操纵;应用要自己校验参数,重要操作要让用户确认。
开源
开放协议 v1.0,MIT 或 Apache-2.0 双协议:github.com/atshelchin/clientmcp