Deliverd compared with framework pauses
Your framework can pause the agent.
Someone still has to be asked.
Agent frameworks now have a way to stop and wait: LangGraph's interrupt, the OpenAI Agents SDK's tool approvals, the Claude Agent SDK's canUseTool callback, and elicitation in MCP. They are the right place to pause. Each leaves the same thing to you — reaching the person who should decide, who is often not the person running the agent — and that is where Deliverd's adapters fit.
Free to start · Approvers never need a seat · No card required
Human-in-the-loop infrastructure for AI agents. An agent asks a person for an approval, a review or an answer, and carries on when they respond. Below is how that compares with framework pauses, and where the two work together.
Credit where it is due
What framework pauses do well.
LangGraph interrupts
interrupt() stops a graph at the point it is called, a checkpointer keeps the state, and the graph resumes on the same thread with the answer. Approve, reject and edit are all documented patterns.
OpenAI Agents SDK approvals
A tool marked needsApproval stops the run with its interruptions. Each is approved or rejected, with a message for the model, and the run's state can be saved so nothing stays running while a person decides.
Claude Agent SDK permissions
Hooks, rules and permission modes settle most calls. What is left reaches canUseTool, which allows the call, with changed input if need be, or denies it with a reason the model reads.
MCP elicitation
A server can ask the user for structured input through their client, in a form or by sending them to a URL, and the user accepts, declines or cancels.
The boundary
What each leaves to you.
Showing the question
The Claude Agent SDK's guide says your application surfaces these requests; LangGraph hands the interrupt's payload back to whoever invoked the graph; the OpenAI Agents SDK's example asks in a terminal. The page an approver answers on is yours.
The person is whoever is there
Elicitation asks the user of the MCP client, and the frameworks hand the question to the code that ran the agent. The manager who has to approve a refund is often neither.
Waiting is your infrastructure
LangGraph needs a durable checkpointer in production, the OpenAI Agents SDK suggests keeping saved state in storage you control, and the Claude Agent SDK's callback waits indefinitely unless a hook defers the call.
The decision lives in the run
The OpenAI Agents SDK keeps decisions in the run's state. Who decided, on what basis, and a record that outlives the run are for you to add.
Every point above was read from LangChain's LangGraph interrupts documentation, the OpenAI Agents SDK's human-in-the-loop guide, the Claude Agent SDK's permissions guide, the Claude Agent SDK's approvals and user input guide and the MCP specification's elicitation chapter on 10 October 2026. Products change; if something here is out of date, tell us and we will correct it.
Where Deliverd fits
What Deliverd adds.
LangGraph: approveInGraph
Called inside a node, it files the request and calls interrupt for you; resumeFromCallback turns Deliverd's signed callback into the resume. A re-run node finds the request it already made, and a resume value never approves anything by itself.
OpenAI Agents SDK: runWithDeliverdApprovals
Each interruption becomes a request in Deliverd. Approved calls are approved on the run's state, declined ones rejected with the person's reason, and the run resumes until nothing is waiting.
Claude Agent SDK: deliverdCanUseTool
A canUseTool callback that asks a person through Deliverd. If they correct the fields you opened for correction, the tool runs with what they approved.
MCP: a server, not an elicitation adapter
Deliverd does not use elicitation. It is an MCP server: the agent calls request_approval, and the person deciding is reached by email, phone, Slack or Teams rather than through the agent's client.
The AI SDK, Agent Framework and Foundry
The TypeScript SDK also has an adapter for the AI SDK's tool approval, and the Python SDK has adapters for Microsoft Agent Framework and Foundry.
Working together
Use both.
Keep the framework's pause: it is the right place to stop. Deliverd does not decide anything; it reaches the person, holds their answer and the record, and the adapter hands the answer back to the pause. Where the person at the client is the one who should decide, elicitation is the right tool on its own.
Questions.
Do I replace interrupt() or canUseTool?
No. The adapters sit inside them: interrupt still pauses the graph and canUseTool still returns allow or deny. Deliverd supplies the answer.
Does Deliverd use MCP elicitation?
No. Elicitation asks the person at the client. Deliverd's MCP server gives the agent request_approval and reaches a named approver wherever they are.
Which adapters exist?
In @deliverd/sdk/adapters: LangGraph, the OpenAI Agents SDK, the Claude Agent SDK and the AI SDK. In the Python SDK: Microsoft Agent Framework and Foundry.
What if my framework is not listed?
Call approve() from either SDK, or the REST API, wherever the framework lets you run code before a tool. The adapters are built on the same calls.
Ask the right person before the agent acts.
Approvals, reviews and requests from any agent, with the record kept. Free to start. No credit card.