题干与适用场景
你负责设计一个企业代理平台。代理可以通过 MCP 调用工单、代码仓库和财务系统;工具既有只读查询,也有发版、退款和删除操作。服务器数量会动态变化,工具描述和返回内容可能来自不完全可信的服务器。请设计发现、授权、调用、结果处理、审计和故障恢复,并说明哪些操作必须经过人批准。
这里的核心不是把工具列表接到模型上,而是让每次调用都能回答四个问题:谁在什么范围内代表谁、调用了哪个版本的工具、输入和结果是否经过验证、出错后能否追溯和撤销。Amazon 的 SDE II 指引把系统设计的可靠性、可扩展性、安全性和取舍列为评价目标,适合用这类端到端题检验设计能力。
面试官在考察什么
强回答会把模型的选择能力与平台的执行权限分开。模型可以提出工具名和参数,策略引擎仍要依据用户、工作区、资源、风险级别和审批状态重新授权。
还要识别 MCP 规范中的边界:工具注解来自服务器时必须视为不可信,不能把 readOnlyHint 当作安全事实;工具结果既可能是结构化数据,也可能包含文本、资源链接或嵌入资源。NSA 的指导进一步强调动态调用、隐式信任和上下文共享会形成系统性风险。
最后,面试官会看你是否覆盖失败路径:目录被投毒、参数通过校验但越权、审批后参数被替换、执行超时、重复副作用,以及审计系统本身不可用。
回答前需要澄清的问题
先问工具的副作用。查询、写入、发版和删除是否能按风险分级?如果所有工具都只读,审批和回滚设计可以简化;只要存在资金、生产或个人数据操作,就必须引入强制审批和幂等约束。
再问信任边界。MCP 服务器是公司托管、第三方托管还是用户自带?如果服务器不受平台管理,工具描述、注解、返回文本和资源 URI 都只能作为输入数据,不能直接改变权限。
最后问合规和恢复目标。需要记录哪些主体、租户和数据分类?撤销是补偿事务、反向操作还是人工处理?这些答案会改变日志留存、凭证范围和工作流设计。
30 秒回答框架
可以这样回答:
“我会把模型当作不可信的提议者,把执行放进策略引擎和隔离运行器。平台先登记并签名工具版本,按用户、租户、资源和副作用做最小权限授权;只读调用也验证参数和结果,写入、发版、退款等高风险操作需要绑定具体参数的人工批准。调用前后记录不可抵赖的审计事件,结果不能直接成为下一次权限依据。对重复、超时、服务器变更和审批失配设置幂等、超时、熔断和回滚路径。”
分步骤深入解答
建立工具目录和版本身份
把服务器身份、工具名称、输入输出 JSON Schema、代码版本、网络范围和副作用登记到目录。目录变更产生版本号和审查记录;运行时只允许调用已批准版本。MCP 规范要求工具定义包含名称、描述和输入模式,也允许输出模式,但客户端仍需自行验证。
把权限绑定到具体调用
策略输入至少包含主体、租户、资源、动作、数据分类、环境和工具版本。策略输出是允许、拒绝或需要审批,并生成一次性调用令牌。令牌绑定参数摘要和有效期,避免审批后模型替换金额、目标仓库或资源 ID。
对注解和描述采取零信任解释
readOnlyHint、destructiveHint 等提示可以帮助排序,却不能作为授权依据。服务器若宣称只读,策略仍按实际能力和注册时的人工审查判断;描述中的“忽略此前指令”或外部文本要当作数据,不当作策略。
将调用放入隔离运行器
运行器使用短期凭证、受限网络和资源配额。它只接收经过策略校验的结构化参数,不把整段会话历史或其他租户数据注入工具。服务器返回的文本、资源链接和嵌入资源先进入结果隔离区,再按输出 Schema、大小、内容类型和数据标签校验。
设计人工审批和回显
审批卡片显示主体、服务器、工具版本、完整参数摘要、目标资源、预期副作用、有效期和撤销方式。批准记录绑定参数摘要;任何字段变化都使批准失效。低风险只读操作可采用事后抽查,高风险操作必须在执行前批准。
处理重复和部分失败
写操作携带幂等键,幂等键由业务动作和调用意图生成,不能只由模型随机生成。平台保存请求、结果和重试状态;超时先查询执行状态再决定重试。无法自动补偿时转人工队列,禁止盲目重复退款或发版。
记录可关联的审计事件
审计事件包含请求 ID、主体、租户、服务器指纹、工具版本、参数哈希、策略决定、审批者、执行结果和下游凭证 ID。敏感参数只存脱敏摘要或加密引用。日志写入失败时,高风险调用应默认拒绝或进入待处理状态,不能为了可用性静默放行。
设计撤销和逐步发布
先在沙箱服务器和影子流量中验证目录、策略和结果校验,再按租户或工具版本小比例放量。保留旧版本目录和凭证撤销开关;发现越权、提示注入或结果污染时,先阻断新调用、撤销令牌,再根据审计事件处理已经完成的副作用。
高质量示范回答
“我会把 MCP 接入分成目录、策略、审批、运行器和审计五层。目录记录服务器指纹、工具版本、输入输出模式和实际副作用;模型只能提交调用提议,策略引擎再按主体、租户、资源和环境判断允许或审批。审批绑定参数摘要,防止批准后改参。运行器使用短期凭证、受限网络和幂等键,结果先按 Schema、大小和数据标签校验,不能直接改变后续权限。所有决定和下游请求写入关联日志。服务器变更、超时、重复副作用或日志故障都有拒绝、熔断和回滚路径,并通过沙箱和分阶段发布验证。”
常见错误
把工具注解当成权限
错误表现:看到 readOnlyHint 就自动允许调用。失败原因:MCP 规范要求不可信服务器的注解不能作为安全事实。修正方法:注解只用于提示,权限来自登记、策略和运行时能力。
只验证模型生成的参数
错误表现:JSON Schema 通过就直接执行。失败原因:类型正确的参数仍可能跨租户、指向生产或触发重复副作用。修正方法:在 Schema 之外校验主体、资源归属、风险级别、幂等键和审批摘要。
审批只显示一句自然语言
错误表现:用户批准“帮我处理退款”。失败原因:批准对象不明确,执行时金额和账户可能变化。修正方法:回显完整目标、金额、版本、参数摘要和有效期,并将批准绑定到哈希。
把工具结果当作可信指令
错误表现:把返回文本直接拼入下一轮系统提示。失败原因:结果可能包含提示注入、跨租户数据或恶意 URI。修正方法:结果隔离、类型校验、数据标记和最小化传递。
只设计成功路径
错误表现:超时就重试,失败就继续下一个工具。失败原因:未知执行状态会造成重复写入,部分失败会破坏业务不变量。修正方法:幂等键、状态查询、补偿工作流、熔断和人工队列一起设计。
追问及应对
如果工具目录在调用期间发生变化怎么办?
冻结本次调用使用的服务器指纹、工具版本和 Schema。目录变更只影响新调用;若版本被撤销,策略引擎拒绝旧令牌并提示重新审批。
如果审批服务不可用怎么办?
对高风险操作采取 fail-closed,进入待处理队列并保留调用提议。低风险只读操作可以按预先批准的策略继续,但仍需写审计事件,不能用“审批超时”替代授权。
如果结果是合法 JSON 但包含另一个租户的数据怎么办?
输出 Schema 只能验证形状,不能证明授权范围。运行器需要把租户和资源范围传给下游,并在结果校验阶段检查对象归属、数据标签和返回数量;发现越界则隔离结果并触发告警。
如何判断某个工具是否应该允许自动调用?
按可逆性、影响范围、数据敏感度、重复成本和检测能力评分。可逆、低敏感、低影响的查询可自动调用;资金、生产变更、删除和跨租户读取应要求人工批准或专用工作流。
发生提示注入后如何调查?
用请求 ID串起原始输入、工具描述版本、模型提议、策略决定、审批回显、工具结果和后续调用。先撤销受影响服务器和令牌,再从隔离日志重放决策,确认哪些副作用已经完成。