Human approval for MCP tools: design the interruption, not just the buttonHuman approval for MCP tools: design the interruption, not just the button

Human approval for MCP tools: design the interruption, not just the button addresses one concrete problem: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. The guide works from the actual objects — MCP, approval, RunState, tool call, resume — and aims for a verifiable decision rather than a generic pattern.

The concrete problem: MCP meets approval

The hard part appears when the happy path meets authorization, failures, and operational constraints.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c11 starts at tool call and treats resume as an explicit boundary rather than an implicit assumption. The first control requires MCP to emit an observable result before approval can trigger the intended effect around RunState. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to resume, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by MCP and RunState: anything not demonstrated by scenario mcp-human-approval-interruption-design-c11 is labeled as a limitation or inference, never promoted to fact. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns tool call into a reviewable decision point with a named input and a retained output.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c12 starts at resume and treats MCP as an explicit boundary rather than an implicit assumption. The first control requires approval to emit an observable result before RunState can trigger the intended effect around tool call. To test MCP, fixture mcp-human-approval-interruption-design-c12 contains both an allowed state and a rejected state; rejection must occur before any change attributed to approval. Operations then observes the transition between approval and RunState, while security checks that tool call receives neither implicit authority nor unnecessary data. If the RunState verification fails, rollback restores the configuration around tool call, replays mcp-human-approval-interruption-design-c12, and compares the new state with the control evidence from resume.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c13 starts at MCP and treats approval as an explicit boundary rather than an implicit assumption. The first control requires RunState to emit an observable result before tool call can trigger the intended effect around resume. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to approval, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by RunState and resume: anything not demonstrated by scenario mcp-human-approval-interruption-design-c13 is labeled as a limitation or inference, never promoted to fact. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns MCP into a reviewable decision point with a named input and a retained output.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c14 starts at approval and treats RunState as an explicit boundary rather than an implicit assumption. The first control requires tool call to emit an observable result before resume can trigger the intended effect around MCP. To test RunState, fixture mcp-human-approval-interruption-design-c14 contains both an allowed state and a rejected state; rejection must occur before any change attributed to tool call. Operations then observes the transition between tool call and resume, while security checks that MCP receives neither implicit authority nor unnecessary data. If the resume verification fails, rollback restores the configuration around MCP, replays mcp-human-approval-interruption-design-c14, and compares the new state with the control evidence from approval.

Technical state of MCP for Human approval for MCP tools: design the interruption, not just the button
Context capture for The concrete problem: MCP meets approval: locally produced state for control mcp-human-approval-interruption-design.
Evidence point: OpenAI documents that run results expose final output, new items, agent identity, raw responses, guardrail results, state and usage diagnostics. This source anchors the concrete problem: mcp meets approval but does not replace local verification. [S1]

Trust boundaries around RunState

A robust implementation separates what the model proposes from what the application authorizes and verifies.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c21 starts at resume and treats MCP as an explicit boundary rather than an implicit assumption. The first control requires approval to emit an observable result before RunState can trigger the intended effect around tool call. If the RunState verification fails, rollback restores the configuration around tool call, replays mcp-human-approval-interruption-design-c21, and compares the new state with the control evidence from resume. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to MCP, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by approval and tool call: anything not demonstrated by scenario mcp-human-approval-interruption-design-c21 is labeled as a limitation or inference, never promoted to fact.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c22 starts at MCP and treats approval as an explicit boundary rather than an implicit assumption. The first control requires RunState to emit an observable result before tool call can trigger the intended effect around resume. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns MCP into a reviewable decision point with a named input and a retained output. To test approval, fixture mcp-human-approval-interruption-design-c22 contains both an allowed state and a rejected state; rejection must occur before any change attributed to RunState. Operations then observes the transition between RunState and tool call, while security checks that resume receives neither implicit authority nor unnecessary data.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c23 starts at approval and treats RunState as an explicit boundary rather than an implicit assumption. The first control requires tool call to emit an observable result before resume can trigger the intended effect around MCP. If the resume verification fails, rollback restores the configuration around MCP, replays mcp-human-approval-interruption-design-c23, and compares the new state with the control evidence from approval. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to RunState, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by tool call and MCP: anything not demonstrated by scenario mcp-human-approval-interruption-design-c23 is labeled as a limitation or inference, never promoted to fact.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c24 starts at RunState and treats tool call as an explicit boundary rather than an implicit assumption. The first control requires resume to emit an observable result before MCP can trigger the intended effect around approval. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns RunState into a reviewable decision point with a named input and a retained output. To test tool call, fixture mcp-human-approval-interruption-design-c24 contains both an allowed state and a rejected state; rejection must occur before any change attributed to resume. Operations then observes the transition between resume and MCP, while security checks that approval receives neither implicit authority nor unnecessary data.

