理解 MCP 協議的數據傳遞:HTTP 之上的一層“殼子

以下是以 CSDN 博客的風格記錄你對 MCP 協議數據傳遞的理解和發現,內容涵蓋了 MCP 協議基于 HTTP 的本質、JSON-RPC 的“殼子”作用,以及為什么熟悉 HTTP 協議就足以理解 MCP 的數據傳遞。文章面向技術社區,結構清晰,適合分享。


理解 MCP 協議的數據傳遞:HTTP 之上的一層“殼子”

作者:[你的用戶名]
日期:2025-04-13
標簽:MCP 協議、HTTP、JSON-RPC、數據傳遞、AI 代理

背景

最近在研究 MCP(Model Context Protocol)協議,探索如何通過它實現 AI 代理的自動化任務,例如清理緩存文件夾。起初,我對 MCP 的數據傳遞機制感到困惑,因為我對數據傳遞的理解主要停留在 HTTP 協議的層面(例如 REST API 的 GET、POST 請求)。通過深入分析,我發現 MCP 協議的底層傳輸仍然是 HTTP,只不過在 HTTP 之上“套了一層殼子”——JSON-RPC 2.0 協議。這篇文章記錄了我的發現和理解,分享給對 MCP 協議感興趣的朋友。


發現過程

1. MCP 協議的底層傳輸:HTTP

MCP 協議是一個為 AI 代理設計的協議,允許 AI 代理安全地訪問外部工具和數據源(例如文件系統)。通過研究,我發現 MCP 的數據傳遞完全依賴 HTTP 協議()。

1.1 MCP 的 HTTP 請求和響應

MCP 服務器監聽一個 HTTP 端點(例如 http://localhost:8000/mcp),AI 代理通過 HTTP POST 請求發送數據,服務器返回 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"}]}
    }

1.2 與 HTTP API 的對比

如果你熟悉 HTTP API(例如 REST API),MCP 的數據傳遞模式非常相似:

  • HTTP API:通過 URL 和 HTTP 方法定義操作,例如 GET /files?path=/path/to/cache 獲取文件列表。

  • MCP:通過 HTTP POST 發送 JSON 數據,操作定義在 JSON 的 method 字段中(例如 tools/call)。

發現:

  • MCP 的底層傳輸就是 HTTP,與我熟悉的 HTTP API 沒有本質區別。請求是 HTTP POST,響應是 HTTP 200 OK,數據格式是 JSON。


2. MCP 的“殼子”:JSON-RPC 2.0

雖然 MCP 的底層是 HTTP,但它在 HTTP 之上定義了一層 JSON-RPC 2.0 協議(),這就是所謂的“殼子”。

2.1 JSON-RPC 的結構

JSON-RPC 是一種輕量級的遠程過程調用(RPC)協議,通過 JSON 格式定義請求和響應。MCP 使用 JSON-RPC 來封裝 AI 代理與 MCP 服務器之間的通信。

  • JSON-RPC 請求:

    json

    {"jsonrpc": "2.0","id": 1,"method": "tools/call","params": {"name": "list_files","arguments": {"path": "/path/to/cache"}}
    }
    • jsonrpc:協議版本。

    • id:請求 ID,用于匹配響應。

    • method:要調用的方法(例如 tools/call)。

    • params:方法參數。

  • JSON-RPC 響應:

    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"}]}
    }
    • result:成功時的返回結果。

    • 如果失敗,返回 error 字段。

2.2 JSON-RPC 與 HTTP API 的對比

  • HTTP API:操作通過 URL 和 HTTP 方法定義,例如 GET /files 獲取文件列表,DELETE /files/temp1.log 刪除文件。

  • JSON-RPC:操作通過 JSON 的 method 字段定義(例如 tools/call),參數通過 params 傳遞,URL 通常是固定的(例如 /mcp)。

等價轉換:

  • JSON-RPC 請求:

    json

    {"jsonrpc": "2.0","id": 1,"method": "tools/call","params": {"name": "list_files","arguments": {"path": "/path/to/cache"}}
    }
  • 等價的 HTTP API 請求:

    GET /files?path=/path/to/cache HTTP/1.1
    Host: localhost:8000

發現:

  • JSON-RPC 只是 HTTP 請求體的一種特定格式。method 相當于 HTTP API 的 URL 路徑,params 相當于請求體或查詢參數。熟悉 HTTP API 后,JSON-RPC 非常容易理解。


