第 2.7.3 节:区分 Tool、Resource 和 Prompt Card 的职责
Tool、Resource 和 Prompt Card不能只停留在口头约定,还需要落实为字段、校验和失败处理。完成本节后,你应该能够用对比表判断 Tool、Resource 和 Prompt Card 的适用条件、职责边界和取舍理由。
实现步骤或决策流程
推荐技术流
制作 MCP Server(模型上下文协议服务端)和 MCP Client(模型上下文协议客户端)时,不建议从“先写一个能连上的 demo(演示)”开始。对学习可以,但对作品集和企业项目不够。更推荐按下面的技术流推进。
| 步骤 | 做什么 | 为什么 |
|---|---|---|
| 1 | 盘点客服业务动作 | 从业务问题出发,避免为了 MCP(模型上下文协议)而造工具。 |
| 2 | 判断哪些能力适合服务端暴露 | 稳定、复用、边界清楚的能力更适合 MCP Server(模型上下文协议服务端)。 |
| 3 | 按业务域拆服务端 | 政策、订单、工单、客户资料分开,权限和日志更清楚。 |
| 4 | 为每个工具写 tool card(工具卡) | 让模型、客户端和审计都知道工具边界。 |
| 5 | 为资源写 resource card(资源卡) | 防止把敏感资料当普通上下文暴露。 |
| 6 | 设计 prompt template(提示模板) | 复用业务表达和确认流程,但不替代权限。 |
| 7 | 设计客户端发现和筛选策略 | 落实“Server 暴露工具,Client 决定当前会话可用工具”。 |
| 8 | 设计 auth(认证授权)和 approval(审批) | 防止越权、误调和高风险自动执行。 |
| 9 | 设计 audit(审计)和 trace(追踪) | 支持排查、质检、复盘和面试说明。 |
| 10 | 准备失败样例和验收清单 | 验证工具不仅能成功,也能安全失败。 |
这条技术流的核心理由是:MCP 制作不是连接工程,而是企业工具能力的产品化。产品化意味着命名、契约、权限、状态、日志和兜底都要能交代清楚。
字段契约
字段契约是本章最重要的交付物之一。它的作用不是教语法,而是让读者知道 MCP 制作时必须约定哪些字段。
统一字段契约
下表覆盖本章要求掌握的核心字段。后面的工具卡、资源卡、提示模板和审计表都会复用它们。
| 字段 | 中文含义 | 应该由谁提供 | 用在哪里 | 设计要点 |
|---|---|---|---|---|
server_id | 服务端编号 | MCP Server(模型上下文协议服务端) | 服务端登记、发现、调用、审计 | 要稳定、可识别业务域,例如政策、订单、工单。 |
client_id | 客户端编号 | MCP Client(模型上下文协议客户端) | 连接、发现、调用、审计 | 标识客服工作台、主管工作台或运营工作台。 |
tool_name | 工具名称 | 服务端工具卡 | 工具发现和调用 | 使用稳定英文标识,例如 search_policy。 |
tool_description | 工具描述 | 服务端工具卡 | 给模型和客户端判断用途 | 说明什么时候用、不能做什么、风险是什么。 |
input_contract | 输入契约 | 服务端定义,客户端校验 | 工具调用前 | 说明必填字段、来源、校验规则和缺失处理。 |
output_contract | 输出契约 | 服务端定义,客户端处理 | 工具返回后 | 说明成功、失败、无权限、需审批等状态。 |
resource_uri | 资源地址 | 服务端资源卡 | 资源读取和引用 | 不一定是公网地址,要能唯一定位资源。 |
prompt_name | 提示模板名称 | 服务端提示模板 | 客户端复用业务提示 | 要说明适用场景、版本和禁止事项。 |
permission_scope | 权限范围 | 服务端和客户端共同定义 | 发现、筛选、调用 | 说明谁能看、谁能调、能访问哪些对象。 |
auth_context | 认证上下文 | 客户端生成,服务端校验 | 工具调用和资源读取 | 包含身份、角色、租户、会话、对象归属等摘要。 |
risk_level | 风险等级 | 服务端工具卡,客户端策略使用 | 工具筛选和审批 | 区分只读、写入、高风险、敏感资料。 |
approval_required | 是否需要审批 | 服务端声明,客户端执行 | 调用前和调用中 | 可以是无需审批、用户确认、客服确认、主管审批。 |
audit_trace_id | 审计追踪编号 | 客户端生成或平台生成 | 全链路日志 | 串联发现、筛选、调用、结果、回答和人工操作。 |
transport_mode | 传输模式 | 服务端登记,客户端连接 | 部署和连接 | 标明 stdio、HTTP(超文本传输协议)或企业内网连接方式。 |
如果一个 MCP 设计文档没有这些字段,通常说明它还停留在“能调工具”的阶段,没有进入“可治理工具生态”的阶段。
tool card(工具卡)契约
工具卡是服务端暴露工具时最核心的说明。以下是客服项目第一批工具卡。
| 字段 | search_policy | get_order | create_ticket | get_customer_profile |
|---|---|---|---|---|
| 工具类型 | 只读检索工具 | 只读业务查询工具 | 写入工具 | 敏感只读工具 |
| tool_description(工具描述) | 根据用户问题搜索售后政策、退换货规则和服务条款 | 查询当前授权范围内的订单、物流和售后状态 | 在用户确认问题摘要后创建客服工单 | 查看当前处理范围内的客户资料摘要和历史工单摘要 |
| input_contract(输入契约) | 问题摘要、商品类别、问题类型、地区、政策版本偏好 | 当前用户、订单编号或订单选择、查询原因 | 用户编号、问题摘要、问题类型、关联订单、用户确认状态 | 客户编号、查看原因、当前工单编号、客服角色 |
| output_contract(输出契约) | 政策摘要、依据来源、适用条件、是否需人工确认 | 订单状态、物流摘要、是否可售后、风险提示 | 工单编号、当前状态、预计处理时间、下一步动作 | 客户等级、历史工单摘要、风险标签、可展示范围 |
| permission_scope(权限范围) | 已登录用户可查公开政策;内部政策限客服 | 只能查当前用户或当前授权工单相关订单 | 只能为当前用户或当前处理客户创建 | 只允许有处理关系的客服或主管查看摘要 |
| risk_level(风险等级) | 中,政策错误会误导用户 | 中高,涉及订单隐私 | 中高,写入业务系统 | 高,涉及客户隐私 |
| approval_required(是否需要审批) | 通常不需要,高争议政策转人工 | 不需要审批,但必须校验对象归属 | 需要用户确认;投诉和赔付类可需客服确认 | 通常不审批,但必须有处理关系和审计 |
| 审计重点 | 政策版本、引用来源、搜索条件 | 用户身份、订单归属、查询原因 | 用户确认、幂等编号、工单结果 | 查看原因、角色、脱敏范围 |
工具卡里最容易被忽略的是“不能做什么”。例如:
search_policy不能承诺人工未审批的退款结果。get_order不能查询他人订单,不能修改订单。create_ticket不能绕过用户确认,不能重复创建同一问题工单。get_customer_profile不能返回完整身份证、手机号、地址等敏感原文。
这些禁止事项要进入工具描述和权限策略,而不是只写在团队口头约定里。
resource card(资源卡)契约
资源卡用于说明可读取的上下文资料。它比“文件路径”多得多。
| 资源 | resource_uri(资源地址)示例 | 业务用途 | permission_scope(权限范围) | 风险与处理 |
|---|---|---|---|---|
| 售后政策主文档 | policy://after-sales/main | 支持 search_policy 和政策解释 | 客户可读取公开摘要,客服可读取内部处理说明 | 必须记录版本和更新时间,避免引用过期政策。 |
| 退换货例外规则 | policy://after-sales/exceptions | 判断特殊商品、地区和时间规则 | 仅客服和主管可读取 | 不直接展示内部判定细节给客户。 |
| 工单分类说明 | ticket://taxonomy/current | 支持创建工单时选择分类 | 客户端可读,客户只看到简化分类 | 分类变更要版本化。 |
| 客户资料摘要 | customer://profile/summary | 支持客服理解客户历史 | 仅处理当前工单的客服或主管可读 | 必须脱敏,记录查看原因。 |
| 历史工单摘要 | ticket://history/summary | 支持判断是否重复投诉 | 客服和主管可读,客户只能看本人相关进度 | 不能暴露其他客户信息。 |
资源卡要回答 6 个问题:
- 资源能否被发现。
- 谁能读取。
- 读取的是原文、摘要还是脱敏结果。
- 资源是否可以被引用给用户。
- 资源版本如何记录。
- 读取行为是否进入审计。
在客服项目里,政策资源可以较多地进入回答引用;客户资料资源则应该尽量只作为内部上下文,不能原样展示给客户。
prompt template(提示模板)契约
提示模板不是必须全部放到 MCP Server(模型上下文协议服务端),但当某个业务域有稳定表达规范时,服务端提供模板很有价值。
| prompt_name(提示模板名称) | 适用场景 | 输入 | 输出要求 | 禁止事项 |
|---|---|---|---|---|
policy_answer_template | 根据政策搜索结果解释售后规则 | 用户问题、政策摘要、依据来源、风险提示 | 说明适用条件、引用依据、下一步建议 | 不承诺未审批结果,不编造政策来源。 |
ticket_confirmation_template | 创建工单前让用户确认诉求 | 问题摘要、分类、关联订单、证据材料 | 用简洁语言让用户确认是否提交 | 不在未确认时调用 create_ticket。 |
complaint_summary_template | 客服或主管复盘投诉 | 用户原话摘要、订单状态、历史工单 | 区分事实、诉求、证据、待确认点 | 不把推测写成事实。 |
profile_safe_summary_template | 使用客户资料摘要辅助回答 | 客户等级、历史工单摘要、风险标签 | 只输出服务建议和需注意事项 | 不输出完整隐私资料。 |
提示模板的价值是让不同客户端使用同一套业务表达标准。例如政策解释必须引用来源,工单创建必须先确认,投诉摘要必须区分事实和推测。它不能替代工具调用前的系统校验。
MCP Server(模型上下文协议服务端)登记卡
| 字段 | 示例 | 说明 |
|---|---|---|
| server_id(服务端编号) | ticket-server | 稳定标识服务端。 |
| 业务域 | 工单 | 说明服务端负责什么业务。 |
| transport_mode(传输模式) | 远程 HTTP(超文本传输协议) | 企业工作台多人共享,适合远程服务。 |
| 暴露工具 | create_ticket | 只暴露当前业务域内工具。 |
| 暴露资源 | 工单分类、处理时效、历史工单摘要 | 资源要有权限范围。 |
| 暴露提示模板 | ticket_confirmation_template | 创建前确认用户诉求。 |
| 默认 risk_level(风险等级) | 中高 | 因为会写入工单系统。 |
| approval_required(是否需要审批) | 用户确认,特定类型客服确认 | 写入动作不能静默执行。 |
| 审计要求 | 必须记录 audit_trace_id(审计追踪编号) | 便于复盘重复建单和投诉处理。 |
| 版本 | 2026-07 | 便于契约变更和回滚。 |
MCP Client(模型上下文协议客户端)会话卡
| 字段 | 示例 | 说明 |
|---|---|---|
| client_id(客户端编号) | customer-service-workbench | 标识客服工作台客户端。 |
| 当前角色 | 一线客服 | 决定可见工具和资源。 |
| 当前会话 | 售后投诉处理 | 决定工具白名单。 |
| auth_context(认证上下文) | 已登录客服、当前租户、当前客户、当前工单 | 传给服务端做二次校验。 |
| 可连接 server_id(服务端编号) | policy-server、order-server、ticket-server、customer-server | 来自客户端配置和角色策略。 |
| 当前可用工具 | search_policy、get_order、create_ticket、受限的 get_customer_profile | 筛选后的会话工具列表。 |
| 被隐藏工具 | 退款执行、客户完整资料导出 | 服务端可能有或其他系统有,但本会话不可用。 |
| audit_trace_id(审计追踪编号) | 本次会话追踪编号 | 串联发现、调用和回答。 |
会话卡体现了本章最关键的边界:服务端暴露的是候选能力,客户端会话卡决定当前到底能用什么。
制作步骤
第 1 步:先列业务动作,不先写服务端
先写出客服工作台到底需要哪些动作。
| 业务动作 | 推荐 MCP 形态 | 原因 |
|---|---|---|
| 搜索售后政策 | 工具 search_policy + 政策资源 | 可复用,边界清晰,需要来源和版本。 |
| 查询订单状态 | 工具 get_order | 需要身份和对象归属校验。 |
| 创建客服工单 | 工具 create_ticket | 写入业务系统,需要确认和幂等。 |
| 查看客户资料摘要 | 工具 get_customer_profile + 客户资料摘要资源 | 高敏感,只能摘要化和最小可见。 |
| 直接退款 | 不建议暴露自动执行工具 | 资金高风险,应只暴露发起审批或转人工。 |
判断标准是:动作是否稳定、是否复用、是否边界清楚、是否能审计、是否有失败兜底。不能因为 MCP 很热门,就把所有内部接口都暴露出去。
第 2 步:按业务域拆 MCP Server(模型上下文协议服务端)
把不同业务域拆开,而不是做万能服务端。
| 业务域 | server_id(服务端编号) | 第一批能力 |
|---|---|---|
| 政策 | policy-server | search_policy,政策资源,政策解释模板 |
| 订单 | order-server | get_order,订单状态说明资源 |
| 工单 | ticket-server | create_ticket,工单分类资源,确认模板 |
| 客户资料 | customer-server | get_customer_profile,客户资料摘要资源 |
拆分时要问一个问题:如果这个服务端出问题,会影响哪些业务?按业务域拆,可以把影响范围、权限策略和审计责任都变清楚。
第 3 步:为每个服务端写登记卡
登记卡至少写清:
- server_id(服务端编号)。
- 业务域。
- transport_mode(传输模式)。
- 暴露哪些工具、资源、提示模板。
- 默认权限范围。
- 风险等级。
- 是否需要审批。
- 审计要求。
- 负责人或维护团队。
- 版本和过期策略。
没有登记卡的服务端,很容易变成“谁也不知道这个工具从哪里来、谁负责、出了问题找谁”的黑箱。
第 4 步:为每个工具写 tool card(工具卡)
工具卡不要只写一句“查询订单”。最少要写清:
- tool_name(工具名称)。
- tool_description(工具描述)。
- 使用场景。
- 不适用场景。
- input_contract(输入契约)。
- output_contract(输出契约)。
- permission_scope(权限范围)。
- risk_level(风险等级)。
- approval_required(是否需要审批)。
- 错误状态。
- 审计字段。
例如 create_ticket 的工具卡必须强调:只有用户确认问题摘要后才能创建;同一订单同一问题不能重复创建;工具返回的工单编号必须来自工单系统,不能由模型生成。
第 5 步:为资源写 resource card(资源卡)
资源卡要写清:
- resource_uri(资源地址)。
- 资源名称。
- 业务域。
- 资源版本。
- 可读角色。
- 是否包含敏感信息。
- 是否允许引用给用户。
- 缓存和过期策略。
- 审计要求。
例如售后政策资源可以被引用给用户,但内部退换货例外规则可能只能给客服查看摘要;客户资料摘要可以辅助客服服务,但不能原样输出给客户。
第 6 步:设计 prompt template(提示模板)
提示模板要服务于稳定业务流程,而不是把所有逻辑写进 Prompt(提示词)。
推荐先做 3 个模板:
| 模板 | 作用 | 验收重点 |
|---|---|---|
| 政策解释模板 | 根据 search_policy 结果解释政策 | 必须引用依据,不夸大承诺。 |
| 工单确认模板 | 创建工单前确认用户诉求 | 必须让用户确认,不能直接提交。 |
| 投诉摘要模板 | 帮客服整理投诉材料 | 区分事实、诉求和待确认点。 |
模板的版本要记录。政策和流程变更后,旧模板不能长期继续使用。
第 7 步:设计 MCP Client(模型上下文协议客户端)发现策略
客户端连接服务端后,不要把发现结果原样给模型。它要做三次筛选:
| 筛选 | 判断问题 | 例子 |
|---|---|---|
| 客户端级筛选 | 这个工作台是否允许连接这个服务端? | 普通客户工作台不能连接内部报表服务端。 |
| 角色级筛选 | 当前用户角色能否看到这个工具或资源? | 客户看不到 get_customer_profile。 |
| 会话级筛选 | 当前问题是否需要这个工具? | 单纯解释政策时,不开放 create_ticket。 |
这一步就是本章核心原则的落地:Server 暴露工具,Client 决定哪些工具在当前会话可用。
第 8 步:设计 auth_context(认证上下文)
auth_context(认证上下文)至少要包含:
- 当前用户身份。
- 当前角色。
- 当前租户或业务线。
- 当前会话编号。
- 当前客户或订单或工单范围。
- 授权来源。
- 权限有效期。
- 是否已完成用户确认或人工审批。
客户端生成 auth_context(认证上下文),服务端必须校验。任何高风险工具都不能只因为客户端传了字段就执行。
第 9 步:设计调用结果处理
工具返回结果后,客户端要先处理,再交给 Agent(智能体)。
| 工具结果 | 客户端处理 | Agent 回答 |
|---|---|---|
| 成功 | 提取可展示字段,隐藏敏感字段 | 基于真实结果回答。 |
| 无权限 | 不泄露内部对象信息 | 说明当前账号无法处理。 |
| 缺输入 | 生成追问或让用户选择 | 要求补充必要信息。 |
| 需审批 | 进入确认或审批流程 | 说明可以提交审批,不承诺结果。 |
| 超时 | 有限重试或降级 | 不编造业务状态。 |
| 写入疑似成功但返回失败 | 查询幂等状态 | 避免重复创建或重复提交。 |
客户端不是简单转发层,它要把工具结果变成安全、可解释、可继续执行的状态。
第 10 步:设计验收样例
每个工具至少准备 6 类样例:
- 成功调用。
- 输入缺失。
- 无权限。
- 对象越权。
- 工具超时。
- 审批或确认缺失。
- 写入重复。
- 输出异常。
不要只验收“能成功查到订单”。能安全失败,才是企业系统能上线的前提。
和后续章节的关系
| 后续章节 | 和本章的关系 |
|---|---|
| LangGraph(智能体状态图框架)章节 | MCP Client(模型上下文协议客户端)筛选出的工具会成为状态图中的执行节点。 |
| 多智能体章节 | 多个 Agent 共享 MCP Server(模型上下文协议服务端)时,需要更严格的工具发现和权限边界。 |
| 安全权限章节 | 本章的 auth_context(认证上下文)、permission_scope(权限范围)、approval_required(是否需要审批)会进一步展开。 |
| 可观测性章节 | 本章的 audit_trace_id(审计追踪编号)会进入链路追踪、告警、质检和成本分析。 |
| 部署章节 | 本地 stdio(标准输入输出)和远程 HTTP(超文本传输协议)的部署、鉴权、限流和高可用会详细讨论。 |
| 作品集项目章节 | 本章的服务端登记卡、工具卡、资源卡和客户端会话卡可以直接成为作品集文档。 |
本章是从“知道 MCP 是什么”到“能做出可交付 MCP 接入方案”的桥梁。
岗位 JD(职位描述) 能力映射
第 2.6 章偏工具生态边界,本章偏制作方法。面试官会关注你是否能把 MCP 做成受控工程能力,而不是只连通几个工具。
| JD(职位描述)常见要求 | 本章对应能力 | 面试证据 |
|---|---|---|
| 开发或集成 MCP Server(模型上下文协议服务端) | 能按业务域设计 server_id(服务端编号)、tool card(工具卡)、resource card(资源卡)和 prompt template(提示模板) | 展示政策、订单、工单、客户资料服务端拆分。 |
| 在 Agent 应用中集成 MCP Client(模型上下文协议客户端) | 能按客户端、角色、会话筛选工具,并处理调用结果 | 说明“Server 暴露工具,Client 决定当前会话可用工具”。 |
| 设计认证、授权、审批和审计 | 能定义 auth_context(认证上下文)、permission_scope(权限范围)、approval_required(是否需要审批)和 audit_trace_id(审计追踪编号) | 用写入工具和客户资料工具讲清越权防护。 |
| 支撑本地与企业远程部署 | 能区分 stdio(标准输入输出)和 HTTP(超文本传输协议)的风险和运维要求 | 说明远程工具为什么必须有鉴权、限流、超时和审计。 |
版本与资料来源
本文是面向学习和作品集的工程教程,不提供完整源码,不讲 Python(编程语言)、TypeScript(类型化脚本语言)、JavaScript(脚本语言)或 JSON(结构化数据格式)语法。岗位相关说法来自对 AI Agent、MCP、RAG(检索增强生成)、Tool Calling(工具调用)和企业客服工具治理岗位需求的归纳,不代表任何招聘平台或机构的官方统计。
参考资料:
- Model Context Protocol(模型上下文协议)官方介绍:https://modelcontextprotocol.io/docs/getting-started/intro
- Model Context Protocol(模型上下文协议) Tools(工具)规范:https://modelcontextprotocol.io/specification/2025-11-25/server/tools(工具模块)
- Model Context Protocol(模型上下文协议) Resources(资源)规范:https://modelcontextprotocol.io/specification/2025-11-25/server/resources
- Model Context Protocol(模型上下文协议) Prompts(提示模板)规范:https://modelcontextprotocol.io/specification/2025-11-25/server/prompts
- OpenAI(模型服务商) MCP 指南:https://developers.openai.com/api/docs/mcp
- OpenAI(模型服务商) Agents SDK(智能体软件开发工具包) MCP 文档:https://openai.github.io/openai-agents-python/mcp/
- OWASP Top 10 for LLM Applications(大语言模型应用十大安全风险):https://owasp.org/www-project-top-10-for-large-language-model-applications/
过时风险:MCP 规范、远程传输、认证授权方式、客户端支持能力和模型供应商工具调用接口会持续变化。进入真实项目开发或正式出版前,必须重新核对官方文档、当前协议版本、SDK(软件开发工具包)版本和企业安全要求。