Technical state of approval for Human approval for MCP tools: design the interruption, not just the button
Context capture for Trust boundaries around RunState: locally produced state for control mcp-human-approval-interruption-design.
Evidence point: OpenAI documents that an Agent combines instructions, tools and optional runtime behavior such as handoffs, guardrails and structured outputs. This source anchors trust boundaries around runstate but does not replace local verification. [S2]

Prepare the starting state and prerequisites

The starting point is not a feature; it is an observable decision boundary.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c31 starts at MCP and treats approval as an explicit boundary rather than an implicit assumption. The first control requires RunState to emit an observable result before tool call can trigger the intended effect around resume. Operations then observes the transition between RunState and tool call, while security checks that resume receives neither implicit authority nor unnecessary data. If the tool call verification fails, rollback restores the configuration around resume, replays mcp-human-approval-interruption-design-c31, and compares the new state with the control evidence from MCP. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to approval, a concrete condition, and evidence instead of a generic assurance.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c32 starts at approval and treats RunState as an explicit boundary rather than an implicit assumption. The first control requires tool call to emit an observable result before resume can trigger the intended effect around MCP. The conclusion stays bounded by tool call and MCP: anything not demonstrated by scenario mcp-human-approval-interruption-design-c32 is labeled as a limitation or inference, never promoted to fact. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns approval into a reviewable decision point with a named input and a retained output. To test RunState, fixture mcp-human-approval-interruption-design-c32 contains both an allowed state and a rejected state; rejection must occur before any change attributed to tool call.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c33 starts at RunState and treats tool call as an explicit boundary rather than an implicit assumption. The first control requires resume to emit an observable result before MCP can trigger the intended effect around approval. Operations then observes the transition between resume and MCP, while security checks that approval receives neither implicit authority nor unnecessary data. If the MCP verification fails, rollback restores the configuration around approval, replays mcp-human-approval-interruption-design-c33, and compares the new state with the control evidence from RunState. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to tool call, a concrete condition, and evidence instead of a generic assurance.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c34 starts at tool call and treats resume as an explicit boundary rather than an implicit assumption. The first control requires MCP to emit an observable result before approval can trigger the intended effect around RunState. The conclusion stays bounded by MCP and RunState: anything not demonstrated by scenario mcp-human-approval-interruption-design-c34 is labeled as a limitation or inference, never promoted to fact. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns tool call into a reviewable decision point with a named input and a retained output. To test resume, fixture mcp-human-approval-interruption-design-c34 contains both an allowed state and a rejected state; rejection must occur before any change attributed to MCP.

