首页 > 其他分享 >MCP(Model Context Protocol)模型上下文协议 进阶篇2 - 消息格式和功能

MCP(Model Context Protocol)模型上下文协议 进阶篇2 - 消息格式和功能

时间:2024-12-29 22:28:42浏览次数:3  
标签:Protocol string 能力 进阶篇 Context 请求 2.0 ID 客户端

在开发前,首先带大家熟悉一下MCP协议的消息格式,和所有可能需要进行协商的功能:

  • MCP协议通过JSON-RPC 2.0规范定义了请求、响应和通知三种消息类型,确保通信的标准化和一致性。
  • 能力协商机制使客户端和服务器能够动态确定支持的协议功能,提升协议的灵活性和扩展性。
  • 子能力的引入进一步细化了功能支持,满足更复杂的应用场景需求。

通过这些机制,MCP协议实现了高效、灵活且可扩展的通信能力,适用于多样化的应用场景。

消息格式

在MCP(Message Communication Protocol)中,所有消息都必须遵循JSON-RPC 2.0规范。该协议定义了三种类型的消息:请求(Requests)、响应(Responses)和通知(Notifications)。

请求(Requests)
请求可以从客户端发送到服务器,也可以从服务器发送到客户端。请求的格式如下:

{
  "jsonrpc": "2.0",
  "id": "string | number",
  "method": "string",
  "params": {
    "[key: string]": "unknown"
  }
}
  • 请求必须包含一个字符串或整数类型的ID。
  • 与基础的JSON-RPC不同,ID不能为null。
  • 请求ID在同一会话中不能被重复使用。

响应(Responses)
响应是对请求的回复,其格式如下:

{
  "jsonrpc": "2.0",
  "id": "string | number",
  "result": {
    "[key: string]": "unknown"
  },
  "error": {
    "code": "number",
    "message": "string",
    "data": "unknown"
  }
}
  • 响应必须包含与对应请求相同的ID。
  • 响应必须设置resulterror之一,但不能同时设置两者。
  • 错误代码必须为整数。

通知(Notifications)
通知可以从客户端发送到服务器,也可以从服务器发送到客户端,且不期望得到回复。通知的格式如下:

{
  "jsonrpc": "2.0",
  "method": "string",
  "params": {
    "[key: string]": "unknown"
  }
}
  • 通知不能包含ID。

能力协商

在会话开始时,客户端(Client)和服务器(Server)通过能力协商确定哪些可选的协议功能将被启用。以下是关键能力及其描述:

类别能力描述
Clientroots提供文件系统根目录的能力
Clientsampling支持LLM(大语言模型)采样请求
Clientexperimental支持非标准的实验性功能
Serverprompts提供提示模板(prompt templates)
Serverresources提供可读资源
Servertools暴露可调用的工具
Serverlogging发送结构化日志消息
Serverexperimental支持非标准的实验性功能

能力对象(Capability objects)还可以描述子能力,例如:

  • listChanged:支持列表变更通知(适用于prompts、resources和tools)。
  • subscribe:支持订阅单个项目的变更(仅适用于resources)。

总结

本文详细介绍了MCP(Message Communication Protocol)协议的核心内容,包括消息格式和能力协商机制,所有消息均遵循JSON-RPC 2.0规范。

消息类型

  • 请求(Requests):客户端与服务器之间发送的消息,必须包含唯一ID,且ID不能为null或重复使用。
  • 响应(Responses):对请求的回复,必须包含与请求相同的ID,并返回结果(result)或错误(error),但不能同时设置两者。
  • 通知(Notifications):客户端与服务器之间发送的消息,不期望回复,且不能包含ID。

能力协商
客户端和服务器在会话初期通过能力协商确定可用的协议功能,关键能力包括:

  • 客户端能力:文件系统支持(roots)、LLM采样(sampling)、实验性功能(experimental)。
  • 服务器能力:提示模板(prompts)、资源管理(resources)、工具调用(tools)、日志记录(logging)、实验性功能(experimental)。
  • 子能力:如列表变更通知(listChanged)和资源订阅(subscribe)。

