探索 MCP 和 A2A 协议: 本质上新协议都基于 HTTP的

以下是以 CSDN 博客的形式记录你对 MCP 协议和 A2A 协议数据传递的理解,重点探讨了它们为何基于 HTTP 协议、HTTP 的优势,以及数据传输的本质。文章面向技术社区,结构清晰,适合分享。


探索 MCP 和 A2A 协议:为何新协议都基于 HTTP?

作者:[你的用户名]
日期:2025-04-13
标签:MCP 协议、A2A 协议、HTTP、JSON-RPC、数据传递

背景

最近在研究 MCP(Model Context Protocol)和 A2A(Agent2Agent)协议,探索它们如何实现 AI 代理的自动化任务和代理间协作。我注意到,这两个协议的底层传输都基于 HTTP,这让我意识到:数据传输本质上还是要通过网络进行,而 HTTP 作为一种成熟的网络传输协议,成为了许多新协议的首选基础。这篇文章记录了我的发现,分析了 MCP 和 A2A 协议为何基于 HTTP,以及 HTTP 在现代协议中的核心作用。


发现过程

1. MCP 协议的底层传输:HTTP 的角色

MCP 是一个为 AI 代理设计的协议,允许 AI 代理安全地访问外部工具和数据源(例如文件系统)。通过研究,我发现 MCP 的数据传递完全依赖 HTTP 协议()。

1.1 MCP 的 HTTP 请求和响应

