MCP星球推出全新教程《MCP 从 0 到 1》,面向AI爱好者和开发者朋友,零基础友好,帮你系统掌握 MCP(Model Context Protocol,模型上下文协议)的核心原理、架构设计与实际应用。

MCP星球旨在提供最全最好用的中文MCP平台,官网MCPmarket.cn已超过2.3万个MCP Server,进入“MCP Chat”即可通过对话自动调用MCP。

备注:本系列内容参考翻译了 Hugging Face、DeepLearning.ai 、Anthropic、MCP官方等知名平台的优质内容,同时结合 MCP 最新的协议规范与生态发展,带你逐步掌握。

上期课程

《MCP从0到1》第1课:MCP关键概念与术语详解,MCP的核心架构(应用端、客户端、服务器)以及能力类型(工具、资源、提示词)。

《MCP从0到1》第2课 通信消息类型、生命周期、与能力协商

MCP 定义了一种标准化的通信协议,使客户端和服务器能够以一致且可预测的方式交换消息。这种标准化对于社区内部的互操作性至关重要。

注:构建 MCP 服务器时无需掌握所有细节。本文探讨 MCP 协议通信的细节,可作为了解 MCP 运作方式的补充阅读。

1. 消息格式:JSON-RPC

MCP 协议使用 JSON-RPC 2.0 作为客户端和服务器之间所有通信的消息格式。JSON-RPC 是一种基于 JSON 编码的轻量级远程过程调用协议,具有以下特点:

易于阅读和调试

支持在任何编程环境中实现

规格清晰,应用广泛

2. 消息类型

MCP协议定义了三种类型的消息:请求(request)、回复(response)、通知(notification)

1)请求(Request)

由 Client 发给 Server,用于发起某个操作。请求消息包含以下字段:

一个唯一的标识符(id)

要调用的方法名(如 "tools/call")

方法所需的参数(params,如果有)

{
"jsonrpc":"2.0",
"id":1,
"method":"tools/call",
"params":{
"name":"天气",
"arguments":{
"location":"上海"
}
}
}

2)响应(Response)

由 Server 回复给 Client,用于响应前面发送的 Request。响应消息包含:

与对应 Request 相同的 id

要么是成功结果(result),要么是错误信息(error)

成功结果

{
"jsonrpc":"2.0",
"id":1,
"result":{
"temperature":20,
"conditions":"部分多云"
}
}

错误信息

{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Invalid location parameter"
}
}

3)通知(Notification)

通常由 Server 发送给 Client的单向消息,不需要响应。用于传递事件更新或进度通知等信息。

示例:

{
"jsonrpc":"2.0",
"method":"progress",
"params":{
"message":"Processing data...",
"percent":50
}
}

3. 通信的生命周期

客户端和服务器的通信生命周期包含三个阶段:初始化(Initialisation)、交换消息(Message Exchange)、终止(Termination)

1)初始化(Initialisation)

Client 与 Server 建立连接,建立本本兼容性、交换和协商能力,分享实现的细节。

客户端发送初始化请求(initialize request),包含:协议版本、客户端功能、客户端实现信息。例如:

{
"jsonrpc": "2.0",
"id":1,
"method":"initialize",
"params": {
"protocolVersion":"2025-03-26",
"capabilities": {
"roots": {
"listChanged": true
},
"sampling": {}
},
"clientInfo": {
"name":"ExampleClient",
"version":"1.0.0"
}
}
}

服务器回复(initialize response)自身的协议版本和功能信息:

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2025-03-26",
"capabilities": {
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": true,
"listChanged": true
},
"tools": {
"listChanged": true
}
},
"serverInfo": {
"name": "ExampleServer",
"version": "1.0.0"
},
"instructions": "Optional instructions for the client"
}
}

客户端发送初始化通知(initialized notification)作为确认,表示已经准备好开始正常消息交换(connection ready for use)

{
"jsonrpc": "2.0",
"method": "notifications/initialized"
}

2)交换消息(Message Exchange)

Client和Server之间进行正常的协议消息交换(请求、响应、通知等)。

客户端或服务端发送请求信息,另一方响应。这个过程可以针对每个工具、资源或提示类型重复进行。

3)终止(Termination)

在终止阶段,客户端通知服务器断开连接,服务器确认关闭请求。客户端发送退出后关闭连接。

