理解 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.mzph.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…