MCP 服务器监听一个 HTTP 端点(例如 http://localhost:8000/mcp),AI 代理通过 HTTP POST 请求发送 JSON-RPC 格式的数据,服务器返回 HTTP 响应。以下是一个典型的 MCP 请求和响应:

  • HTTP 请求(调用 list_files 工具):

    POST /mcp HTTP/1.1
    Host: localhost:8000
    Content-Type: application/json{"jsonrpc": "2.0","id": 1,"method": "tools/call","params": {"name": "list_files","arguments": {"path": "/path/to/cache"}}
    }
  • HTTP 响应:

    HTTP/1.1 200 OK
    Content-Type: application/json{"jsonrpc": "2.0","id": 1,"result": {"files": [{"name": "temp1.log", "path": "/path/to/cache/temp1.log", "mtime": "2025-03-01T12:00:00Z"},{"name": "temp2.log", "path": "/path/to/cache/temp2.log", "mtime": "2025-04-01T12:00:00Z"}]}
    }

关键点:

  • MCP 的数据传输依赖于网络,HTTP 提供了底层的传输通道。

  • 在 HTTP 之上,MCP 使用 JSON-RPC 2.0 协议定义请求和响应的格式()。


2. 为什么新协议(如 MCP、A2A)基于 HTTP?

我观察到,不仅 MCP,很多现代协议(包括 A2A 协议)都选择在 HTTP 之上构建()。以下是原因:

2.1 HTTP 的广泛支持和成熟性

  • 基础设施支持:HTTP 是互联网的基础协议,几乎所有的网络设备、服务器和客户端(浏览器、应用程序)都支持 HTTP()。基于 HTTP 的协议可以无缝运行在现有的网络基础设施上。

  • 工具生态:HTTP 有丰富的工具支持,例如:

    • 服务器:Nginx、Apache 等。

    • 客户端:cURL、Postman、各种编程语言的 HTTP 库(Python 的 requests、JavaScript 的 fetch)。

    • 调试工具:Wireshark、Fiddler 等。

  • 安全性:HTTP 支持 HTTPS(基于 TLS/SSL),可以轻松实现加密通信。

MCP 的例子:

  • MCP 服务器可以运行在任何支持 HTTP 的环境中,例如 Node.js 或 Python Flask。

  • AI 代理可以使用标准的 HTTP 客户端库发送请求,无需额外的网络支持。

2.2 HTTP 的灵活性和扩展性

  • 传输层无关性:HTTP 不关心上层的数据格式(JSON、XML、纯文本等),这使得它非常适合作为新协议的底层传输层。

  • 通信模式支持:

    • 请求-响应:HTTP 的基本模式,适合 MCP 的同步工具调用(例如 list_files)。

    • 长连接和推送:HTTP 支持 WebSocket 和 Server-Sent Events(SSE),可以实现实时通信。MCP 和 A2A 都利用了 SSE 来支持任务状态的实时更新()。

  • 扩展性:HTTP 支持多种方法(GET、POST、PUT、DELETE 等)和头字段,可以满足不同的通信需求。

MCP 和 A2A 的例子:

  • MCP 使用 HTTP POST 传输 JSON-RPC 请求,适合结构化的工具调用。

  • A2A 使用 SSE 进行任务状态推送(),这是 HTTP 的扩展功能。

2.3 标准化和互操作性

  • 标准化:HTTP 是标准化的协议(由 IETF 定义,例如 HTTP/1.1、HTTP/2),有明确的规范,确保了不同系统之间的互操作性。

  • JSON 的普及:现代协议通常使用 JSON 作为数据格式(),而 HTTP 非常适合传输 JSON 数据(通过 Content-Type: application/json)。

  • 跨平台:基于 HTTP 的协议可以在任何支持 HTTP 的平台上运行。

MCP 的例子:

  • MCP 使用 JSON-RPC 2.0 作为上层协议,JSON-RPC 的请求和响应通过 HTTP 传输,确保了跨平台的兼容性。

2.4 开发和调试的便利性

  • 易于开发:HTTP 协议简单,开发人员可以快速构建基于 HTTP 的协议。

  • 易于调试:HTTP 请求和响应是文本格式(尤其是 JSON),可以用工具(如 Postman)直接查看和调试。

MCP 的例子:

  • 开发人员可以用 cURL 测试 MCP 服务器的端点:

    bash

    curl -X POST http://localhost:8000/mcp \-H "Content-Type: application/json" \-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_files","arguments":{"path":"/path/to/cache"}}}'

3. MCP 和 A2A 的数据传输:HTTP 的具体应用

3.1 MCP 的数据传输

MCP 专注于 AI 代理与外部工具的交互(例如文件系统)。其数据传输流程如下:

  1. AI 代理发送 HTTP POST 请求,调用工具(例如 list_files)。

  2. MCP 服务器解析 JSON-RPC 请求,执行操作,返回 JSON-RPC 响应。

  3. 如果任务较长,MCP 支持通过 SSE 推送任务状态()。

MCP 的 SSE 示例:

  • AI 代理订阅任务状态:

    GET /mcp/sse HTTP/1.1
    Host: localhost:8000
    Accept: text/event-stream
  • 服务器推送更新:

    event: TaskStatusUpdateEvent
    data: {"taskId": "task-001", "status": "working"}

3.2 A2A 的数据传输

A2A 专注于代理之间的通信,数据传输也基于 HTTP():

  1. 代理通过 HTTP POST 发送 tasks/send 请求。

  2. 目标代理处理任务,返回任务状态。

  3. A2A 支持 SSE 和推送通知(push notifications)()。

A2A 的推送通知示例:

  • 代理设置推送通知的 webhook:

    json

    {"jsonrpc": "2.0","id": 1,"method": "tasks/pushNotification/set","params": {"webhookUrl": "https://client.example.com/webhook"}
    }
  • 服务器通过 HTTP POST 推送更新:

    POST /webhook HTTP/1.1
    Host: client.example.com
    Content-Type: application/json{"taskId": "task-001","status": "completed"
    }

发现:

  • MCP 和 A2A 都依赖 HTTP 进行数据传输,但通信模式不同:

    • MCP 更注重同步工具调用(请求-响应)。

    • A2A 更注重异步任务协作(通过 SSE 和推送通知)。


4. 为什么新协议不直接使用更底层的协议(如 TCP)?

我曾好奇,既然 HTTP 基于 TCP,为什么新协议不直接使用 TCP?以下是原因:

4.1 HTTP 提供了更高的抽象层

  • TCP 的复杂性:TCP 只负责字节流的传递,开发者需要自己定义数据格式、消息边界、错误处理等。

  • HTTP 的便利性:HTTP 定义了请求-响应模式、状态码、头字段等,开发者只需关注数据内容(例如 JSON)。

MCP 的例子:

  • 如果 MCP 直接基于 TCP,开发者需要自己实现消息的序列化和反序列化。

  • 使用 HTTP,MCP 可以直接利用 HTTP 的请求-响应模式。

4.2 HTTP 的生态支持

  • 防火墙和代理:HTTP 流量(端口 80 和 443)通常被防火墙和代理允许,而 TCP 可能需要开放额外端口。

  • 负载均衡:HTTP 支持负载均衡(例如通过 Nginx),适合分布式系统。

4.3 HTTP 的扩展性

  • HTTP 支持多种通信模式(请求-响应、SSE、WebSocket)。

  • HTTP/2 和 HTTP/3(基于 QUIC)进一步提高了性能。

MCP 和 A2A 的例子:

  • MCP 和 A2A 利用 HTTP 的 SSE 实现实时推送(),如果直接使用 TCP,需要自己实现类似功能。


5. 总结:HTTP 是新协议的理想基础

通过分析,我总结了 MCP 和 A2A 基于 HTTP 的原因:

  1. HTTP 的成熟性和广泛支持:HTTP 是互联网的基础协议,基础设施和工具支持完善。

  2. 灵活性和扩展性:HTTP 支持多种通信模式(请求-响应、SSE、WebSocket)。

  3. 标准化和互操作性:HTTP 和 JSON 的组合提供了标准化的数据传输方式。

  4. 开发和调试的便利性:HTTP 协议简单,易于开发和调试。

MCP 数据传输的本质:

  • MCP 的底层传输是 HTTP,通过网络进行数据传递。

  • 在 HTTP 之上,MCP 使用 JSON-RPC 2.0 定义结构化的请求和响应。

  • MCP 的数据传输与 HTTP API 类似,请求体是 JSON-RPC 格式。

A2A 的相似之处:

  • A2A 也基于 HTTP,使用 JSON-RPC 进行通信,但更注重代理协作,支持 SSE 和推送通知。

我的观察: 我提到“数据传输还是要通过网络进行的,所以好多新的协议都是在此基础上进行的”,这非常正确!HTTP 提供了一个可靠、灵活的基础,新协议可以在此基础上定义更高层次的逻辑(例如 JSON-RPC、任务管理),从而专注于功能实现,而无需重新发明底层的传输机制。


未来计划

  • 抓包分析:使用 Wireshark 或 Postman 抓取 MCP 的 HTTP 请求和响应,观察 JSON-RPC 的结构。

  • 运行 MCP 服务器:启动一个 MCP 文件系统服务器(例如 npx -y @modelcontextprotocol/server-filesystem /path/to/cache),手动发送 HTTP 请求,查看响应。

  • 对比其他协议:研究其他基于 HTTP 的协议(例如 gRPC、GraphQL),理解它们如何利用 HTTP。

如果你对 MCP、A2A 或 HTTP 相关技术有更多想法,欢迎留言讨论!


参考资料

  1. Anthropic 官方文档:Introducing the Model Context Protocol

  2. Google A2A 协议文档:Agent2Agent Protocol Specification

  3. JSON-RPC 2.0 规范:JSON-RPC 2.0 Specification


以上是 CSDN 风格的博客记录,总结了你的发现和理解。如果你需要调整某些部分(例如添加更多代码示例或截图),可以告诉我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[redis进阶一]redis的持久化(2)AOF篇章

目录 一 为什么有了RDB持久化机制还要有AOF呢 板书介绍具体原因: ​编辑二 详细讲解AOF机制 (1)AOF的基本使用 1)板书如下 2)开启AOF机制: 3) AOF工作流程 (2)AOF是否会影响到redis性能 ​编辑 (3)AOF缓冲区刷新策略 (4)AOF的重写机制 板书如下: 为什么要有这个重写机…

