MCP协议的请求结构
摘要: MCP(Model Control Protocol)协议定义了客户端与大模型服务端交互的标准化请求结构,采用JSON格式封装核心模块。请求包含协议元信息(版本号、请求ID)、模型指定(名称/版本)、任务定义(文本生成/翻译/工具调用等多类型)、上下文数据(对话历史)、控制参数(超时/重试)及可选认证信息。任务参数随类型动态变化,支持流式输出、多模态输入等扩展场景,通过结构化设计确保灵活性
MCP(Model Control Protocol)协议的请求结构是客户端与大模型服务端交互的核心规范,定义了如何向模型传递任务、参数、上下文等关键信息。其设计需兼顾灵活性(支持多任务类型)和标准化(确保跨系统兼容),以下是详细的请求结构解析(以JSON格式为例,涵盖核心字段及扩展场景):
一、请求结构总览
一个完整的MCP请求包含协议元信息、模型指定、任务定义、上下文数据、控制参数等模块,整体结构如下:
{
"protocol_version": "string", // 协议版本
"request_id": "string", // 唯一请求ID
"model": { ... }, // 模型选择与配置
"task": { ... }, // 核心任务定义(类型+参数)
"context": { ... }, // 上下文数据(如多轮对话历史)
"control": { ... }, // 控制参数(超时、重试等)
"auth": { ... } // 认证信息(可选)
}
二、核心字段详解
1. 协议元信息(基础必填)
-
protocol_version- 作用:指定协议版本(如
"1.0"、"2.1"),用于服务端兼容不同版本的请求格式。 - 示例:
"protocol_version": "1.0" - 注意:不同版本可能存在字段差异(如1.0不支持多模态,2.0新增
multimodal字段),需与服务端版本匹配。
- 作用:指定协议版本(如
-
request_id- 作用:客户端生成的唯一标识符(如UUID),用于追踪请求、关联响应、重试去重。
- 示例:
"request_id": "req-7f9a3b2d-8c1e-4d5b-9a0c-1f2e3d4c5b6a" - 要求:全局唯一,建议包含时间戳+随机字符串,避免冲突。
2. 模型指定(model,必填)
用于指定目标模型及版本,确保服务端调用正确的模型实例。
"model": {
"name": "string", // 模型名称(如"gpt-4"、"llama3-70b"、"qwen-vl")
"version": "string", // 模型版本(如"1.0"、"latest")
"provider": "string" // 模型提供商(可选,如"openai"、"anthropic")
}
- 示例:
"model": { "name": "llama3-70b", "version": "2.0", "provider": "meta" } - 注意:若服务端仅支持单一模型,
name和version可能可选,但建议显式指定。
3. 任务定义(task,核心必填)
定义模型需执行的具体任务(如文本生成、翻译、工具调用等),包含任务类型和任务参数,是请求的核心。
(1)task.type:任务类型(必填)
决定模型的行为逻辑,常见类型如下:
text_generation:文本生成(如对话、创作、问答)。translation:翻译(如中英互译)。embedding:生成文本向量(用于检索、相似度计算)。function_call:工具调用(如调用API、数据库查询)。multimodal_generation:多模态生成(如图文混合输入)。
(2)task.parameters:任务参数(随type变化)
根据任务类型定义具体参数,以下是常见任务的参数示例:
① 文本生成(text_generation)
"task": {
"type": "text_generation",
"parameters": {
"prompt": "请总结以下文章的核心观点:...", // 输入指令(必填)
"max_tokens": 1024, // 最大生成长度(默认512)
"temperature": 0.7, // 随机性(0-1,值越高越随机)
"top_p": 0.9, // 核采样(0-1,控制候选词范围)
"top_k": 50, // _top_k采样(保留前k个候选词)
"stop": ["\n", "###"], // 终止符(遇到则停止生成)
"stream": true, // 是否流式输出(默认false)
"response_format": "json" // 输出格式(默认text,可选json)
}
}
② 翻译(translation)
"task": {
"type": "translation",
"parameters": {
"text": "Hello, world!", // 待翻译文本(必填)
"source_lang": "en", // 源语言(默认自动检测)
"target_lang": "zh-CN", // 目标语言(必填)
"formality": "formal" // 正式度(可选,如"formal"/"informal")
}
}
③ 工具调用(function_call)
"task": {
"type": "function_call",
"parameters": {
"functions": [ // 可用工具列表(可选,服务端可能预定义)
{
"name": "weather_query",
"description": "查询指定城市的天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"},
"date": {"type": "string", "format": "YYYY-MM-DD"}
},
"required": ["city"]
}
}
],
"function_call": { // 具体调用参数(必填)
"name": "weather_query",
"parameters": {"city": "上海", "date": "2025-10-30"}
}
}
}
④ 多模态生成(multimodal_generation)
"task": {
"type": "multimodal_generation",
"parameters": {
"prompt": "描述这张图片的内容", // 文本指令(必填)
"images": [ // 图像数据(必填,多图支持)
{"type": "url", "value": "https://example.com/img1.jpg"},
{"type": "base64", "value": "data:image/jpeg;base64,/9j/4AAQSkZJRgABA..."}
],
"max_tokens": 512
}
}
4. 上下文数据(context,可选)
用于传递对话历史、会话状态等上下文信息,确保多轮交互的连贯性(常见于对话场景)。
"context": {
"session_id": "sess-123", // 会话ID(标识同一轮对话)
"history": [ // 历史消息列表
{"role": "user", "content": "什么是MCP协议?"},
{"role": "assistant", "content": "MCP协议是模型控制协议..."},
{"role": "user", "content": "它的请求结构包含哪些部分?"}
],
"system_prompt": "你是一个AI助手,需用简洁语言回答问题" // 系统提示词(全局配置)
}
role:消息角色,常见值为user(用户)、assistant(模型)、system(系统提示)。session_id:可选,用于服务端关联同一用户的多轮请求(如保存历史)。
5. 控制参数(control,可选)
用于配置请求的执行策略,如超时、重试、优先级等。
"control": {
"timeout": 30000, // 超时时间(毫秒,默认30秒)
"priority": "normal", // 优先级(low/normal/high,影响队列调度)
"retryable": true, // 是否允许重试(默认true)
"cache": { // 缓存配置(可选,减少重复计算)
"enable": true,
"ttl": 3600 // 缓存有效期(秒)
}
}
6. 认证信息(auth,可选)
用于身份验证,通常包含API密钥、令牌等(部分场景可能通过HTTP Header传递,如Authorization: Bearer <token>)。
"auth": {
"api_key": "sk-xxxxxxxxxxxxxxxxxxxx", // API密钥
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." // JWT令牌
}
三、完整请求示例(多轮对话场景)
{
"protocol_version": "1.0",
"request_id": "req-20251030-12345",
"model": {
"name": "gpt-4",
"version": "latest"
},
"task": {
"type": "text_generation",
"parameters": {
"prompt": "它和HTTP协议有什么区别?",
"max_tokens": 512,
"temperature": 0.5,
"stream": false
}
},
"context": {
"session_id": "chat-789",
"history": [
{"role": "user", "content": "什么是MCP协议?"},
{"role": "assistant", "content": "MCP协议是模型控制协议,用于客户端与大模型服务端的交互。"}
]
},
"control": {
"timeout": 60000,
"priority": "normal"
},
"auth": {
"api_key": "sk-abc123"
}
}
四、关键设计原则
- 灵活性:通过
task.type和task.parameters的组合,支持多样化任务(文本、多模态、工具调用等)。 - 兼容性:
protocol_version字段确保不同版本协议可平滑升级。 - 可追踪性:
request_id和session_id便于问题排查和会话管理。 - 安全性:支持多种认证方式,保护模型服务不被未授权访问。
实际使用时,需结合目标模型服务的文档调整字段(部分服务可能简化或扩展某些字段),但核心结构保持一致。
更多推荐



所有评论(0)