第 2.6.3 节:把 MCP 工具调用放进权限和授权流程
MCP 工具调用只有拆成可执行步骤,才容易复核、排错和交接。完成本节后,你应该能够设计 MCP 工具调用的角色权限、审批条件、审计记录和越权处理。
实现步骤或决策流程
推荐技术流
学习 MCP(模型上下文协议)时,不建议从“怎么写一个 MCP Server(模型上下文协议服务端)”开始。更稳的技术流是从工具治理升级到工具生态。
| 步骤 | 做什么 | 为什么 |
|---|---|---|
| 1 | 先复盘已有 Tool Calling(工具调用)工具 | 没有清晰工具契约,就不应该急着 MCP 化。 |
| 2 | 找出跨 Agent(智能体)复用的能力 | MCP 最适合复用型工具和资源。 |
| 3 | 按业务域拆 MCP Server(模型上下文协议服务端) | 订单、工单、知识库、报表分开,权限和日志更清晰。 |
| 4 | 设计工具发现清单 | 让客户端知道工具名称、用途、输入、输出、风险和版本。 |
| 5 | 设计资源读取边界 | 明确哪些文档、报表、记录可以作为资源读取。 |
| 6 | 设计 MCP Client(模型上下文协议客户端)过滤策略 | 不同角色、场景、租户看到不同工具。 |
| 7 | 设计权限、状态和日志 | 防止越权、重复执行、失败不可查。 |
| 8 | 设计失败兜底和人工审批 | 工具失败或高风险动作不能让模型自由发挥。 |
| 9 | 用验收样例测试工具生态 | 覆盖发现、调用、无权限、超时、审批、日志。 |
| 10 | 再进入具体服务端和客户端实现 | 先有契约和治理,再写代码。 |
这条技术流的核心是:MCP 不是用来跳过工程设计的,而是把工程设计标准化。
字段契约
本章不写代码,但必须写字段契约。字段契约的作用是让产品、前端、后端、Agent 设计和审计对齐。
契约 1:MCP Server(模型上下文协议服务端)登记卡
| 字段 | 含义 | 客服项目示例 | 验收要求 |
|---|---|---|---|
| 服务端名称 | 给客户端识别的名称 | 订单 MCP Server(模型上下文协议服务端) | 名称稳定,不能随意变化。 |
| 业务域 | 服务端负责的业务范围 | 订单与物流 | 不能跨域暴露无关能力。 |
| 负责人 | 业务和技术负责人 | 售后系统团队 | 出问题能找到责任人。 |
| 可用工具数 | 暴露的工具数量 | 3 个只读工具 | 工具数量不宜膨胀。 |
| 可用资源数 | 暴露的资源数量 | 订单状态说明、物流异常规则 | 资源必须有版本。 |
| 风险等级 | 服务端整体风险 | 中 | 决定审批和监控强度。 |
| 适用客户端 | 哪些应用可连接 | 客服工作台、售后审批工作台 | 不能默认所有客户端可见。 |
| 数据范围 | 可访问哪些数据 | 当前用户订单、授权客服队列订单 | 必须有租户和归属边界。 |
| 审计要求 | 记录哪些日志 | 发现日志、调用日志、错误日志 | 每次调用可追踪。 |
| 版本 | 当前服务端契约版本 | 订单工具契约 v1 | 修改字段要有变更记录。 |
契约 2:工具发现结果
MCP Client(模型上下文协议客户端)连接服务端后,工具发现结果不能只包含工具名,还要包含治理信息。
| 字段 | 含义 | 客服项目示例 | 为什么需要 |
|---|---|---|---|
| 工具名称 | 可被客户端识别的工具 | 查询订单状态 | 用于工具选择和日志。 |
| 工具说明 | 说明什么时候使用 | 查询当前用户或授权队列内订单的支付、发货和物流状态 | 降低模型误选工具风险。 |
| 工具类型 | 只读、写入、审批、通知 | 只读 | 决定是否需要确认。 |
| 输入字段摘要 | 工具需要哪些输入 | 用户编号、订单编号、查询原因、trace_id(追踪编号) | 让客户端判断参数是否完整。 |
| 输出字段摘要 | 工具会返回什么 | 订单状态、物流摘要、是否可售后、错误状态 | 让 Agent 知道如何组织回答。 |
| 风险等级 | 低、中、高 | 中 | 决定权限和审计强度。 |
| 是否需要人工确认 | 调用前是否需要人确认 | 否 | 写入和高风险工具必须明确。 |
| 可见角色 | 哪些角色能发现该工具 | 客户本人、授权客服、售后主管 | 防止工具过度暴露。 |
| 版本 | 工具契约版本 | v1 | 方便变更追踪。 |
| 当前状态 | 可用、禁用、维护中、灰度中 | 可用 | 防止调用维护中的工具。 |
契约 3:查询订单状态工具
输入契约:
| 字段 | 含义 | 来源 | 是否必填 | 权限说明 |
|---|---|---|---|---|
| 用户编号 | 当前登录用户或被授权服务对象 | 会话系统 | 是 | 不能只信用户输入。 |
| 订单编号 | 被查询订单 | 用户选择、订单列表或客服授权队列 | 是 | 必须校验订单归属。 |
| 查询场景 | 为什么查询 | 对话意图或客服操作 | 否 | 用于质检和统计。 |
| 客户端编号 | 发起调用的工作台 | MCP Client(模型上下文协议客户端) | 是 | 区分客服端、主管端、审批端。 |
| trace_id(追踪编号) | 串联整次请求 | 系统生成 | 是 | 审计和排查必需。 |
输出契约:
| 字段 | 含义 | 给谁使用 | 验收要求 |
|---|---|---|---|
| 订单状态 | 已支付、已发货、运输中、已签收等 | Agent 和前端 | 只能来自订单系统。 |
| 物流摘要 | 最近物流节点 | 用户和客服 | 不完整时要标记。 |
| 是否可售后 | 是否具备售后入口 | Agent 和售后流程 | 不能代替最终审批。 |
| 异常提示 | 无权限、无数据、订单异常 | 系统和人工客服 | 不泄露内部敏感细节。 |
| 工具结果状态 | 成功、失败、超时、无权限 | Agent 和日志 | 必须稳定枚举。 |
契约 4:创建客服工单工具
输入契约:
| 字段 | 含义 | 来源 | 是否必填 | 风险说明 |
|---|---|---|---|---|
| 用户编号 | 当前用户身份 | 会话系统 | 是 | 防止替他人建单。 |
| 问题摘要 | 用户诉求总结 | Agent 生成,用户确认 | 是 | 未确认不能写入。 |
| 问题类型 | 售后、物流、投诉、退款咨询等 | 意图识别或客服选择 | 是 | 影响分派队列。 |
| 关联订单 | 相关订单编号 | 订单工具结果或用户选择 | 否 | 必须校验归属。 |
| 用户确认状态 | 用户是否确认提交 | 前端确认 | 是 | 写入动作必需。 |
| 幂等编号 | 防止重复创建 | 系统生成 | 是 | 同一请求不能重复建单。 |
| trace_id(追踪编号) | 串联本次对话和工具调用 | 系统生成 | 是 | 审计必需。 |
输出契约:
| 字段 | 含义 | 验收要求 |
|---|---|---|
| 工单编号 | 工单系统返回的真实编号 | 不能由模型生成。 |
| 当前状态 | 已创建、待分派、需补资料等 | 必须来自工单系统。 |
| 预计处理时间 | 工单系统规则返回 | 不能随口承诺。 |
| 下一步动作 | 等待处理、补充材料、转人工 | 必须可执行。 |
| 重复提交提示 | 已存在同类进行中工单 | 不重复创建。 |
契约 5:资源读取契约
| 字段 | 含义 | 客服项目示例 | 验收要求 |
|---|---|---|---|
| 资源标识 | 资源的唯一入口 | 售后政策文档、物流异常说明 | 稳定可追踪。 |
| 资源类型 | 文档、表格、报表、数据库记录 | 政策文档 | 影响读取和展示方式。 |
| 资源版本 | 当前资料版本 | 售后政策 2026-06 版 | 回答必须能追溯版本。 |
| 可读角色 | 谁能读取 | 客服、主管、知识库管理员 | 普通客户不能读取内部规则。 |
| 敏感级别 | 是否含个人信息或内部信息 | 内部质检规则为敏感 | 决定是否脱敏。 |
| 引用方式 | 回答中如何引用来源 | 文档标题、段落、更新时间 | 防止无来源回答。 |
| 缓存策略 | 是否可缓存 | 政策文档可短期缓存,订单记录不缓存 | 防止旧数据误用。 |
契约 6:审计日志
| 日志字段 | 含义 | 示例 | 为什么需要 |
|---|---|---|---|
| trace_id(追踪编号) | 串联用户问题、工具发现、工具调用和回答 | 一次客服会话的唯一追踪 | 排查和复盘。 |
| 会话编号 | 多轮对话标识 | 同一用户咨询流程 | 判断上下文。 |
| 用户编号 | 发起请求的人 | 当前客户或客服 | 责任归属。 |
| 客户端编号 | 哪个 MCP Client(模型上下文协议客户端)发起 | 客服工作台 | 区分不同应用。 |
| 服务端名称 | 哪个 MCP Server(模型上下文协议服务端)响应 | 工单服务端 | 定位服务端问题。 |
| 工具名称或资源标识 | 使用了什么能力 | 创建客服工单 | 审计工具选择。 |
| 工具版本 | 当时使用的契约版本 | v1 | 复盘变更影响。 |
| 输入摘要 | 关键输入字段摘要 | 订单编号尾号、问题类型 | 不记录完整敏感原文。 |
| 输出摘要 | 关键返回结果摘要 | 已创建工单、无权限、超时 | 质检和排查。 |
| 执行状态 | 成功、失败、无权限、超时、待审批 | 成功 | 监控和告警。 |
| 审批状态 | 是否经过用户或人工确认 | 用户已确认 | 高风险审计。 |
| 错误原因 | 失败时的原因 | 订单不属于当前用户 | 兜底和修复。 |
日志的目标是可复盘,不是复制全部数据。敏感信息、密钥、完整身份证号、完整手机号、完整对话隐私都不应该原样写入日志。
制作步骤
下面是一套不写代码也能执行的 MCP 设计步骤,适合做课程作业、作品集设计文档和面试准备。
读图重点:沿“可见—认证—对象归属—风险”向下读:只读工具可放行,写入先确认并查幂等,高风险先审批;越权、超时、拒绝和异常都不会交给模型编造结果,而是统一留痕。
第 1 步:盘点已有客服工具
先从第 1.6 章的 Tool Calling 工具开始盘点:
| 已有工具 | 是否稳定 | 是否复用 | 是否适合 MCP 化 |
|---|---|---|---|
| 查询订单状态 | 稳定 | 高 | 适合。 |
| 查询售后政策 | 稳定 | 高 | 适合,也可以作为资源读取。 |
| 创建客服工单 | 较稳定 | 高 | 适合,但要用户确认和幂等。 |
| 发起退款审批 | 规则复杂 | 中 | 可后置,必须人工审批。 |
| 直接退款 | 高风险 | 低 | 不适合自动 MCP 工具化。 |
判断标准不是“能不能做”,而是“是否稳定、是否复用、是否有权限和日志”。
第 2 步:按业务域拆服务端
不要把所有工具塞进一个 MCP Server(模型上下文协议服务端)。推荐按业务域拆:
- 知识库 MCP Server(模型上下文协议服务端)。
- 订单 MCP Server(模型上下文协议服务端)。
- 工单 MCP Server(模型上下文协议服务端)。
- 审批 MCP Server(模型上下文协议服务端)。
- 报表 MCP Server(模型上下文协议服务端)。
拆分后,每个服务端都能有自己的负责人、权限策略、日志指标和版本节奏。
第 3 步:写服务端登记卡
每个 MCP Server(模型上下文协议服务端)上线前都要有登记卡,至少说明:
- 服务端名称。
- 业务域。
- 负责人。
- 可用工具。
- 可用资源。
- 风险等级。
- 适用客户端。
- 数据范围。
- 审计要求。
- 当前版本。
这一步看起来像文档工作,但它能避免后期“没人知道这个工具是谁暴露的”。
第 4 步:设计工具发现结果
每个工具发现结果都要说明:
- 工具做什么。
- 什么时候应该用。
- 什么时候不应该用。
- 需要哪些输入。
- 返回哪些输出。
- 当前风险等级。
- 是否需要用户确认或人工审批。
- 哪些角色可见。
工具说明写得越模糊,模型越容易误选工具。一个合格工具说明应该包含边界,例如:
| 工具 | 好的说明 | 不好的说明 |
|---|---|---|
| 查询订单状态 | 查询当前用户或授权客服队列内订单的支付、发货、物流和售后入口状态;不修改订单。 | 查询订单。 |
| 创建客服工单 | 在用户确认问题摘要后创建客服处理单;同一诉求重复提交时返回已有工单。 | 帮用户处理问题。 |
| 发起退款审批 | 收集材料并创建退款审批申请;不直接退款,不承诺审批结果。 | 处理退款。 |
第 5 步:设计 MCP Client(模型上下文协议客户端)过滤策略
客户端不能把服务端暴露的所有工具都直接交给模型。过滤策略至少要考虑:
- 当前用户角色。
- 当前租户或店铺。
- 当前业务线。
- 当前会话场景。
- 工具风险等级。
- 工具是否维护中。
- 是否启用灰度。
例如:
| 当前角色 | 可发现工具 | 不可发现工具 |
|---|---|---|
| 普通客户 | 查询本人订单、读取公开政策、创建本人咨询工单 | 内部质检报表、客服备注、批量导出。 |
| 一线客服 | 查询授权队列订单、创建工单、追加处理备注 | 资金补偿、跨团队报表、系统配置。 |
| 主管 | 查看汇总报表、查询团队工单、读取质检规则 | 直接修改客户资金、绕过审批。 |
| 知识库管理员 | 读取和维护政策资源 | 查询客户隐私订单。 |
第 6 步:设计资源边界
资源读取经常被低估。客服 Agent 读取的政策、报表和规则可能包含内部信息。
资源边界要回答:
- 哪些资源可以被普通客服读取。
- 哪些资源只能给主管读取。
- 哪些资源可以引用给客户。
- 哪些资源只能用于内部判断,不能直接展示。
- 资源过期时如何提示。
- 资源读取是否进入日志。
第 7 步:设计写入和审批
MCP 工具生态里,写入工具必须特别谨慎。
| 写入动作 | 推荐策略 |
|---|---|
| 创建普通咨询工单 | 用户确认问题摘要后自动创建。 |
| 创建投诉工单 | 用户确认,记录证据和敏感字段。 |
| 追加客服备注 | 仅客服角色可用,记录操作者。 |
| 发起退款审批 | 只创建审批,不直接退款。 |
| 发放补偿 | 不自动执行,必须人工审批。 |
| 关闭投诉 | 不建议由 Agent 自动执行。 |
写入工具上线前,要先验证幂等、重复提交、撤销方式和人工接管。
第 8 步:设计验收样例
每个 MCP Server(模型上下文协议服务端)至少准备这些样例:
| 样例类型 | 期望验证 |
|---|---|
| 正常发现 | 合法客户端能发现正确工具。 |
| 无权限发现 | 普通用户看不到内部工具。 |
| 正常调用 | 工具返回真实业务结果。 |
| 参数缺失 | 系统追问或拒绝调用。 |
| 对象越权 | 不返回敏感数据。 |
| 工具超时 | 有清晰降级回答。 |
| 重复写入 | 不重复创建工单。 |
| 高风险审批 | 进入人工审批而不是直接执行。 |
| 日志复盘 | 能用 trace_id(追踪编号)串起全链路。 |
第 9 步:准备面试讲法
完成设计后,读者应该能用 1 分钟说明:
我在客服 Agent 工作台里把 MCP 放在 Agent 应用和企业系统之间。Tool Calling 负责模型如何申请调用工具,MCP 负责工具和资源如何被统一发现、连接和复用。我会把订单、工单、知识库、审批按业务域拆成不同 MCP Server(模型上下文协议服务端),客服工作台作为 MCP Client(模型上下文协议客户端)根据用户角色和场景发现可用工具。只读工具可以自动调用,写入工具要用户确认,高风险动作进入人工审批。所有发现和调用都会记录 trace_id(追踪编号)、工具版本、输入摘要、输出状态和审批结果,这样才能防止越权、重复执行和不可追溯的问题。
和后续章节的关系
本章是第 2 卷后续工程章节的连接点。
| 后续章节 | 和本章的关系 |
|---|---|
| MCP Server(模型上下文协议服务端)制作章节 | 本章讲服务端应该暴露什么、怎么治理;后续会讲如何制作具体服务端。 |
| MCP Client(模型上下文协议客户端)集成章节 | 本章讲客户端职责;后续会讲如何在工作台里连接、发现和调用。 |
| RAG(检索增强生成)章节 | 知识库检索能力可以通过 MCP 作为工具或资源暴露。 |
| LangGraph(智能体状态图框架)章节 | 多步骤客服流程会把 MCP 工具调用放进状态节点。 |
| 安全权限章节 | MCP 会放大权限设计的重要性,尤其是工具发现和高风险动作。 |
| 可观测性章节 | MCP 的连接、发现、调用和审批都要进入追踪和告警。 |
| 多智能体章节 | 多个 Agent 共享企业工具生态时,MCP 能降低重复接入成本。 |
可以把本章看成“企业工具生态”的总入口。后续章节会把其中的服务端、客户端、安全和流程编排拆开讲。
岗位 JD(职位描述) 能力映射
MCP 相关岗位要求往往会写成“Agent 工具生态”“企业工具集成”“工具调用平台”。本章把这些要求拆成可面试表达的能力。
| JD(职位描述)常见要求 | 本章对应能力 | 面试证据 |
|---|---|---|
| 设计 Agent 工具生态 | 能区分 Tool Calling 和 MCP 的职责 | 用客服工作台说明工具如何被发现、过滤、调用和审计。 |
| 封装企业工具和资源 | 能按知识库、订单、工单、审批、报表拆分 MCP Server(模型上下文协议服务端) | 展示服务端登记卡、工具发现结果和资源读取契约。 |
| 控制工具权限和高风险动作 | 能设计角色过滤、风险等级、用户确认和人工审批 | 说明退款、补偿、关闭投诉为什么只能发起审批。 |
| 建设可观测工具调用链路 | 能记录 trace_id(追踪编号)、工具版本、输入摘要、输出状态和失败原因 | 用审计日志契约复盘一次工具调用。 |
版本与资料来源
本文是面向学习和作品集的工程教程,不提供完整源码,不讲代码语法。岗位相关说法来自对 AI Agent、RAG、MCP 和企业工具调用岗位描述的样本归纳,不代表任何招聘平台或机构的官方统计。
参考资料:
- 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
- OpenAI(模型服务商) Function Calling(函数调用)指南:https://developers.openai.com/api/docs/guides/function-calling
- OpenAI(模型服务商) Agents SDK(智能体软件开发工具包) MCP 文档:https://openai.github.io/openai-agents-python/mcp/
- OpenAI(模型服务商) Agents SDK(智能体软件开发工具包) Human-in-the-loop(人工参与闭环)文档:https://openai.github.io/openai-agents-python/human_in_the_loop/
- OWASP Top 10 for LLM Applications(大语言模型应用十大安全风险):https://owasp.org/www-project-top-10-for-large-language-model-applications/
过时风险:MCP 规范、模型供应商工具调用接口、Agents SDK(智能体软件开发工具包)和客户端支持能力会持续变化。进入真实项目开发或正式出版前,必须重新核对官方文档、当前协议版本、SDK(软件开发工具包)版本和企业安全要求。