MCP Prompt(模型上下文协议 提示模板)完整详解

一、基础定位与核心作用

1. 什么是 MCP Prompt

Prompt 是 MCP(Model Context Protocol)三大核心组件之一(另外两个:Resources、Tools),是托管在 MCP Server 端、可被客户端一键调用的标准化可插值提示词模板

  • Resources:只读外部数据,给 AI 提供上下文素材;
  • Tools:可执行操作,让 AI 主动修改外部系统;
  • Prompts:预制对话模板,封装固定工作流,支持动态参数填充,简化用户与 AI 的交互。

核心价值

  1. 服务端统一托管:所有模板写在 MCP 服务,Claude Desktop、Cursor 等任意 MCP 客户端均可复用,无需重复复制提示词;
  2. 动态参数插值:支持自定义入参,用户输入变量后自动填充生成完整 prompt;
  3. 标准化发现入口:客户端可拉取全部模板列表,以快捷命令 / 按钮形式展示给用户;
  4. 自动绑定资源上下文:调用时可自动携带当前服务暴露的文件、数据库等 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;
}

字段逐条解释

  1. name(必填) 全局唯一 ID,仅用于程序识别,不能重复;调用模板时通过该名称匹配,命名建议下划线小写(unit_test_generator)。
  2. description(可选) 面向人类用户的功能简介,客户端展示模板列表时可见,例如「代码漏洞审查,输出优化方案」。
  3. 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/listprompts/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. 参数强制校验

服务端校验必填参数是否传入,缺失则直接返回报错,不会生成残缺模板。


五、典型应用场景

  1. 开发工作流模板 代码审查、单元测试生成、接口文档生成、Git 提交注释生成;
  2. 数据分析模板 SQL 结果解读、日志故障排查、数据库报表总结;
  3. 办公自动化模板 周报生成、需求文档整理、会议纪要总结、邮件撰写;
  4. 运维监控模板 系统负载分析、报错日志定位、服务器指标解读;
  5. 多模态模板 截图 OCR 解读、图片内容分析、PDF 文档总结。

六、三大 MCP 核心组件横向对比

表格

维度 MCP Prompt Resources Tools
核心作用 预制可复用对话模板 只读外部数据源 可执行操作、修改外部系统
是否产生副作用 无,仅生成文本 无,仅读取数据 有,写文件 / 改库 / 发请求
触发主体 用户手动选择调用 用户手动加载资源 LLM 自主判断自动调用
参数形式 自定义插值变量 URI 唯一资源标识 JSON Schema 结构化入参
典型使用逻辑 一键启动标准化对话 给 AI 补充参考上下文 AI 主动执行外部任务

快速区分口诀:固定对话流程用 Prompt;只读取数据用 Resources;需要动手操作、修改数据用 Tools。


七、安全与使用注意事项

  1. 模板权限隔离 敏感业务模板可在 MCP 服务增加访问鉴权,限制客户端调用;
  2. 参数过滤 对用户传入的插值参数做内容过滤,防止提示注入攻击;
  3. 资源访问管控 自动注入文件 / 数据库资源时,限制可读路径,禁止读取敏感本地文件;
  4. 模板体积控制 超长文本模板建议拆分,或通过 Resources 动态加载内容,避免单次 RPC 传输过载。
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