▸ Agent Skills
124 min read

Documentation Index

Fetch the complete documentation index at: https://agentclientprotocol.com/llms.txt Use this file to discover all available pages before exploring further.

Schema

Schema definitions for the Agent Client Protocol

<Note> The schema file can be downloaded directly from the latest GitHub release.

Agent

Defines the interface that all ACP-compliant agents must implement.

Agents are programs that use generative AI to autonomously modify code. They handle requests from clients and execute tasks using language models and tools.

authenticate

Authenticates the client using the specified authentication method.

Called when the agent requires authentication before allowing session creation. The client provides an authentication method ID that was advertised during initialization and whose type defines the authenticate flow.

After successful authentication, the client can proceed to create sessions with new_session without receiving an auth_required error.

See protocol docs: Initialization

AuthenticateRequest

Request parameters for the authenticate method.

Specifies which authentication method to use.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“methodId” type={AuthMethodId} required> The ID of the authentication method to use. Must be one of the methods advertised in the initialize response.

AuthenticateResponse

Response to the authenticate method.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

initialize

Establishes the connection with a client and negotiates protocol capabilities.

This method is called once at the beginning of the connection to:

  • Negotiate the protocol version to use
  • Exchange capability information between client and agent
  • Determine available authentication methods

The agent should respond with its supported protocol version and capabilities.

See protocol docs: Initialization

InitializeRequest

Request parameters for the initialize method.

Sent by the client to establish connection and negotiate capabilities.

See protocol docs: Initialization

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“clientCapabilities” type={ClientCapabilities}> Capabilities supported by the client.

  • Default: {"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"auth":{"terminal":false}}

<ResponseField name=“clientInfo” type={<>Implementation | null</>}> Information about the Client name and version sent to the Agent.

Note: in future versions of the protocol, this will be required.

<ResponseField name=“protocolVersion” type={ProtocolVersion} required> The latest protocol version supported by the client.

InitializeResponse

Response to the initialize method.

Contains the negotiated protocol version and agent capabilities.

See protocol docs: Initialization

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“agentCapabilities” type={AgentCapabilities}> Capabilities supported by the agent.

  • Default: {"loadSession":false,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":false},"mcpCapabilities":{"http":false,"sse":false},"sessionCapabilities":{},"auth":{}}

<ResponseField name=“agentInfo” type={<>Implementation | null</>}> Information about the Agent name and version sent to the Client.

Note: in future versions of the protocol, this will be required.

<ResponseField name=“authMethods” type={AuthMethod[]}> Authentication methods supported by the agent.

  • Default: []

<ResponseField name=“protocolVersion” type={ProtocolVersion} required> The protocol version the client specified if supported by the agent, or the latest protocol version supported by the agent.

The client should disconnect, if it doesn’t support this version.

logout

Logs out of the current authenticated state.

After a successful logout, all new sessions will require authentication. There is no guarantee about the behavior of already running sessions.

LogoutRequest

Request parameters for the logout method.

Terminates the current authenticated session.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

LogoutResponse

Response to the logout method.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

session/cancel

Cancels ongoing operations for a session.

This is a notification sent by the client to cancel an ongoing prompt turn.

Upon receiving this notification, the Agent SHOULD:

  • Stop all language model requests as soon as possible
  • Abort all tool call invocations in progress
  • Send any pending session/update notifications
  • Respond to the original session/prompt request with StopReason::Cancelled

See protocol docs: Cancellation

CancelNotification

Notification to cancel ongoing operations for a session.

See protocol docs: Cancellation

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“sessionId” type={SessionId} required> The ID of the session to cancel operations for.

session/close

Closes an active session and frees up any resources associated with it.

This method is only available if the agent advertises the sessionCapabilities.close capability.

The agent must cancel any ongoing work (as if session/cancel was called) and then free up any resources associated with the session.

CloseSessionRequest

Request parameters for closing an active session.

If supported, the agent must cancel any ongoing work related to the session (treat it as if session/cancel was called) and then free up any resources associated with the session.

Only available if the Agent supports the sessionCapabilities.close capability.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“sessionId” type={SessionId} required> The ID of the session to close.

CloseSessionResponse

Response from closing a session.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

session/delete

Deletes an existing session from session/list.

This method is only available if the agent advertises the sessionCapabilities.delete capability.

DeleteSessionRequest

Request parameters for deleting an existing session from session/list.

Only available if the Agent supports the sessionCapabilities.delete capability.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“sessionId” type={SessionId} required> The ID of the session to delete.

DeleteSessionResponse

Response from deleting a session.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

session/list

Lists existing sessions known to the agent.

This method is only available if the agent advertises the sessionCapabilities.list capability.

The agent should return metadata about sessions with optional filtering and pagination support.

ListSessionsRequest

Request parameters for listing existing sessions.

Only available if the Agent supports the sessionCapabilities.list capability.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“cursor” type={“string | null”}> Opaque cursor token from a previous response’s nextCursor field for cursor-based pagination

<ResponseField name=“cwd” type={“string | null”}> Filter sessions by working directory. Must be an absolute path.

ListSessionsResponse

Response from listing sessions.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“nextCursor” type={“string | null”}> Opaque cursor token. If present, pass this in the next request’s cursor parameter to fetch the next page. If absent, there are no more results.

<ResponseField name=“sessions” type={SessionInfo[]} required> Array of session information objects

session/load

Loads an existing session to resume a previous conversation.

This method is only available if the agent advertises the loadSession capability.

The agent should:

  • Restore the session context and conversation history
  • Connect to the specified MCP servers
  • Stream the entire conversation history back to the client via notifications

See protocol docs: Loading Sessions

LoadSessionRequest

Request parameters for loading an existing session.

Only available if the Agent supports the loadSession capability.

See protocol docs: Loading Sessions

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“additionalDirectories” type={<>“string”[]</>}> Additional workspace roots to activate for this session. Each path must be absolute.

When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the loaded session. It may differ from any previously used or reported list as long as the request cwd matches the session’s cwd.

<ResponseField name=“cwd” type={“string”} required> The working directory for this session. Must be an absolute path.

<ResponseField name=“mcpServers” type={McpServer[]} required> List of MCP servers to connect to for this session.

<ResponseField name=“sessionId” type={SessionId} required> The ID of the session to load.

LoadSessionResponse

Response from loading an existing session.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“configOptions” type={<>SessionConfigOption[] | null</>}> Initial session configuration options if supported by the Agent.

<ResponseField name=“modes” type={<>SessionModeState | null</>}> Initial mode state if supported by the Agent

See protocol docs: Session Modes

session/new

Creates a new conversation session with the agent.

Sessions represent independent conversation contexts with their own history and state.

The agent should:

  • Create a new session context
  • Connect to any specified MCP servers
  • Return a unique session ID for future requests

May return an auth_required error if the agent requires authentication.

See protocol docs: Session Setup

NewSessionRequest

Request parameters for creating a new session.

See protocol docs: Creating a Session

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“additionalDirectories” type={<>“string”[]</>}> Additional workspace roots for this session. Each path must be absolute.

These expand the session’s filesystem scope without changing cwd, which remains the base for relative paths. When omitted or empty, no additional roots are activated for the new session.

<ResponseField name=“cwd” type={“string”} required> The working directory for this session. Must be an absolute path.

<ResponseField name=“mcpServers” type={McpServer[]} required> List of MCP (Model Context Protocol) servers the agent should connect to.

NewSessionResponse

Response from creating a new session.

See protocol docs: Creating a Session

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“configOptions” type={<>SessionConfigOption[] | null</>}> Initial session configuration options if supported by the Agent.

<ResponseField name=“modes” type={<>SessionModeState | null</>}> Initial mode state if supported by the Agent

See protocol docs: Session Modes

<ResponseField name=“sessionId” type={SessionId} required> Unique identifier for the created session.

Used in all subsequent requests for this conversation.

session/prompt

Processes a user prompt within a session.

This method handles the whole lifecycle of a prompt:

  • Receives user messages with optional context (files, images, etc.)
  • Processes the prompt using language models
  • Reports language model content and tool calls to the Clients
  • Requests permission to run tools
  • Executes any requested tool calls
  • Returns when the turn is complete with a stop reason

See protocol docs: Prompt Turn

PromptRequest

Request parameters for sending a user prompt to the agent.

Contains the user’s message and any additional context.

See protocol docs: User Message

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“prompt” type={ContentBlock[]} required> The blocks of content that compose the user’s message.

As a baseline, the Agent MUST support ContentBlock::Text and ContentBlock::ResourceLink, while other variants are optionally enabled via PromptCapabilities.

The Client MUST adapt its interface according to PromptCapabilities.

The client MAY include referenced pieces of context as either ContentBlock::Resource or ContentBlock::ResourceLink.

When available, ContentBlock::Resource is preferred as it avoids extra round-trips and allows the message to include pieces of context from sources the agent may not have access to.

<ResponseField name=“sessionId” type={SessionId} required> The ID of the session to send this user message to

PromptResponse

Response from processing a user prompt.

See protocol docs: Check for Completion

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“stopReason” type={StopReason} required> Indicates why the agent stopped processing the turn.

session/resume

Resumes an existing session without returning previous messages.

This method is only available if the agent advertises the sessionCapabilities.resume capability.

The agent should resume the session context, allowing the conversation to continue without replaying the message history (unlike session/load).

ResumeSessionRequest

Request parameters for resuming an existing session.

Resumes an existing session without returning previous messages (unlike session/load). This is useful for agents that can resume sessions but don’t implement full session loading.

Only available if the Agent supports the sessionCapabilities.resume capability.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“additionalDirectories” type={<>“string”[]</>}> Additional workspace roots to activate for this session. Each path must be absolute.

When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the resumed session. It may differ from any previously used or reported list as long as the request cwd matches the session’s cwd.

<ResponseField name=“cwd” type={“string”} required> The working directory for this session. Must be an absolute path.

<ResponseField name=“mcpServers” type={McpServer[]}> List of MCP servers to connect to for this session.

<ResponseField name=“sessionId” type={SessionId} required> The ID of the session to resume.

ResumeSessionResponse

Response from resuming an existing session.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“configOptions” type={<>SessionConfigOption[] | null</>}> Initial session configuration options if supported by the Agent.

<ResponseField name=“modes” type={<>SessionModeState | null</>}> Initial mode state if supported by the Agent

See protocol docs: Session Modes

session/set_config_option

Sets the current value for a session configuration option.

SetSessionConfigOptionRequest

Request parameters for setting a session configuration option.

Type: Union

Shared properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“configId” type={SessionConfigId} required> The ID of the configuration option to set.

<ResponseField name=“sessionId” type={SessionId} required> The ID of the session to set the configuration option for.

Variants:

A boolean value (`type: "boolean"`). The discriminator value. Must be `"boolean"`.
<ResponseField name="value" type={"boolean"} required>
  The boolean value.
</ResponseField>
A `SessionConfigValueId` string value.

This is the default when type is absent on the wire. Unknown type values with string payloads also gracefully deserialize into this variant.

SessionConfigValueId} required> The value ID.

SetSessionConfigOptionResponse

Response to session/set_config_option method.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“configOptions” type={SessionConfigOption[]} required> The full set of configuration options and their current values.

session/set_mode

Sets the current mode for a session.

Allows switching between different agent modes (e.g., “ask”, “architect”, “code”) that affect system prompts, tool availability, and permission behaviors.

The mode must be one of the modes advertised in availableModes during session creation or loading. Agents may also change modes autonomously and notify the client via current_mode_update notifications.

This method can be called at any time during a session, whether the Agent is idle or actively generating a response.

See protocol docs: Session Modes

SetSessionModeRequest

Request parameters for setting a session mode.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“modeId” type={SessionModeId} required> The ID of the mode to set.

<ResponseField name=“sessionId” type={SessionId} required> The ID of the session to set the mode for.

SetSessionModeResponse

Response to session/set_mode method.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

Client

Defines the interface that ACP-compliant clients must implement.

Clients are typically code editors (IDEs, text editors) that provide the interface between users and AI agents. They manage the environment, handle user interactions, and control access to resources.

elicitation/complete

Notification that a URL-based elicitation has completed.

See protocol docs: Elicitation

CompleteElicitationNotification

Notification sent by the agent when a URL-based elicitation is complete.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“elicitationId” type={ElicitationId} required> The ID of the elicitation that completed.

elicitation/create

Requests structured user input via a form or URL.

See protocol docs: Elicitation

CreateElicitationRequest

Request from the agent to elicit structured user input.

The agent sends this to the client to request information from the user, either via a form or by directing them to a URL. Elicitations are tied to a session (optionally a tool call) or a request.

Type: Union

Shared properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“message” type={“string”} required> A human-readable message describing what input is needed.

Variants:

Form-based elicitation where the client renders a form from the provided schema. The discriminator value. Must be `"form"`.
<ResponseField name="requestedSchema" type={<a href="#elicitationschema">ElicitationSchema</a>} required>
  A JSON Schema describing the form fields to present to the user.
</ResponseField>
URL-based elicitation where the client directs the user to a URL. ElicitationId} required> The unique identifier for this elicitation.
<ResponseField name="mode" type={"string"} required>
  The discriminator value. Must be `"url"`.
