session/update notifications, allowing Clients to display real-time progress and results to users.
While Agents handle the actual execution, they may use Client-mediated
interactions like permission requests to provide a
richer, more integrated experience.
Reporting
When the language model requests a tool invocation, the Agent SHOULD report it to the Client with atool_call_update:
A unique identifier for this tool call within the session
A human-readable title describing what the tool is doing. Agents SHOULD
include the title the first time they report a
toolCallId.The category of tool being invoked.Tool kinds help Clients choose appropriate icons and optimize how they display tool execution progress.In v2, custom or future tool kinds can be used when Clients can fall back to generic tool display behavior. Custom tool kinds MUST begin with
_. Unknown non-underscore tool kinds are reserved for future ACP variants.The current execution status (defaults to
pending)Content produced by the tool call
File locations affected by this tool call
The raw input parameters sent to the tool
The raw output returned by the tool
tool_call_update notification is an upsert keyed by toolCallId. For
existing tool calls, omitted fields leave the previous value unchanged, null
explicitly clears or unsets the field, and concrete values replace the previous
value. For a new toolCallId, omitted fields use Client defaults. content and
locations are replaced as whole arrays; send [] or null to clear them.
Use tool_call_content_chunk when a tool produces content incrementally and the
Client should append each item instead of replacing the whole content
collection.
Updating
As tools execute, Agents send updates to report progress and results.toolCallId are optional in updates. Only the fields being changed need to be included.
Streaming Content
As tools execute, Agents MAY stream individual content items withtool_call_content_chunk:
The ID of the tool call this content belongs to
A single content item produced by the tool call
tool_call_update and tool_call_content_chunk notifications in
the order they are received for each toolCallId. A
tool_call_content_chunk appends its content item to the current tool-call
content. A later tool_call_update with content replaces all content
currently stored for that tool call, including content accumulated from earlier
chunks. Later chunks append to that replacement content. A tool_call_update
with content: [] or content: null clears the tool-call content.
Requesting Permission
The Agent MAY request permission from the user before executing a tool call by calling thesession/request_permission method:
The session ID for this request
The tool call update containing details about the operation
Available permission options for the user to choose
from
"cancelled" outcome:
The user’s decision, either: -
cancelled - The prompt turn was
cancelled - selected with an
optionId - The ID of the selected permission optionPermission Options
Each permission option provided to the Client contains:Unique identifier for this option
Human-readable label to display to the user
A hint to help Clients choose appropriate icons and UI treatment for each option.
allow_once- Allow this operation only this timeallow_always- Allow this operation and remember the choicereject_once- Reject this operation only this timereject_always- Reject this operation and remember the choice
_. Unknown non-underscore kinds are reserved for future ACP variants. Clients that do not understand a kind should preserve the value and use a generic permission option treatment.Status
Tool calls progress through different statuses during their lifecycle:pending
The tool call hasn’t started running yet because the input is either streaming
or awaiting approval
in_progress
The tool call is currently running
completed
The tool call completed successfully
failed
The tool call failed with an error
_; unknown non-underscore statuses are reserved for future ACP variants.
Content
Tool calls can produce different types of content: In v2, tool call contenttype values can also be custom or future variants. Implementations should preserve unknown content payloads when storing, replaying, proxying, or forwarding tool calls, and otherwise render a generic content item or ignore the item if no safe display is available.
Regular Content
Standard content blocks like text, images, or resources:Diffs
File modifications shown as diffs:The absolute file path being modified
The original content (null for new files)
The new content after modification
Following the Agent
Tool calls can report file locations they’re working with, enabling Clients to implement “follow-along” features that track which files the Agent is accessing or modifying in real-time.The absolute file path being accessed or modified
Optional line number within the file