Technical state of RunState for Human approval for MCP tools: design the interruption, not just the button
Context capture for Prepare the starting state and prerequisites: locally produced state for control mcp-human-approval-interruption-design.
  1. Step 1 — Configure MCP, run verification mcp-human-approval-interruption-design-step-1, and retain the observable result before continuing.
  2. Step 2 — Configure approval, run verification mcp-human-approval-interruption-design-step-2, and retain the observable result before continuing.
  3. Step 3 — Configure RunState, run verification mcp-human-approval-interruption-design-step-3, and retain the observable result before continuing.
  4. Step 4 — Configure tool call, run verification mcp-human-approval-interruption-design-step-4, and retain the observable result before continuing.
  5. Step 5 — Configure resume, run verification mcp-human-approval-interruption-design-step-5, and retain the observable result before continuing.
  6. Step 6 — Configure MCP, run verification mcp-human-approval-interruption-design-step-6, and retain the observable result before continuing.

Three failures and fixes

  • Input rejected after the side effect: move validation before external execution.
  • Missing evidence: log a decision identifier without the secret payload.
  • Partial rollback: restore both configuration and authorization, then replay the control fixture.
Evidence point: OpenAI documents that the SDK distinguishes hosted tools, local execution tools, function tools and agents-as-tools, each with different trust and execution boundaries. This source anchors prepare the starting state and prerequisites but does not replace local verification. [S3]

Execute the procedure and observe the result

A production design should make it clear who decides, what evidence is available, and what can be rolled back.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c41 starts at approval and treats RunState as an explicit boundary rather than an implicit assumption. The first control requires tool call to emit an observable result before resume can trigger the intended effect around MCP. To test RunState, fixture mcp-human-approval-interruption-design-c41 contains both an allowed state and a rejected state; rejection must occur before any change attributed to tool call. Operations then observes the transition between tool call and resume, while security checks that MCP receives neither implicit authority nor unnecessary data. If the resume verification fails, rollback restores the configuration around MCP, replays mcp-human-approval-interruption-design-c41, and compares the new state with the control evidence from approval.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c42 starts at RunState and treats tool call as an explicit boundary rather than an implicit assumption. The first control requires resume to emit an observable result before MCP can trigger the intended effect around approval. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to tool call, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by resume and approval: anything not demonstrated by scenario mcp-human-approval-interruption-design-c42 is labeled as a limitation or inference, never promoted to fact. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns RunState into a reviewable decision point with a named input and a retained output.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c43 starts at tool call and treats resume as an explicit boundary rather than an implicit assumption. The first control requires MCP to emit an observable result before approval can trigger the intended effect around RunState. To test resume, fixture mcp-human-approval-interruption-design-c43 contains both an allowed state and a rejected state; rejection must occur before any change attributed to MCP. Operations then observes the transition between MCP and approval, while security checks that RunState receives neither implicit authority nor unnecessary data. If the approval verification fails, rollback restores the configuration around RunState, replays mcp-human-approval-interruption-design-c43, and compares the new state with the control evidence from tool call.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c44 starts at resume and treats MCP as an explicit boundary rather than an implicit assumption. The first control requires approval to emit an observable result before RunState can trigger the intended effect around tool call. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to MCP, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by approval and tool call: anything not demonstrated by scenario mcp-human-approval-interruption-design-c44 is labeled as a limitation or inference, never promoted to fact. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns resume into a reviewable decision point with a named input and a retained output.

Technical state of tool call for Human approval for MCP tools: design the interruption, not just the button
Context capture for Execute the procedure and observe the result: locally produced state for control mcp-human-approval-interruption-design.
Evidence point: OpenAI documents that mCP integrations can expose remote or local tools; the documentation recommends trusted servers, least-privilege credentials and approvals for sensitive operations. This source anchors execute the procedure and observe the result but does not replace local verification. [S4]

Failure modes, signals, and diagnosis