4. 能力协商

Capability Negotiation

在初始化阶段,客户端和服务器明确声明其支持的功能,决定了在会话期间可用哪些功能。

服务器声明其功能,例如资源订阅、工具支持和提示模板

客户端声明支持采样和通知处理等能力

双方必须在整个会话期间尊重声明的功能

可以通过协议扩展来协商额外的功能

关键能力包括:

能力对象可以描述子能力,例如:

  • listChanged :支持列表变更通知(用于提示、资源和工具)
  • subscribe :支持订阅单个项目的变化(仅限资源)

以下是客户端和服务器之间能力协商的一个流程图:

每种能力都会在会话期间解锁特定的协议功能。例如:

  • 已实现的服务器功能必须在服务器的能力说明中进行宣传
  • 发出资源订阅通知需要服务器声明支持订阅
  • 工具调用需要服务器声明工具功能
  • 采样需要客户端在其功能中声明支持

    这种能力协商确保客户端和服务器对支持的功能有清晰的理解,同时保持协议的可扩展性。

掌握通信的消息类型和生命周期,将帮助你深入了解 MCP 的通信机制。

下一节,我们将进一步介绍MCP 的三种通信机制,帮助你全面构建基于 MCP 的 AI 应用生态。

参考资料

https://huggingface.co/learn/mcp-course/unit1/introduction

https://huggingface.co/learn/mcp-course/unit1/architectural-components

https://learn.deeplearning.ai/courses/mcp-build-rich-context-ai-apps-with-anthropic/lesson/xtt6w/mcp-architecture

MCPmarket.cn , 全网最全的MCP中文平台,超过2.3万个MCP服务;热门MCP一键直连,无需API

Chat对话即可自动调用MCP

推荐阅读

最全MCP平台MCPmarket.cn:推出全新MCP教程《MCP从0到1》第1课:MCP的核心架构(应用端、客户端、服务器)以及能力类型(工具、资源、提示词)

最全MCP平台MCPmarket.cn:推出全新MCP教程《MCP从0到1》第3课:MCP通信传输机制(stdio、SSE、Streamable HTTP)最强详解

重磅功能上线!新增Chat:对话即可自动调用MCP

在Cursor中一键接入MiniMax图像生成服务 |极简教程,小白也能轻松上手

重磅升级!热门MCP Server一键直连正式上线,AI对话Playground即将登场

我们离Agent的“终局形态”又近了一步:首个支持谷歌A2A协议的智能体网站上线Product Hunt

A2A协议的核心理念,关键机制,以及与MCP的关系

a16z合伙人: 深入了解 MCP 和 AI Agent工具的未来

备注:本系列内容参考翻译了 Hugging Face、DeepLearning.ai 、Anthropic、MCP官方等知名平台的优质内容,同时结合 MCP 最新的协议规范与生态发展,带你逐步掌握。