</ResponseField>

<ResponseField name="url" type={"string"} required>
  The URL to direct the user to.

  * Format: `uri`
</ResponseField>
Custom or future elicitation mode.

Values beginning with _ are reserved for implementation-specific extensions. Unknown values that do not begin with _ are reserved for future ACP variants.

Clients that do not understand this mode should preserve the raw payload when storing, replaying, proxying, or forwarding elicitation requests. They MUST NOT render it as a known elicitation mode.

Custom or future elicitation mode.
  Values beginning with `_` are reserved for implementation-specific
  extensions. Unknown values that do not begin with `_` are reserved for
  future ACP variants.
</ResponseField>

CreateElicitationResponse

Response from the client to an elicitation request.

Type: Union

Shared properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

Variants:

The user accepted and provided content. The discriminator value. Must be `"accept"`.
<ResponseField name="content" type={"object | null"}>
  The user-provided content, if any, as an object matching the requested schema.
</ResponseField>
The user declined the elicitation. The discriminator value. Must be `"decline"`. The elicitation was cancelled. The discriminator value. Must be `"cancel"`. Custom or future elicitation action.

Values beginning with _ are reserved for implementation-specific extensions. Unknown values that do not begin with _ are reserved for future ACP variants.

Agents that do not understand this action should preserve the raw payload when storing, replaying, proxying, or forwarding elicitation responses. They MUST NOT treat it as a known elicitation action.

Custom or future elicitation action.
  Values beginning with `_` are reserved for implementation-specific
  extensions. Unknown values that do not begin with `_` are reserved for
  future ACP variants.
</ResponseField>

fs/read_text_file

Reads content from a text file in the client’s file system.

Only available if the client advertises the fs.readTextFile capability. Allows the agent to access file contents within the client’s environment.

See protocol docs: Client

ReadTextFileRequest

Request to read content from a text file.

Only available if the client supports the fs.readTextFile capability.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“limit” type={“integer | null”}> Maximum number of lines to read.

  • Minimum: 0

<ResponseField name=“line” type={“integer | null”}> Line number to start reading from (1-based).

  • Minimum: 0

<ResponseField name=“path” type={“string”} required> Absolute path to the file to read.

<ResponseField name=“sessionId” type={SessionId} required> The session ID for this request.

ReadTextFileResponse

Response containing the contents of a text file.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“content” type={“string”} required> Content payload returned by this response.

fs/write_text_file

Writes content to a text file in the client’s file system.

Only available if the client advertises the fs.writeTextFile capability. Allows the agent to create or modify files within the client’s environment.

See protocol docs: Client

WriteTextFileRequest

Request to write content to a text file.

Only available if the client supports the fs.writeTextFile capability.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“content” type={“string”} required> The text content to write to the file.

<ResponseField name=“path” type={“string”} required> Absolute path to the file to write.

<ResponseField name=“sessionId” type={SessionId} required> The session ID for this request.

WriteTextFileResponse

Response to fs/write_text_file

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

session/request_permission

Requests permission from the user for a tool call operation.

Called by the agent when it needs user authorization before executing a potentially sensitive operation. The client should present the options to the user and return their decision.

If the client cancels the prompt turn via session/cancel, it MUST respond to this request with RequestPermissionOutcome::Cancelled.

See protocol docs: Requesting Permission

RequestPermissionRequest

Request for user permission to execute a tool call.

Sent when the agent needs authorization before performing a sensitive operation.

See protocol docs: Requesting Permission

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“options” type={PermissionOption[]} required> Available permission options for the user to choose from.

<ResponseField name=“sessionId” type={SessionId} required> The session ID for this request.

<ResponseField name=“toolCall” type={ToolCallUpdate} required> Details about the tool call requiring permission.

RequestPermissionResponse

Response to a permission request.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“outcome” type={RequestPermissionOutcome} required> The user’s decision on the permission request.

session/update

Handles session update notifications from the agent.

This is a notification endpoint (no response expected) that receives real-time updates about session progress, including message chunks, tool calls, and execution plans.

Note: Clients SHOULD continue accepting tool call updates even after sending a session/cancel notification, as the agent may send final updates before responding with the cancelled stop reason.

See protocol docs: Agent Reports Output

SessionNotification

Notification containing a session update from the agent.

Used to stream real-time progress and results during prompt processing.

See protocol docs: Agent Reports Output

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“sessionId” type={SessionId} required> The ID of the session this update pertains to.

<ResponseField name=“update” type={SessionUpdate} required> The actual update content.

terminal/create

Executes a command in a new terminal

Only available if the terminal Client capability is set to true.

Returns a TerminalId that can be used with other terminal methods to get the current output, wait for exit, and kill the command.

The TerminalId can also be used to embed the terminal in a tool call by using the ToolCallContent::Terminal variant.

The Agent is responsible for releasing the terminal by using the terminal/release method.

See protocol docs: Terminals

CreateTerminalRequest

Request to create a new terminal and execute a command.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“args” type={<>“string”[]</>}> Array of command arguments.

<ResponseField name=“command” type={“string”} required> The command to execute.

<ResponseField name=“cwd” type={“string | null”}> Working directory for the command. Must be an absolute path.

<ResponseField name=“env” type={EnvVariable[]}> Environment variables for the command.

<ResponseField name=“outputByteLimit” type={“integer | null”}> Maximum number of output bytes to retain.

When the limit is exceeded, the Client truncates from the beginning of the output to stay within the limit.

The Client MUST ensure truncation happens at a character boundary to maintain valid string output, even if this means the retained output is slightly less than the specified limit.

  • Minimum: 0

<ResponseField name=“sessionId” type={SessionId} required> The session ID for this request.

CreateTerminalResponse

Response containing the ID of the created terminal.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“terminalId” type={TerminalId} required> The unique identifier for the created terminal.

terminal/kill

Kills the terminal command without releasing the terminal

While terminal/release will also kill the command, this method will keep the TerminalId valid so it can be used with other methods.

This method can be helpful when implementing command timeouts which terminate the command as soon as elapsed, and then get the final output so it can be sent to the model.

Note: Call terminal/release when TerminalId is no longer needed.

See protocol docs: Terminals

KillTerminalRequest

Request to kill a terminal without releasing it.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“sessionId” type={SessionId} required> The session ID for this request.

<ResponseField name=“terminalId” type={TerminalId} required> The ID of the terminal to kill.

KillTerminalResponse

Response to terminal/kill method

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

terminal/output

Gets the terminal output and exit status

Returns the current content in the terminal without waiting for the command to exit. If the command has already exited, the exit status is included.

See protocol docs: Terminals

TerminalOutputRequest

Request to get the current output and status of a terminal.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“sessionId” type={SessionId} required> The session ID for this request.

<ResponseField name=“terminalId” type={TerminalId} required> The ID of the terminal to get output from.

TerminalOutputResponse

Response containing the terminal output and exit status.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“exitStatus” type={<>TerminalExitStatus | null</>}> Exit status if the command has completed.

<ResponseField name=“output” type={“string”} required> The terminal output captured so far.

<ResponseField name=“truncated” type={“boolean”} required> Whether the output was truncated due to byte limits.

terminal/release

Releases a terminal

The command is killed if it hasn’t exited yet. Use terminal/wait_for_exit to wait for the command to exit before releasing the terminal.