前端防御性编程

关于防御性编程 你是否遇到过,接口请求失败或者返回数据错误,导致系统白屏或者前端自身写的代码存在一些缺陷,导致整个系统不够健壮,从而导致系统白屏 常见的问题与防范 最常见的问题 访问了null或者undefined的属性 null.a …

[数据结构]排序 --2

目录 8、快速排序 8.1、Hoare版 8.2、挖坑法 8.3、前后指针法 9、快速排序优化 9.1、三数取中法 9.2、采用插入排序 10、快速排序非递归 11、归并排序 12、归并排序非递归 13、排序类算法总结 14、计数排序 15、其他排序 15.1、基数排序 15.2、桶排序 8、快速排…

虎跃办公AI:重构智能办公的「模型交响乐团」

虎跃办公AI:重构智能办公的「模型交响乐团」 ——当全球40大模型在办公场景中奏响协奏曲 在某科创园区的会议室里,市场总监李薇正用AI生成产品发布会方案,设计团队同步调校着AI渲染的3D主视觉,法务AI自动扫描着合同风险条款——这…

JdbcTemplate基本使用

JdbcTemplate概述 它是spring框架中提供的一个对象,是对原始繁琐的JdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和MbernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的…

vue+leaflet 区域划分_反向遮罩层