标签:Protocol,string,能力,进阶篇,Context,请求,2.0,ID,客户端
From: https://blog.csdn.net/aiqlcom/article/details/144811787

相关文章

  • Go 并发之WaitGroup,并发锁,Context
    目录1Go并发1.1WaitGroup1.2并发锁1.2.1互斥锁1.2.2读写互斥锁1.2.3sync.Once1.2.4sync.Map1.3Context1.3.1简介1.3.2主要功能1.3.3使用示例1.3.3.1取消信号1.3.3.2设置超时1.3.3.3传递值1Go并发1.1WaitGroupsync.WaitGroup是Go标准库提供的一种同步原语,常......
  • basicContext.js - 强大的纯Js上下文菜单插件
    basicContext.js是一款功能强大的纯Js上下文菜单插件。该js上下文菜单插件可以制作左键菜单,右键菜单,可以自定义菜单的位置。它还可以和jquery结合使用,非常方便。 在线预览  下载 使用方法在页面中引入样式文件basicContext.min.css,主题样式文件default.min.css和js文件b......
  • PWN系列-2.27版本利用setcontext实现orw
    PWN系列-2.27版本利用setcontext实现orw知识开启沙箱之后,我们就只能用orw的方式来得到flag。这篇博客主要讲通过劫持__free_hook或者__malloc_hook利用setcontext在libc或者heap上执行rop或者shellcode。在free堆块的时候,rdi会指向堆块,在检测到__free_hook有值的情况下,会跳过......
  • Protocol Buffers 使用笔记
    ProtocolBuffers使用笔记created:2024-03-04T11:11+08:00modified:2024-11-26T15:28+08:00published:2024-12-25T15:30+08:00categories:applicationsProtocolBuffers简称protobuf或者PB,要解决的问题是这样的:在互联网上传输大量数据,如果使用json等类似格式,会......
  • LayoutInflater.from(context).inflate() 和 View.inflate
    两个都是布局加载器,而View.inflate是封装LayoutInflater.from(context).inflate后的产物,功能相同。将布局文件/res/layout/my_view.xml实例化为View对象,inflate()方法返回布局文件的view对象。LayoutInflater.from(getContext()).inflate(intresource,ViewGrouproot);//root为nu......
  • 继承中成员变量和成员方法的访问特点-java se进阶篇 day01
    1.继承中成员变量的访问特点1.成员变量重名如图父类中有age变量,子类中也有age变量,这时打印age,出现的是10还是20呢?答:根据就近原则,出现的是202.使用父类成员变量--super如果就要使用父类中的age该怎么办?使用super关键字进行解决super关键字可以访问父类中的成员,从而解决......
  • Flutter有关在无Context上下文的地方进行导航和弹出对话框的讨论
    关于导航页面全局监听蓝牙状态的问题Flutter中没有上下文的AlertDialog关于导航页面全局监控蓝牙状态的问题?上边是有关全局监听状态的,但问题都是一致的,就是不在widget的build方法中进行弹窗或路由。第一种使用了go_router库的,通过配置redirect回调进行判断返回的组件,但是不......
  • MCP(Model Context Protocol)模型上下文协议 进阶篇1 - 组件和功能
    前言在准备实战篇2的代码部分时,我意识到之前的架构篇虽然对MCP的整体设计进行了介绍,但关于具体的消息交互细节描述得还不够详细。然而,在实际开发中,消息交互的细节往往是最关键的部分。因此,我决定再开一篇新的进阶篇,作为理论篇向实战篇的过渡,详细说明开发过程中会实际用到的具......
  • Go语言中context 结构原理, 使用场景和用途
    Go语言中context结构原理在Go语言中,context是一个用于在API边界之间传递请求范围的值、取消信号、截止时间等信息的机制。它主要用于处理跨API边界的请求取消、超时控制以及传递请求范围内的共享数据。context的设计目标是为了解决在并发编程中,特别是Goroutines之间相互协作时......
  • 解决 Protocol Buffers 反序列化中的 `InvalidProtocolBufferException$InvalidWireTy
    个人名片......