《MCP从0到1》第2课:通信的消息类型、生命周期、与能力协商详解的更多相关文章

  1. vue2.0项目实战(4)生命周期和钩子函数详解

    最近的项目都使用vue2.0来开发,不得不说,vue真的非常好用,大大减少了项目的开发周期.在踩坑的过程中,因为对vue的生命周期不是特别了解,所以有时候会在几个钩子函数里做一些事情,什么时候做,在哪 ...

  2. Vue2.0 【第二季】第4节 Vue的生命周期(钩子函数)

    目录 Vue2.0 [第二季]第4节 Vue的生命周期(钩子函数) 第4节 Vue的生命周期(钩子函数) Vue2.0 [第二季]第4节 Vue的生命周期(钩子函数) 第4节 Vue的生命周期(钩子函 ...

  3. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十九║Vue基础: 样式动态绑定+生命周期

    回顾 哈喽大家好,前后端分离系列文章又开始了,今天周一,还是感谢大家花时间来观看我写的博客,周末呢,没有写文章,但是也没有闲着,主要是研究了下遗留问题,看过之前文章的应该知道,之前的在AOP使用Red ...

  4. Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

    作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种 ...

  5. Pytorch1.0入门实战二:LeNet、AleNet、VGG、GoogLeNet、ResNet模型详解

    LeNet 1998年,LeCun提出了第一个真正的卷积神经网络,也是整个神经网络的开山之作,称为LeNet,现在主要指的是LeNet5或LeNet-5,如图1.1所示.它的主要特征是将卷积层和下采样 ...

  6. net core体系-web应用程序-4net core2.0大白话带你入门-9asp.net core服务的生命周期

    asp.net core服务的生命周期   Transient:每一次GetService都会创建一个新的实例 Scoped:在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request ...

  7. IIS 7.0 的 ASP.NET 应用程序生命周期概述(转载)

    IIS 7.0 的 ASP.NET 应用程序生命周期概述更新:2007 年 11 月本主题介绍在 IIS 7.0 集成模式下运行以及与 IIS 7.0 或更高版本一起运行的 ASP.NET 应用程序的 ...

  8. 07、NetCore2.0依赖注入(DI)之生命周期

    07.NetCore2.0依赖注入(DI)之生命周期 NetCore2.0依赖注入框架(DI)是如何管理注入对象的生命周期的?生命周期有哪几类,又是在哪些场景下应用的呢? -------------- ...

  9. Mirantis MCP 1.0:OpenStack 和 Kubernetes 整合的第一步

    1.前言 Mirantis 公司在2014年9月14日宣布收购 TCPCloud,然后宣布在2017年第一季度会推出全新的私有云产品.从那时候开始,我就一直满怀期待.终于,今年4月19日,Mirant ...

  10. [Spark內核] 第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解

    本课主题 Checkpoint 运行原理图 Checkpoint 源码解析 引言 Checkpoint 到底是什么和需要用 Checkpoint 解决什么问题: Spark 在生产环境下经常会面临 T ...

随机推荐

  1. 标准javabean

    1.javabean介绍 javabean,名为实体类,封装数据的类 前面我们写的类都是实体类,但我们写的不是标准的实体类 . 2.标准的javabean写法 如图 3.快捷键 一个成员变量就要写两个 ...

  2. 【Linux】3.1 远程登录Linux系统

    为什么需要远程登录 Linux 示意图 说明: 公司开发时候, 具体的情况是这样的 linux 服务器是开发小组共享的. 正式上线的项目是运行在公网的. 因此程序员需要远程登录到 centos 进行项 ...

  3. 【Python】使用PyInstaller把代码打包成exe可执行文件

    使用PyInstaller打包自己写好的代码 零.需求 最近接到一个小单,需要批量修改文档内容,用Python做好后要打包成exe程序给客户的Win7电脑使用,此时需要用到PyInstaller打包自 ...

  4. 如何在 IIS 上部署 Go API?

    问题场景 我这边原先的技术栈主要是 .NET(Core), 所以服务器基本上都是 Windows Server + IIS. 这次有个 API 服务用 Go 重写, 但是部署有点不美, 直接执行黑框框 ...

  5. 话说Hangfire

    参考文档 www.hangfire.io github.com/HangfireIO/Hangfire .NET Core开源组件:后台任务利器之Hangfire

  6. Clean DDD 技术沙龙 2025 杭州站

    整洁领域驱动设计(Clean DDD)第一次线下活动来了,这是: 一个软件设计的全新视角 一次复杂度掌控感的深度体验 一场软件工程效率的探索之旅 活动时间:2025年4月13日星期日 下午 13:00 ...

  7. 解决get请求特殊字符问题

    @Bean public ServletWebServerFactory webServerFactory() { TomcatServletWebServerFactory fa = new Tom ...

  8. 我与 ChatGPT 讨论了面向对象语言 中,关于动态调用的问题

    你好,支持面向对象的语言中,"方法表" 是用来处理什么的? 在面向对象的语言中,"方法表"通常指一个类或对象中定义的方法列表.这些方法定义了该类或对象可以做什么 ...

  9. TypeScript+Vue3

    TypeScript Any 类型 和 unknown 顶级类型 1.没有强制限定哪种类型,随时切换类型都可以 我们可以对 any 进行任何操作,不需要检查类型 2.声明变量的时候没有指定任意类型默认 ...

  10. Java编程--简单的Factory程序(工厂设计模式)

    Factory类不是接口.抽象类,就是普通的类. Factory就像一个工厂一样,可以返回很多对象. 子类在继承.实现抽象类和接口后由Factory类处理,由于子类可能会有多个,Factory根据客户 ...