MCP Prompt(模型上下文协议 提示模板)完整详解
MCP Prompt(模型上下文协议 提示模板)完整详解
一、基础定位与核心作用
1. 什么是 MCP Prompt
Prompt 是 MCP(Model Context Protocol)三大核心组件之一(另外两个:Resources、Tools),是托管在 MCP Server 端、可被客户端一键调用的标准化可插值提示词模板。
- Resources:只读外部数据,给 AI 提供上下文素材;
- Tools:可执行操作,让 AI 主动修改外部系统;
- Prompts:预制对话模板,封装固定工作流,支持动态参数填充,简化用户与 AI 的交互。
核心价值
- 服务端统一托管:所有模板写在 MCP 服务,Claude Desktop、Cursor 等任意 MCP 客户端均可复用,无需重复复制提示词;
- 动态参数插值:支持自定义入参,用户输入变量后自动填充生成完整 prompt;
- 标准化发现入口:客户端可拉取全部模板列表,以快捷命令 / 按钮形式展示给用户;
- 自动绑定资源上下文:调用时可自动携带当前服务暴露的文件、数据库等 Resources 数据,无需手动粘贴文件内容。
关键区分
- 普通复制粘贴提示词:仅本地文本,无法复用、无参数校验、不能自动关联本地文件;
- MCP Prompt:协议标准化模板,带参数校验、全局可发现、自动注入外部资源上下文。
二、标准数据结构(协议 TS 类型定义)
顶层 Prompt 对象完整结构
typescript
运行
interface Prompt {
// 必填:全局唯一标识,接口寻址用(如 code_review、sql_analyze)
name: string;
// 可选:面向用户的功能描述,客户端列表展示
description?: string;
// 可选:动态参数列表,无参数可省略
arguments?: PromptArgument[];
}
// 模板参数子对象
interface PromptArgument {
// 必填:参数变量名,模板内使用 {{变量名}} 插值占位
name: string;
// 可选:参数说明,引导用户输入内容
description?: string;
// 可选:是否必填,true=用户必须填写才能渲染模板
required?: boolean;
}
字段逐条解释
name(必填) 全局唯一 ID,仅用于程序识别,不能重复;调用模板时通过该名称匹配,命名建议下划线小写(unit_test_generator)。description(可选) 面向人类用户的功能简介,客户端展示模板列表时可见,例如「代码漏洞审查,输出优化方案」。arguments(可选数组) 模板动态变量集合,每一项代表一个可传入参数;无动态变量时直接省略该字段。name:变量名,模板文本中用{{变量名}}占位;description:提示用户该参数该填什么;required:布尔值,必填参数客户端会强制弹窗输入,非必填可留空。
完整可运行 JSON 示例
json
{
"name": "log_error_analysis",
"description": "读取日志文件,定位程序报错根源并给出修复方案",
"arguments": [
{
"name": "error_log_text",
"description": "待分析的程序错误日志内容",
"required": true
},
{
"name": "project_framework",
"description": "项目使用的开发框架,如SpringBoot、Vue3",
"required": false
}
],
"template": "你是资深后端运维工程师,根据以下日志排查故障:{{error_log_text}},项目框架:{{project_framework}},分点列出报错原因、修复步骤、优化建议"
}
三、MCP Prompt 完整通信交互流程(基于 JSON-RPC 2.0)
MCP 定义两套核心 RPC 接口完成模板调用:prompts/list、prompts/get
步骤 1:客户端拉取所有模板元数据(prompts/list)
客户端启动后主动请求服务端,获取全部 Prompt 的基础信息(仅 name/description/arguments,不包含完整模板文本),用于前端展示模板列表。 返回示例:
json
{
"prompts": [
{
"name": "log_error_analysis",
"description": "读取日志文件,定位程序报错根源并给出修复方案",
"arguments": [{"name":"error_log_text","required":true}]
}
]
}
步骤 2:用户选择模板、填写参数
客户端根据返回列表展示所有模板,用户选中目标模板后,弹窗提示填写所有required=true的参数。
步骤 3:客户端请求渲染完整模板(prompts/get)
携带模板名称 + 用户传入参数,向服务端请求完整渲染后的对话消息: 请求参数:
json
{
"name": "log_error_analysis",
"arguments": {
"error_log_text": "NullPointerException at UserService line 45",
"project_framework": "SpringBoot 2.7"
}
}
步骤 4:服务端插值渲染,返回完整对话 messages
MCP Server 将参数填充进模板占位符,生成标准 LLM 消息数组返回客户端,客户端直接送入大模型执行对话。 返回结构示例:
json
{
"messages": [
{
"role": "user",
"content": {
"type": "text",
"text": "你是资深后端运维工程师,根据以下日志排查故障:NullPointerException at UserService line 45,项目框架:SpringBoot 2.7,分点列出报错原因、修复步骤、优化建议"
}
}
]
}
能力声明(服务初始化时注册)
服务端启动时需在 capabilities 声明支持 Prompt 能力,客户端才能识别:
json
{
"capabilities": {
"prompts": {
"listChanged": true
}
}
}
listChanged: true:模板新增 / 修改 / 删除时,服务端主动推送通知给客户端,实现模板热更新,无需重启连接。
四、Prompt 核心特性
1. 插值变量渲染
模板内使用 {{参数名}} 作为占位符,服务端自动替换为用户传入的 arguments 值;支持多参数混合拼接。
2. 自动关联 Resources 资源
调用 Prompt 时,可在服务端逻辑中自动注入当前暴露的文件、数据库数据,无需用户手动复制文件内容。 例:日志分析模板自动读取log://server/error.log资源,直接填充进模板。
3. 多模态兼容
支持文本、图片二进制资源注入模板,可用于 OCR 识图、截图分析类提示模板。
4. 参数强制校验
服务端校验必填参数是否传入,缺失则直接返回报错,不会生成残缺模板。
五、典型应用场景
- 开发工作流模板 代码审查、单元测试生成、接口文档生成、Git 提交注释生成;
- 数据分析模板 SQL 结果解读、日志故障排查、数据库报表总结;
- 办公自动化模板 周报生成、需求文档整理、会议纪要总结、邮件撰写;
- 运维监控模板 系统负载分析、报错日志定位、服务器指标解读;
- 多模态模板 截图 OCR 解读、图片内容分析、PDF 文档总结。
六、三大 MCP 核心组件横向对比
表格
| 维度 | MCP Prompt | Resources | Tools |
|---|---|---|---|
| 核心作用 | 预制可复用对话模板 | 只读外部数据源 | 可执行操作、修改外部系统 |
| 是否产生副作用 | 无,仅生成文本 | 无,仅读取数据 | 有,写文件 / 改库 / 发请求 |
| 触发主体 | 用户手动选择调用 | 用户手动加载资源 | LLM 自主判断自动调用 |
| 参数形式 | 自定义插值变量 | URI 唯一资源标识 | JSON Schema 结构化入参 |
| 典型使用逻辑 | 一键启动标准化对话 | 给 AI 补充参考上下文 | AI 主动执行外部任务 |
快速区分口诀:固定对话流程用 Prompt;只读取数据用 Resources;需要动手操作、修改数据用 Tools。
七、安全与使用注意事项
- 模板权限隔离 敏感业务模板可在 MCP 服务增加访问鉴权,限制客户端调用;
- 参数过滤 对用户传入的插值参数做内容过滤,防止提示注入攻击;
- 资源访问管控 自动注入文件 / 数据库资源时,限制可读路径,禁止读取敏感本地文件;
- 模板体积控制 超长文本模板建议拆分,或通过 Resources 动态加载内容,避免单次 RPC 传输过载。
更多推荐


所有评论(0)