先说个我最近在团队里遇到的真实情况。我们内部接了好几个Agent流程,一开始只是让它们读文档、查数据,跑得很顺。后来有同学把写操作也接进了MCP Server,结果某个测试场景里,Agent在跟人聊天时被一段“隐藏指令”带偏,顺手改掉了另一套环境里的配置。虽然没造成大事故,但复盘时我们都意识到一件事:AI Agent的能力边界往前走了,安全边界却还停在传统API时代。这让“MCP与A2A到底怎么定义新边界”成了我们这轮评审会讨论最久的话题。
如果你的日常工作也涉及AI Agent开发、智能体协作或企业系统接入,那你一定绕不开这两个缩写。MCP把数据、工具、资源统一成了模型可调用的标准接口,A2A则负责解决Agent与Agent之间的协作交互。我能理解很多人把它们当成“继HTTP之后的AI通信标准”来看,但真正落地时,更值得关心的其实是权限、信任、审计这些老问题在新协议下会被放大成什么样。这篇文章我会结合项目实践,把MCP与A2A的定位、威胁面、加固手段和排查经验一次讲清楚,尽量少讲空泛概念,多给能直接用的参考。
1. 先讲清楚协议:MCP到底管什么,A2A到底管什么
很多朋友第一次接触MCP和A2A时,会觉得它们功能有点像,都是“连接”用的。我建议别从功能上看,要从问题的边界上看。MCP管的是模型和外部工具之间的交互,A2A管的是智能体和智能体之间的交互。两者一个向下接资源,一个横向连同伴,一起构成整个Agent生态的通信底座。
1.1 MCP不是插件框架,它是Agent的“外设总线”
MCP的全称是Model Context Protocol,2024年底Anthropic开源的那套套路,现在基本成了模型接入外部工具的通用语言。你可以把它想象成给大模型装了一个USB-C接口:数据库、文件系统、代码仓库、第三方API这些原本格式各异的外部能力,经过MCP Server包装后,都能用同一种方式被模型调用。
协议本身并不复杂,底层用JSON-RPC 2.0做消息交互,传输层最常见的是stdio和Streamable HTTP。关键是它把“工具调用”这件事标准化了。以前我们接一个外部数据源,可能要专门写一套工具类、处理一套鉴权、再加一个函数文档;现在只要实现一个MCP Server,向客户端暴露工具、资源和提示词,模型侧会通过标准的“列出工具、调用工具、接收结果”流程完成任务。
这里要强调一个常见误区:MCP不是插件框架。插件往往定义的是UI层面的扩展位置,而MCP定义的是运行时能力边界。换句话说,MCP关心的是“模型以外的东西怎么进到模型”,而不是“界面里多一块面板”。所以你在设计MCP Server时,核心工作不是写钩子,而是定义清楚哪些Capability可以被暴露、暴露给谁、调用后会产生什么副作用。
更直白一点:MCP等于把“外部世界”抽象成了模型眼里的一组工具,让模型在推理时可以像人打开App一样去查资料、去操作后台系统。但同时它也把过去人工审批才做的敏感操作,变成了自动判断后就能执行的行动分支。
1.2 A2A的意义:让智能体之间谈协作,而不是直接调私有接口
如果说MCP把工具标准化了,那A2A(Agent2Agent)解决的就是另一个问题:Agent之间如何发现对方、如何互发任务、如何追踪任务结果。协议最早由Google联合多家厂商发起,起了一个很直白的名字,Agent to Agent,思路也很直白:我无法预知你会做成什么样,但我们先约定好怎么对话。
A2A的核心概念大致有Agent Card、Task、Message、Artifact。Agent Card相当于智能体的“名片”,描述自己能干什么、需要什么权限、长什么样;Task是任务槽位,包含一个任务要处理的状态;Message是传递的信息内容;Artifact是任务完成后产生的产出物。整套机制更像项目组里的协作流程,而不是简单的“我调你的接口”。
所以MCP适合“人/模型→工具”的纵向接法,A2A适合“智能体→智能体→智能体”的横向协作。一个典型的场景是:你有一个负责所有数据分析的Agent,它内部通过MCP去连各个数据库,但你自己并不直接操作它;你的项目经理Agent通过A2A给它下发任务,数据分析Agent跑完后通过A2A把结果工件回传,整个流程跨系统、跨团