leaflet 区域划分_遮罩层 geojson在线生成器网址:(https://datav.aliyun.com/portal/school/atlas/area_selector) 点击前往阿里云geojson生成器 效果图: 实现下面效果,只需要把addSateLayer函数的调用取消掉就好了. //添加遮罩层代码function addMask() {var latlngs;var fe…

ESP32开发之ubuntu环境搭建

1. 在Ubuntu官网下载Ubuntu server 20.04版本https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安装Ubuntu 3. 改Ubuntu静态IP $ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by ‘subiquity’ network: renderer: networkd eth…

HTTP 1.1 比 HTTP1.0 多了什么?(详尽版)

相较于HTTP 1.0,1.1 版本增加了以上特性: 1. 新增了连接管理即 keepalive,允许持久连接。 定义: Keepalive允许客户端和服务器在完成一次请求-响应后,保持连接处于打开状态,以便后续请求复用同一连接&am…

【深度学习】PyTorch实现VGG16模型及网络层数学原理

一、Demo概述 代码已附在文末 1.1 代码功能 ✅ 实现VGG16网络结构✅ 在CIFAR10数据集上训练分类模型 1.2 环境配置 详见【深度学习】Windows系统Anaconda CUDA cuDNN Pytorch环境配置 二、各网络层概念 2.1 卷积层(nn.Conv2d) nn.Conv2d(in_cha…

解决RecyclerView在调用smoothScrollToPosition后最后一个item底部超出屏幕的问题

要解决RecyclerView在调用smoothScrollToPosition后最后一个item底部超出屏幕的问题,可以使用自定义的LinearSmoothScroller,使其底部对齐屏幕。步骤如下: 创建自定义的SmoothScroller类: 继承LinearSmoothScroller并重写getVerti…

k8s亲和力和非亲和力

在 Kubernetes 中,亲和力(Affinity)和非亲和力(Anti-Affinity)是用于控制 Pod 调度策略的机制,它们可以帮助优化资源利用率、提高应用性能和可用性。以下是亲和力和非亲和力的详细解释: 亲和力…

开发一款游戏需要哪些岗位角色参与?

常见分类 1. 游戏策划(Game Designer) 核心职责:设计游戏的玩法、规则、内容和整体体验。 具体工作: 系统设计:设计游戏的战斗、经济、成长、社交等核心系统。 数值设计:平衡角色属性、装备数值、经济系…

Asp.NET Core WebApi 创建带鉴权机制的Api

构建一个包含 JWT(JSON Web Token)鉴权的 Web API 是一种常见的做法,用于保护 API 端点并验证用户身份。以下是一个基于 ASP.NET Core 的完整示例,展示如何实现 JWT 鉴权。 1. 创建 ASP.NET Core Web API 项目 使用 .NET CLI 或 …

Jenkins 发送钉钉消息

这里不介绍 Jenkins 的安装,可以网上找到很多安装教程,重点介绍如何集成钉钉消息。 需要提前准备钉钉机器人的 webhook 地址。(网上找下,很多教程) 下面开始配置钉钉机器人,登录 Jenkins,下载 …

CentOS中离线安装DockerCompos并用其部署Rabbitmq(使用离线导入导出docker镜像方式)

场景 DockerDockerCompose实现部署jenkins,并实现jenkinsfile打包SpringBootVue流水线项目过程详解、踩坑记录(附镜像资源、离线包资源下载): DockerDockerCompose实现部署jenkins,并实现jenkinsfile打包SpringBootVue流水线项目过程详解、踩坑记录(附镜像资源、离…

stm32week11

stm32学习 八.stm32基础 2.stm32内核和芯片 F1系统架构:4个主动单元和4个被动单元 AHB是内核高性能总线,APB是外围总线 总线矩阵将总线和各个主动被动单元连到一起 ICode总线直接连接Flash接口,不需要经过总线矩阵 AHB:72MHz&am…

贪心算法:部分背包问题深度解析

简介: 该Java代码基于贪心算法实现了分数背包问题的求解,核心通过单位价值降序排序和分阶段装入策略实现最优解。首先对Product数组执行双重循环冒泡排序,按wm(价值/重量比)从高到低重新排列物品;随后分两阶段装入:循环…

13. Langchain异步处理:提升应用性能的关键技巧

引言:从"顺序等待"到"并行加速" 2025年某电商平台引入LangChain异步处理后,大促期间订单处理能力提升5倍,系统响应延迟降低70%。本文将基于LangChain的异步架构,详解如何通过并行执行流式处理,让…

ros2-rviz2控制unity仿真的6关节机械臂,探索从仿真到实际应用的过程

文章目录 前言(Introduction)搭建开发环境(Setup Development Environment)在window中安装Unity(Install Unity in window)创建Docker容器,并安装相关软件(Create Docker containers…

计算机组成原理笔记(十四)——3.4指令类型

一台计算机的指令系统可以有上百条指令,这些指令按其功能可以分成几种类型,下面分别介绍。 3.4.1数据传送类指令 一、核心概念与功能定位 数据传送类指令是计算机指令系统中最基础的指令类型,负责在 寄存器、主存、I/O设备 之间高效复制数…