3. 為什么熟悉 HTTP 協議就夠了?

通過對比,我發現 MCP 協議的數據傳遞本質上就是 HTTP 傳輸,只不過請求體的內容是 JSON-RPC 格式。

3.1 MCP 的數據傳遞流程

以清理緩存文件夾的任務為例:

  1. AI 代理發送 HTTP POST 請求,調用 list_files 工具,獲取文件列表。

  2. MCP 服務器返回 HTTP 響應,包含文件列表(JSON 格式)。

  3. AI 代理解析響應,篩選出超過 30 天的文件(例如 temp1.log)。

  4. AI 代理發送另一個 HTTP POST 請求,調用 delete_file 工具。

  5. MCP 服務器返回 HTTP 響應,確認刪除成功。

HTTP 視角:

  • 整個流程與 HTTP API 的請求-響應模式完全一致。

  • 唯一不同的是,MCP 的請求體是 JSON-RPC 格式,而不是普通的 JSON 數據。

3.2 熟悉 HTTP 后需要額外關注的點

雖然熟悉 HTTP 協議就足夠理解 MCP 的數據傳遞,但需要額外關注以下兩點:

  1. JSON-RPC 格式:

    • 理解 JSON-RPC 的核心字段(method、params、result 等)。

    • 把 method 看作 HTTP API 的 URL 路徑,把 params 看作請求體。

  2. MCP 的方法和工具:

    • MCP 定義了一些方法(例如 tools/call)和工具(例如 list_files、delete_file)。

    • 可以通過 tools/list 請求獲取可用工具:

      json

      {"jsonrpc": "2.0","id": 1,"method": "tools/list","params": {}
      }

發現:

  • 熟悉 HTTP 協議后,只需要幾分鐘就能學會 JSON-RPC 的格式和 MCP 的方法/工具,MCP 的數據傳遞就完全可以理解。


4. MCP 的“殼子”帶來的額外功能

雖然 MCP 是在 HTTP 之上“套了個殼子”,但這個殼子帶來了一些額外的功能:

  1. 結構化的通信:

    • JSON-RPC 提供了統一的請求和響應格式(method、params、result),比 HTTP API 更結構化。

    • AI 代理可以更容易地解析和處理數據。

  2. 支持復雜通信模式:

    • MCP 支持 Server-Sent Events(SSE)(),用于實時推送任務狀態。

    • MCP 支持異步任務,AI 代理可以通過輪詢或 SSE 獲取任務進度。

  3. 工具化的接口:

    • MCP 通過工具(例如 list_files)提供標準化的接口,AI 代理可以直接調用,無需關心底層實現。

SSE 示例:

  • AI 代理訂閱任務狀態:

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

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

發現:

  • SSE 是 HTTP 的擴展功能,如果熟悉 HTTP API 的 SSE,MCP 的實時推送模式也很容易理解。


5. 對比 A2A 協議:同樣的“殼子”

A2A(Agent2Agent)協議也基于 HTTP 和 JSON-RPC(),但用途不同:

  • MCP:AI 代理與外部工具的交互(例如文件系統),通過 tools/call 調用工具。

  • A2A:代理之間的通信,通過 tasks/send 提交任務,支持協作()。

A2A 的 HTTP 請求示例:

  • 請求:

    POST /a2a HTTP/1.1
    Host: localhost:9000
    Content-Type: application/json{"jsonrpc": "2.0","id": 1,"method": "tasks/send","params": {"taskId": "task-001","message": {"role": "user","parts": [{"type": "TextPart", "value": "List files in /path/to/cache"}]}}
    }
  • 響應:

    HTTP/1.1 200 OK
    Content-Type: application/json{"jsonrpc": "2.0","id": 1,"result": {"taskId": "task-001","status": "working"}
    }

發現:

  • A2A 和 MCP 都基于 HTTP,數據傳遞方式相同(HTTP POST + JSON-RPC)。

  • A2A 的“殼子”更注重任務管理和代理協作,而 MCP 的“殼子”更注重工具調用。


總結

