ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI Agent 的 TCP/IP 时刻:MCP 协议深度解析

AI Agent 的 TCP/IP 时刻:MCP 协议深度解析 AI Agent 的 TCP/IP 时刻MCP 协议深度解析为什么说 MCP 是 Agent 时代的 USB-C7 月 28 日最大架构重构改了什么Java 开发者怎么上手一文讲透。一、一个问题你的 Agent 想调工具到底有多难假设你正在开发一个企业业务管理 Agent它需要查 CRM 系统里的客户信息调地图 API 计算距离从知识库检索产品资料发消息通知销售跟进没有 MCP 之前每接一个工具你得写一套适配代码鉴权、序列化、错误处理、超时重试……4 个工具 4 套逻辑10 个工具 10 套。更要命的是换了 Agent 框架这套全得重写。这就是 N×M 问题N 个 Agent 乘以 M 个工具每对组合都是一次硬编码。MCP 要做的事很简单——把 N×M 降维成 NM。Agent 只需实现一个 MCP Client工具只需实现一个 MCP Server彼此通过标准协议对话。就像 USB-C 一样不管你是什么设备插上就能用。二、MCP 核心架构三层 三原语2.1 三层架构┌──────────────────────────────────────────┐ │ Host (宿主应用) │ │ Claude Desktop / IDE / Agent Runtime │ │ │ │ ┌──────────┐ ┌──────────┐ ┌────────┐ │ │ │MCP Client│ │MCP Client│ │ LLM │ │ │ │ (A) │ │ (B) │ │ │ │ │ └────┬─────┘ └────┬─────┘ └────────┘ │ └───────┼──────────────┼──────────────────┘ │ │ 标准协议 标准协议 │ │ ┌───────▼──────┐ ┌────▼───────────┐ │ MCP Server │ │ MCP Server │ │ (CRM 工具) │ │ (地图服务) │ └──────────────┘ └────────────────┘Host运行 AI 应用的宿主比如 Claude Desktop、VS Code、你的 Agent RuntimeMCP ClientHost 内部的协议客户端负责与 Server 建立连接、发现能力、转发调用MCP Server封装具体工具/数据源的轻量服务通过标准协议暴露能力关键点Client 和 Server 是 1:1 关系。一个 Host 可以有多个 Client每个 Client 连一个 Server。2.2 三原语Tools / Resources / PromptsMCP 把所有业务能力归纳为三类原语Primitive原语作用类比典型场景Tools让模型执行动作函数调用查订单、发通知、调 APIResources让模型读取数据文件/数据库读取知识库检索、配置读取Prompts预设提示词模板快捷指令帮我分析这个客户的标准提示词三原语的设计哲学Tools 写世界Resources 读世界Prompts 教模型怎么用。三、协议底层JSON-RPC 2.0MCP 选择 JSON-RPC 2.0 作为消息格式原因很直接极轻量任何语言零门槛解析严格区分 Request-Response 和 Notification内置错误码体系不用自己发明一次典型的工具调用流程// Client → Server: 调用工具{jsonrpc:2.0,id:1,method:tools/call,params:{name:query_customer,arguments:{customer_id:C-001}}}// Server → Client: 返回结果{jsonrpc:2.0,id:1,result:{content:[{type:text,text:客户名称XX科技业务阶段方案验证预计金额120万}]}}四、7 月 28 日最大重构从有状态到无状态2026 年 7 月 28 日MCP 发布了诞生以来最大规模的架构重构。核心变化取消协议层 Session改为每次请求携带完整处理信息。4.1 旧版2025-11-25怎么工作的Client Server │ │ │── initialize ────────────────→│ ← 握手 │←─ Mcp-Session-Id: abc123 ────│ ← 返回会话ID │ │ │── tools/list (Session:abc) ─→│ ← 后续请求必须带Session │←─ [tool1, tool2, ...] ───────│ │ │ │── tools/call (Session:abc) ─→│ ← 同一Session粘滞路由 │←─ result ────────────────────│问题来了问题具体表现Pod 重启 会话丢失K8s 滚动更新所有进行中的任务断线必须粘滞路由负载均衡器要记住哪个请求去哪个实例扩容无效加了 10 个副本流量还黏在原来那个上共享状态存储多实例需要 Redis/DB 共享 Session增加延迟4.2 新版2026-07-28怎么工作的Client Server (任意实例) │ │ │── tools/call ────────────────→│ ← 无握手直接发 │ Header: Mcp-Protocol-Version│ ← 版本随请求走 │ Body._meta: client info │ ← 客户端身份随请求走 │←─ result ────────────────────│ ← 任何实例都能处理 │ │ │── resources/read ───────────→│ ← 新请求任意实例 │ Header: Mcp-Method: ... │ ← 方法名走Header │←─ result ────────────────────│核心变化对照表关注点旧版 (2025-11-25)新版 (2026-07-28)启动initialize→initialized握手不再有初始化握手协议状态建立一次 Session每个请求自包含Client 上下文初始化时交换进入请求_meta路由按 Session ID 粘滞任意实例均可处理Server 能力初始化响应返回按需调server/discover请求路由提示Gateway 检查 JSON-RPC BodyMcp-MethodMcp-NameHeader4.3 这不是性能优化是产业分工的划界用一句更直白的话说旧版像去银行必须先开一个房间办事期间房间一直占着柜员换班就得从头再来。新版是每次办业务自带全套证件任何一个窗口都能接单人多了就多开窗口。MCP 工程负责人 Mazin Gilbert 说得很直接“有状态 Session 是企业从试点走向数万 Agent 规模部署的首要障碍。”但注意协议无状态 ≠ 应用无状态。你的业务仍然需要状态——购物车、任务进度、用户授权——只是这些状态不再由协议层管理而是由你自己显式管理。// 应用状态通过 Handle 传递不是 Session{tool:add_item,arguments:{basket_id:opaque-handle-from-create-basket,sku:SKU-42}}五、MCP vs A2A别搞混了同一天A2A 协议庆祝一周年。两者经常被拿来对比但它们根本不在同一层┌──────────────────────────────────────────┐ │ A2A (Agent-to-Agent) │ │ Agent 之间怎么发现、委派、协作 │ │ │ │ ┌──────────┐ ┌──────────┐ │ │ │ Agent A │─── Task ─→│ Agent B │ │ │ │ (采购主管)│ │(价格分析) │ │ │ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ ┌────▼─────┐ ┌────▼─────┐ │ │ │MCP Client│ │MCP Client│ │ │ └────┬─────┘ └────┬─────┘ │ └───────┼──────────────────────┼───────────┘ │ MCP 协议 │ ┌───────▼──────┐ ┌────────▼─────┐ │ MCP Server │ │ MCP Server │ │ (CRM 系统) │ │ (价格数据库) │ └──────────────┘ └──────────────┘维度MCPA2A解决什么Agent ↔ 工具/数据Agent ↔ Agent通信单元JSON-RPC 请求/响应Task Artifact发现机制server/discoverAgent Card适用场景单 Agent 调工具多 Agent 协作关系单个 Agent 的手Agent 之间的嘴简单记MCP 给 Agent 配工具A2A 让 Agent 找同事。两者是上下层关系不是竞争。六、Java 开发者上手Spring AI MCP6.1 搭建一个 MCP Server依赖dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-mcp-server-webmvc/artifactId/dependency配置spring:application:name:crm-mcp-serverai:mcp:server:name:crm-mcp-serverversion:1.0.0instructions:CRM系统工具集支持客户查询、业务管理定义工具ServicepublicclassCrmTools{Tool(description根据客户ID查询客户详情)publicCustomerInfoqueryCustomer(ToolParam(description客户ID)StringcustomerId){// 实际调用 CRM API 或数据库returndataService.getCustomer(customerId);}Tool(description查询指定销售人员名下的业务列表)publicListBusinessItemlistBusinessItems(ToolParam(description销售姓名)StringsalesName){returndataService.getBusinessBySales(salesName);}}启动后这个 Server 就通过 HTTP 暴露了标准 MCP 接口任何 MCP Client 都能发现和调用。6.2 在 Agent 中使用 MCP Client依赖dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-mcp-client/artifactId/dependency配置连接spring:ai:mcp:client:servers:crm:url:http://localhost:8081/mcpmap:url:http://localhost:8082/mcp在 Agent 中调用RestControllerpublicclassAgentController{privatefinalChatClientchatClient;publicAgentController(ChatClient.Builderbuilder,ListMcpSyncClientmcpClients){// MCP Client 自动发现工具注入到 ChatClientthis.chatClientbuilder.defaultTools(mcpClients.toArray()).build();}GetMapping(/ask)publicStringask(RequestParamStringquestion){returnchatClient.prompt().user(question).call().content();}}用户问帮我查 C-001 客户的业务情况Agent 自动发现 CRM Server 的queryCustomer和listBusinessItems工具编排调用返回结果。6.3 新版无状态适配要点如果你的 MCP Server 要适配 2026-07-28 新规范删除 initialize/initialized 握手逻辑不再维护 Session协议版本走 HeaderMcp-Protocol-Version: 2026-07-28Client 信息走请求_meta字段不再依赖初始化交换Server 能力通过server/discover按需获取不再在初始化响应返回应用状态通过显式 Handle 管理如basket_id、job_id不再依赖 Session幂等性由应用层保证无状态下重试变频繁下单/转账等工具必须做去重七、迁移避坑清单坑怎么避直接删 Redis先建状态归属清单证明里面只有 Session 数据协议无状态 不需要存储应用状态仍然需要只是换了管理方不做幂等下单类工具必须加去重键 幂等窗口信任 Client Metadata每次请求都要鉴权校验不信任 Client 自报的身份永久缓存 Server 能力server/discover结果要有过期时间不做跨实例测试Round-robin 不够必须强制请求落到不同实例验证一步到位切新版本先做双版本分流层逐步切流八、生态现状10 万 Server4 亿次月下载几个关键数据全球10 万注册 MCP Server 在运行SDK 月度下载量突破4 亿次GitHub MCP Server 已提前适配新规范阿里云、腾讯云、百度云 MCP 广场已同步接入Anthropic 已将协议捐赠给Linux 基金会企业落地方面Gartner 预计到 2026 年底40% 的企业应用将集成任务专用 Agent——而 MCP 就是这些 Agent 连接工具的标准接口。九、总结MCP 对 Java 开发者意味着什么Agent 不再是玩具MCP 让 Agent 从能聊天变成能干活工具接入从硬编码变成标准化协议Java 生态全面跟进Spring AI 已经提供 MCP Client/Server StarterJava 开发者可以零门槛接入无状态是规模化的前提7 月 28 日重构不是可选升级是生产环境的必选项——想在 K8s 上跑 MCP这是前提协议层做减法应用层做加法状态管理、幂等性、鉴权这些责任回归应用层反而是 Java 开发者最擅长的领域MCP 不是另一个 API 框架它是 Agent 连接世界的标准接口。就像 HTTP 定义了 Web 的通信方式MCP 正在定义 Agent 的通信方式。相关阅读MCP 官方规范Spring AI MCP 文档MCP Conformance Test Framework
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进