The hard part appears when the happy path meets authorization, failures, and operational constraints.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c51 starts at RunState and treats tool call as an explicit boundary rather than an implicit assumption. The first control requires resume to emit an observable result before MCP can trigger the intended effect around approval. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns RunState into a reviewable decision point with a named input and a retained output. To test tool call, fixture mcp-human-approval-interruption-design-c51 contains both an allowed state and a rejected state; rejection must occur before any change attributed to resume. Operations then observes the transition between resume and MCP, while security checks that approval receives neither implicit authority nor unnecessary data.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c52 starts at tool call and treats resume as an explicit boundary rather than an implicit assumption. The first control requires MCP to emit an observable result before approval can trigger the intended effect around RunState. If the approval verification fails, rollback restores the configuration around RunState, replays mcp-human-approval-interruption-design-c52, and compares the new state with the control evidence from tool call. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to resume, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by MCP and RunState: anything not demonstrated by scenario mcp-human-approval-interruption-design-c52 is labeled as a limitation or inference, never promoted to fact.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c53 starts at resume and treats MCP as an explicit boundary rather than an implicit assumption. The first control requires approval to emit an observable result before RunState can trigger the intended effect around tool call. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns resume into a reviewable decision point with a named input and a retained output. To test MCP, fixture mcp-human-approval-interruption-design-c53 contains both an allowed state and a rejected state; rejection must occur before any change attributed to approval. Operations then observes the transition between approval and RunState, while security checks that tool call receives neither implicit authority nor unnecessary data.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c54 starts at MCP and treats approval as an explicit boundary rather than an implicit assumption. The first control requires RunState to emit an observable result before tool call can trigger the intended effect around resume. If the tool call verification fails, rollback restores the configuration around resume, replays mcp-human-approval-interruption-design-c54, and compares the new state with the control evidence from MCP. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to approval, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by RunState and resume: anything not demonstrated by scenario mcp-human-approval-interruption-design-c54 is labeled as a limitation or inference, never promoted to fact.

Technical state of resume for Human approval for MCP tools: design the interruption, not just the button
Context capture for Failure modes, signals, and diagnosis: locally produced state for control mcp-human-approval-interruption-design.
Evidence point: Model Context Protocol documents that for HTTP authorization, MCP requires resource-bound tokens, server-side audience validation and PKCE, and forbids insecure token passthrough patterns. This source anchors failure modes, signals, and diagnosis but does not replace local verification. [S5]

Progressive rollout and rollback

A robust implementation separates what the model proposes from what the application authorizes and verifies.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c61 starts at tool call and treats resume as an explicit boundary rather than an implicit assumption. The first control requires MCP to emit an observable result before approval can trigger the intended effect around RunState. The conclusion stays bounded by MCP and RunState: anything not demonstrated by scenario mcp-human-approval-interruption-design-c61 is labeled as a limitation or inference, never promoted to fact. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns tool call into a reviewable decision point with a named input and a retained output. To test resume, fixture mcp-human-approval-interruption-design-c61 contains both an allowed state and a rejected state; rejection must occur before any change attributed to MCP.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c62 starts at resume and treats MCP as an explicit boundary rather than an implicit assumption. The first control requires approval to emit an observable result before RunState can trigger the intended effect around tool call. Operations then observes the transition between approval and RunState, while security checks that tool call receives neither implicit authority nor unnecessary data. If the RunState verification fails, rollback restores the configuration around tool call, replays mcp-human-approval-interruption-design-c62, and compares the new state with the control evidence from resume. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to MCP, a concrete condition, and evidence instead of a generic assurance.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c63 starts at MCP and treats approval as an explicit boundary rather than an implicit assumption. The first control requires RunState to emit an observable result before tool call can trigger the intended effect around resume. The conclusion stays bounded by RunState and resume: anything not demonstrated by scenario mcp-human-approval-interruption-design-c63 is labeled as a limitation or inference, never promoted to fact. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns MCP into a reviewable decision point with a named input and a retained output. To test approval, fixture mcp-human-approval-interruption-design-c63 contains both an allowed state and a rejected state; rejection must occur before any change attributed to RunState.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c64 starts at approval and treats RunState as an explicit boundary rather than an implicit assumption. The first control requires tool call to emit an observable result before resume can trigger the intended effect around MCP. Operations then observes the transition between tool call and resume, while security checks that MCP receives neither implicit authority nor unnecessary data. If the resume verification fails, rollback restores the configuration around MCP, replays mcp-human-approval-interruption-design-c64, and compares the new state with the control evidence from approval. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to RunState, a concrete condition, and evidence instead of a generic assurance.

