☰
Google A2A开源协议落地:MCP+A2A双协议下Agent配置骨架怎么搭?
2026/9/26 14:01:05 网站建设 项目流程

1. 从“单兵作战”到“团队协作”:A2A 与 MCP 到底解决了什么

如果你最近在折腾 AI Agent,大概率会有一种割裂感:模型能调工具了,但工具和工具之间不说话;一个 Agent 能查数据库,另一个能发邮件,可它俩没法自己商量“这活谁干”。Google 开源的 A2A(Agent2Agent)协议,瞄准的就是这个痛点——让不同框架、不同平台上的 Agent 能互相“喊话”、协商任务、同步状态。而 Anthropic 的 MCP(Model Context Protocol)解决的是另一层:让模型稳定地连接外部工具和数据源。一个管“Agent 之间怎么协作”,一个管“Agent 怎么用工具”,两者叠起来,才是多 Agent 工程真正能落地的骨架。

这篇不聊虚的,直接给你一套可复制的配置骨架:用 TaoToken 统一 Key/API 通道,把 A2A 和 MCP 双协议接进 Cline、CC Switch 这类工具,跑通一次完整的双协议 Agent 链路。适合谁?已经在用 Cline 写代码、想把手里的 Agent 从“单机”升级成“可互操作节点”的开发者。读完你能拿到 settings.json 和 config.toml 两份骨架,以及验证请求是否真的走通的具体动作。

先说清楚一个容易混的点。MCP 像是给 Agent 配了一把万能螺丝刀,让它能拧各种螺丝(调 API、读文件、查库);A2A 则是 Agent 之间的对讲机,让它们能互相派活。你完全可以只用 MCP,那你的 Agent 就是个工具用得很溜的独行侠;但一旦你要让“招聘 Agent”去找“背调 Agent”帮忙,就需要 A2A 出场。Google 在自家 ADK 里已经同时支持两者,说明这不是二选一,而是组合拳。

2. 前置准备:用 TaoToken 统一 Key 与 API 通道

多 Agent 场景最烦的是什么?每个工具、每个 Agent 都要配一套 Key,散落在各个配置文件里,改一个地方漏三个。我的做法是先用 TaoToken 把模型调用通道统一掉,这样 A2A 里的 Agent 和 MCP 里的工具调用都走同一个出口,排查问题时只需要盯一个地方。

TaoToken 在这里的角色是统一入口:你拿到一个 Key,就能在 Cline、CC Switch、以及自定义的 Agent 脚本里复用同一套 API 地址。官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api (这个不加 UTM,配置里直接写)。

具体要准备三样东西:

第一,一个可用的 API Key。去控制台生成,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,生成后先复制到剪贴板,后面两个配置文件都要用。

第二,确认你要接的模型名。不同工具对模型名的写法略有差异,建议先在模型对话页确认一下可用模型,地址 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,选一个你常用的,记下它的准确 ID。

第三,想清楚你的 Agent 拓扑。是“一个主 Agent + 若干子 Agent”,还是“平级互调”?这决定了 A2A 的 Agent Card 里怎么写能力声明。新手建议先搭最小拓扑:一个协调者 Agent,一个执行者 Agent,中间用 MCP 挂一个工具(比如读文件),跑通再加节点。

提示:Key 不要硬编码进会提交到 Git 的文件。下面骨架里我用占位符,你替换时也建议走环境变量或本地未跟踪的配置文件。

3. 可复制配置骨架:settings.json 与 config.toml

这一节是核心,直接给两份能抄的骨架。先说明:不同工具的配置字段名会有差异,我按 Cline(VS Code 插件)和 CC Switch 的常见结构来写,你对照自己的版本微调字段名即可,结构逻辑是通用的。

3.1 Cline 的 settings.json 骨架(MCP + A2A 双协议)

Cline 的 MCP 配置通常放在 settings.json 里,A2A 部分目前多数工具还没有原生字段,我的做法是用一个自定义的a2a块声明 Agent Card 地址和协作端点,再由 MCP 里的一个“桥接工具”去调用。骨架如下:

{ "taotoken": { "apiKey": "sk-你的TaoTokenKey", "baseUrl": "https://taotoken.net/api", "model": "你的模型ID" }, "mcpServers": { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "./workspace"], "env": { "TAOTOKEN_API_KEY": "sk-你的TaoTokenKey", "TAOTOKEN_BASE_URL": "https://taotoken.net/api" } }, "a2a-bridge": { "command": "node", "args": ["./a2a-bridge/index.js"], "env": { "A2A_AGENT_CARD": "http://localhost:8080/.well-known/agent.json", "A2A_PEER_ENDPOINT": "http://localhost:8081/a2a", "TAOTOKEN_API_KEY": "sk-你的TaoTokenKey", "TAOTOKEN_BASE_URL": "https://taotoken.net/api" } } }, "a2a": { "enabled": true, "agentCardPath": "./agent-card.json", "transport": "jsonrpc-http", "capabilities": ["task.receive", "task.delegate", "status.stream"] } }

几个关键点解释一下。taotoken块是全局模型通道,Cline 里如果支持自定义 provider,就把 baseUrl 指到 TaoToken 的 API 地址。mcpServers里我放了两个:一个是标准的 filesystem 工具,演示 MCP 怎么挂工具;另一个a2a-bridge是我自己写的小 Node 服务,它把 A2A 的 JSON-RPC 消息翻译成 MCP 工具调用,这样 Cline 就能通过 MCP 间接发起 A2A 协作。a2a块声明本 Agent 的能力,capabilities里task.delegate表示它能往外派活,task.receive表示它能接活。

3.2 CC Switch 的 config.toml 骨架

CC Switch 用 TOML,结构更清爽。同样把 TaoToken 作为统一通道,MCP 和 A2A 分块声明:

[provider.taotoken] api_key = "sk-你的TaoTokenKey" base_url = "https://taotoken.net/api" default_model = "你的模型ID" [mcp.filesystem] command = "npx" args = ["-y", "@modelcontextprotocol/server-filesystem", "./workspace"] [mcp.a2a_bridge] command = "node" args = ["./a2a-bridge/index.js"] [mcp.a2a_bridge.env] A2A_AGENT_CARD = "http://localhost:8080/.well-known/agent.json" A2A_PEER_ENDPOINT = "http://localhost:8081/a2a" TAOTOKEN_API_KEY = "sk-你的TaoTokenKey" TAOTOKEN_BASE_URL = "https://taotoken.net/api" [a2a] enabled = true agent_card = "./agent-card.json" transport = "jsonrpc-http" capabilities = ["task.receive", "task.delegate", "status.stream"]

两份骨架的差异只在语法,逻辑一致:TaoToken 管模型出口,MCP 管工具,A2A 管 Agent 间协作。你替换 Key 和模型 ID 后,先别急着跑,下一节讲怎么验证。

3.3 Agent Card 最小示例

A2A 靠 Agent Card 做“自我介绍”,JSON 格式,放在.well-known/agent.json或本地路径都行。最小可用版本:

{ "name": "local-executor", "description": "本地执行 Agent,负责文件操作与任务执行", "url": "http://localhost:8081/a2a", "version": "0.1.0", "capabilities": { "streaming": true, "pushNotifications": false }, "skills": [ { "id": "file-ops", "name": "文件操作", "description": "读写本地工作区文件" } ], "defaultInputModes": ["text"], "defaultOutputModes": ["text"] }

这个 Card 告诉别的 Agent:我叫 local-executor,在 8081 端口,能接文本任务,会文件操作,支持流式返回。协调者 Agent 拿到这个 Card,就知道能把文件类子任务派过来。

4. 验证请求:确认双协议链路真的通了

配置写完不代表通了,得用具体动作验证。我分三步:先验 MCP 工具调用,再验 A2A 单次任务派发,最后验双协议串联。

4.1 验证 MCP 工具是否挂载成功

在 Cline 里打开对话,输入一句会触发文件工具的话,比如“列出 workspace 目录下的文件”。如果 MCP 挂载成功,Cline 会弹出工具调用确认,你能看到它调用了filesystem的 list 方法。这一步通了,说明 MCP 层没问题,TaoToken 的 Key 也被正确读取(因为工具调用后的模型总结走的是 TaoToken 通道)。

如果没反应,先看 Cline 的 MCP 日志面板,常见是command路径不对或 npx 没装。用npx -y @modelcontextprotocol/server-filesystem ./workspace在终端手动跑一次,能起来再回插件里配。

4.2 验证 A2A 任务派发

