探索 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.pswp.cn/pingmian/76679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76679.shtml
英文地址,請注明出處:http://en.pswp.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設備 之間高效復制數…