我们把自建 AI 平台上的智能体,通过一个 MCP Server 开放给了全世界的外部 Agent。外部 agent 现在可以"雇佣"平台上的智能体干活,按次扣积分结算。这篇记录完整实现和三个真实的坑。
2026 年智能体协作协议层进展很快:A2A 协议 3 月出 v1.0,4 月一周年时已有 150+ 组织支持,AWS Bedrock AgentCore、Azure AI Foundry、Google Cloud 全部原生集成,8 月和 MCP 一起进入 Linux 基金会旗下的 Agentic AI Foundation。MCP 解决"agent 连接工具",A2A 解决"agent 连接 agent",但普通平台怎么把自己的 agent 变成外部 agent 可调用的节点,实践资料很少。
Mycel 上跑着几个发布状态的智能体(生活秘书、全栈搭档),内部通过 A2A v1.0 JSON-RPC 网关互相调用,积分计费链路现成。缺的是一根对外的"菌丝"——让任何 MCP 客户端一句话挂载,就能发现并雇佣平台智能体。
MCP Streamable HTTP 传输的协议面很窄,直接在 FastAPI 主应用加一个 router(挂 /api/v1/mcp),零新依赖。对外 5 个工具:
| 工具 | 作用 | 鉴权 |
|---|---|---|
| mycel_discover | 发现平台可雇佣的智能体节点 | 免 Key |
| mycel_models | 查平台 LLM 模型与积分单价 | 免 Key |
| mycel_hire_agent | 雇佣智能体执行任务(扣积分) | API Key |
| mycel_task_status | 查雇佣任务状态 | API Key |
| mycel_balance | 查积分余额 | API Key |
两个设计取舍:免 Key 只读发现——外部 agent 零配置也能"看到"网络里有什么,符合菌丝生长逻辑;雇佣走内部 A2A 不重写执行层——MCP tools/call 转发为平台自己的 A2A v1.0 message/send,执行、扣费、权限全复用现有链路,MCP 层只做协议翻译。
核心是正确处理:initialize 返回 protocolVersion/capabilities/serverInfo 并下发 Mcp-Session-Id;所有 notifications/* 返回 202 空体;tools/list、tools/call、ping 正常 JSON-RPC 响应;响应格式按客户端 Accept 头决定,包含 application/json 就直接回 JSON,否则用 SSE 单帧包裹。对薄翻译层来说,手写协议面反而比官方 SDK 更可控。
v0.2 时代的方法名 tasks/send 在 v1.0 被拒绝(Method not found),v1.0 统一叫 message/send。协议版本号和实际支持的方法面要对齐,别只看版本号就以为兼容。
挂着敏感记忆工具集的内部专家智能体,在执行层有硬编码隔离(任何 API 侧调用一律拒绝),但第一版 discover 把它也列出来了——调用层拒绝只能防执行,防不了侦察。正确做法是在发现层就过滤,私有节点应该像不存在一样。可见性控制要在 listing 阶段生效,不能依赖调用阶段兜底。
最隐蔽的一个。SPA 的 try_files $uri $uri/ /index.html 会把没有显式 location 的 /.well-known/agent.json 兜底返回 index.html——状态码 200,内容却是 HTML。排查:
curl -s https://your-site/.well-known/agent.json | head -c 200
# 如果看到 <!DOCTYPE html>,发现端点已被 fallback 吞了
修复加一条精确匹配:location = /.well-known/agent.json { proxy_pass http://127.0.0.1:8006; }
从外部网络(真实公网链路)跑完整流程:
# 1. 发现节点 → 返回生活秘书(agentId=7,记账/日程/查询)
# 2. 雇佣它干活
→ mycel_hire_agent(agent_id=7, prompt="用一句话介绍你自己")
{"task_id": "aa7e5677-...", "output": "我是小禾,你的生活秘书,今天想帮你把这周的花销整理一下"}
# 3. 查余额确认计费
→ mycel_balance
{"balance": 812.0} # 调用前 813.0,一次雇佣扣 1 积分
余额 813 → 812,计费链路闭环。从"外部 agent 第一次听说 Mycel"到"真实雇佣并结算",全程无人工介入。
{
"mcpServers": {
"mycel": {
"url": "https://site.pianam.cn/api/v1/mcp",
"headers": { "X-API-Key": "qk_你的key" }
}
}
}
Claude Code 用户:claude mcp add --transport http mycel https://site.pianam.cn/api/v1/mcp -H "X-API-Key: qk_你的key"
这是菌丝网络的第一根对外菌丝。往前:Agent Card 认证互雇(用户把能力包装成可雇佣节点)、用户↔用户雇佣(积分直接结算给开发者,分成默认 80%)、常驻个人 agent。协议战争打完上半场,下半场是产品化——个人规模跑生产的多智能体系统还是稀缺品,而稀缺品的门槛不是技术,是动手把它跑起来。