通過這次研究,我對 MCP 協議的數據傳遞有了更清晰的理解:

  1. MCP 的底層是 HTTP:MCP 的數據傳遞完全依賴 HTTP,與 HTTP API 的請求-響應模式一致。

  2. JSON-RPC 是“殼子”:MCP 在 HTTP 之上使用 JSON-RPC 2.0 協議,定義了結構化的請求和響應格式。

  3. 熟悉 HTTP 就夠了:如果你已經熟悉 HTTP 協議(例如 POST 請求、JSON 數據、SSE),只需要額外理解 JSON-RPC 的格式和 MCP 的方法/工具,就能完全掌握 MCP 的數據傳遞。

未來計劃:

  • 抓包分析 MCP 的 HTTP 請求,深入理解 JSON-RPC 的細節。

  • 探索 A2A 協議的通信模式(例如 SSE 和推送通知),學習更復雜的協作場景。

如果你對 MCP 協議或 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/diannao/78917.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78917.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78917.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于ssm網絡游戲推薦系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 當今社會進入了科技進步、經濟社會快速發展的新時代。國際信息和學術交流也不斷加強,計算機技術對經濟社會發展和人民生活改善的影響也日益突出,人類的生存和思考方式也產生了變化。傳統網絡游戲管理采取了人工的管理方法,但這種管理方…

vue入門:指令

文章目錄 vue的內置指令說明: 自定義指令 vue的內置指令 Vue 指令的本質是: 聲明式的 DOM 操作接口(隱藏底層 JavaScript 代碼)。響應式數據的綁定媒介(連接數據和視圖)。模板編譯的標記(最終…

oracle 索引失效

在 Oracle 11g 中,索引失效的常見原因包括函數修改列、隱式類型轉換、統計信息過時等,解決方法需結合版本特性(如虛擬列、索引跳躍掃描)。通過執行計劃分析、統計信息維護和合理使用提示(Hints)&#xff0c…

k8s藍綠發布

k8s藍綠發布 什么是藍綠部署K8S中如何實現藍綠部署k8s藍綠部署流程圖 什么是藍綠部署 參考: https://youtu.be/CLq_hA0lAd0 https://help.coding.net/docs/cd/best-practice/blue-green.html 藍綠部署最早是由馬丁福勒 2010年在他的博客中提出. 藍綠部署是一種軟件部署策略,用…

stm32面試

數據結構相關問題 stm32面試 數據結構相關問題 目錄基礎數據結構樹與圖排序與查找算法 Linux相關問題Linux系統基礎Linux命令與腳本Linux網絡與服務 操作系統相關問題操作系統基礎概念操作系統調度算法操作系統同步與通信 STM32相關問題STM32硬件基礎STM32編程與開發STM32應用與…

Mybatis 中 mappers標簽 package的使用

MyBatis 的配置文件中&#xff0c;<mappers> 標簽用于指定 MyBatis 應該加載哪些映射器&#xff08;Mapper&#xff09;。其中 package 屬性是一種便捷的方式來批量注冊多個映射器接口 package 屬性允許你指定一個包名&#xff0c;MyBatis 會自動掃描該包下的所有映射器…

設計模式 --- 訪問者模式

訪問者模式是一種行為設計模式&#xff0c;它允許在不改變對象結構的前提下&#xff0c;定義作用于這些對象元素的新操作。 優點&#xff1a; 1.??符合開閉原則&#xff1a;新增操作只需添加新的訪問者類&#xff0c;無需修改現有對象結構。 ??2.操作邏輯集中管理??&am…

監控docker中的java應用

1)進入指定的容器 docker exec -it demo /bin/bash 2)下載curl root89a67e345354:/# apt install curl -y 3)下載arthas root89a67e345354:/# curl -O https://arthas.aliyun.com/arthas-boot.jar 4)運行 root89a67e345354:/# java -jar arthas-boot.jar 5)監控 […

最新版RubyMine超詳細圖文安裝教程,帶補丁包(2025最新版保姆級教程)

目錄 前言 一、RubyMine最新版下載 二、RubyMine安裝 三、RubyMine補丁 四、運行RubyMine 前言 RubyMine是由JetBrains開發的集成開發環境&#xff08;IDE&#xff09;&#xff0c;專為Ruby和Ruby on Rails開發者設計&#xff0c;提供智能代碼補全、調試、測試、版本控制集…

數字政府與智慧城市區別報告分析

數字政府與智慧城市區別報告分析 一、引言 隨著信息技術的飛速發展&#xff0c;數字政府和智慧城市成為推動城市現代化和治理能力提升的兩個重要概念。雖然它們都依托于信息技術&#xff0c;但二者在目標、內涵、實施路徑等方面存在顯著差異。本文旨在深入探討數字政府與智慧…