Technical state of MCP for Human approval for MCP tools: design the interruption, not just the button
Context capture for Progressive rollout and rollback: locally produced state for control mcp-human-approval-interruption-design.
Evidence point: Model Context Protocol documents that mCP defines stdio and Streamable HTTP transports; Streamable HTTP deployments need Origin validation, safe local binding and authentication. This source anchors progressive rollout and rollback but does not replace local verification. [S6]

Production decision criteria

The starting point is not a feature; it is an observable decision boundary.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c71 starts at resume and treats MCP as an explicit boundary rather than an implicit assumption. The first control requires approval to emit an observable result before RunState can trigger the intended effect around tool call. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to MCP, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by approval and tool call: anything not demonstrated by scenario mcp-human-approval-interruption-design-c71 is labeled as a limitation or inference, never promoted to fact. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns resume into a reviewable decision point with a named input and a retained output.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c72 starts at MCP and treats approval as an explicit boundary rather than an implicit assumption. The first control requires RunState to emit an observable result before tool call can trigger the intended effect around resume. To test approval, fixture mcp-human-approval-interruption-design-c72 contains both an allowed state and a rejected state; rejection must occur before any change attributed to RunState. Operations then observes the transition between RunState and tool call, while security checks that resume receives neither implicit authority nor unnecessary data. If the tool call verification fails, rollback restores the configuration around resume, replays mcp-human-approval-interruption-design-c72, and compares the new state with the control evidence from MCP.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c73 starts at approval and treats RunState as an explicit boundary rather than an implicit assumption. The first control requires tool call to emit an observable result before resume can trigger the intended effect around MCP. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to RunState, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by tool call and MCP: anything not demonstrated by scenario mcp-human-approval-interruption-design-c73 is labeled as a limitation or inference, never promoted to fact. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns approval into a reviewable decision point with a named input and a retained output.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c74 starts at RunState and treats tool call as an explicit boundary rather than an implicit assumption. The first control requires resume to emit an observable result before MCP can trigger the intended effect around approval. To test tool call, fixture mcp-human-approval-interruption-design-c74 contains both an allowed state and a rejected state; rejection must occur before any change attributed to resume. Operations then observes the transition between resume and MCP, while security checks that approval receives neither implicit authority nor unnecessary data. If the MCP verification fails, rollback restores the configuration around approval, replays mcp-human-approval-interruption-design-c74, and compares the new state with the control evidence from RunState.

Evidence point: NIST documents that nIST AI 600-1 is a generative-AI profile for integrating trustworthiness and risk actions across the AI lifecycle. This source anchors production decision criteria but does not replace local verification. [S7]

Controls that remain after launch

A production design should make it clear who decides, what evidence is available, and what can be rolled back.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c81 starts at MCP and treats approval as an explicit boundary rather than an implicit assumption. The first control requires RunState to emit an observable result before tool call can trigger the intended effect around resume. If the tool call verification fails, rollback restores the configuration around resume, replays mcp-human-approval-interruption-design-c81, and compares the new state with the control evidence from MCP. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to approval, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by RunState and resume: anything not demonstrated by scenario mcp-human-approval-interruption-design-c81 is labeled as a limitation or inference, never promoted to fact.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c82 starts at approval and treats RunState as an explicit boundary rather than an implicit assumption. The first control requires tool call to emit an observable result before resume can trigger the intended effect around MCP. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns approval into a reviewable decision point with a named input and a retained output. To test RunState, fixture mcp-human-approval-interruption-design-c82 contains both an allowed state and a rejected state; rejection must occur before any change attributed to tool call. Operations then observes the transition between tool call and resume, while security checks that MCP receives neither implicit authority nor unnecessary data.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c83 starts at RunState and treats tool call as an explicit boundary rather than an implicit assumption. The first control requires resume to emit an observable result before MCP can trigger the intended effect around approval. If the MCP verification fails, rollback restores the configuration around approval, replays mcp-human-approval-interruption-design-c83, and compares the new state with the control evidence from RunState. This detail makes “Human approval for MCP tools: design the interruption, not just the button” reviewable because each operational statement points to tool call, a concrete condition, and evidence instead of a generic assurance. The conclusion stays bounded by resume and approval: anything not demonstrated by scenario mcp-human-approval-interruption-design-c83 is labeled as a limitation or inference, never promoted to fact.

