MCP 是边界,不是约束层
MCP 可标准化 AI Application 发现和调用 Tool、读取 Resource、获取 Prompt 的方式,有助于互操作。它不会因为 Tool 带有 Schema 就成为系统宪法、完整治理层或 RBAC 替代。
| 控制 | Protocol 可帮助描述 | Application 必须执行 |
|---|---|---|
| Tool Input | 形状和已声明取值 | 可信身份、Object Access、业务 Policy |
| Resource | URI 与内容表示 | Tenant Filter、Ownership、Retention、Deletion |
| Sampling/模型请求 | Capability Negotiation | Budget、Consent、Destination、Privacy |
| Transport | Message Delivery | Endpoint Trust、Session Lifecycle、Replay 与 Limit |
固定实际部署的 Specification、Transport、SDK/Runtime Revision、Tool Catalog 与 Test Fixture。Protocol Field 与 SDK API 会演进。
Schema 是校验,不是 Authority
JSON Schema 可拒绝格式错误的 Input,却不能证明 Customer 拥有 Order、Price 最新,或 Deletion 被允许。模型生成的 Identifier、Tool Annotation 和 Schema 通过结果均是不可信证据。
def authorize_tool(session, request, orders):
if request.tool != "request_cancel_order":
return {"status": "rejected", "reason": "unknown_tool"}
order = orders.get_for_subject(request.order_token, session.subject_id)
if order is None or order.status != "open":
return {"status": "rejected", "reason": "not_cancellable"}
return {"status": "confirmation_required", "order_id": order.public_id}
这是应用 Policy,不是 MCP Code。重要副作用 Endpoint 必须在执行前重新校验认证 Subject、Tenant、当前 Object State、Confirmation Binding、Expiry、Idempotency Key 和业务 Invariant。
构建应用控制平面
在 Protocol Boundary 周围执行控制:
- 从可信 Authentication Middleware 派生 Subject、Tenant 与 Role;
- 按 Workload Allowlist Tool,并限制 Input、Result、File 与 Egress;
- 由拥有服务授权每次 Object Retrieval 和 Action;
- 将每个 Tool Result、Resource、Prompt、Annotation 与 Remote URL 视为不可信内容;
- 对外部或破坏性副作用要求显式 Confirmation 和持久化 Idempotency;
- 在模型输出之外执行 Budget、Timeout、Queue、Cancellation 和 Concurrency Lock;
- 记录脱敏的 Policy Decision 和 Lifecycle Evidence。
不要将任意 SQL、Shell、Filesystem Path 或无限制 HTTP Fetch 暴露为通用 Agent Tool。
Resources、Result 与并发
Resource 可以是方便的 Reference,却不是 Permission Scope。每次 Retrieval 都要认证和授权;Cache Key 按 Tenant/Subject 隔离;Subscription 有界;Deletion 传播到派生 Index 和 Cache。
Tool Result 可能含 Prompt Injection、超大 File、误导 URL 或私密数据。限制 MIME、Byte、Nesting、Redirect 和 Retention;将外部内容作为 Data 而非 Instruction 渲染。
竞争写入应使用拥有系统的 Transaction、Optimistic Version Check、Lock 或 Workflow State Machine。Agent Protocol 不能仅靠串行 Message 解决业务冲突。
测试失败路径
| 测试 | 要证明的失败 |
|---|---|
| Authorization | Cross-tenant Token、模型提供 Object ID、过期 Role |
| Effects | Duplicate Retry、执行后 Timeout、过期 Confirmation |
| Result | Injected Instruction、超大 Artifact、不安全 URL |
| Concurrency | 冲突 Update、Cancellation Race、Partial Failure |
| Privacy | 敏感 Telemetry、Cache Leak、不完整 Deletion |
| Recovery | 不可用 Tool、Retry Classification、Outcome_unknown |
在代表性任务上度量 Completion 与 Recovery。没有工作负载实验和证据时,不要宣称通用 Latency 或 Security Guarantee。
常见问题
MCP 能阻止 Agent 绕过 Policy 吗?
只有应用将相关 Service、Credential、Network Egress 与 Action Endpoint 放在强制控制后才可能。Protocol 本身不能阻止另一条特权路径。
RBAC 足够吗?
不够。RBAC 可支持粗粒度授权,敏感操作通常还需 Tenant/Object Check、Purpose、Current State、Approval、Rate Limit 与 Audit。
应记录什么日志?
记录脱敏 Correlation ID、Policy Decision、Tool Revision、Result Class、Latency 和 Failure Class。不要默认保留原始 Prompt、Secret、Private Artifact 或 Hidden Model Reasoning。