[MRCTF2020]ezpop wp

本題考點:php反序列化的pop鏈 首先來了解一下pop鏈是什么,它類似于多米諾骨牌一環套一環,要調用這個成員方法然后去找能調用這個方法的魔術方法,最后一環接一環,完成一個鏈子,最終形成payload。 那么來了解一下這些魔術方法 __construct() //類的構造函數&#xff0…

spark架構和RDD相關概念

運行架構&#xff1a; Spark采用master - slave結構&#xff0c;Driver作為master負責作業任務調度&#xff0c;Executor作為slave負責實際執行任務。 核心組件 Driver&#xff1a;執行Spark任務的main方法&#xff0c;將用戶程序轉化為作業&#xff0c;在Executor間調度任務&…

安全是基石

“安全是基石”這句話強調了安全在個人、企業、社會等各個層面中的基礎性和不可替代的重要性。無論是物理安全、網絡安全、數據安全&#xff0c;還是生產安全、公共安全&#xff0c;都是保障穩定發展的前提。以下是不同領域中“安全”作為基石的體現&#xff1a; 1. 個人安全 基…

Linux Makefile-概述、語句格式、編寫規則、多文件編程、Makefile變量分類:自定義變量、預定義變量

目錄 1.make 1.1 make 命令格式 2.Makefile 核心概念? ? 2.1創建并運行 Makefile步驟 3. Makefile編寫 3.1最基礎Makefile 3.1.1使用默認make命令 3.1.2使用make -f 命令 3.1.2.1 使用make -f 命令執行默認make操作 3.1.2.2使用 make [ ‐f file ] [ targets ]命令 …

城市應急安防系統EasyCVR視頻融合平臺:如何實現多源視頻資源高效匯聚與應急指揮協同

一、方案背景 1&#xff09;項目背景 在當今數字化時代&#xff0c;隨著信息技術的飛速發展&#xff0c;視頻監控和應急指揮系統在公共安全、城市應急等領域的重要性日益凸顯。尤其是在關鍵場所&#xff0c;高效的視頻資源整合與傳輸能力對于應對突發公共事件、實現快速精準的…

雙Token實現用戶登錄身份認證-Java版

雙Token實現用戶登錄身份認證-Java版 1. 設計方案 方案概述: Access Token: 短期有效的JWT,包含用戶ID、設備ID、token版本號。Refresh Token: 長期有效的令牌,存儲于Redis,關聯用戶信息、設備ID及token版本號,用于刷新Access Token。設備綁定: Token與設備ID綁定,防止跨…

Proteus vs Multisim:電路設計與仿真軟件對比

Proteus和Multisim作為兩款主流的電路設計與仿真軟件&#xff0c;在功能定位和應用場景上既有重疊也有顯著差異。以下從多個維度綜合闡述兩者的異同點&#xff1a; 一、相同點 基礎功能 ? 電路原理圖設計&#xff1a;支持電路設計和仿真分析。 ?? 虛擬儀器&#xff1a;提供…

ssh 三級跳

ssh 三級跳 在網絡安全和數據傳輸領域&#xff0c;SSH&#xff08;Secure Shell&#xff09;是一種常用的協議&#xff0c;用于加密兩臺計算機之間的通信。在某些情況下&#xff0c;你可能需要通過一個中間服務器來間接連接到目標服務器&#xff0c;這通常被稱為“三級跳”或“…

Java 性能優化:從原理到實踐的全面指南

性能優化是 Java 開發中不可或缺的一環&#xff0c;尤其在高并發、大數據和分布式系統場景下&#xff0c;優化直接影響系統響應速度、資源利用率和用戶體驗。Java 作為一門成熟的語言&#xff0c;提供了豐富的工具和機制支持性能調優&#xff0c;但優化需要深入理解 JVM、并發模…

【土堆 PyTorch 教程總結】PyTorch入門

目錄 一、python學習中兩大法寶函數 1、dir() 2、help() 二、PyTorch讀取數據集 1、Dataset類 &#xff08;1&#xff09;作用和基本原理 &#xff08;2&#xff09;常見用法 &#xff08;3&#xff09;自定義 Dataset 示例 2、Dataloader類 &#xff08;1&#xff0…