After release, the TerminalId can no longer be used with other terminal/* methods, but tool calls that already contain it, continue to display its output.

The terminal/kill method can be used to terminate the command without releasing the terminal, allowing the Agent to call terminal/output and other methods.

See protocol docs: Terminals

ReleaseTerminalRequest

Request to release a terminal and free its resources.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“sessionId” type={SessionId} required> The session ID for this request.

<ResponseField name=“terminalId” type={TerminalId} required> The ID of the terminal to release.

ReleaseTerminalResponse

Response to terminal/release method

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

terminal/wait_for_exit

Waits for the terminal command to exit and return its exit status

See protocol docs: Terminals

WaitForTerminalExitRequest

Request to wait for a terminal command to exit.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“sessionId” type={SessionId} required> The session ID for this request.

<ResponseField name=“terminalId” type={TerminalId} required> The ID of the terminal to wait for.

WaitForTerminalExitResponse

Response containing the exit status of a terminal command.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“exitCode” type={“integer | null”}> The process exit code (may be null if terminated by signal).

  • Minimum: 0

<ResponseField name=“signal” type={“string | null”}> The signal that terminated the process (may be null if exited normally).

Protocol Level

Defines the interface that ACP-compliant agents and clients must both implement.

Notifications whose methods start with ‘$/’ are messages which are protocol implementation dependent and might not be implementable in all clients or agents. For example if the implementation uses a single threaded synchronous programming language then there is little it can do to react to a $/cancel\_request\ notification. If an agent or client receives notifications starting with ‘$/’ it is free to ignore the notification.

$/cancel_request

Cancels an ongoing request.

This is a notification sent by the side that sent a request to cancel that request.

Upon receiving this notification, the receiver:

  1. MAY cancel the corresponding request activity and all nested activities
  2. MAY send any pending notifications.
  3. MUST send one of these responses for the original request:
  • Valid response with appropriate data (partial results or cancellation marker)
  • Error response with code -32800 (Cancelled)

See protocol docs: Cancellation

CancelRequestNotification

Notification to cancel an ongoing request.

See protocol docs: Cancellation

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“requestId” type={RequestId} required> The ID of the request to cancel.

AgentAuthCapabilities

Authentication-related capabilities supported by the agent.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“logout” type={<>LogoutCapabilities | null</>}> Whether the agent supports the logout method.

Optional. Omitted or null both mean the agent does not advertise support. Supplying \{\} means the agent supports the logout method.

AgentCapabilities

Capabilities supported by the agent.

Advertised during initialization to inform the client about available features and content types.

See protocol docs: Agent Capabilities

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“auth” type={AgentAuthCapabilities}> Authentication-related capabilities supported by the agent.

  • Default: {}

<ResponseField name=“loadSession” type={“boolean”}> Whether the agent supports session/load.

  • Default: false

<ResponseField name=“mcpCapabilities” type={McpCapabilities}> MCP capabilities supported by the agent.

  • Default: {"http":false,"sse":false}

<ResponseField name=“promptCapabilities” type={PromptCapabilities}> Prompt capabilities supported by the agent.

  • Default: {"image":false,"audio":false,"embeddedContext":false}

<ResponseField name=“sessionCapabilities” type={SessionCapabilities}> Session lifecycle and prompt capabilities advertised by the agent.

  • Default: {}

Annotations

Optional annotations for the client. The client can use annotations to inform how objects are used or displayed

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“audience” type={<>Role[] | null</>}> Intended recipients for this content, such as the user or assistant.

<ResponseField name=“lastModified” type={“string | null”}> Timestamp indicating when the underlying resource was last modified.

<ResponseField name=“priority” type={“number | null”}> Relative importance of this content when clients choose what to surface.

AudioContent

Audio provided to or from an LLM.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“annotations” type={<>Annotations | null</>}> Optional annotations that help clients decide how to display or route this content.

<ResponseField name=“data” type={“string”} required> Base64-encoded media payload.

<ResponseField name=“mimeType” type={“string”} required> MIME type describing the encoded media payload.

AuthCapabilities

Authentication capabilities supported by the client.

Advertised during initialization to inform the agent which authentication method types the client can handle. This governs opt-in types that require additional client-side support.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“terminal” type={“boolean”}> Whether the client supports terminal authentication methods.

The client should set this to true only when it can reproduce the configured agent invocation in an interactive terminal. When true, the agent may include terminal entries in its authentication methods.

  • Default: false

AuthMethod

Describes an available authentication method.

The type field acts as the discriminator in the serialized JSON form. When no type is present, the method is treated as agent.

Type: Union

Client runs the configured agent program as a separate interactive process, without passing this method to `authenticate`. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="args" type={<><span>"string"</span><span>[]</span></>}>
  Additional arguments to append to the configured agent invocation for terminal auth.
</ResponseField>

<ResponseField name="description" type={"string | null"}>
  Optional description providing more details about this authentication method.
</ResponseField>

<ResponseField name="env" type={"object"}>
  Additional environment variables to set on the configured agent invocation for terminal auth.
  These values override same-named variables in the base launch configuration.
</ResponseField>

<ResponseField name="id" type={<a href="#authmethodid">AuthMethodId</a>} required>
  Unique identifier for this authentication method.
</ResponseField>

<ResponseField name="name" type={"string"} required>
  Human-readable name of the authentication method.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"terminal"`.
</ResponseField>
Agent handles authentication itself through `authenticate`.

This is the default when no type is specified.

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="description" type={"string | null"}>
  Optional description providing more details about this authentication method.
</ResponseField>

<ResponseField name="id" type={<a href="#authmethodid">AuthMethodId</a>} required>
  Unique identifier for this authentication method.
</ResponseField>

<ResponseField name="name" type={"string"} required>
  Human-readable name of the authentication method.
</ResponseField>

AuthMethodAgent

Agent handles authentication itself through authenticate.

This is the default authentication method type.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“description” type={“string | null”}> Optional description providing more details about this authentication method.

<ResponseField name=“id” type={AuthMethodId} required> Unique identifier for this authentication method.

<ResponseField name=“name” type={“string”} required> Human-readable name of the authentication method.

AuthMethodId

Typed identifier used for auth method values on the wire.

Type: string

AuthMethodTerminal

Terminal-based authentication method.

The client runs the configured agent program as a separate interactive process for the user to authenticate via a TUI. Agents MUST advertise this method only when the client enabled its terminal authentication capability. A zero exit status signals success; any other termination signals failure. The client MUST NOT pass this method to authenticate.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“args” type={<>“string”[]</>}> Additional arguments to append to the configured agent invocation for terminal auth.

<ResponseField name=“description” type={“string | null”}> Optional description providing more details about this authentication method.

<ResponseField name=“env” type={“object”}> Additional environment variables to set on the configured agent invocation for terminal auth. These values override same-named variables in the base launch configuration.

<ResponseField name=“id” type={AuthMethodId} required> Unique identifier for this authentication method.

<ResponseField name=“name” type={“string”} required> Human-readable name of the authentication method.

AvailableCommand

Information about a command.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“description” type={“string”} required> Human-readable description of what the command does.

<ResponseField name=“input” type={<>AvailableCommandInput | null</>}> Input for the command if required

<ResponseField name=“name” type={“string”} required> Command name (e.g., create_plan, research_codebase).

AvailableCommandInput

The input specification for a command.

All text that was typed after the command name is provided as input.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“hint” type={“string”} required> A hint to display when the input hasn’t been provided yet

AvailableCommandsUpdate

Available commands are ready or have changed

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“availableCommands” type={AvailableCommand[]} required> Commands the agent can execute

BlobResourceContents

Binary resource contents.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“blob” type={“string”} required> Base64-encoded bytes for a binary resource payload.

<ResponseField name=“mimeType” type={“string | null”}> MIME type describing the encoded media payload.

<ResponseField name=“uri” type={“string”} required> URI associated with this resource or media payload.

BooleanConfigOptionCapabilities

Capabilities for boolean session configuration options.

Supplying \{\} means the client supports boolean session configuration options.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

BooleanPropertySchema

Schema for boolean properties in an elicitation form.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“default” type={“boolean | null”}> Default value.

Optional. Omitted and null are equivalent and mean no default value is provided.

<ResponseField name=“description” type={“string | null”}> Human-readable description.

Optional. Omitted and null are equivalent and mean no description is provided.

<ResponseField name=“title” type={“string | null”}> Optional title for the property.

Optional. Omitted and null are equivalent and mean no title is provided.

ClientCapabilities

Capabilities supported by the client.

Advertised during initialization to inform the agent about available features and methods.

See protocol docs: Client Capabilities

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“auth” type={AuthCapabilities}> Authentication capabilities supported by the client. Determines which authentication method types the agent may include in its InitializeResponse.

  • Default: {"terminal":false}

<ResponseField name=“elicitation” type={<>ElicitationCapabilities | null</>}> Elicitation capabilities supported by the client. Determines which elicitation modes the agent may use.

Optional. Omitted or null both mean the client does not advertise elicitation support.

<ResponseField name=“fs” type={FileSystemCapabilities}> File system capabilities supported by the client. Determines which file operations the agent can request.

  • Default: {"readTextFile":false,"writeTextFile":false}

<ResponseField name=“session” type={<>ClientSessionCapabilities | null</>}> Session-related capabilities supported by the client.

Optional. Omitted or null both mean the client does not advertise any session-related extensions.

<ResponseField name=“terminal” type={“boolean”}> Whether the Client support all terminal/* methods.

  • Default: false

ClientSessionCapabilities

Session-related capabilities supported by the client.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“configOptions” type={<>SessionConfigOptionsCapabilities | null</>}> Config option capabilities supported by the client.

Omitted or null both mean the client does not advertise support for any config option extensions.

ConfigOptionUpdate

Session configuration options have been updated.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“configOptions” type={SessionConfigOption[]} required> The full set of configuration options and their current values.

Content

Standard content block (text, images, resources).

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“content” type={ContentBlock} required> The actual content block.

ContentBlock

Content blocks represent displayable information in the Agent Client Protocol.

They provide a structured way to handle various types of user-facing content—whether it’s text from language models, images for analysis, or embedded resources for context.

Content blocks appear in:

  • User prompts sent via session/prompt
  • Language model output streamed through session/update notifications
  • Progress updates and results from tool calls

This structure is compatible with the Model Context Protocol (MCP), enabling agents to seamlessly forward content from MCP tool outputs without transformation.

See protocol docs: Content

Type: Union

Text content. May be plain text or formatted with Markdown.

All agents MUST support text content blocks in prompts. Clients SHOULD render this text as Markdown.

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>}>
  Optional annotations that help clients decide how to display or route this content.
</ResponseField>

<ResponseField name="text" type={"string"} required>
  Text payload carried by this content block.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"text"`.
</ResponseField>
Images for visual context or analysis.

Requires the image prompt capability when included in prompts.

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>}>
  Optional annotations that help clients decide how to display or route this content.
</ResponseField>

<ResponseField name="data" type={"string"} required>
  Base64-encoded media payload.
</ResponseField>

<ResponseField name="mimeType" type={"string"} required>
  MIME type describing the encoded media payload.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"image"`.
</ResponseField>

<ResponseField name="uri" type={"string | null"}>
  URI associated with this resource or media payload.
</ResponseField>
Audio data for transcription or analysis.

Requires the audio prompt capability when included in prompts.

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>}>
  Optional annotations that help clients decide how to display or route this content.
</ResponseField>

<ResponseField name="data" type={"string"} required>
  Base64-encoded media payload.
</ResponseField>

<ResponseField name="mimeType" type={"string"} required>
  MIME type describing the encoded media payload.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"audio"`.
</ResponseField>
References to resources that the agent can access.

All agents MUST support resource links in prompts.

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>}>
  Optional annotations that help clients decide how to display or route this content.
</ResponseField>

<ResponseField name="description" type={"string | null"}>
  Optional human-readable details shown with this protocol object.
</ResponseField>

<ResponseField name="mimeType" type={"string | null"}>
  MIME type describing the encoded media payload.
</ResponseField>

<ResponseField name="name" type={"string"} required>
  Human-readable name shown for this protocol object.
</ResponseField>

<ResponseField name="size" type={"integer | null"}>
  Optional size of the linked resource in bytes, if known.
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  Optional display title for end-user UI.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"resource_link"`.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  URI associated with this resource or media payload.
</ResponseField>
Complete resource contents embedded directly in the message.

Preferred for including context as it avoids extra round-trips.

Requires the embeddedContext prompt capability when included in prompts.

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>}>
  Optional annotations that help clients decide how to display or route this content.
</ResponseField>

<ResponseField name="resource" type={<a href="#embeddedresourceresource">EmbeddedResourceResource</a>} required>
  Embedded resource payload, either text or binary data.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"resource"`.
</ResponseField>

ContentChunk

A streamed item of content

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“content” type={ContentBlock} required> A single item of content

<ResponseField name=“messageId” type={<>MessageId | null</>}> A unique identifier for the message this chunk belongs to.

All chunks belonging to the same message share the same messageId. A change in messageId indicates a new message has started.

Cost

Cost information for a session.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“amount” type={“number”} required> Total cumulative cost for session.

<ResponseField name=“currency” type={“string”} required> ISO 4217 currency code (e.g., “USD”, “EUR”).

CurrentModeUpdate

The current mode of the session has changed

See protocol docs: Session Modes

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“currentModeId” type={SessionModeId} required> The ID of the current mode

Diff

A diff representing file modifications.

Shows changes to files in a format suitable for display in the client UI.

See protocol docs: Content

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“newText” type={“string”} required> The new content after modification.

<ResponseField name=“oldText” type={“string | null”}> The original content (None for new files).

<ResponseField name=“path” type={“string”} required> The absolute file path being modified.

ElicitationAcceptAction

The user accepted the elicitation and provided content.

Type: Object

Properties:

<ResponseField name=“content” type={“object | null”}> The user-provided content, if any, as an object matching the requested schema.

ElicitationCapabilities

Elicitation capabilities supported by the client.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“form” type={<>ElicitationFormCapabilities | null</>}> Whether the client supports form-based elicitation.

Optional. Omitted and null are equivalent and mean form support is not advertised. Supplying \{\} explicitly advertises form support.

<ResponseField name=“url” type={<>ElicitationUrlCapabilities | null</>}> Whether the client supports URL-based elicitation.

Optional. Omitted or null both mean the client does not advertise support. Supplying \{\} means the client supports URL-based elicitation.

ElicitationContentValue

Allowed wire representations for ElicitationContentValue.

Type: Union

String value accepted in elicitation response content. Integer value accepted in elicitation response content. Number value accepted in elicitation response content. Boolean value accepted in elicitation response content. String array value accepted in elicitation response content.

ElicitationFormCapabilities

Form-based elicitation capabilities.

Supplying \{\} means the client supports form-based elicitation.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

ElicitationFormMode

Form-based elicitation mode where the client renders a form from the provided schema.

Type: Union

Shared properties:

<ResponseField name=“requestedSchema” type={ElicitationSchema} required> A JSON Schema describing the form fields to present to the user.

Variants:

Tied to a session, optionally to a specific tool call within that session. SessionId} required> The session this elicitation is tied to.
<ResponseField name="toolCallId" type={<><span><a href="#toolcallid">ToolCallId</a></span><span> | null</span></>}>
  Optional tool call within the session.

  Optional. Omitted and `null` are equivalent and mean the elicitation is scoped to the
  session without a specific tool call.
</ResponseField>
Tied to a specific JSON-RPC request outside of a session (e.g., during auth/configuration phases before any session is started). RequestId} required> The request this elicitation is tied to.

ElicitationId

Unique identifier for an elicitation.

Type: string

ElicitationPropertySchema

Property schema for elicitation form fields.

Each variant corresponds to a JSON Schema "type" value. Single-select enums use the String variant with enum or oneOf set. Multi-select enums use the Array variant.

Type: Union

String property (or single-select enum when `enum`/`oneOf` is set). The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  Optional. Omitted and `null` are equivalent and mean no metadata.

  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="default" type={"string | null"}>
  Default value.

  Optional. Omitted and `null` are equivalent and mean no default value is provided.
</ResponseField>

<ResponseField name="description" type={"string | null"}>
  Human-readable description.

  Optional. Omitted and `null` are equivalent and mean no description is provided.
</ResponseField>

<ResponseField name="enum" type={<><span><><span>"string"</span><span>[]</span></></span><span> | null</span></>}>
  Enum values for untitled single-select enums.
  Optional. Omitted and `null` are equivalent and mean no untitled single-select choices are
  declared by `enum`.
</ResponseField>

<ResponseField name="format" type={<><span><a href="#stringformat">StringFormat</a></span><span> | null</span></>}>
  String format.

  Optional. Omitted and `null` are equivalent and mean there is no format constraint.
</ResponseField>

<ResponseField name="maxLength" type={"integer | null"}>
  Maximum string length.

  Optional. Omitted and `null` are equivalent and mean there is no maximum length constraint.

  * Minimum: `0`
</ResponseField>

<ResponseField name="minLength" type={"integer | null"}>
  Minimum string length.

  Optional. Omitted and `null` are equivalent and mean there is no minimum length constraint.

  * Minimum: `0`
</ResponseField>

<ResponseField name="oneOf" type={<><span><a href="#enumoption">EnumOption[]</a></span><span> | null</span></>}>
  Titled enum options for titled single-select enums.
  Optional. Omitted and `null` are equivalent and mean no titled single-select choices are
  declared by `oneOf`.
</ResponseField>

<ResponseField name="pattern" type={"string | null"}>
  Pattern the string must match.

  Optional. Omitted and `null` are equivalent and mean there is no pattern constraint.
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  Optional title for the property.

  Optional. Omitted and `null` are equivalent and mean no title is provided.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"string"`.
</ResponseField>
Number (floating-point) property. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  Optional. Omitted and `null` are equivalent and mean no metadata.

  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="default" type={"number | null"}>
  Default value.

  Optional. Omitted and `null` are equivalent and mean no default value is provided.
</ResponseField>

<ResponseField name="description" type={"string | null"}>
  Human-readable description.

  Optional. Omitted and `null` are equivalent and mean no description is provided.
</ResponseField>

<ResponseField name="maximum" type={"number | null"}>
  Maximum value (inclusive).

  Optional. Omitted and `null` are equivalent and mean there is no inclusive upper bound.
</ResponseField>

<ResponseField name="minimum" type={"number | null"}>
  Minimum value (inclusive).

  Optional. Omitted and `null` are equivalent and mean there is no inclusive lower bound.
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  Optional title for the property.

  Optional. Omitted and `null` are equivalent and mean no title is provided.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"number"`.
</ResponseField>
Integer property. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  Optional. Omitted and `null` are equivalent and mean no metadata.

  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="default" type={"integer | null"}>
  Default value.

  Optional. Omitted and `null` are equivalent and mean no default value is provided.
</ResponseField>

<ResponseField name="description" type={"string | null"}>
  Human-readable description.

  Optional. Omitted and `null` are equivalent and mean no description is provided.
</ResponseField>

<ResponseField name="maximum" type={"integer | null"}>
  Maximum value (inclusive).

  Optional. Omitted and `null` are equivalent and mean there is no inclusive upper bound.
</ResponseField>

<ResponseField name="minimum" type={"integer | null"}>
  Minimum value (inclusive).

  Optional. Omitted and `null` are equivalent and mean there is no inclusive lower bound.
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  Optional title for the property.

  Optional. Omitted and `null` are equivalent and mean no title is provided.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"integer"`.
</ResponseField>
Boolean property. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  Optional. Omitted and `null` are equivalent and mean no metadata.

  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="default" type={"boolean | null"}>
  Default value.

  Optional. Omitted and `null` are equivalent and mean no default value is provided.
</ResponseField>

<ResponseField name="description" type={"string | null"}>
  Human-readable description.

  Optional. Omitted and `null` are equivalent and mean no description is provided.
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  Optional title for the property.

  Optional. Omitted and `null` are equivalent and mean no title is provided.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"boolean"`.
</ResponseField>
Multi-select array property. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  Optional. Omitted and `null` are equivalent and mean no metadata.

  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="default" type={<><span><><span>"string"</span><span>[]</span></></span><span> | null</span></>}>
  Default selected values.

  Optional. Omitted and `null` are equivalent and mean no default selections are provided.
</ResponseField>

<ResponseField name="description" type={"string | null"}>
  Human-readable description.

  Optional. Omitted and `null` are equivalent and mean no description is provided.
</ResponseField>

<ResponseField name="items" type={<a href="#multiselectitems">MultiSelectItems</a>} required>
  The items definition describing allowed values.
</ResponseField>

<ResponseField name="maxItems" type={"integer | null"}>
  Maximum number of items to select.

  Optional. Omitted and `null` are equivalent and mean there is no maximum selection count.

  * Minimum: `0`
</ResponseField>

<ResponseField name="minItems" type={"integer | null"}>
  Minimum number of items to select.

  Optional. Omitted and `null` are equivalent and mean there is no minimum selection count.

  * Minimum: `0`
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  Optional title for the property.

  Optional. Omitted and `null` are equivalent and mean no title is provided.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"array"`.
</ResponseField>
Custom or future elicitation property schema.

Values beginning with _ are reserved for implementation-specific extensions. Unknown values that do not begin with _ are reserved for future ACP variants.

Clients that do not understand this property schema type should preserve the raw schema when storing, replaying, proxying, or forwarding elicitation requests. They MUST NOT render it as a known input control.

Custom or future elicitation property schema type.
  Values beginning with `_` are reserved for implementation-specific
  extensions. Unknown values that do not begin with `_` are reserved for
  future ACP variants.
</ResponseField>

ElicitationRequestScope

Request-scoped elicitation, tied to a specific JSON-RPC request outside of a session (e.g., during auth/configuration phases before any session is started).

Type: Object

Properties:

<ResponseField name=“requestId” type={RequestId} required> The request this elicitation is tied to.

ElicitationSchema

Type-safe elicitation schema for requesting structured user input.

This represents a JSON Schema object with primitive-typed properties, as required by the elicitation specification.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“description” type={“string | null”}> Optional description of what this schema represents.

Optional. Omitted and null are equivalent and mean no schema description is provided.

<ResponseField name=“properties” type={“object”}> Property definitions (must be primitive types).

  • Default: {}

<ResponseField name=“required” type={<><>“string”[]</> | null</>}> List of required property names.

Optional. Omitted and null are equivalent and mean no property names are required.

<ResponseField name=“title” type={“string | null”}> Optional title for the schema.

Optional. Omitted and null are equivalent and mean no title is provided.

<ResponseField name=“type” type={ElicitationSchemaType}> Type discriminator. Always "object".

  • Default: "object"

ElicitationSchemaType

Type discriminator for elicitation schemas.

Type: Union

Object schema type.

ElicitationSessionScope

Session-scoped elicitation, optionally tied to a specific tool call.

When tool_call_id is set, the elicitation is tied to a specific tool call. This is useful when an agent receives an elicitation from an MCP server during a tool call and needs to redirect it to the user.

Type: Object

Properties:

<ResponseField name=“sessionId” type={SessionId} required> The session this elicitation is tied to.

<ResponseField name=“toolCallId” type={<>ToolCallId | null</>}> Optional tool call within the session.

Optional. Omitted and null are equivalent and mean the elicitation is scoped to the session without a specific tool call.

ElicitationUrlCapabilities

URL-based elicitation capabilities.

Supplying \{\} means the client supports URL-based elicitation.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

ElicitationUrlMode

URL-based elicitation mode where the client directs the user to a URL.

Type: Union

Shared properties:

<ResponseField name=“elicitationId” type={ElicitationId} required> The unique identifier for this elicitation.

<ResponseField name=“url” type={“string”} required> The URL to direct the user to.

  • Format: uri

Variants:

Tied to a session, optionally to a specific tool call within that session. SessionId} required> The session this elicitation is tied to.
<ResponseField name="toolCallId" type={<><span><a href="#toolcallid">ToolCallId</a></span><span> | null</span></>}>
  Optional tool call within the session.

  Optional. Omitted and `null` are equivalent and mean the elicitation is scoped to the
  session without a specific tool call.
</ResponseField>
Tied to a specific JSON-RPC request outside of a session (e.g., during auth/configuration phases before any session is started). RequestId} required> The request this elicitation is tied to.

EmbeddedResource

The contents of a resource, embedded into a prompt or tool call result.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“annotations” type={<>Annotations | null</>}> Optional annotations that help clients decide how to display or route this content.

<ResponseField name=“resource” type={EmbeddedResourceResource} required> Embedded resource payload, either text or binary data.

EmbeddedResourceResource

Resource content that can be embedded in a message.

Type: Union

Text resource contents embedded directly in the message. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="mimeType" type={"string | null"}>
  MIME type describing the encoded media payload.
</ResponseField>

<ResponseField name="text" type={"string"} required>
  Text payload carried by this content block.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  URI associated with this resource or media payload.
</ResponseField>
Binary resource contents embedded directly in the message. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="blob" type={"string"} required>
  Base64-encoded bytes for a binary resource payload.
</ResponseField>

<ResponseField name="mimeType" type={"string | null"}>
  MIME type describing the encoded media payload.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  URI associated with this resource or media payload.
</ResponseField>

EnumOption

A titled enum option with a const value, human-readable title, and optional description.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“const” type={“string”} required> The constant value for this option.

<ResponseField name=“description” type={“string | null”}> Human-readable description.

Optional. Omitted and null are equivalent and mean no description is provided.

<ResponseField name=“title” type={“string”} required> Human-readable title for this option.

EnvVariable

An environment variable to set when launching an MCP server.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“name” type={“string”} required> The name of the environment variable.

<ResponseField name=“value” type={“string”} required> The value to set for the environment variable.

Error

JSON-RPC error object.

Represents an error that occurred during method execution, following the JSON-RPC 2.0 error object specification with optional additional data.

See protocol docs: JSON-RPC Error Object

Type: Object

Properties:

<ResponseField name=“code” type={ErrorCode} required> A number indicating the error type that occurred. This must be an integer as defined in the JSON-RPC specification.

<ResponseField name=“data” type={“object”}> Optional primitive or structured value that contains additional information about the error. This may include debugging information or context-specific details.

<ResponseField name=“message” type={“string”} required> A string providing a short description of the error. The message should be limited to a concise single sentence.

ErrorCode

Predefined error codes for common JSON-RPC and ACP-specific errors.

These codes follow the JSON-RPC 2.0 specification for standard errors and use the reserved range (-32000 to -32099) for protocol-specific errors.

Type: Union

**Parse error**: Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text. **Invalid request**: The JSON sent is not a valid Request object. **Method not found**: The method does not exist or is not available. **Invalid params**: Invalid method parameter(s). **Internal error**: Internal JSON-RPC error. Reserved for implementation-defined server errors. **Request cancelled**: Execution of the method was aborted either due to a cancellation request from the caller or because of resource constraints or shutdown. **Authentication required**: Authentication is required before this operation can be performed. **Resource not found**: A given resource, such as a file, was not found. Other undefined error code.

ExtNotification

Allows the Agent to send an arbitrary notification that is not part of the ACP spec. Extension notifications provide a way to send one-way messages for custom functionality while maintaining protocol compatibility.

See protocol docs: Extensibility

ExtRequest

Allows for sending an arbitrary request that is not part of the ACP spec. Extension methods provide a way to add custom functionality while maintaining protocol compatibility.

See protocol docs: Extensibility

ExtResponse

Allows for sending an arbitrary response to an ExtRequest that is not part of the ACP spec. Extension methods provide a way to add custom functionality while maintaining protocol compatibility.

See protocol docs: Extensibility

FileSystemCapabilities

File system capabilities that a client may support.

See protocol docs: FileSystem

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“readTextFile” type={“boolean”}> Whether the Client supports fs/read_text_file requests.

  • Default: false

<ResponseField name=“writeTextFile” type={“boolean”}> Whether the Client supports fs/write_text_file requests.

  • Default: false

HttpHeader

An HTTP header to set when making requests to the MCP server.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“name” type={“string”} required> The name of the HTTP header.

<ResponseField name=“value” type={“string”} required> The value to set for the HTTP header.

ImageContent

An image provided to or from an LLM.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“annotations” type={<>Annotations | null</>}> Optional annotations that help clients decide how to display or route this content.

<ResponseField name=“data” type={“string”} required> Base64-encoded media payload.

<ResponseField name=“mimeType” type={“string”} required> MIME type describing the encoded media payload.

<ResponseField name=“uri” type={“string | null”}> URI associated with this resource or media payload.

Implementation

Metadata about the implementation of the client or agent. Describes the name and version of an ACP implementation, with an optional title for UI representation.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“name” type={“string”} required> Intended for programmatic or logical use, but can be used as a display name fallback if title isn’t present.

<ResponseField name=“title” type={“string | null”}> Intended for UI and end-user contexts — optimized to be human-readable and easily understood.

If not provided, the name should be used for display.

<ResponseField name=“version” type={“string”} required> Version of the implementation. Can be displayed to the user or used for debugging or metrics purposes. (e.g. “1.0.0”).

IntegerPropertySchema

Schema for integer properties in an elicitation form.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“default” type={“integer | null”}> Default value.

Optional. Omitted and null are equivalent and mean no default value is provided.

<ResponseField name=“description” type={“string | null”}> Human-readable description.

Optional. Omitted and null are equivalent and mean no description is provided.

<ResponseField name=“maximum” type={“integer | null”}> Maximum value (inclusive).

Optional. Omitted and null are equivalent and mean there is no inclusive upper bound.

<ResponseField name=“minimum” type={“integer | null”}> Minimum value (inclusive).

Optional. Omitted and null are equivalent and mean there is no inclusive lower bound.

<ResponseField name=“title” type={“string | null”}> Optional title for the property.

Optional. Omitted and null are equivalent and mean no title is provided.

LogoutCapabilities

Logout capabilities supported by the agent.

Supplying \{\} means the agent supports the logout method.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

McpCapabilities

MCP capabilities supported by the agent

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“http” type={“boolean”}> Agent supports McpServer::Http.

  • Default: false

<ResponseField name=“sse” type={“boolean”}> Agent supports McpServer::Sse.

  • Default: false

McpServer

Configuration for connecting to an MCP (Model Context Protocol) server.

MCP servers provide tools and context that the agent can use when processing prompts.

See protocol docs: MCP Servers

Type: Union

HTTP transport configuration

Only available when the Agent capabilities indicate mcp_capabilities.http is true.

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="headers" type={<a href="#httpheader">HttpHeader[]</a>} required>
  HTTP headers to set when making requests to the MCP server.
</ResponseField>

<ResponseField name="name" type={"string"} required>
  Human-readable name identifying this MCP server.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"http"`.
</ResponseField>

<ResponseField name="url" type={"string"} required>
  URL to the MCP server.
</ResponseField>
SSE transport configuration

Only available when the Agent capabilities indicate mcp_capabilities.sse is true.

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="headers" type={<a href="#httpheader">HttpHeader[]</a>} required>
  HTTP headers to set when making requests to the MCP server.
</ResponseField>

<ResponseField name="name" type={"string"} required>
  Human-readable name identifying this MCP server.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"sse"`.
</ResponseField>

<ResponseField name="url" type={"string"} required>
  URL to the MCP server.
</ResponseField>
Stdio transport configuration

All Agents MUST support this transport.

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="args" type={<><span>"string"</span><span>[]</span></>} required>
  Command-line arguments to pass to the MCP server.
</ResponseField>

<ResponseField name="command" type={"string"} required>
  Absolute path to the MCP server executable.
</ResponseField>

<ResponseField name="env" type={<a href="#envvariable">EnvVariable[]</a>} required>
  Environment variables to set when launching the MCP server.
</ResponseField>

<ResponseField name="name" type={"string"} required>
  Human-readable name identifying this MCP server.
</ResponseField>

McpServerHttp

HTTP transport configuration for MCP.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“headers” type={HttpHeader[]} required> HTTP headers to set when making requests to the MCP server.

<ResponseField name=“name” type={“string”} required> Human-readable name identifying this MCP server.

<ResponseField name=“url” type={“string”} required> URL to the MCP server.

McpServerSse

SSE transport configuration for MCP.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“headers” type={HttpHeader[]} required> HTTP headers to set when making requests to the MCP server.

<ResponseField name=“name” type={“string”} required> Human-readable name identifying this MCP server.

<ResponseField name=“url” type={“string”} required> URL to the MCP server.

McpServerStdio

Stdio transport configuration for MCP.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“args” type={<>“string”[]</>} required> Command-line arguments to pass to the MCP server.

<ResponseField name=“command” type={“string”} required> Absolute path to the MCP server executable.

<ResponseField name=“env” type={EnvVariable[]} required> Environment variables to set when launching the MCP server.

<ResponseField name=“name” type={“string”} required> Human-readable name identifying this MCP server.

MessageId

Unique identifier for a message within a session.

Type: string

MultiSelectItems

Items for a multi-select (array) property schema.

Type: Union

Multi-select string items with plain string values. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  Optional. Omitted and `null` are equivalent and mean no metadata.

  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="enum" type={<><span>"string"</span><span>[]</span></>} required>
  Allowed enum values.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"string"`.
</ResponseField>
Custom or future typed multi-select items. Custom or future multi-select item type.
  Values beginning with `_` are reserved for implementation-specific
  extensions. Unknown values that do not begin with `_` are reserved for
  future ACP variants.
</ResponseField>
Titled multi-select items with human-readable labels. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  Optional. Omitted and `null` are equivalent and mean no metadata.

  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="anyOf" type={<a href="#enumoption">EnumOption[]</a>} required>
  Titled enum options.
</ResponseField>

MultiSelectPropertySchema

Schema for multi-select (array) properties in an elicitation form.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“default” type={<><>“string”[]</> | null</>}> Default selected values.

Optional. Omitted and null are equivalent and mean no default selections are provided.

<ResponseField name=“description” type={“string | null”}> Human-readable description.

Optional. Omitted and null are equivalent and mean no description is provided.

<ResponseField name=“items” type={MultiSelectItems} required> The items definition describing allowed values.

<ResponseField name=“maxItems” type={“integer | null”}> Maximum number of items to select.

Optional. Omitted and null are equivalent and mean there is no maximum selection count.

  • Minimum: 0

<ResponseField name=“minItems” type={“integer | null”}> Minimum number of items to select.

Optional. Omitted and null are equivalent and mean there is no minimum selection count.

  • Minimum: 0

<ResponseField name=“title” type={“string | null”}> Optional title for the property.

Optional. Omitted and null are equivalent and mean no title is provided.

NumberPropertySchema

Schema for number (floating-point) properties in an elicitation form.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“default” type={“number | null”}> Default value.

Optional. Omitted and null are equivalent and mean no default value is provided.

<ResponseField name=“description” type={“string | null”}> Human-readable description.

Optional. Omitted and null are equivalent and mean no description is provided.

<ResponseField name=“maximum” type={“number | null”}> Maximum value (inclusive).

Optional. Omitted and null are equivalent and mean there is no inclusive upper bound.

<ResponseField name=“minimum” type={“number | null”}> Minimum value (inclusive).

Optional. Omitted and null are equivalent and mean there is no inclusive lower bound.

<ResponseField name=“title” type={“string | null”}> Optional title for the property.

Optional. Omitted and null are equivalent and mean no title is provided.

PermissionOption

An option presented to the user when requesting permission.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“kind” type={PermissionOptionKind} required> Hint about the nature of this permission option.

<ResponseField name=“name” type={“string”} required> Human-readable label to display to the user.

<ResponseField name=“optionId” type={PermissionOptionId} required> Unique identifier for this permission option.

PermissionOptionId

Unique identifier for a permission option.

Type: string

PermissionOptionKind

The type of permission option being presented to the user.

Helps clients choose appropriate icons and UI treatment.

Type: Union

Allow this operation only this time. Allow this operation and remember the choice. Reject this operation only this time. Reject this operation and remember the choice.

Plan

An execution plan for accomplishing complex tasks.

Plans consist of multiple entries representing individual tasks or goals. Agents report plans to clients to provide visibility into their execution strategy. Plans can evolve during execution as the agent discovers new requirements or completes tasks.

See protocol docs: Agent Plan

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“entries” type={PlanEntry[]} required> The list of tasks to be accomplished.

When updating a plan, the agent must send a complete list of all entries with their current status. The client replaces the entire plan with each update.

PlanEntry

A single entry in the execution plan.

Represents a task or goal that the assistant intends to accomplish as part of fulfilling the user’s request. See protocol docs: Plan Entries

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“content” type={“string”} required> Human-readable description of what this task aims to accomplish.

<ResponseField name=“priority” type={PlanEntryPriority} required> The relative importance of this task. Used to indicate which tasks are most critical to the overall goal.

<ResponseField name=“status” type={PlanEntryStatus} required> Current execution status of this task.

PlanEntryPriority

Priority levels for plan entries.

Used to indicate the relative importance or urgency of different tasks in the execution plan. See protocol docs: Plan Entries

Type: Union

High priority task - critical to the overall goal. Medium priority task - important but not critical. Low priority task - nice to have but not essential.

PlanEntryStatus

Status of a plan entry in the execution flow.

Tracks the lifecycle of each task from planning through completion. See protocol docs: Plan Entries

Type: Union

The task has not started yet. The task is currently being worked on. The task has been successfully completed.

PromptCapabilities

Prompt capabilities supported by the agent in session/prompt requests.

Baseline agent functionality requires support for ContentBlock::Text and ContentBlock::ResourceLink in prompt requests.

Other variants must be explicitly opted in to. Capabilities for different types of content in prompt requests.

Indicates which content types beyond the baseline (text and resource links) the agent can process.

See protocol docs: Prompt Capabilities

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“audio” type={“boolean”}> Agent supports ContentBlock::Audio.

  • Default: false

<ResponseField name=“embeddedContext” type={“boolean”}> Agent supports embedded context in session/prompt requests.

When enabled, the Client is allowed to include ContentBlock::Resource in prompt requests for pieces of context that are referenced in the message.

  • Default: false

<ResponseField name=“image” type={“boolean”}> Agent supports ContentBlock::Image.

  • Default: false

ProtocolVersion

Protocol version identifier.

This version is only bumped for breaking changes. Non-breaking changes should be introduced via capabilities.

Type: integer (uint16)

ConstraintValue
Minimum0
Maximum65535

RequestId

JSON RPC Request Id

An identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2]

The Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects.

[1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling.

[2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions.

Type: Union

The JSON-RPC `null` request id. A numeric JSON-RPC request id. A string JSON-RPC request id.

RequestPermissionOutcome

The outcome of a permission request.

Type: Union

The prompt turn was cancelled before the user responded.

When a client sends a session/cancel notification to cancel an ongoing prompt turn, it MUST respond to all pending session/request_permission requests with this Cancelled outcome.

See protocol docs: Cancellation

The discriminator value. Must be `"cancelled"`.
The user selected one of the provided options. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="optionId" type={<a href="#permissionoptionid">PermissionOptionId</a>} required>
  The ID of the option the user selected.
</ResponseField>

<ResponseField name="outcome" type={"string"} required>
  The discriminator value. Must be `"selected"`.
</ResponseField>

A resource that the server is capable of reading, included in a prompt or tool call result.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“annotations” type={<>Annotations | null</>}> Optional annotations that help clients decide how to display or route this content.

<ResponseField name=“description” type={“string | null”}> Optional human-readable details shown with this protocol object.

<ResponseField name=“mimeType” type={“string | null”}> MIME type describing the encoded media payload.

<ResponseField name=“name” type={“string”} required> Human-readable name shown for this protocol object.

<ResponseField name=“size” type={“integer | null”}> Optional size of the linked resource in bytes, if known.

<ResponseField name=“title” type={“string | null”}> Optional display title for end-user UI.

<ResponseField name=“uri” type={“string”} required> URI associated with this resource or media payload.

Role

The sender or recipient of messages and data in a conversation.

Type: Union

The assistant side of a conversation. The user side of a conversation.

SelectedPermissionOutcome

The user selected one of the provided options.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“optionId” type={PermissionOptionId} required> The ID of the option the user selected.

SessionAdditionalDirectoriesCapabilities

Capabilities for additional session directories support.

Supplying \{\} means the agent supports the additionalDirectories field on supported session lifecycle requests. Agents that also support session/list may return SessionInfo.additionalDirectories to report the complete ordered additional-root list associated with a listed session.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

SessionCapabilities

Session capabilities supported by the agent.

As a baseline, all Agents MUST support session/new, session/prompt, session/cancel, and session/update.

Optionally, they MAY support other session methods and notifications by specifying additional capabilities.

Note: session/load is still handled by the top-level load_session capability. This will be unified in future versions of the protocol.

See protocol docs: Session Capabilities

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“additionalDirectories” type={<>SessionAdditionalDirectoriesCapabilities | null</>}> Whether the agent supports additionalDirectories on supported session lifecycle requests.

Optional. Omitted or null both mean the agent does not advertise support. Supplying \{\} means the agent supports additionalDirectories on supported session lifecycle requests.

Agents that also support session/list may return SessionInfo.additionalDirectories to report the complete ordered additional-root list associated with a listed session.

<ResponseField name=“close” type={<>SessionCloseCapabilities | null</>}> Whether the agent supports session/close.

Optional. Omitted or null both mean the agent does not advertise support. Supplying \{\} means the agent supports closing sessions.

<ResponseField name=“delete” type={<>SessionDeleteCapabilities | null</>}> Whether the agent supports session/delete.

Optional. Omitted or null both mean the agent does not advertise support. Supplying \{\} means the agent supports deleting sessions from session/list.

<ResponseField name=“list” type={<>SessionListCapabilities | null</>}> Whether the agent supports session/list.

Optional. Omitted or null both mean the agent does not advertise support. Supplying \{\} means the agent supports listing sessions.

<ResponseField name=“resume” type={<>SessionResumeCapabilities | null</>}> Whether the agent supports session/resume.

Optional. Omitted or null both mean the agent does not advertise support. Supplying \{\} means the agent supports resuming sessions.

SessionCloseCapabilities

Capabilities for the session/close method.

Supplying \{\} means the agent supports closing sessions.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

SessionConfigBoolean

A boolean on/off toggle session configuration option payload.

Type: Object

Properties:

<ResponseField name=“currentValue” type={“boolean”} required> The current value of the boolean option.

SessionConfigGroupId

Unique identifier for a session configuration option value group.

Type: string

SessionConfigId

Unique identifier for a session configuration option.

Type: string

SessionConfigOption

A session configuration option selector and its current state.

Type: Union

Shared properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“category” type={<>SessionConfigOptionCategory | null</>}> Optional semantic category for this option (UX only).

<ResponseField name=“description” type={“string | null”}> Optional description for the Client to display to the user.

<ResponseField name=“id” type={SessionConfigId} required> Unique identifier for the configuration option.

<ResponseField name=“name” type={“string”} required> Human-readable label for the option.

Variants:

Single-value selector (dropdown). SessionConfigValueId} required> The currently selected value.
<ResponseField name="options" type={<a href="#sessionconfigselectoptions">SessionConfigSelectOptions</a>} required>
  The set of selectable options.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"select"`.
</ResponseField>
Boolean on/off toggle. The current value of the boolean option.
<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"boolean"`.
</ResponseField>

SessionConfigOptionCategory

Semantic category for a session configuration option.

This is intended to help Clients distinguish broadly common selectors (e.g. model selector vs session mode selector vs thought/reasoning level) for UX purposes (keyboard shortcuts, icons, placement). It MUST NOT be required for correctness. Clients MUST handle missing or unknown categories gracefully.

Category names beginning with _ are free for custom use, like other ACP extension methods. Category names that do not begin with _ are reserved for the ACP spec.

Type: Union

Session mode selector. Model selector. Model-related configuration parameter. Thought/reasoning level selector. Unknown / uncategorized selector.

SessionConfigOptionsCapabilities

Session configuration option capabilities supported by the client.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“boolean” type={<>BooleanConfigOptionCapabilities | null</>}> Whether the client supports boolean session configuration options.

Optional. Omitted or null both mean the client does not advertise support. Supplying \{\} means agents may include type: "boolean" entries in configOptions, and the client may send session/set_config_option requests with type: "boolean" and a boolean value.

SessionConfigSelect

A single-value selector (dropdown) session configuration option payload.

Type: Object

Properties:

<ResponseField name=“currentValue” type={SessionConfigValueId} required> The currently selected value.

<ResponseField name=“options” type={SessionConfigSelectOptions} required> The set of selectable options.

SessionConfigSelectGroup

A group of possible values for a session configuration option.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“group” type={SessionConfigGroupId} required> Unique identifier for this group.

<ResponseField name=“name” type={“string”} required> Human-readable label for this group.

<ResponseField name=“options” type={SessionConfigSelectOption[]} required> The set of option values in this group.

SessionConfigSelectOption

A possible value for a session configuration option.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“description” type={“string | null”}> Optional description for this option value.

<ResponseField name=“name” type={“string”} required> Human-readable label for this option value.

<ResponseField name=“value” type={SessionConfigValueId} required> Unique identifier for this option value.

SessionConfigSelectOptions

Possible values for a session configuration option.

Type: Union

A flat list of options with no grouping. A list of options grouped under headers.

SessionConfigValueId

Unique identifier for a session configuration option value.

Type: string

SessionDeleteCapabilities

Capabilities for the session/delete method.

Supplying \{\} means the agent supports deleting sessions from session/list.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

SessionId

A unique identifier for a conversation session between a client and agent.

Sessions maintain their own context, conversation history, and state, allowing multiple independent interactions with the same agent.

See protocol docs: Session ID

Type: string

SessionInfo

Information about a session returned by session/list

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“additionalDirectories” type={<>“string”[]</>}> Additional workspace roots reported for this session. Each path must be absolute.

When present, this is the complete ordered additional-root list reported by the Agent. Omitted and empty values are equivalent: the response reports no additional roots.

<ResponseField name=“cwd” type={“string”} required> The working directory for this session. Must be an absolute path.

<ResponseField name=“sessionId” type={SessionId} required> Unique identifier for the session

<ResponseField name=“title” type={“string | null”}> Human-readable title for the session

<ResponseField name=“updatedAt” type={“string | null”}> ISO 8601 timestamp of last activity

SessionInfoUpdate

Update to session metadata. All fields are optional to support partial updates.

Agents send this notification to update session information like title or custom metadata. This allows clients to display dynamic session names and track session state changes.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“title” type={“string | null”}> Human-readable title for the session. Set to null to clear.

<ResponseField name=“updatedAt” type={“string | null”}> ISO 8601 timestamp of last activity. Set to null to clear.

SessionListCapabilities

Capabilities for the session/list method.

Supplying \{\} means the agent supports listing sessions.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

SessionMode

A mode the agent can operate in.

See protocol docs: Session Modes

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“description” type={“string | null”}> Optional human-readable details shown with this protocol object.

<ResponseField name=“id” type={SessionModeId} required> Stable identifier used to refer to this protocol object in later messages.

<ResponseField name=“name” type={“string”} required> Human-readable name shown for this protocol object.

SessionModeId

Unique identifier for a Session Mode.

Type: string

SessionModeState

The set of modes and the one currently active.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“availableModes” type={SessionMode[]} required> The set of modes that the Agent can operate in

<ResponseField name=“currentModeId” type={SessionModeId} required> The current mode the Agent is in.

SessionResumeCapabilities

Capabilities for the session/resume method.

Supplying \{\} means the agent supports resuming sessions.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

SessionUpdate

Different types of updates that can be sent during session processing.

These updates provide real-time feedback about the agent’s progress.

See protocol docs: Agent Reports Output

Type: Union

A chunk of the user's message being streamed. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
  A single item of content
</ResponseField>

<ResponseField name="messageId" type={<><span><a href="#messageid">MessageId</a></span><span> | null</span></>}>
  A unique identifier for the message this chunk belongs to.

  All chunks belonging to the same message share the same `messageId`.
  A change in `messageId` indicates a new message has started.
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"user_message_chunk"`.
</ResponseField>
A chunk of the agent's response being streamed. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
  A single item of content
</ResponseField>

<ResponseField name="messageId" type={<><span><a href="#messageid">MessageId</a></span><span> | null</span></>}>
  A unique identifier for the message this chunk belongs to.

  All chunks belonging to the same message share the same `messageId`.
  A change in `messageId` indicates a new message has started.
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"agent_message_chunk"`.
</ResponseField>
A chunk of the agent's internal reasoning being streamed. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
  A single item of content
</ResponseField>

<ResponseField name="messageId" type={<><span><a href="#messageid">MessageId</a></span><span> | null</span></>}>
  A unique identifier for the message this chunk belongs to.

  All chunks belonging to the same message share the same `messageId`.
  A change in `messageId` indicates a new message has started.
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"agent_thought_chunk"`.
</ResponseField>
Notification that a new tool call has been initiated. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="content" type={<a href="#toolcallcontent">ToolCallContent[]</a>}>
  Content produced by the tool call.
</ResponseField>

<ResponseField name="kind" type={<a href="#toolkind">ToolKind</a>}>
  The category of tool being invoked.
  Helps clients choose appropriate icons and UI treatment.
</ResponseField>

<ResponseField name="locations" type={<a href="#toolcalllocation">ToolCallLocation[]</a>}>
  File locations affected by this tool call.
  Enables "follow-along" features in clients.
</ResponseField>

<ResponseField name="rawInput" type={"object"}>
  Raw input parameters sent to the tool.
</ResponseField>

<ResponseField name="rawOutput" type={"object"}>
  Raw output returned by the tool.
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"tool_call"`.
</ResponseField>

<ResponseField name="status" type={<a href="#toolcallstatus">ToolCallStatus</a>}>
  Current execution status of the tool call.
</ResponseField>

<ResponseField name="title" type={"string"} required>
  Human-readable title describing what the tool is doing.
</ResponseField>

<ResponseField name="toolCallId" type={<a href="#toolcallid">ToolCallId</a>} required>
  Unique identifier for this tool call within the session.
</ResponseField>
Update on the status or results of a tool call. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="content" type={<><span><a href="#toolcallcontent">ToolCallContent[]</a></span><span> | null</span></>}>
  Replace the content collection.
</ResponseField>

<ResponseField name="kind" type={<><span><a href="#toolkind">ToolKind</a></span><span> | null</span></>}>
  Update the tool kind.
</ResponseField>

<ResponseField name="locations" type={<><span><a href="#toolcalllocation">ToolCallLocation[]</a></span><span> | null</span></>}>
  Replace the locations collection.
</ResponseField>

<ResponseField name="rawInput" type={"object"}>
  Update the raw input.
</ResponseField>

<ResponseField name="rawOutput" type={"object"}>
  Update the raw output.
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"tool_call_update"`.
</ResponseField>

<ResponseField name="status" type={<><span><a href="#toolcallstatus">ToolCallStatus</a></span><span> | null</span></>}>
  Update the execution status.
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  Update the human-readable title.
</ResponseField>

<ResponseField name="toolCallId" type={<a href="#toolcallid">ToolCallId</a>} required>
  The ID of the tool call being updated.
</ResponseField>
The agent's execution plan for complex tasks. See protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/v1/agent-plan) The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="entries" type={<a href="#planentry">PlanEntry[]</a>} required>
  The list of tasks to be accomplished.

  When updating a plan, the agent must send a complete list of all entries
  with their current status. The client replaces the entire plan with each update.
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"plan"`.
</ResponseField>
Available commands are ready or have changed The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="availableCommands" type={<a href="#availablecommand">AvailableCommand[]</a>} required>
  Commands the agent can execute
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"available_commands_update"`.
</ResponseField>
The current mode of the session has changed

See protocol docs: Session Modes

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="currentModeId" type={<a href="#sessionmodeid">SessionModeId</a>} required>
  The ID of the current mode
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"current_mode_update"`.
</ResponseField>
Session configuration options have been updated. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="configOptions" type={<a href="#sessionconfigoption">SessionConfigOption[]</a>} required>
  The full set of configuration options and their current values.
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"config_option_update"`.
</ResponseField>
Session metadata has been updated (title, timestamps, custom metadata) The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"session_info_update"`.
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  Human-readable title for the session. Set to null to clear.
</ResponseField>

<ResponseField name="updatedAt" type={"string | null"}>
  ISO 8601 timestamp of last activity. Set to null to clear.
</ResponseField>
Context window and cost update for the session. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="cost" type={<><span><a href="#cost">Cost</a></span><span> | null</span></>}>
  Cumulative session cost (optional).
</ResponseField>

<ResponseField name="sessionUpdate" type={"string"} required>
  The discriminator value. Must be `"usage_update"`.
</ResponseField>

<ResponseField name="size" type={"uint64"} required>
  Total context window size in tokens.

  * Minimum: `0`
</ResponseField>

<ResponseField name="used" type={"uint64"} required>
  Tokens currently in context.

  * Minimum: `0`
</ResponseField>

StopReason

Reasons why an agent stops processing a prompt turn.

See protocol docs: Stop Reasons

Type: Union

The turn ended successfully. The turn ended because the agent reached the maximum number of tokens. The turn ended because the agent reached the maximum number of allowed agent requests between user turns. The turn ended because the agent refused to continue. The user prompt and everything that comes after it won't be included in the next prompt, so this should be reflected in the UI. The turn was cancelled by the client via `session/cancel`.

This stop reason MUST be returned when the client sends a session/cancel notification, even if the cancellation causes exceptions in underlying operations. Agents should catch these exceptions and return this semantically meaningful response to confirm successful cancellation.

StringFormat

String format types for string properties in elicitation schemas.

Type: Union

Email address format. URI format. Date format (YYYY-MM-DD). Date-time format (ISO 8601).

StringMultiSelectItems

String item schema for multi-select enum properties.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“enum” type={<>“string”[]</>} required> Allowed enum values.

StringPropertySchema

Schema for string properties in an elicitation form.

When enum or oneOf is set, this represents a single-select enum with "type": "string".

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“default” type={“string | null”}> Default value.

Optional. Omitted and null are equivalent and mean no default value is provided.

<ResponseField name=“description” type={“string | null”}> Human-readable description.

Optional. Omitted and null are equivalent and mean no description is provided.

<ResponseField name=“enum” type={<><>“string”[]</> | null</>}> Enum values for untitled single-select enums. Optional. Omitted and null are equivalent and mean no untitled single-select choices are declared by enum.

<ResponseField name=“format” type={<>StringFormat | null</>}> String format.

Optional. Omitted and null are equivalent and mean there is no format constraint.

<ResponseField name=“maxLength” type={“integer | null”}> Maximum string length.

Optional. Omitted and null are equivalent and mean there is no maximum length constraint.

  • Minimum: 0

<ResponseField name=“minLength” type={“integer | null”}> Minimum string length.

Optional. Omitted and null are equivalent and mean there is no minimum length constraint.

  • Minimum: 0

<ResponseField name=“oneOf” type={<>EnumOption[] | null</>}> Titled enum options for titled single-select enums. Optional. Omitted and null are equivalent and mean no titled single-select choices are declared by oneOf.

<ResponseField name=“pattern” type={“string | null”}> Pattern the string must match.

Optional. Omitted and null are equivalent and mean there is no pattern constraint.

<ResponseField name=“title” type={“string | null”}> Optional title for the property.

Optional. Omitted and null are equivalent and mean no title is provided.

Terminal

Embed a terminal created with terminal/create by its id.

The terminal must be added before calling terminal/release.

See protocol docs: Terminal

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“terminalId” type={TerminalId} required> Identifier of the terminal instance to embed in the content stream.

TerminalExitStatus

Exit status of a terminal command.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“exitCode” type={“integer | null”}> The process exit code (may be null if terminated by signal).

  • Minimum: 0

<ResponseField name=“signal” type={“string | null”}> The signal that terminated the process (may be null if exited normally).

TerminalId

Typed identifier used for terminal values on the wire.

Type: string

TextContent

Text provided to or from an LLM.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“annotations” type={<>Annotations | null</>}> Optional annotations that help clients decide how to display or route this content.

<ResponseField name=“text” type={“string”} required> Text payload carried by this content block.

TextResourceContents

Text-based resource contents.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“mimeType” type={“string | null”}> MIME type describing the encoded media payload.

<ResponseField name=“text” type={“string”} required> Text payload carried by this content block.

<ResponseField name=“uri” type={“string”} required> URI associated with this resource or media payload.

TitledMultiSelectItems

Items definition for titled multi-select enum properties.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

Optional. Omitted and null are equivalent and mean no metadata.

See protocol docs: Extensibility

<ResponseField name=“anyOf” type={EnumOption[]} required> Titled enum options.

ToolCall

Represents a tool call that the language model has requested.

Tool calls are actions that the agent executes on behalf of the language model, such as reading files, executing code, or fetching data from external sources.

See protocol docs: Tool Calls

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“content” type={ToolCallContent[]}> Content produced by the tool call.

<ResponseField name=“kind” type={ToolKind}> The category of tool being invoked. Helps clients choose appropriate icons and UI treatment.

<ResponseField name=“locations” type={ToolCallLocation[]}> File locations affected by this tool call. Enables “follow-along” features in clients.

<ResponseField name=“rawInput” type={“object”}> Raw input parameters sent to the tool.

<ResponseField name=“rawOutput” type={“object”}> Raw output returned by the tool.

<ResponseField name=“status” type={ToolCallStatus}> Current execution status of the tool call.

<ResponseField name=“title” type={“string”} required> Human-readable title describing what the tool is doing.

<ResponseField name=“toolCallId” type={ToolCallId} required> Unique identifier for this tool call within the session.

ToolCallContent

Content produced by a tool call.

Tool calls can produce different types of content including standard content blocks (text, images) or file diffs.

See protocol docs: Content

Type: Union

Standard content block (text, images, resources). The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
  The actual content block.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"content"`.
</ResponseField>
File modification shown as a diff. The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="newText" type={"string"} required>
  The new content after modification.
</ResponseField>

<ResponseField name="oldText" type={"string | null"}>
  The original content (None for new files).
</ResponseField>

<ResponseField name="path" type={"string"} required>
  The absolute file path being modified.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"diff"`.
</ResponseField>
Embed a terminal created with `terminal/create` by its id.

The terminal must be added before calling terminal/release.

See protocol docs: Terminal

The \_meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.
  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v1/extensibility)
</ResponseField>

<ResponseField name="terminalId" type={<a href="#terminalid">TerminalId</a>} required>
  Identifier of the terminal instance to embed in the content stream.
</ResponseField>

<ResponseField name="type" type={"string"} required>
  The discriminator value. Must be `"terminal"`.
</ResponseField>

ToolCallId

Unique identifier for a tool call within a session.

Type: string

ToolCallLocation

A file location being accessed or modified by a tool.

Enables clients to implement “follow-along” features that track which files the agent is working with in real-time.

See protocol docs: Following the Agent

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“line” type={“integer | null”}> Optional line number within the file.

  • Minimum: 0

<ResponseField name=“path” type={“string”} required> The absolute file path being accessed or modified.

ToolCallStatus

Execution status of a tool call.

Tool calls progress through different statuses during their lifecycle.

See protocol docs: Status

Type: Union

The tool call hasn't started running yet because the input is either streaming or we're awaiting approval. The tool call is currently running. The tool call completed successfully. The tool call failed with an error.

ToolCallUpdate

An update to an existing tool call.

Used to report progress and results as tools execute. All fields except the tool call ID are optional - only changed fields need to be included.

See protocol docs: Updating

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“content” type={<>ToolCallContent[] | null</>}> Replace the content collection.

<ResponseField name=“kind” type={<>ToolKind | null</>}> Update the tool kind.

<ResponseField name=“locations” type={<>ToolCallLocation[] | null</>}> Replace the locations collection.

<ResponseField name=“rawInput” type={“object”}> Update the raw input.

<ResponseField name=“rawOutput” type={“object”}> Update the raw output.

<ResponseField name=“status” type={<>ToolCallStatus | null</>}> Update the execution status.

<ResponseField name=“title” type={“string | null”}> Update the human-readable title.

<ResponseField name=“toolCallId” type={ToolCallId} required> The ID of the tool call being updated.

ToolKind

Categories of tools that can be invoked.

Tool kinds help clients choose appropriate icons and optimize how they display tool execution progress.

See protocol docs: Creating

Type: Union

Reading files or data. Modifying files or content. Removing files or data. Moving or renaming files. Searching for information. Running commands or code. Internal reasoning or planning. Retrieving external data. Switching the current session mode. Other tool types (default).

UnstructuredCommandInput

All text that was typed after the command name is provided as input.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“hint” type={“string”} required> A hint to display when the input hasn’t been provided yet

UsageUpdate

Context window and cost update for a session.

Type: Object

Properties:

<ResponseField name=“_meta” type={“object | null”}> The _meta property is reserved by ACP to allow clients and agents to attach additional metadata to their interactions. Implementations MUST NOT make assumptions about values at these keys.

See protocol docs: Extensibility

<ResponseField name=“cost” type={<>Cost | null</>}> Cumulative session cost (optional).

<ResponseField name=“size” type={“uint64”} required> Total context window size in tokens.

  • Minimum: 0

<ResponseField name=“used” type={“uint64”} required> Tokens currently in context.

  • Minimum: 0

Last updated Oct 08, 2026