启动你的 a2a-bridge 服务(node ./a2a-bridge/index.js),然后在 Cline 里输入“把‘读取 config.toml 并返回 provider 段’这个任务派给 local-executor”。如果桥接写对了,你会看到 bridge 日志里出现一条 JSON-RPC 请求,发往http://localhost:8081/a2a,对端返回任务 ID 和状态。

这里最容易卡在 Agent Card 地址。确认A2A_AGENT_CARD指向的 URL 能直接 curl 到:

curl http://localhost:8080/.well-known/agent.json

返回完整 JSON 才算通。如果 404,检查你的静态服务有没有把.well-known目录暴露出来。

4.3 验证双协议串联:一个任务走完 MCP + A2A

最终验证动作:让协调者 Agent 完成“派发一个文件读取任务给执行者,执行者用 MCP 文件工具读完后返回内容”。在 Cline 里输入:

“请通过 A2A 把任务‘读取 workspace/demo.txt 的内容’派给 local-executor,并返回结果。”

预期链路是:Cline → a2a-bridge(MCP 工具)→ A2A JSON-RPC → local-executor → MCP filesystem 工具 → 读文件 → 原路返回。你会在 bridge 日志里看到 A2A 请求和响应,在 Cline 对话里看到文件内容。这一步通了,双协议骨架就算立住了。

注意:如果 A2A 对端返回超时,先确认执行者 Agent 的 MCP 工具是否独立可用。A2A 只负责传话,真正干活的是对端的 MCP 工具,两层要分别验证。

5. 本篇常见错排查

配置跑不通,九成是下面几个坑。我按出现频率排。

第一个坑:Key 读不到。表现是模型调用报 401 或工具调用后总结失败。检查 settings.json / config.toml 里TAOTOKEN_API_KEY的拼写,以及是否被环境变量覆盖。Cline 有时会优先读系统环境变量,如果你在系统里设过一个旧的,会盖掉配置文件里的。用echo $TAOTOKEN_API_KEY确认。

第二个坑:MCP 服务起不来。表现是 Cline 里工具列表为空。多半是command用了相对路径或 npx 缓存问题。改成绝对路径,或者先npm install -g再直接调命令。filesystem 服务对路径敏感,./workspace要确保存在。

第三个坑:A2A Agent Card 解析失败。表现是 bridge 日志报invalid agent card。检查 JSON 有没有多余逗号,url字段是不是完整带端口。A2A 规范里capabilities和skills是必需字段,缺了会被拒。

第四个坑:端口冲突。8080 和 8081 常被占。用lsof -i :8080查一下,换端口后记得同步改 Agent Card 里的url和 bridge 的A2A_PEER_ENDPOINT。

第五个坑:模型 ID 写错。TaoToken 通道通了但模型报 not found,多半是 ID 大小写或版本号不对。回模型对话页复制准确 ID,别手打。

第六个坑:A2A 和 MCP 的职责混淆。有人把文件读取逻辑写进 A2A 的 bridge 里,结果执行者 Agent 反而没工具可用。记住:A2A 只传任务描述和结果,具体执行靠对端自己的 MCP 工具。bridge 里不要塞业务逻辑。

6. 把双协议骨架用起来:下一步怎么走

骨架搭通之后,你可以按自己的场景往里填。如果只是想让 Cline 里的 Agent 能调更多工具,那 MCP 层加 server 就够了,A2A 可以先不开。但如果你要做多 Agent 协作——比如一个负责检索、一个负责写代码、一个负责测试——那 A2A 的 Agent Card 和任务派发就是必须的。

长期跑编码类 Agent 的话,建议把 TaoToken 的 Coding Plan 用起来,地址 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,它针对长会话和频繁工具调用做了通道优化,比按次调用更稳。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有针对不同工具的配置示例,对照着改字段名就行。Key 管理还是回控制台 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,建议给不同 Agent 分不同 Key,方便排查是谁在调。

最后说个我踩过的坑:一开始我把所有 Agent 的 Key 都写成同一个,结果某个 Agent 疯狂重试把额度跑光了,其他 Agent 全挂。后来按 Agent 分 Key,再在 TaoToken 控制台看调用量,一眼就能定位是哪个节点在异常重试。双协议链路里,可观测性比配置本身更重要,先把日志和 Key 隔离做好,再往上堆 Agent。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询