In “Human approval for MCP tools: design the interruption, not just the button”, scenario mcp-human-approval-interruption-design-c84 starts at tool call and treats resume as an explicit boundary rather than an implicit assumption. The first control requires MCP to emit an observable result before approval can trigger the intended effect around RunState. That sequence serves this concrete job: Capture the exact pending action, show material parameters, obtain approval, then resume without silently changing the request. It turns tool call into a reviewable decision point with a named input and a retained output. To test resume, fixture mcp-human-approval-interruption-design-c84 contains both an allowed state and a rejected state; rejection must occur before any change attributed to MCP. Operations then observes the transition between MCP and approval, while security checks that RunState receives neither implicit authority nor unnecessary data.

Evidence point: NIST documents that nIST positions the AI RMF as a voluntary framework for managing AI risks and is revising it while adding profiles for specific settings. This source anchors controls that remain after launch but does not replace local verification. [S8]

Operational checklist

  • The control around MCP has an input, a rule, a rejection behavior, and evidence.
  • The control around approval has an input, a rule, a rejection behavior, and evidence.
  • The control around RunState has an input, a rule, a rejection behavior, and evidence.
  • The control around tool call has an input, a rule, a rejection behavior, and evidence.
  • The control around resume has an input, a rule, a rejection behavior, and evidence.

Sources and control points

  1. [S1] Results - OpenAI Agents SDK — Run results expose final output, new items, agent identity, raw responses, guardrail results, state and usage diagnostics. source
  2. [S2] Agents - OpenAI Agents SDK — An Agent combines instructions, tools and optional runtime behavior such as handoffs, guardrails and structured outputs. source
  3. [S3] Tools - OpenAI Agents SDK — The SDK distinguishes hosted tools, local execution tools, function tools and agents-as-tools, each with different trust and execution boundaries. source
  4. [S4] Model context protocol (MCP) - OpenAI Agents SDK — MCP integrations can expose remote or local tools; the documentation recommends trusted servers, least-privilege credentials and approvals for sensitive operations. source
  5. [S5] Authorization - Model Context Protocol — For HTTP authorization, MCP requires resource-bound tokens, server-side audience validation and PKCE, and forbids insecure token passthrough patterns. source
  6. [S6] Transports - Model Context Protocol — MCP defines stdio and Streamable HTTP transports; Streamable HTTP deployments need Origin validation, safe local binding and authentication. source
  7. [S7] Artificial Intelligence Risk Management Framework: Generative AI Profile — NIST AI 600-1 is a generative-AI profile for integrating trustworthiness and risk actions across the AI lifecycle. source
  8. [S8] AI Risk Management Framework — NIST positions the AI RMF as a voluntary framework for managing AI risks and is revising it while adding profiles for specific settings. source
  9. [S9] OWASP Top 10 for Large Language Model Applications — OWASP identifies its 2026 LLM Top 10 as the current release for major security risks in LLM applications. source
  10. [S10] OWASP Top 10 for LLM Applications 2025 — The 2025 OWASP LLM list provides the prior baseline for risks observed as LLMs became embedded in more production applications. source
Publicité