📚 首页 / architecture-exercises / scenarios-tools-mcp.md

架构决策训练 — 工具/MCP 类(EX09–EX16)

主题:接入方式(API or MCP)、原语选择(Tool or Resource)、控制权归属(Claude decides or application decides)、审批(automatic write or human approval)、重试幂等、工具设计。题目三要素在前,答案在文末。

EX09 — 集团 AI 平台接入 30+ 系统(★★☆)

核心张力:API or MCP?(依据:模块 06)

Scenario 大型集团的 AI 平台团队要支撑 12 个内部团队构建 agent 应用,都需要访问共同的后端系统:Jira、Confluence、Slack、Snowflake、内部 CRM、部署系统等 30+ 个。每个系统都有自己的认证与权限模型。平台团队希望「接一次,处处可用」,并能统一治理审计。

Constraints

Options A. 每个应用团队自己写集成代码(直连各系统 API) B. 平台团队为每个后端系统建 MCP server,应用侧作为 MCP client 接入(N 个 server,M 个 client) C. 平台团队写一个「万能网关」HTTP API,把 30 个系统全部包一层 REST D. 让各应用直接用各 SaaS 厂商自带的 agent 集成,平台不治理


EX10 — 创业公司的一个天气 API(★☆☆)

核心张力:API or MCP?

Scenario 三人创业公司做日程助手,唯一的外部依赖是天气 API:一个函数、三个参数(地点/日期/单位)。没有其他 agent 应用计划,没有多团队复用需求。

Constraints

Options A. 直接写一个 client tool(应用内函数封装天气 API,定义为 Claude 的 tool) B. 自建 MCP server 包住天气 API,应用经 MCP 调用 C. 让 Claude 用 web_search server tool 搜天气 D. 接入第三方公共天气 MCP server


EX11 — 组织架构树与 wiki 库(★★☆)

核心张力:Tool or Resource?(依据:模块 06;MCP 2026-07-28 规范)

Scenario 你在为公司内部助手建 MCP server,要暴露两类内容:① 组织架构树——agent 需要在推理时按语义查询(「找负责 X 产品的 VP 是谁」);② 1000 篇内部 wiki 文档——希望在会话开始时可列出/订阅其更新,由应用或用户决定把哪些装进上下文,而不是模型自主决定。

Constraints

Options A. 全部做成 MCP tools(model-controlled) B. 全部做成 MCP resources(application-driven) C. 组织架构做成 tool(语义查询),wiki 做成 resources + resource templates(URI 标识、可订阅) D. 组织架构做成 prompts 原语,wiki 做成 tool


EX12 — 退款流水线(★★☆)

核心张力:Claude decides or application decides?(依据:模块 04 §4/§6)

Scenario 电商退款流程已定型为固定四步:查订单 → 校验退款资格(规则明确)→ 执行退款(资金操作)→ 生成通知文案。步骤顺序永远不变,每步参数明确。少数订单会触发「异常分支」(规则冲突、历史特殊情况)需要灵活判断。

Constraints

Options A. 给 Claude 全套工具(tool_choice: auto),让它自主决定调什么、什么顺序 B. 固定 workflow:应用代码编排四步,关键校验与执行走确定性代码;Claude 用 tool_choice: {"type": "tool"} 被定向调用(做异常判断与文案生成),大额/异常走人审 C. 全确定性代码,Claude 完全不参与 D. 开放式 agent:Claude 拿全套工具自主循环直至完成


EX13 — CRM 批量修改与外发邮件(★★☆)

核心张力:automatic write or human approval?(依据:模块 04 §6)

Scenario 营销 agent 有两个写操作:① 批量更新 CRM 客户标签(可逆:有操作日志可回滚,但单次最多影响 5 万条记录);② 给客户群发邮件(不可逆:发出无法撤回)。团队要决定哪些动作自动执行、哪些进人审队列。

Constraints

Options A. 全部自动执行(信任模型 + 好的 prompt) B. 全部人审(安全至上) C. 分级:① 自动执行 + 批量限额 + 审计日志 + 异常暂停阈值;② 一律人审队列(批量小的场景允许抽样人审 + 发送限额灰度) D. ①人审、②自动(按操作频次定)


EX14 — 支付工具超时(★★★)

核心张力:retry, reconcile, or give up?(idempotency)(依据:模块 04 §13)

Scenario agent 的 charge_customer 工具调用支付网关,网关侧实际已扣款成功,但响应在网络上超时了。你的执行器现在收到的是 TimeoutError。用户在等结果,Claude 在等 tool_result。

Constraints

Options A. 立即原样重发支付请求(赌它失败了) B. 回传 is_error: true,内容写「支付失败」,让 Claude 决定 C. 先对账:用幂等键查询该笔交易状态——已成功则返回成功结果;未成功才带同一幂等键安全重试;仍不确定则回传带明确状态说明的 is_error D. 抛异常终止整个会话,转人工


EX15 — 参数错误率高的录入 agent(★★☆)

核心张力:strict tool use or prompt discipline?(依据:模块 04 §4、模块 05 §2.4)

Scenario 数据录入 agent 调用 create_ticket 工具,参数复杂(15 个字段、多层嵌套、很多可选)。上线后约 8% 的调用缺必填字段或类型错误,靠回传 is_error 让 Claude 自我修正,平均浪费 2.3 轮。

Constraints

Options A. 在工具 description 里更详细地写「务必填全字段」 B. 重构 + strict:schema 扁平化、能 required 的全改 required、拆分嵌套;create_ticket 标 strict: true,其余工具按需 C. 全部 7 个工具都标 strict: true D. 不用 strict,加一层本地校验 + 修复式重问回路


EX16 — 2MB 日志工具结果(★★☆)

核心张力:trim, summarize, or server-side processing?(依据:模块 04 §3)

Scenario 日志分析工具 fetch_logs 返回原始 JSON 日志,典型体量 2MB。全量回传 tool_result 后:上下文被淹没、每轮都在为它付 token、Claude 反而更容易漏关键行。而 agent 的任务是「找到 ERROR 相关的根因线索」,不同任务关注的字段不同。

Constraints

Options A. 全量 2MB 回传,让 Claude 自己看 B. 工具侧裁剪为高信号摘要(按 ERROR 级别过滤 + 关键字段投影 + 语义化 ID),并支持结构化查询参数让 Claude 迭代缩小范围 C. 回传原始日志给 code_execution,让 Claude 写代码在沙箱里分析 D. 摘要 B + 对敏感日志走 C 前先脱敏(或 C 不可接受敏感数据出域时只用 B)



答案与解析

EX09 — Best choice: B

Why

Why other choices are weaker

Tradeoffs

What would change the answer

EX10 — Best choice: A

Why

Why other choices are weaker

Tradeoffs

What would change the answer

EX11 — Best choice: C

Why

Why other choices are weaker

Tradeoffs

What would change the answer

EX12 — Best choice: B

Why

Why other choices are weaker

Tradeoffs

What would change the answer

EX13 — Best choice: C

Why

Why other choices are weaker

Tradeoffs

What would change the answer

EX14 — Best choice: C

Why

Why other choices are weaker

Tradeoffs

What would change the answer

EX15 — Best choice: B

Why

Why other choices are weaker

Tradeoffs

What would change the answer

EX16 — Best choice: D

Why

Why other choices are weaker

Tradeoffs

What would change the answer

📚 目录