> ## 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>
  This schema file is generated in this repository at
  [`schema/v2/schema.unstable.json`](https://github.com/agentclientprotocol/agent-client-protocol/blob/main/schema/v2/schema.unstable.json).
  GitHub releases for this schema are not published yet.
</Note>

## 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.

<a id="auth-login" />

### <span class="font-mono">auth/login</span>

Authenticates the client using the specified authentication method.

Agents MUST support this method when their `initialize` response advertised
at least one valid authentication method. Clients MUST NOT call this method
when `authMethods` was omitted or empty.

Called when the agent requires authentication before allowing session creation.
The client provides the authentication method ID that was advertised during initialization.

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

See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/v2/draft/initialization)

#### <span class="font-mono">LoginAuthRequest</span>

Request parameters for the `auth/login` method.

Specifies which authentication method to use.

Agents MUST support this method when their `initialize` response advertised
at least one valid authentication method. Clients MUST NOT call this method
when `authMethods` was omitted or empty.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="methodId" type={<a href="#authmethodid">AuthMethodId</a>} required>
  The ID of the authentication method to use.
  Must be one of the methods advertised in the initialize response.
</ResponseField>

#### <span class="font-mono">LoginAuthResponse</span>

Response to the `auth/login` 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<a id="auth-logout" />

### <span class="font-mono">auth/logout</span>

Logs out of the current authenticated state.

Agents MUST support this method when their `initialize` response advertised
at least one valid authentication method. Clients MUST NOT call this method
when `authMethods` was omitted or empty.

After a successful logout, authentication-gated requests require the client
to authenticate again. There is no guarantee about the behavior of already
running sessions.

#### <span class="font-mono">LogoutAuthRequest</span>

Request parameters for the `auth/logout` method.

Terminates the current authenticated session.

Agents MUST support this method when their `initialize` response advertised
at least one valid authentication method. Clients MUST NOT call this method
when `authMethods` was omitted or empty.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

#### <span class="font-mono">LogoutAuthResponse</span>

Response to the `auth/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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<a id="document-didchange" />

### <span class="font-mono">document/didChange</span>

**UNSTABLE**

Notification sent when a file is edited.

#### <span class="font-mono">DidChangeDocumentNotification</span>

Notification sent when a file is edited.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="contentChanges" type={<a href="#textdocumentcontentchangeevent">TextDocumentContentChangeEvent[]</a>} required>
  The content changes.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The session ID for this notification.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the changed document.

  * Format: `uri`
</ResponseField>

<ResponseField name="version" type={"int64"} required>
  The new version number of the document.
</ResponseField>

<a id="document-didclose" />

### <span class="font-mono">document/didClose</span>

**UNSTABLE**

Notification sent when a file is closed.

#### <span class="font-mono">DidCloseDocumentNotification</span>

Notification sent when a file is closed.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The session ID for this notification.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the closed document.

  * Format: `uri`
</ResponseField>

<a id="document-didfocus" />

### <span class="font-mono">document/didFocus</span>

**UNSTABLE**

Notification sent when a file becomes the active editor tab.

#### <span class="font-mono">DidFocusDocumentNotification</span>

Notification sent when a file becomes the active editor tab.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="position" type={<a href="#position">Position</a>} required>
  The current cursor position.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The session ID for this notification.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the focused document.

  * Format: `uri`
</ResponseField>

<ResponseField name="version" type={"int64"} required>
  The version number of the document.
</ResponseField>

<ResponseField name="visibleRange" type={<a href="#range">Range</a>} required>
  The portion of the file currently visible in the editor viewport.
</ResponseField>

<a id="document-didopen" />

### <span class="font-mono">document/didOpen</span>

**UNSTABLE**

Notification sent when a file is opened in the editor.

#### <span class="font-mono">DidOpenDocumentNotification</span>

Notification sent when a file is opened in the editor.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="languageId" type={"string"} required>
  The language identifier of the document (e.g., "rust", "python").
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The session ID for this notification.
</ResponseField>

<ResponseField name="text" type={"string"} required>
  The full text content of the document.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the opened document.

  * Format: `uri`
</ResponseField>

<ResponseField name="version" type={"int64"} required>
  The version number of the document.
</ResponseField>

<a id="document-didsave" />

### <span class="font-mono">document/didSave</span>

**UNSTABLE**

Notification sent when a file is saved.

#### <span class="font-mono">DidSaveDocumentNotification</span>

Notification sent when a file is saved.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The session ID for this notification.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the saved document.

  * Format: `uri`
</ResponseField>

### <span class="font-mono">initialize</span>

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](https://agentclientprotocol.com/protocol/v2/draft/initialization)

#### <span class="font-mono">InitializeRequest</span>

Request parameters for the initialize method.

Sent by the client to establish connection and negotiate capabilities.

See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/v2/draft/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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="capabilities" type={<a href="#clientcapabilities">ClientCapabilities</a>}>
  Capabilities supported by the client.

  * Default: `{}`
</ResponseField>

<ResponseField name="info" type={<a href="#implementation">Implementation</a>} required>
  Information about the implementation sending this initialize request.
</ResponseField>

<ResponseField name="protocolVersion" type={<a href="#protocolversion">ProtocolVersion</a>} required>
  The latest protocol version supported by the client.
</ResponseField>

#### <span class="font-mono">InitializeResponse</span>

Response to the `initialize` method.

Contains the negotiated protocol version and agent capabilities.

See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/v2/draft/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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="authMethods" type={<a href="#authmethod">AuthMethod[]</a>}>
  Authentication methods supported by the agent.

  Optional. Omitted or empty means the agent does not advertise the
  authentication method surface. Supplying one or more valid methods means
  the agent MUST support both `auth/login` and `auth/logout`.
</ResponseField>

<ResponseField name="capabilities" type={<a href="#agentcapabilities">AgentCapabilities</a>}>
  Capabilities supported by the agent.

  * Default: `{}`
</ResponseField>

<ResponseField name="info" type={<a href="#implementation">Implementation</a>} required>
  Information about the implementation sending this initialize response.
</ResponseField>

<ResponseField name="protocolVersion" type={<a href="#protocolversion">ProtocolVersion</a>} 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.
</ResponseField>

<a id="agent-mcp-message" />

### <span class="font-mono">mcp/message</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Exchanges an MCP-over-ACP message.

#### <span class="font-mono">MessageMcpNotification</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Notification parameters for `mcp/message`.

This is used when the wrapped MCP message is a notification and the outer JSON-RPC
envelope has no `id`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="connectionId" type={<a href="#mcpconnectionid">McpConnectionId</a>} required>
  The MCP-over-ACP connection this message is sent on.
</ResponseField>

<ResponseField name="method" type={"string"} required>
  The inner MCP method name.
</ResponseField>

<ResponseField name="params" type={"object | null"}>
  Optional inner MCP params.

  If omitted or set to `null`, the inner MCP message has no params.
</ResponseField>

#### <span class="font-mono">MessageMcpRequest</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for `mcp/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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="connectionId" type={<a href="#mcpconnectionid">McpConnectionId</a>} required>
  The MCP-over-ACP connection this message is sent on.
</ResponseField>

<ResponseField name="method" type={"string"} required>
  The inner MCP method name.
</ResponseField>

<ResponseField name="params" type={"object | null"}>
  Optional inner MCP params.

  If omitted or set to `null`, the inner MCP message has no params.
</ResponseField>

#### <span class="font-mono">MessageMcpResponse</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to `mcp/message`.

This is the inner MCP response result payload. Any JSON value is valid.

<a id="nes-accept" />

### <span class="font-mono">nes/accept</span>

**UNSTABLE**

Notification sent when a suggestion is accepted.

#### <span class="font-mono">AcceptNesNotification</span>

Notification sent when a suggestion is accepted.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The session ID for this notification.
</ResponseField>

<ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
  The ID of the accepted suggestion.
</ResponseField>

<a id="nes-close" />

### <span class="font-mono">nes/close</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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

The agent must cancel any ongoing work and then free up any resources
associated with the NES session.

#### <span class="font-mono">CloseNesRequest</span>

Request to close an NES session.

The agent **must** cancel any ongoing work related to the NES session
and then free up any resources associated with the 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The ID of the NES session to close.
</ResponseField>

#### <span class="font-mono">CloseNesResponse</span>

Response from closing an NES 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<a id="nes-reject" />

### <span class="font-mono">nes/reject</span>

**UNSTABLE**

Notification sent when a suggestion is rejected.

#### <span class="font-mono">RejectNesNotification</span>

Notification sent when a suggestion is rejected.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="reason" type={<><span><a href="#nesrejectreason">NesRejectReason</a></span><span> | null</span></>}>
  The reason for rejection.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The session ID for this notification.
</ResponseField>

<ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
  The ID of the rejected suggestion.
</ResponseField>

<a id="nes-start" />

### <span class="font-mono">nes/start</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Starts an NES session.

#### <span class="font-mono">StartNesRequest</span>

Request to start an NES 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="repository" type={<><span><a href="#nesrepository">NesRepository</a></span><span> | null</span></>}>
  Repository metadata, if the workspace is a git repository.
</ResponseField>

<ResponseField name="workspaceFolders" type={<><span><a href="#workspacefolder">WorkspaceFolder[]</a></span><span> | null</span></>}>
  The workspace folders.
</ResponseField>

<ResponseField name="workspaceUri" type={"string | null"}>
  The root URI of the workspace.

  * Format: `uri`
</ResponseField>

#### <span class="font-mono">StartNesResponse</span>

Response to `nes/start`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The session ID for the newly started NES session.
</ResponseField>

<a id="nes-suggest" />

### <span class="font-mono">nes/suggest</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Requests a code suggestion.

#### <span class="font-mono">SuggestNesRequest</span>

Request for a code suggestion.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="context" type={<><span><a href="#nessuggestcontext">NesSuggestContext</a></span><span> | null</span></>}>
  Context for the suggestion, included based on agent capabilities.
</ResponseField>

<ResponseField name="position" type={<a href="#position">Position</a>} required>
  The current cursor position.
</ResponseField>

<ResponseField name="selection" type={<><span><a href="#range">Range</a></span><span> | null</span></>}>
  The current text selection range, if any.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The session ID for this request.
</ResponseField>

<ResponseField name="triggerKind" type={<a href="#nestriggerkind">NesTriggerKind</a>} required>
  What triggered this suggestion request.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the document to suggest for.

  * Format: `uri`
</ResponseField>

<ResponseField name="version" type={"int64"} required>
  The version number of the document.
</ResponseField>

#### <span class="font-mono">SuggestNesResponse</span>

Response to `nes/suggest`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="suggestions" type={<a href="#nessuggestion">NesSuggestion[]</a>} required>
  The list of suggestions.
</ResponseField>

<a id="providers-disable" />

### <span class="font-mono">providers/disable</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Disables a provider.

#### <span class="font-mono">DisableProviderRequest</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for `providers/disable`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="providerId" type={<a href="#providerid">ProviderId</a>} required>
  Provider ID to disable.
</ResponseField>

#### <span class="font-mono">DisableProviderResponse</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to `providers/disable`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<a id="providers-list" />

### <span class="font-mono">providers/list</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Lists providers that can be configured by the client.

#### <span class="font-mono">ListProvidersRequest</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for `providers/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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

#### <span class="font-mono">ListProvidersResponse</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to `providers/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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="providers" type={<a href="#providerinfo">ProviderInfo[]</a>} required>
  Configurable providers with current routing info suitable for UI display.
</ResponseField>

<a id="providers-set" />

### <span class="font-mono">providers/set</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Replaces the configuration for a provider.

#### <span class="font-mono">SetProviderRequest</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for `providers/set`.

Replaces the full configuration for one provider ID.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="apiType" type={<a href="#llmprotocol">LlmProtocol</a>} required>
  Protocol type for this provider.
</ResponseField>

<ResponseField name="baseUrl" type={"string"} required>
  Base URL for requests sent through this provider.

  * Format: `uri`
</ResponseField>

<ResponseField name="headers" type={"object"}>
  Full headers map for this provider.
  May include authorization, routing, or other integration-specific headers.
</ResponseField>

<ResponseField name="providerId" type={<a href="#providerid">ProviderId</a>} required>
  Provider ID to configure.
</ResponseField>

#### <span class="font-mono">SetProviderResponse</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to `providers/set`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<a id="session-cancel" />

### <span class="font-mono">session/cancel</span>

Cancels ongoing operations for a session.

This is a notification sent by the client to cancel active work in a
session.

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
* Report an idle `state_update` with `StopReason::Cancelled` after
  cancellation succeeds

See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/v2/draft/prompt-lifecycle#cancellation)

#### <span class="font-mono">CancelSessionNotification</span>

Notification to cancel ongoing operations for a session.

See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/v2/draft/prompt-lifecycle#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The ID of the session to cancel operations for.
</ResponseField>

<a id="session-close" />

### <span class="font-mono">session/close</span>

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

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

#### <span class="font-mono">CloseSessionRequest</span>

Request parameters for closing an active session.

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.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The ID of the session to close.
</ResponseField>

#### <span class="font-mono">CloseSessionResponse</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<a id="session-delete" />

### <span class="font-mono">session/delete</span>

Deletes an existing session from `session/list`.

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

#### <span class="font-mono">DeleteSessionRequest</span>

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

Only available if the Agent supports the `session.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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The ID of the session to delete.
</ResponseField>

#### <span class="font-mono">DeleteSessionResponse</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<a id="session-fork" />

### <span class="font-mono">session/fork</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Forks an existing session to create a new independent session.

This method is only available if the agent advertises the `session.fork` capability.

The agent should create a new session with the same conversation context as the
original, allowing operations like generating summaries without affecting the
original session's history.

#### <span class="font-mono">ForkSessionRequest</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for forking an existing session.

Creates a new session based on the context of an existing one, allowing
operations like generating summaries without affecting the original session's history.

Only available if the Agent supports the `session.fork` 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="additionalDirectories" type={<a href="#absolutepath">AbsolutePath[]</a>}>
  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 forked
  session.
</ResponseField>

<ResponseField name="cwd" type={<a href="#absolutepath">AbsolutePath</a>} required>
  The working directory for this session. Must be an absolute path.
</ResponseField>

<ResponseField name="mcpServers" type={<a href="#mcpserver">McpServer[]</a>}>
  List of MCP servers to connect to for this session.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The ID of the session to fork.
</ResponseField>

#### <span class="font-mono">ForkSessionResponse</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response from forking 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="configOptions" type={<a href="#sessionconfigoption">SessionConfigOption[]</a>}>
  Initial session configuration options.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  Unique identifier for the newly created forked session.
</ResponseField>

<a id="session-list" />

### <span class="font-mono">session/list</span>

Lists existing sessions known to the agent.

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

#### <span class="font-mono">ListSessionsRequest</span>

Request parameters for listing existing 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="cursor" type={<><span><a href="#sessionlistcursor">SessionListCursor</a></span><span> | null</span></>}>
  Opaque cursor token from a previous response's nextCursor field for cursor-based pagination
</ResponseField>

<ResponseField name="cwd" type={<><span><a href="#absolutepath">AbsolutePath</a></span><span> | null</span></>}>
  Filter sessions by working directory. Must be an absolute path.
</ResponseField>

#### <span class="font-mono">ListSessionsResponse</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="nextCursor" type={<><span><a href="#sessionlistcursor">SessionListCursor</a></span><span> | null</span></>}>
  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>

<ResponseField name="sessions" type={<a href="#sessioninfo">SessionInfo[]</a>} required>
  Array of session information objects.
</ResponseField>

<a id="session-new" />

### <span class="font-mono">session/new</span>

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](https://agentclientprotocol.com/protocol/v2/draft/session-setup)

#### <span class="font-mono">NewSessionRequest</span>

Request parameters for creating a new session.

See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/v2/draft/session-setup#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="additionalDirectories" type={<a href="#absolutepath">AbsolutePath[]</a>}>
  Additional workspace roots for this session. Each path must be absolute.

  These expand the session's workspace 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>

<ResponseField name="cwd" type={<a href="#absolutepath">AbsolutePath</a>} required>
  The working directory for this session. Must be an absolute path.
</ResponseField>

<ResponseField name="mcpServers" type={<a href="#mcpserver">McpServer[]</a>}>
  List of MCP (Model Context Protocol) servers the agent should connect to.
</ResponseField>

#### <span class="font-mono">NewSessionResponse</span>

Response from creating a new session.

See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/v2/draft/session-setup#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="configOptions" type={<a href="#sessionconfigoption">SessionConfigOption[]</a>}>
  Initial session configuration options.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  Unique identifier for the created session.

  Used in all subsequent requests for this conversation.
</ResponseField>

<a id="session-prompt" />

### <span class="font-mono">session/prompt</span>

Processes a user prompt within a session.

This request accepts the prompt:

* Receives user messages with optional context (files, images, etc.)
* Returns once the prompt is accepted

After acceptance, the Agent reports the accepted user message,
processing state, output, tool calls, and completion through
`session/update` notifications.

See protocol docs: [Prompt Lifecycle](https://agentclientprotocol.com/protocol/v2/draft/prompt-lifecycle)

#### <span class="font-mono">PromptRequest</span>

Request parameters for sending a user prompt to the agent.

Contains the user's message and any additional context.

See protocol docs: [User Message](https://agentclientprotocol.com/protocol/v2/draft/prompt-lifecycle#1-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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="prompt" type={<a href="#contentblock">ContentBlock[]</a>} 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>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The ID of the session to send this user message to
</ResponseField>

#### <span class="font-mono">PromptResponse</span>

Response acknowledging that a user prompt was accepted.

This response does not indicate that the agent has finished processing.
Processing and completion are reported through `state_update` session updates.

See protocol docs: [Prompt Accepted](https://agentclientprotocol.com/protocol/v2/draft/prompt-lifecycle#2-prompt-accepted)

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<a id="session-resume" />

### <span class="font-mono">session/resume</span>

Resumes an existing session.

The agent should resume the session context, allowing the conversation
to continue. If `replayFrom` is set, the agent should replay
conversation history before responding.

#### <span class="font-mono">ResumeSessionRequest</span>

Request parameters for resuming an existing session.

Resumes an existing session and optionally replays prior conversation
history according to `replayFrom`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="additionalDirectories" type={<a href="#absolutepath">AbsolutePath[]</a>}>
  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>

<ResponseField name="cwd" type={<a href="#absolutepath">AbsolutePath</a>} required>
  The working directory for this session. Must be an absolute path.
</ResponseField>

<ResponseField name="mcpServers" type={<a href="#mcpserver">McpServer[]</a>}>
  List of MCP servers to connect to for this session.
</ResponseField>

<ResponseField name="replayFrom" type={<><span><a href="#replayfrom">ReplayFrom</a></span><span> | null</span></>}>
  Inclusive cursor describing where conversation replay should begin.

  Optional. Omitted or `null` both mean the Agent should resume without
  replaying previous conversation history. Replay cursors are inclusive:
  replay includes the position identified by the cursor. Supplying
  `\{ "type": "start" \}` means the Agent should replay the whole
  conversation before responding.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The ID of the session to resume.
</ResponseField>

#### <span class="font-mono">ResumeSessionResponse</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="configOptions" type={<a href="#sessionconfigoption">SessionConfigOption[]</a>}>
  Initial session configuration options.
</ResponseField>

<a id="session-set_config_option" />

### <span class="font-mono">session/set\_config\_option</span>

Sets the current value for a session configuration option.

#### <span class="font-mono">SetSessionConfigOptionRequest</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="configId" type={<a href="#sessionconfigid">SessionConfigId</a>} required>
  The ID of the configuration option to set.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The ID of the session to set the configuration option for.
</ResponseField>

**Variants:**

<ResponseField name="id" type="object">
  A `SessionConfigValueId` string value (`type: "id"`).

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      The discriminator value. Must be `"id"`.
    </ResponseField>

    <ResponseField name="value" type={<a href="#sessionconfigvalueid">SessionConfigValueId</a>} required>
      The value ID.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="boolean" type="object">
  A boolean value (`type: "boolean"`).

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      The discriminator value. Must be `"boolean"`.
    </ResponseField>

    <ResponseField name="value" type={"boolean"} required>
      The boolean value.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="other" type="object">
  Custom or future session configuration option value payload.

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

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      Custom or future session configuration option value type.

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

    <ResponseField name="value" type={"object"} required>
      Raw value payload for the custom or future value type.
    </ResponseField>
  </Expandable>
</ResponseField>

#### <span class="font-mono">SetSessionConfigOptionResponse</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

## 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.

<a id="elicitation-complete" />

### <span class="font-mono">elicitation/complete</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Notification that a URL-based elicitation has completed.

#### <span class="font-mono">CompleteElicitationNotification</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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.

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

<ResponseField name="elicitationId" type={<a href="#elicitationid">ElicitationId</a>} required>
  The ID of the elicitation that completed.
</ResponseField>

<a id="elicitation-create" />

### <span class="font-mono">elicitation/create</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Requests structured user input via a form or URL.

#### <span class="font-mono">CreateElicitationRequest</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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.

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

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

**Variants:**

<ResponseField name="form" type="object">
  Form-based elicitation where the client renders a form from the provided schema.

  <Expandable title="Properties">
    <ResponseField name="mode" type={"string"} required>
      The discriminator value. Must be `"form"`.
    </ResponseField>

    <ResponseField name="requestedSchema" type={<a href="#elicitationschema">ElicitationSchema</a>} required>
      A JSON Schema describing the form fields to present to the user.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="url" type="object">
  URL-based elicitation where the client directs the user to a URL.

  <Expandable title="Properties">
    <ResponseField name="elicitationId" type={<a href="#elicitationid">ElicitationId</a>} required>
      The unique identifier for this elicitation.
    </ResponseField>

    <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>
  </Expandable>
</ResponseField>

<ResponseField name="other" type="object">
  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.

  <Expandable title="Properties">
    <ResponseField name="mode" type={"string"} required>
      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>
  </Expandable>
</ResponseField>

#### <span class="font-mono">CreateElicitationResponse</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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.

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

**Variants:**

<ResponseField name="accept" type="object">
  The user accepted and provided content.

  <Expandable title="Properties">
    <ResponseField name="action" type={"string"} required>
      The discriminator value. Must be `"accept"`.
    </ResponseField>

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

<ResponseField name="decline" type="object">
  The user declined the elicitation.

  <Expandable title="Properties">
    <ResponseField name="action" type={"string"} required>
      The discriminator value. Must be `"decline"`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="cancel" type="object">
  The elicitation was cancelled.

  <Expandable title="Properties">
    <ResponseField name="action" type={"string"} required>
      The discriminator value. Must be `"cancel"`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="other" type="object">
  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.

  <Expandable title="Properties">
    <ResponseField name="action" type={"string"} required>
      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>
  </Expandable>
</ResponseField>

<a id="mcp-connect" />

### <span class="font-mono">mcp/connect</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Opens an MCP-over-ACP connection.

#### <span class="font-mono">ConnectMcpRequest</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for `mcp/connect`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="serverId" type={<a href="#mcpserveracpid">McpServerAcpId</a>} required>
  The ACP MCP server ID that was provided by the component declaring the MCP server.
</ResponseField>

#### <span class="font-mono">ConnectMcpResponse</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to `mcp/connect`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="connectionId" type={<a href="#mcpconnectionid">McpConnectionId</a>} required>
  The unique identifier for this MCP-over-ACP connection.
</ResponseField>

<a id="mcp-disconnect" />

### <span class="font-mono">mcp/disconnect</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Closes an MCP-over-ACP connection.

#### <span class="font-mono">DisconnectMcpRequest</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for `mcp/disconnect`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="connectionId" type={<a href="#mcpconnectionid">McpConnectionId</a>} required>
  The MCP-over-ACP connection to close.
</ResponseField>

#### <span class="font-mono">DisconnectMcpResponse</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to `mcp/disconnect`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<a id="client-mcp-message" />

### <span class="font-mono">mcp/message</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Exchanges an MCP-over-ACP message.

#### <span class="font-mono">MessageMcpNotification</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Notification parameters for `mcp/message`.

This is used when the wrapped MCP message is a notification and the outer JSON-RPC
envelope has no `id`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="connectionId" type={<a href="#mcpconnectionid">McpConnectionId</a>} required>
  The MCP-over-ACP connection this message is sent on.
</ResponseField>

<ResponseField name="method" type={"string"} required>
  The inner MCP method name.
</ResponseField>

<ResponseField name="params" type={"object | null"}>
  Optional inner MCP params.

  If omitted or set to `null`, the inner MCP message has no params.
</ResponseField>

#### <span class="font-mono">MessageMcpRequest</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for `mcp/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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="connectionId" type={<a href="#mcpconnectionid">McpConnectionId</a>} required>
  The MCP-over-ACP connection this message is sent on.
</ResponseField>

<ResponseField name="method" type={"string"} required>
  The inner MCP method name.
</ResponseField>

<ResponseField name="params" type={"object | null"}>
  Optional inner MCP params.

  If omitted or set to `null`, the inner MCP message has no params.
</ResponseField>

#### <span class="font-mono">MessageMcpResponse</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to `mcp/message`.

This is the inner MCP response result payload. Any JSON value is valid.

<a id="session-request_permission" />

### <span class="font-mono">session/request\_permission</span>

Requests permission from the user for an 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 active session work via `session/cancel`, it MUST
respond to this request with `RequestPermissionOutcome::Cancelled`.

See protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/v2/draft/tool-calls#requesting-permission)

#### <span class="font-mono">RequestPermissionRequest</span>

Request for user permission to proceed with an operation.

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

See protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/v2/draft/tool-calls#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="description" type={"string | null"}>
  Optional human-readable explanation of why permission is needed.

  This text is specific to the permission prompt and does not update any
  subject's displayed content. Omitted or `null` both mean no separate
  permission description was provided.
</ResponseField>

<ResponseField name="options" type={<a href="#permissionoption">PermissionOption[]</a>} required>
  Available permission options for the user to choose from.
  Must contain at least one option.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The session ID for this request.
</ResponseField>

<ResponseField name="subject" type={<><span><a href="#requestpermissionsubject">RequestPermissionSubject</a></span><span> | null</span></>}>
  Optional structured context about the operation requiring permission.

  Omitted or `null` both mean no structured subject was provided.
</ResponseField>

<ResponseField name="title" type={"string"} required>
  Human-readable title for the permission prompt.

  This title is specific to the permission prompt and does not update any
  subject's displayed title.
</ResponseField>

#### <span class="font-mono">RequestPermissionResponse</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="outcome" type={<a href="#requestpermissionoutcome">RequestPermissionOutcome</a>} required>
  The user's decision on the permission request.
</ResponseField>

<a id="session-update" />

### <span class="font-mono">session/update</span>

Handles session update notifications from the agent.

This is a notification endpoint (no response expected) that receives
updates about session activity, including message updates, 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 reporting an idle `state_update` with the cancelled
stop reason.

See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/v2/draft/prompt-lifecycle#3-agent-reports-output)

#### <span class="font-mono">UpdateSessionNotification</span>

Notification containing a session update from the agent.

Agents can send session updates at any point while the session exists.

See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/v2/draft/prompt-lifecycle#3-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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  The ID of the session this update pertains to.
</ResponseField>

<ResponseField name="update" type={<a href="#sessionupdate">SessionUpdate</a>} required>
  The actual update content.
</ResponseField>

## 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.

<a id="$-cancel_request" />

### <span class="font-mono">\$/cancel\_request</span>

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](https://agentclientprotocol.com/protocol/v2/draft/cancellation)

#### <span class="font-mono">CancelRequestNotification</span>

Notification to cancel an ongoing request.

See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/v2/draft/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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="requestId" type={<a href="#requestid">RequestId</a>} required>
  The ID of the request to cancel.
</ResponseField>

## <span class="font-mono">AbsolutePath</span>

An absolute filesystem path used by the protocol.

**Type:** `string`

## <span class="font-mono">AgentAuthCapabilities</span>

Authentication-related extension capabilities supported by the agent.

This object does not advertise support for `auth/login` or `auth/logout`.
Those methods are advertised by a non-empty `authMethods` list in the
`initialize` response.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">AgentCapabilities</span>

Capabilities supported by the agent.

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

See protocol docs: [Agent Capabilities](https://agentclientprotocol.com/protocol/v2/draft/initialization#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="auth" type={<><span><a href="#agentauthcapabilities">AgentAuthCapabilities</a></span><span> | null</span></>}>
  Authentication-related extension capabilities supported by the agent.

  Optional. Omitted or `null` both mean the agent does not advertise any
  authentication-related extensions. This field does not advertise support
  for `auth/login` or `auth/logout`; those methods are advertised by a
  non-empty `authMethods` list in the `initialize` response.
</ResponseField>

<ResponseField name="nes" type={<><span><a href="#nescapabilities">NesCapabilities</a></span><span> | null</span></>}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  NES (Next Edit Suggestions) capabilities supported by the agent.

  Optional. Omitted or `null` both mean the agent does not advertise support
  for NES methods.
</ResponseField>

<ResponseField name="positionEncoding" type={<><span><a href="#positionencodingkind">PositionEncodingKind</a></span><span> | null</span></>}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  The position encoding selected by the agent from the client's supported encodings.
</ResponseField>

<ResponseField name="providers" type={<><span><a href="#providerscapabilities">ProvidersCapabilities</a></span><span> | null</span></>}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  Provider configuration capabilities supported by the agent.

  Optional. Omitted or `null` both mean the agent does not advertise support.
  Supplying `\{\}` means the agent supports provider configuration methods.
</ResponseField>

<ResponseField name="session" type={<><span><a href="#sessioncapabilities">SessionCapabilities</a></span><span> | null</span></>}>
  Session capabilities supported by the agent.

  Optional. Omitted or `null` both mean the agent does not support the
  `session/*` method surface. Supplying `\{\}` means the agent supports the
  baseline session methods: `session/new`, `session/prompt`,
  `session/cancel`, and `session/update`.
</ResponseField>

## <span class="font-mono">AgentMessage</span>

An agent message upsert.

Only `AgentMessage::message_id` is required. `content` has patch semantics:
an omitted field leaves existing message content unchanged, `null` clears the
value, and a concrete array replaces the previous value. For a new
`messageId`, omitted fields use client defaults. `content` is replaced as a
whole array; send `[]` or `null` to clear it.

Message updates and chunks are applied in the order they are received. When
an `agent_message` update includes `content`, that array replaces any
content previously accumulated for the message, including content from
earlier chunks. Later chunks with the same `messageId` append to the current
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. Omitted means no metadata update; `null` is an explicit clear signal.

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

<ResponseField name="content" type={<><span><a href="#contentblock">ContentBlock[]</a></span><span> | null</span></>}>
  Complete replacement content for this message.
</ResponseField>

<ResponseField name="messageId" type={<a href="#messageid">MessageId</a>} required>
  A unique identifier for the message.
</ResponseField>

## <span class="font-mono">AgentThought</span>

An agent thought or reasoning message upsert.

Only `AgentThought::message_id` is required. `content` has patch semantics:
an omitted field leaves existing thought content unchanged, `null` clears the
value, and a concrete array replaces the previous value. For a new
`messageId`, omitted fields use client defaults. `content` is replaced as a
whole array; send `[]` or `null` to clear it.

Message updates and chunks are applied in the order they are received. When
an `agent_thought` update includes `content`, that array replaces any
content previously accumulated for the thought, including content from
earlier chunks. Later chunks with the same `messageId` append to the current
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. Omitted means no metadata update; `null` is an explicit clear signal.

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

<ResponseField name="content" type={<><span><a href="#contentblock">ContentBlock[]</a></span><span> | null</span></>}>
  Complete replacement content for this thought message.
</ResponseField>

<ResponseField name="messageId" type={<a href="#messageid">MessageId</a>} required>
  A unique identifier for the thought message.
</ResponseField>

## <span class="font-mono">Annotations</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="audience" type={<><span><a href="#role">Role[]</a></span><span> | null</span></>}>
  Intended recipients for this content, such as the user or assistant.
</ResponseField>

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

  Must be an RFC 3339 formatted string (e.g., "2025-01-12T15:00:58Z").

  * Format: `date-time`
</ResponseField>

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

  | Constraint | Value |
  | ---------- | ----- |
  | Minimum    | `0`   |
  | Maximum    | `1`   |
</ResponseField>

## <span class="font-mono">AudioContent</span>

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](https://agentclientprotocol.com/protocol/v2/draft/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.

  * Content encoding: `base64`
</ResponseField>

<ResponseField name="mimeType" type={<a href="#mediatype">MediaType</a>} required>
  MIME type describing the encoded media payload.
</ResponseField>

## <span class="font-mono">AuthCapabilities</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="terminal" type={<><span><a href="#terminalauthcapabilities">TerminalAuthCapabilities</a></span><span> | null</span></>}>
  Whether the client supports `terminal` authentication methods.

  Optional. Omitted or `null` both mean the client does not advertise support.
  Supplying `\{\}` means the agent may include `terminal` entries in its authentication methods.
</ResponseField>

## <span class="font-mono">AuthEnvVar</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Describes a single environment variable for an `AuthMethodEnvVar` authentication 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="label" type={"string | null"}>
  Human-readable label for this variable, displayed in client UI.
</ResponseField>

<ResponseField name="name" type={"string"} required>
  The environment variable name (e.g. `"OPENAI_API_KEY"`).
</ResponseField>

<ResponseField name="optional" type={"boolean"}>
  Whether this variable is optional.

  Defaults to `false`.

  * Default: `false`
</ResponseField>

<ResponseField name="secret" type={"boolean"}>
  Whether this value is a secret (e.g. API key, token).
  Clients should use a password-style input for secret vars.

  Defaults to `true`.

  * Default: `true`
</ResponseField>

## <span class="font-mono">AuthMethod</span>

Describes an available authentication method.

The `type` field acts as the discriminator in the serialized JSON form.

**Type:** Union

<ResponseField name="env_var" type="object">
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  User provides a key that the client passes to the agent as an environment variable.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

    <ResponseField name="link" type={"string | null"}>
      Optional link to a page where the user can obtain their credentials.

      * Format: `uri`
    </ResponseField>

    <ResponseField name="methodId" 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 `"env_var"`.
    </ResponseField>

    <ResponseField name="vars" type={<a href="#authenvvar">AuthEnvVar[]</a>} required>
      The environment variables the client should set.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="terminal" type="object">
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  Client runs an interactive terminal for the user to authenticate via a TUI.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="args" type={<><span>"string"</span><span>[]</span></>}>
      Additional arguments to pass when running the agent binary for terminal auth.
    </ResponseField>

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

    <ResponseField name="env" type={<a href="#envvariable">EnvVariable[]</a>}>
      Additional environment variables to set when running the agent binary for terminal auth.
    </ResponseField>

    <ResponseField name="methodId" 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>
  </Expandable>
</ResponseField>

<ResponseField name="agent" type="object">
  Agent handles authentication itself.

  The `type` discriminator value is `agent`.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

    <ResponseField name="methodId" 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 `"agent"`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="other" type="object">
  Custom or future authentication method.

  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 method type should preserve the raw
  payload when storing, replaying, proxying, or forwarding initialization
  data, and otherwise ignore the method or display it generically.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

    <ResponseField name="methodId" 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>
      Custom or future authentication method type.

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

## <span class="font-mono">AuthMethodAgent</span>

Agent handles authentication itself.

The `type` discriminator value is `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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

<ResponseField name="methodId" 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>

## <span class="font-mono">AuthMethodEnvVar</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Environment variable authentication method.

The user provides credentials that the client passes to the agent as environment variables.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

<ResponseField name="link" type={"string | null"}>
  Optional link to a page where the user can obtain their credentials.

  * Format: `uri`
</ResponseField>

<ResponseField name="methodId" 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="vars" type={<a href="#authenvvar">AuthEnvVar[]</a>} required>
  The environment variables the client should set.
</ResponseField>

## <span class="font-mono">AuthMethodId</span>

Typed identifier used for auth method values on the wire.

**Type:** `string`

## <span class="font-mono">AuthMethodTerminal</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Terminal-based authentication method.

The client runs an interactive terminal for the user to authenticate via a TUI.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="args" type={<><span>"string"</span><span>[]</span></>}>
  Additional arguments to pass when running the agent binary for terminal auth.
</ResponseField>

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

<ResponseField name="env" type={<a href="#envvariable">EnvVariable[]</a>}>
  Additional environment variables to set when running the agent binary for terminal auth.
</ResponseField>

<ResponseField name="methodId" 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>

## <span class="font-mono">AvailableCommand</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

<ResponseField name="input" type={<><span><a href="#availablecommandinput">AvailableCommandInput</a></span><span> | null</span></>}>
  Input for the command if required
</ResponseField>

<ResponseField name="name" type={"string"} required>
  Command name (e.g., `create_plan`, `research_codebase`).
</ResponseField>

## <span class="font-mono">AvailableCommandInput</span>

The input specification for a command.

**Type:** Union

<ResponseField name="text" type="object">
  All text that was typed after the command name is provided as input.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="hint" type={"string"} required>
      A hint to display when the input hasn't been provided yet
    </ResponseField>

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

<ResponseField name="other" type="object">
  Custom or future command input specification.

  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 input type should preserve the raw
  payload when storing, replaying, proxying, or forwarding command
  metadata, and otherwise ignore the input specification or display the
  command without structured input.

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      Custom or future command input type.

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

## <span class="font-mono">AvailableCommandsUpdate</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

## <span class="font-mono">BlobResourceContents</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

  * Content encoding: `base64`
</ResponseField>

<ResponseField name="mimeType" type={<><span><a href="#mediatype">MediaType</a></span><span> | null</span></>}>
  MIME type describing the encoded media payload.
</ResponseField>

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

  * Format: `uri`
</ResponseField>

## <span class="font-mono">BooleanPropertySchema</span>

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.

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

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

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

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

## <span class="font-mono">ClientCapabilities</span>

Capabilities supported by the client.

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

See protocol docs: [Client Capabilities](https://agentclientprotocol.com/protocol/v2/draft/initialization#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="auth" type={<><span><a href="#authcapabilities">AuthCapabilities</a></span><span> | null</span></>}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  Authentication capabilities supported by the client.
  Determines which authentication method types the agent may include
  in its `InitializeResponse`.

  Optional. Omitted or `null` both mean the client does not advertise any
  authentication-method extensions.
</ResponseField>

<ResponseField name="elicitation" type={<><span><a href="#elicitationcapabilities">ElicitationCapabilities</a></span><span> | null</span></>}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  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>

<ResponseField name="nes" type={<><span><a href="#clientnescapabilities">ClientNesCapabilities</a></span><span> | null</span></>}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  NES (Next Edit Suggestions) capabilities supported by the client.

  Optional. Omitted or `null` both mean the client does not advertise any
  NES suggestion-kind extensions.
</ResponseField>

<ResponseField name="positionEncodings" type={<a href="#positionencodingkind">PositionEncodingKind[]</a>}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  The position encodings supported by the client, in order of preference.
</ResponseField>

## <span class="font-mono">ClientNesCapabilities</span>

NES capabilities advertised by the client during 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="jump" type={<><span><a href="#nesjumpcapabilities">NesJumpCapabilities</a></span><span> | null</span></>}>
  Whether the client supports the `jump` suggestion kind.
</ResponseField>

<ResponseField name="rename" type={<><span><a href="#nesrenamecapabilities">NesRenameCapabilities</a></span><span> | null</span></>}>
  Whether the client supports the `rename` suggestion kind.
</ResponseField>

<ResponseField name="searchAndReplace" type={<><span><a href="#nessearchandreplacecapabilities">NesSearchAndReplaceCapabilities</a></span><span> | null</span></>}>
  Whether the client supports the `searchAndReplace` suggestion kind.
</ResponseField>

## <span class="font-mono">CommandPermissionSubject</span>

Permission request details for 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. Omitted and `null` are equivalent and mean no subject metadata was provided.

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

<ResponseField name="command" type={"string"} required>
  The command that would be run if permission is granted.
</ResponseField>

<ResponseField name="cwd" type={<a href="#absolutepath">AbsolutePath</a>} required>
  The absolute working directory for the command.
</ResponseField>

<ResponseField name="terminalId" type={<><span><a href="#terminalid">TerminalId</a></span><span> | null</span></>}>
  The associated terminal, when already known. Omitted and `null` are equivalent.
</ResponseField>

<ResponseField name="toolCallId" type={<><span><a href="#toolcallid">ToolCallId</a></span><span> | null</span></>}>
  The associated tool call, when known. Omitted and `null` are equivalent.
</ResponseField>

## <span class="font-mono">ConfigOptionUpdate</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

## <span class="font-mono">Content</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
  The actual content block.
</ResponseField>

## <span class="font-mono">ContentBlock</span>

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 reported through `session/update` notifications as
  message updates or streamed chunks
* 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](https://agentclientprotocol.com/protocol/v2/draft/content)

**Type:** Union

<ResponseField name="text" type="object">
  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.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/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>
  </Expandable>
</ResponseField>

<ResponseField name="image" type="object">
  Images for visual context or analysis.

  Requires the `image` prompt capability when included in prompts.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/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.

      * Content encoding: `base64`
    </ResponseField>

    <ResponseField name="mimeType" type={<a href="#mediatype">MediaType</a>} 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.

      * Format: `uri`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="audio" type="object">
  Audio data for transcription or analysis.

  Requires the `audio` prompt capability when included in prompts.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/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.

      * Content encoding: `base64`
    </ResponseField>

    <ResponseField name="mimeType" type={<a href="#mediatype">MediaType</a>} required>
      MIME type describing the encoded media payload.
    </ResponseField>

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

<ResponseField name="resource_link" type="object">
  References to resources that the agent can access.

  All agents MUST support resource links in prompts.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/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="icons" type={<><span><a href="#icon">Icon[]</a></span><span> | null</span></>}>
      Optional set of sized icons that the client can display in a user interface.
    </ResponseField>

    <ResponseField name="mimeType" type={<><span><a href="#mediatype">MediaType</a></span><span> | null</span></>}>
      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.

      * Format: `uri`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="resource" type="object">
  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.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/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>
  </Expandable>
</ResponseField>

<ResponseField name="other" type="object">
  Custom or future content block.

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

  Receivers that do not understand this content block type should preserve
  the raw payload when storing, replaying, proxying, or forwarding content,
  and otherwise ignore it or display it generically.

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      Custom or future content block type.

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

## <span class="font-mono">ContentChunk</span>

A streamed item of message 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. This field is chunk-scoped.

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

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

<ResponseField name="messageId" type={<a href="#messageid">MessageId</a>} required>
  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>

## <span class="font-mono">Cost</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

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

  * Pattern: `"^[A-Z]{3}$"`
</ResponseField>

## <span class="font-mono">Diff</span>

File changes produced by a tool call.

`changes` is authoritative for affected absolute paths and operations.
`patch` optionally carries renderable text for some or all of those changes
and MUST be consistent with `changes`. Agents SHOULD provide `patch` whenever
feasible. Clients MUST handle diffs where `patch` is omitted or `null`.

See protocol docs: [Content](https://agentclientprotocol.com/protocol/v2/draft/tool-calls#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="changes" type={<a href="#diffchange">DiffChange[]</a>} required>
  Structured file changes described by this diff.

  Clients can use this field without parsing patch text to determine affected paths.
</ResponseField>

<ResponseField name="patch" type={<><span><a href="#diffpatch">DiffPatch</a></span><span> | null</span></>}>
  Renderable patch text for some or all of the structured changes.

  Agents SHOULD provide patch text whenever feasible. Omitted or `null`
  means no renderable patch text was provided.
</ResponseField>

## <span class="font-mono">DiffChange</span>

One file-level change described by a `Diff`.

Structured change metadata lets clients identify affected files and
operations without parsing the text patch.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="fileType" type={<><span><a href="#difffiletype">DiffFileType</a></span><span> | null</span></>}>
  File content kind.

  Omitted or `null` means the content kind is unknown.
</ResponseField>

<ResponseField name="mimeType" type={<><span><a href="#mediatype">MediaType</a></span><span> | null</span></>}>
  MIME type of the file contents.

  Omitted or `null` means the MIME type is unknown.
</ResponseField>

**Variants:**

<ResponseField name="add" type="object">
  A file was added.

  <Expandable title="Properties">
    <ResponseField name="operation" type={"string"} required>
      The discriminator value. Must be `"add"`.
    </ResponseField>

    <ResponseField name="path" type={<a href="#absolutepath">AbsolutePath</a>} required>
      Absolute path for the operation.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="delete" type="object">
  A file was deleted.

  <Expandable title="Properties">
    <ResponseField name="operation" type={"string"} required>
      The discriminator value. Must be `"delete"`.
    </ResponseField>

    <ResponseField name="path" type={<a href="#absolutepath">AbsolutePath</a>} required>
      Absolute path for the operation.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="modify" type="object">
  A file was modified in place.

  <Expandable title="Properties">
    <ResponseField name="operation" type={"string"} required>
      The discriminator value. Must be `"modify"`.
    </ResponseField>

    <ResponseField name="path" type={<a href="#absolutepath">AbsolutePath</a>} required>
      Absolute path for the operation.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="move" type="object">
  A file was moved or renamed.

  <Expandable title="Properties">
    <ResponseField name="oldPath" type={<a href="#absolutepath">AbsolutePath</a>} required>
      Absolute path before the operation.
    </ResponseField>

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

    <ResponseField name="path" type={<a href="#absolutepath">AbsolutePath</a>} required>
      Absolute path after the operation.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="copy" type="object">
  A file was copied.

  <Expandable title="Properties">
    <ResponseField name="oldPath" type={<a href="#absolutepath">AbsolutePath</a>} required>
      Absolute path before the operation.
    </ResponseField>

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

    <ResponseField name="path" type={<a href="#absolutepath">AbsolutePath</a>} required>
      Absolute path after the operation.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="other" type="object">
  Custom or future file operation.

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

  <Expandable title="Properties">
    <ResponseField name="operation" type={"string"} required>
      Custom or future file operation.

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

## <span class="font-mono">DiffFileType</span>

Kind of file content represented by a diff change.

**Type:** Union

<ResponseField name="text" type="string">
  Text content.
</ResponseField>

<ResponseField name="binary" type="string">
  Binary or otherwise non-text content.
</ResponseField>

<ResponseField name="directory" type="string">
  Directory entry.
</ResponseField>

<ResponseField name="symlink" type="string">
  Symbolic link.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future file type.

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

## <span class="font-mono">DiffPatch</span>

Renderable patch text and its format.

**Type:** Object

**Properties:**

<ResponseField name="format" type={<a href="#diffpatchformat">DiffPatchFormat</a>} required>
  Patch format. The only ACP-defined value is `git_patch`.
</ResponseField>

<ResponseField name="text" type={"string"} required>
  Patch text in the format named by `format`.
</ResponseField>

## <span class="font-mono">DiffPatchFormat</span>

Text patch format used by `DiffPatch`.

**Type:** Union

<ResponseField name="git_patch" type="string">
  One or more `diff --git` sections in Git's `--patch` (`-p`) text format.

  Paths MUST be absolute. Surrounding commit metadata and email envelopes
  MUST NOT be included.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future patch format.

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

## <span class="font-mono">DiffPathChange</span>

Operation metadata for add, delete, and modify changes.

**Type:** Object

**Properties:**

<ResponseField name="path" type={<a href="#absolutepath">AbsolutePath</a>} required>
  Absolute path for the operation.
</ResponseField>

## <span class="font-mono">DiffPathPairChange</span>

Operation metadata for move and copy changes.

**Type:** Object

**Properties:**

<ResponseField name="oldPath" type={<a href="#absolutepath">AbsolutePath</a>} required>
  Absolute path before the operation.
</ResponseField>

<ResponseField name="path" type={<a href="#absolutepath">AbsolutePath</a>} required>
  Absolute path after the operation.
</ResponseField>

## <span class="font-mono">ElicitationAcceptAction</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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.
</ResponseField>

## <span class="font-mono">ElicitationCapabilities</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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.

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

<ResponseField name="form" type={<><span><a href="#elicitationformcapabilities">ElicitationFormCapabilities</a></span><span> | null</span></>}>
  Whether the client supports form-based elicitation.

  Optional. Omitted or `null` both mean the client does not advertise support.
  Supplying `\{\}` means the client supports form-based elicitation.
</ResponseField>

<ResponseField name="url" type={<><span><a href="#elicitationurlcapabilities">ElicitationUrlCapabilities</a></span><span> | null</span></>}>
  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.
</ResponseField>

## <span class="font-mono">ElicitationContentValue</span>

Allowed wire representations for `ElicitationContentValue`.

**Type:** Union

<ResponseField name="String" type="string">
  String value accepted in elicitation response content.
</ResponseField>

<ResponseField name="Integer" type="int64">
  Integer value accepted in elicitation response content.
</ResponseField>

<ResponseField name="Number" type="double">
  Number value accepted in elicitation response content.
</ResponseField>

<ResponseField name="Boolean" type="boolean">
  Boolean value accepted in elicitation response content.
</ResponseField>

<ResponseField name="StringArray" type="array">
  String array value accepted in elicitation response content.
</ResponseField>

## <span class="font-mono">ElicitationFormCapabilities</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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.

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

## <span class="font-mono">ElicitationFormMode</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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

**Type:** Union

**Shared properties:**

<ResponseField name="requestedSchema" type={<a href="#elicitationschema">ElicitationSchema</a>} required>
  A JSON Schema describing the form fields to present to the user.
</ResponseField>

**Variants:**

<ResponseField name="Session">
  Tied to a session, optionally to a specific tool call within that session.

  <Expandable title="Properties">
    <ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
      The session this elicitation is tied to.
    </ResponseField>

    <ResponseField
      name="toolCallId"
      type={
<>
  <span>
    <a href="#toolcallid">ToolCallId</a>
  </span>
  <span> | null</span>
</>
}
    >
      Optional tool call within the session.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="Request">
  Tied to a specific JSON-RPC request outside of a session
  (e.g., during auth/configuration phases before any session is started).

  <Expandable title="Properties">
    <ResponseField name="requestId" type={<a href="#requestid">RequestId</a>} required>
      The request this elicitation is tied to.
    </ResponseField>
  </Expandable>
</ResponseField>

## <span class="font-mono">ElicitationId</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Unique identifier for an elicitation.

**Type:** `string`

## <span class="font-mono">ElicitationPropertySchema</span>

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

<ResponseField name="string" type="object">
  String property (or single-select enum when `enum`/`oneOf` is set).

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

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

    <ResponseField name="enum" type={<><span><><span>"string"</span><span>[]</span></></span><span> | null</span></>}>
      Enum values for untitled single-select enums.
      Must contain at least one value when present.
    </ResponseField>

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

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

      * Minimum: `0`
    </ResponseField>

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

      * 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.
      Must contain at least one option when present.
    </ResponseField>

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

      * Format: `regex`
    </ResponseField>

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

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

<ResponseField name="number" type="object">
  Number (floating-point) property.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

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

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

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

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

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

<ResponseField name="integer" type="object">
  Integer property.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

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

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

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

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

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

<ResponseField name="boolean" type="object">
  Boolean property.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

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

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

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

<ResponseField name="array" type="object">
  Multi-select array property.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

    <ResponseField name="description" type={"string | null"}>
      Human-readable description.
    </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.

      * Minimum: `0`
    </ResponseField>

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

      * Minimum: `0`
    </ResponseField>

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

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

<ResponseField name="other" type="object">
  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.

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      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>
  </Expandable>
</ResponseField>

## <span class="font-mono">ElicitationRequestScope</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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={<a href="#requestid">RequestId</a>} required>
  The request this elicitation is tied to.
</ResponseField>

## <span class="font-mono">ElicitationSchema</span>

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.

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

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

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

  * Default: `{}`
</ResponseField>

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

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

<ResponseField name="type" type={<a href="#elicitationschematype">ElicitationSchemaType</a>}>
  Type discriminator. Always `"object"`.

  * Default: `"object"`
</ResponseField>

## <span class="font-mono">ElicitationSchemaType</span>

Type discriminator for elicitation schemas.

**Type:** Union

<ResponseField name="object" type="string">
  Object schema type.
</ResponseField>

## <span class="font-mono">ElicitationSessionScope</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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={<a href="#sessionid">SessionId</a>} required>
  The session this elicitation is tied to.
</ResponseField>

<ResponseField
  name="toolCallId"
  type={
<>
  <span>
    <a href="#toolcallid">ToolCallId</a>
  </span>
  <span> | null</span>
</>
}
>
  Optional tool call within the session.
</ResponseField>

## <span class="font-mono">ElicitationUrlCapabilities</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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.

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

## <span class="font-mono">ElicitationUrlMode</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

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

**Type:** Union

**Shared properties:**

<ResponseField name="elicitationId" type={<a href="#elicitationid">ElicitationId</a>} required>
  The unique identifier for this elicitation.
</ResponseField>

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

  * Format: `uri`
</ResponseField>

**Variants:**

<ResponseField name="Session">
  Tied to a session, optionally to a specific tool call within that session.

  <Expandable title="Properties">
    <ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
      The session this elicitation is tied to.
    </ResponseField>

    <ResponseField
      name="toolCallId"
      type={
<>
  <span>
    <a href="#toolcallid">ToolCallId</a>
  </span>
  <span> | null</span>
</>
}
    >
      Optional tool call within the session.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="Request">
  Tied to a specific JSON-RPC request outside of a session
  (e.g., during auth/configuration phases before any session is started).

  <Expandable title="Properties">
    <ResponseField name="requestId" type={<a href="#requestid">RequestId</a>} required>
      The request this elicitation is tied to.
    </ResponseField>
  </Expandable>
</ResponseField>

## <span class="font-mono">EmbeddedResource</span>

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](https://agentclientprotocol.com/protocol/v2/draft/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>

## <span class="font-mono">EmbeddedResourceResource</span>

Resource content that can be embedded in a message.

**Type:** Union

<ResponseField name="TextResourceContents">
  Text resource contents embedded directly in the message.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="mimeType" type={<><span><a href="#mediatype">MediaType</a></span><span> | null</span></>}>
      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.

      * Format: `uri`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="BlobResourceContents">
  Binary resource contents embedded directly in the message.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

      * Content encoding: `base64`
    </ResponseField>

    <ResponseField name="mimeType" type={<><span><a href="#mediatype">MediaType</a></span><span> | null</span></>}>
      MIME type describing the encoded media payload.
    </ResponseField>

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

      * Format: `uri`
    </ResponseField>
  </Expandable>
</ResponseField>

## <span class="font-mono">EnumOption</span>

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.

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

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

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

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

## <span class="font-mono">EnvVariable</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

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

## <span class="font-mono">Error</span>

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](https://www.jsonrpc.org/specification#error_object)

**Type:** Object

**Properties:**

<ResponseField name="code" type={<a href="#errorcode">ErrorCode</a>} required>
  A number indicating the error type that occurred. This must be an integer as
  defined in the JSON-RPC specification.
</ResponseField>

<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>

<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.
</ResponseField>

## <span class="font-mono">ErrorCode</span>

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

<ResponseField name="-32700" type="int32">
  **Parse error**: Invalid JSON was received by the server. An error occurred on
  the server while parsing the JSON text.
</ResponseField>

<ResponseField name="-32600" type="int32">
  **Invalid request**: The JSON sent is not a valid Request object.
</ResponseField>

<ResponseField name="-32601" type="int32">
  **Method not found**: The method does not exist or is not available.
</ResponseField>

<ResponseField name="-32602" type="int32">
  **Invalid params**: Invalid method parameter(s).
</ResponseField>

<ResponseField name="-32603" type="int32">
  **Internal error**: Internal JSON-RPC error. Reserved for
  implementation-defined server errors.
</ResponseField>

<ResponseField name="-32800" type="int32">
  **Request cancelled**: Execution of the method was aborted either due to a
  cancellation request from the caller or because of resource constraints or
  shutdown.
</ResponseField>

<ResponseField name="-32000" type="int32">
  **Authentication required**: Authentication is required before this operation
  can be performed.
</ResponseField>

<ResponseField name="-32002" type="int32">
  **Resource not found**: A given resource, such as a file, was not found.
</ResponseField>

<ResponseField name="Other" type="int32">
  Other undefined error code.
</ResponseField>

## <span class="font-mono">ExtNotification</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)

## <span class="font-mono">ExtRequest</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)

## <span class="font-mono">ExtResponse</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)

## <span class="font-mono">HttpHeader</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

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

## <span class="font-mono">Icon</span>

An optionally-sized icon that can be displayed in a user interface.

**Type:** Object

**Properties:**

<ResponseField name="mimeType" type={<><span><a href="#mediatype">MediaType</a></span><span> | null</span></>}>
  Optional MIME type override if the source MIME type is missing or generic.
</ResponseField>

<ResponseField name="sizes" type={<><span><><span>"string"</span><span>[]</span></></span><span> | null</span></>}>
  Optional array of strings that specify sizes at which the icon can be used.
  Each string should be in `WxH` format (e.g., `"48x48"`, `"96x96"`) or
  `"any"` for scalable formats like SVG.

  If not provided, the client should assume that the icon can be used at any size.
</ResponseField>

<ResponseField name="src" type={"string"} required>
  A standard URI pointing to an icon resource.

  * Format: `uri`
</ResponseField>

<ResponseField name="theme" type={<><span><a href="#icontheme">IconTheme</a></span><span> | null</span></>}>
  Optional theme this icon is designed for.
</ResponseField>

## <span class="font-mono">IconTheme</span>

Theme an icon is designed for.

**Type:** Union

<ResponseField name="light" type="string">
  Icon designed for light backgrounds.
</ResponseField>

<ResponseField name="dark" type="string">
  Icon designed for dark backgrounds.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future icon theme.

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

## <span class="font-mono">IdleStateUpdate</span>

The agent is ready to process a new prompt.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="stopReason" type={<><span><a href="#stopreason">StopReason</a></span><span> | null</span></>}>
  Indicates why foreground work stopped.

  Optional. Omitted or `null` both mean the agent is not reporting a stop reason.
  Agents SHOULD include this when the idle transition ends foreground work.
</ResponseField>

<ResponseField name="usage" type={<><span><a href="#usage">Usage</a></span><span> | null</span></>}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  Token usage for completed foreground work.

  Optional. Omitted or `null` both mean the agent is not reporting token
  usage for this state update.
</ResponseField>

## <span class="font-mono">ImageContent</span>

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](https://agentclientprotocol.com/protocol/v2/draft/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.

  * Content encoding: `base64`
</ResponseField>

<ResponseField name="mimeType" type={<a href="#mediatype">MediaType</a>} required>
  MIME type describing the encoded media payload.
</ResponseField>

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

  * Format: `uri`
</ResponseField>

## <span class="font-mono">Implementation</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<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>

<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>

<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").
</ResponseField>

## <span class="font-mono">IntegerPropertySchema</span>

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.

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

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

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

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

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

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

## <span class="font-mono">LlmProtocol</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Well-known API protocol identifiers for LLM providers.

Agents and clients MUST handle unknown protocol identifiers gracefully.

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

**Type:** Union

<ResponseField name="anthropic" type="string">
  Anthropic API protocol.
</ResponseField>

<ResponseField name="openai" type="string">
  OpenAI API protocol.
</ResponseField>

<ResponseField name="azure" type="string">
  Azure OpenAI API protocol.
</ResponseField>

<ResponseField name="vertex" type="string">
  Google Vertex AI API protocol.
</ResponseField>

<ResponseField name="bedrock" type="string">
  AWS Bedrock API protocol.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future protocol.

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

## <span class="font-mono">McpAcpCapabilities</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Capabilities for ACP MCP server transports.

Supplying `\{\}` means the agent supports ACP MCP server transports.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">McpCapabilities</span>

MCP capabilities supported by the agent for session lifecycle requests.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="acp" type={<><span><a href="#mcpacpcapabilities">McpAcpCapabilities</a></span><span> | null</span></>}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  Agent supports `McpServer::Acp`.

  Optional. Omitted or `null` both mean the agent does not advertise support.
  Supplying `\{\}` means the agent supports ACP MCP server transports.
</ResponseField>

<ResponseField name="http" type={<><span><a href="#mcphttpcapabilities">McpHttpCapabilities</a></span><span> | null</span></>}>
  Agent supports `McpServer::Http`.

  Optional. Omitted or `null` both mean the agent does not advertise support.
  Supplying `\{\}` means the agent supports HTTP MCP server transports.
</ResponseField>

<ResponseField name="stdio" type={<><span><a href="#mcpstdiocapabilities">McpStdioCapabilities</a></span><span> | null</span></>}>
  Agent supports `McpServer::Stdio`.

  Optional. Omitted or `null` both mean the agent does not advertise support.
  Supplying `\{\}` means the agent supports stdio MCP server transports.
</ResponseField>

## <span class="font-mono">McpConnectionId</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

A unique identifier for an active MCP-over-ACP connection.

**Type:** `string`

## <span class="font-mono">McpHttpCapabilities</span>

Capabilities for HTTP MCP server transports.

Supplying `\{\}` means the agent supports HTTP MCP server transports.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">McpServer</span>

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](https://agentclientprotocol.com/protocol/v2/draft/session-setup#mcp-servers)

**Type:** Union

<ResponseField name="http" type="object">
  HTTP transport configuration

  Only available when the Agent capabilities include `session.mcp.http`.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="headers" type={<a href="#httpheader">HttpHeader[]</a>}>
      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.

      * Format: `uri`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="acp" type="object">
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  ACP transport configuration

  Only available when the Agent capabilities include `session.mcp.acp`.
  The MCP server is provided by an ACP component and communicates over the ACP channel.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

    <ResponseField name="serverId" type={<a href="#mcpserveracpid">McpServerAcpId</a>} required>
      Unique identifier for this MCP server, generated by the component providing it.

      Providers MUST NOT reuse an ID for multiple ACP-transport MCP servers that are visible
      on the same ACP connection.
    </ResponseField>

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

<ResponseField name="stdio" type="object">
  Stdio transport configuration

  Only available when the Agent capabilities include `session.mcp.stdio`.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

    <ResponseField name="command" type={<a href="#absolutepath">AbsolutePath</a>} required>
      Absolute path to the MCP server executable.
    </ResponseField>

    <ResponseField name="env" type={<a href="#envvariable">EnvVariable[]</a>}>
      Environment variables to set when launching 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 `"stdio"`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="other" type="object">
  Custom or future MCP server transport configuration.

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

  Receivers that do not understand this transport should preserve the raw
  payload when storing, replaying, proxying, or forwarding session setup
  data, and otherwise ignore it or reject the server configuration.

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      Custom or future MCP server transport type.

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

## <span class="font-mono">McpServerAcp</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

ACP transport configuration for MCP.

The MCP server is provided by an ACP component and communicates over the ACP channel
using `mcp/connect`, `mcp/message`, and `mcp/disconnect`.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

<ResponseField name="serverId" type={<a href="#mcpserveracpid">McpServerAcpId</a>} required>
  Unique identifier for this MCP server, generated by the component providing it.

  Providers MUST NOT reuse an ID for multiple ACP-transport MCP servers that are visible
  on the same ACP connection.
</ResponseField>

## <span class="font-mono">McpServerAcpId</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Unique identifier for an MCP server using the ACP transport.

The value is opaque and generated by the ACP component providing the MCP server. It is
used by `mcp/connect` to route connection requests back to the component that declared the
server.

**Type:** `string`

## <span class="font-mono">McpServerHttp</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="headers" type={<a href="#httpheader">HttpHeader[]</a>}>
  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="url" type={"string"} required>
  URL to the MCP server.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">McpServerStdio</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

<ResponseField name="command" type={<a href="#absolutepath">AbsolutePath</a>} required>
  Absolute path to the MCP server executable.
</ResponseField>

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

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

## <span class="font-mono">McpStdioCapabilities</span>

Capabilities for stdio MCP server transports.

Supplying `\{\}` means the agent supports stdio MCP server transports.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">MediaType</span>

An Internet media type identifying the format of protocol content.

**Type:** `string`

## <span class="font-mono">MessageId</span>

Unique identifier for a message within a session.

**Type:** `string`

## <span class="font-mono">MultiSelectItems</span>

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

**Type:** Union

<ResponseField name="string" type="object">
  Multi-select string items with plain string values.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="enum" type={<><span>"string"</span><span>[]</span></>} required>
      Allowed enum values. Must contain at least one value.
    </ResponseField>

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

<ResponseField name="other" type="object">
  Custom or future typed multi-select items.

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      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>
  </Expandable>
</ResponseField>

<ResponseField name="titled">
  Titled multi-select items with human-readable labels.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="anyOf" type={<a href="#enumoption">EnumOption[]</a>} required>
      Titled enum options. Must contain at least one option.
    </ResponseField>
  </Expandable>
</ResponseField>

## <span class="font-mono">MultiSelectPropertySchema</span>

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.

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

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

<ResponseField name="description" type={"string | null"}>
  Human-readable description.
</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.

  * Minimum: `0`
</ResponseField>

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

  * Minimum: `0`
</ResponseField>

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

## <span class="font-mono">NesCapabilities</span>

NES capabilities advertised by the agent during initialization.

Supplying `\{\}` means the agent supports the NES method surface. Omitted or
`null` both mean the agent does not advertise support for `nes/*` methods.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="context" type={<><span><a href="#nescontextcapabilities">NesContextCapabilities</a></span><span> | null</span></>}>
  Context the agent wants attached to each suggestion request.
</ResponseField>

<ResponseField name="events" type={<><span><a href="#neseventcapabilities">NesEventCapabilities</a></span><span> | null</span></>}>
  Events the agent wants to receive.
</ResponseField>

## <span class="font-mono">NesContextCapabilities</span>

Context capabilities the agent wants attached to each suggestion 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="diagnostics" type={<><span><a href="#nesdiagnosticscapabilities">NesDiagnosticsCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants diagnostics context.
</ResponseField>

<ResponseField name="editHistory" type={<><span><a href="#nesedithistorycapabilities">NesEditHistoryCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants edit history context.
</ResponseField>

<ResponseField name="openFiles" type={<><span><a href="#nesopenfilescapabilities">NesOpenFilesCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants open files context.
</ResponseField>

<ResponseField name="recentFiles" type={<><span><a href="#nesrecentfilescapabilities">NesRecentFilesCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants recent files context.
</ResponseField>

<ResponseField name="relatedSnippets" type={<><span><a href="#nesrelatedsnippetscapabilities">NesRelatedSnippetsCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants related snippets context.
</ResponseField>

<ResponseField name="userActions" type={<><span><a href="#nesuseractionscapabilities">NesUserActionsCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants user actions context.
</ResponseField>

## <span class="font-mono">NesDiagnostic</span>

A diagnostic (error, warning, etc.).

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="message" type={"string"} required>
  The diagnostic message.
</ResponseField>

<ResponseField name="range" type={<a href="#range">Range</a>} required>
  The range of the diagnostic.
</ResponseField>

<ResponseField name="severity" type={<a href="#nesdiagnosticseverity">NesDiagnosticSeverity</a>} required>
  The severity of the diagnostic.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the file containing the diagnostic.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">NesDiagnosticSeverity</span>

Severity of a diagnostic.

**Type:** Union

<ResponseField name="error" type="string">
  An error.
</ResponseField>

<ResponseField name="warning" type="string">
  A warning.
</ResponseField>

<ResponseField name="information" type="string">
  An informational message.
</ResponseField>

<ResponseField name="hint" type="string">
  A hint.
</ResponseField>

<ResponseField name="Other" type="string">
  Custom or future diagnostic severity.

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

## <span class="font-mono">NesDiagnosticsCapabilities</span>

Capabilities for diagnostics context.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">NesDocumentDidChangeCapabilities</span>

Capabilities for `document/didChange` events.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="syncKind" type={<a href="#textdocumentsynckind">TextDocumentSyncKind</a>} required>
  The sync kind the agent wants: `"full"` or `"incremental"`.
</ResponseField>

## <span class="font-mono">NesDocumentDidCloseCapabilities</span>

Marker for `document/didClose` capability 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">NesDocumentDidFocusCapabilities</span>

Marker for `document/didFocus` capability 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">NesDocumentDidOpenCapabilities</span>

Marker for `document/didOpen` capability 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">NesDocumentDidSaveCapabilities</span>

Marker for `document/didSave` capability 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">NesDocumentEventCapabilities</span>

Document event capabilities the agent wants to receive.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="didChange" type={<><span><a href="#nesdocumentdidchangecapabilities">NesDocumentDidChangeCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants `document/didChange` events, and the sync kind.
</ResponseField>

<ResponseField name="didClose" type={<><span><a href="#nesdocumentdidclosecapabilities">NesDocumentDidCloseCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants `document/didClose` events.
</ResponseField>

<ResponseField name="didFocus" type={<><span><a href="#nesdocumentdidfocuscapabilities">NesDocumentDidFocusCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants `document/didFocus` events.
</ResponseField>

<ResponseField name="didOpen" type={<><span><a href="#nesdocumentdidopencapabilities">NesDocumentDidOpenCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants `document/didOpen` events.
</ResponseField>

<ResponseField name="didSave" type={<><span><a href="#nesdocumentdidsavecapabilities">NesDocumentDidSaveCapabilities</a></span><span> | null</span></>}>
  Whether the agent wants `document/didSave` events.
</ResponseField>

## <span class="font-mono">NesEditHistoryCapabilities</span>

Capabilities for edit history context.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="maxCount" type={"integer | null"}>
  Maximum number of edit history entries the agent can use.

  * Minimum: `0`
</ResponseField>

## <span class="font-mono">NesEditHistoryEntry</span>

An entry in the edit history.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="diff" type={"string"} required>
  A diff representing the edit.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the edited file.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">NesEditSuggestion</span>

A text edit suggestion.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="cursorPosition" type={<><span><a href="#position">Position</a></span><span> | null</span></>}>
  Optional suggested cursor position after applying edits.
</ResponseField>

<ResponseField name="edits" type={<a href="#nestextedit">NesTextEdit[]</a>} required>
  The text edits to apply. Must contain at least one edit.
</ResponseField>

<ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
  Unique identifier for accept/reject tracking.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the file to edit.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">NesEventCapabilities</span>

Event capabilities the agent can consume.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="document" type={<><span><a href="#nesdocumenteventcapabilities">NesDocumentEventCapabilities</a></span><span> | null</span></>}>
  Document event capabilities.
</ResponseField>

## <span class="font-mono">NesExcerpt</span>

A code excerpt from a 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="endLine" type={"uint32"} required>
  The end line of the excerpt (zero-based).

  * Minimum: `0`
</ResponseField>

<ResponseField name="startLine" type={"uint32"} required>
  The start line of the excerpt (zero-based).

  * Minimum: `0`
</ResponseField>

<ResponseField name="text" type={"string"} required>
  The text content of the excerpt.
</ResponseField>

## <span class="font-mono">NesJumpCapabilities</span>

Marker for jump suggestion 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">NesJumpSuggestion</span>

A jump-to-location suggestion.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="position" type={<a href="#position">Position</a>} required>
  The target position within the file.
</ResponseField>

<ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
  Unique identifier for accept/reject tracking.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The file to navigate to.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">NesOpenFile</span>

An open file in the editor.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="languageId" type={"string"} required>
  The language identifier.
</ResponseField>

<ResponseField name="lastFocusedMs" type={"integer | null"}>
  Timestamp in milliseconds since epoch of when the file was last focused.

  * Minimum: `0`
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the file.

  * Format: `uri`
</ResponseField>

<ResponseField name="visibleRange" type={<><span><a href="#range">Range</a></span><span> | null</span></>}>
  The visible range in the editor, if any.
</ResponseField>

## <span class="font-mono">NesOpenFilesCapabilities</span>

Capabilities for open files context.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">NesRecentFile</span>

A recently accessed 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="languageId" type={"string"} required>
  The language identifier.
</ResponseField>

<ResponseField name="text" type={"string"} required>
  The full text content of the file.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the file.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">NesRecentFilesCapabilities</span>

Capabilities for recent files context.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="maxCount" type={"integer | null"}>
  Maximum number of recent files the agent can use.

  * Minimum: `0`
</ResponseField>

## <span class="font-mono">NesRejectReason</span>

The reason a suggestion was rejected.

**Type:** Union

<ResponseField name="rejected" type="string">
  The user explicitly dismissed the suggestion.
</ResponseField>

<ResponseField name="ignored" type="string">
  The suggestion was shown but the user continued editing without interacting.
</ResponseField>

<ResponseField name="replaced" type="string">
  The suggestion was superseded by a newer suggestion.
</ResponseField>

<ResponseField name="cancelled" type="string">
  The request was cancelled before the agent returned a response.
</ResponseField>

<ResponseField name="Other" type="string">
  Custom or future rejection reason.

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

## <span class="font-mono">NesRelatedSnippet</span>

A related code snippet from a 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="excerpts" type={<a href="#nesexcerpt">NesExcerpt[]</a>} required>
  The code excerpts.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the file containing the snippets.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">NesRelatedSnippetsCapabilities</span>

Capabilities for related snippets context.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">NesRenameCapabilities</span>

Marker for rename suggestion 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">NesRenameSuggestion</span>

A rename symbol suggestion.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="newName" type={"string"} required>
  The new name for the symbol.
</ResponseField>

<ResponseField name="position" type={<a href="#position">Position</a>} required>
  The position of the symbol to rename.
</ResponseField>

<ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
  Unique identifier for accept/reject tracking.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The file URI containing the symbol.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">NesRepository</span>

Repository metadata for an NES 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="name" type={"string"} required>
  The repository name.
</ResponseField>

<ResponseField name="owner" type={"string"} required>
  The repository owner.
</ResponseField>

<ResponseField name="remoteUrl" type={"string"} required>
  The remote URL of the repository.
</ResponseField>

## <span class="font-mono">NesSearchAndReplaceCapabilities</span>

Marker for search and replace suggestion 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">NesSearchAndReplaceSuggestion</span>

A search-and-replace suggestion.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="isRegex" type={"boolean | null"}>
  Whether `search` is a regular expression. Defaults to `false`.
</ResponseField>

<ResponseField name="replace" type={"string"} required>
  The replacement text.
</ResponseField>

<ResponseField name="search" type={"string"} required>
  The text or pattern to find.
</ResponseField>

<ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
  Unique identifier for accept/reject tracking.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The file URI to search within.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">NesSuggestContext</span>

Context attached to a suggestion 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="diagnostics" type={<><span><a href="#nesdiagnostic">NesDiagnostic[]</a></span><span> | null</span></>}>
  Current diagnostics (errors, warnings).
</ResponseField>

<ResponseField name="editHistory" type={<><span><a href="#nesedithistoryentry">NesEditHistoryEntry[]</a></span><span> | null</span></>}>
  Recent edit history.
</ResponseField>

<ResponseField name="openFiles" type={<><span><a href="#nesopenfile">NesOpenFile[]</a></span><span> | null</span></>}>
  Currently open files in the editor.
</ResponseField>

<ResponseField name="recentFiles" type={<><span><a href="#nesrecentfile">NesRecentFile[]</a></span><span> | null</span></>}>
  Recently accessed files.
</ResponseField>

<ResponseField name="relatedSnippets" type={<><span><a href="#nesrelatedsnippet">NesRelatedSnippet[]</a></span><span> | null</span></>}>
  Related code snippets.
</ResponseField>

<ResponseField name="userActions" type={<><span><a href="#nesuseraction">NesUserAction[]</a></span><span> | null</span></>}>
  Recent user actions (typing, navigation, etc.).
</ResponseField>

## <span class="font-mono">NesSuggestion</span>

A suggestion returned by the agent.

**Type:** Union

<ResponseField name="edit" type="object">
  A text edit suggestion.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="cursorPosition" type={<><span><a href="#position">Position</a></span><span> | null</span></>}>
      Optional suggested cursor position after applying edits.
    </ResponseField>

    <ResponseField name="edits" type={<a href="#nestextedit">NesTextEdit[]</a>} required>
      The text edits to apply. Must contain at least one edit.
    </ResponseField>

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

    <ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
      Unique identifier for accept/reject tracking.
    </ResponseField>

    <ResponseField name="uri" type={"string"} required>
      The URI of the file to edit.

      * Format: `uri`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="jump" type="object">
  A jump-to-location suggestion.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

    <ResponseField name="position" type={<a href="#position">Position</a>} required>
      The target position within the file.
    </ResponseField>

    <ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
      Unique identifier for accept/reject tracking.
    </ResponseField>

    <ResponseField name="uri" type={"string"} required>
      The file to navigate to.

      * Format: `uri`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="rename" type="object">
  A rename symbol suggestion.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

    <ResponseField name="newName" type={"string"} required>
      The new name for the symbol.
    </ResponseField>

    <ResponseField name="position" type={<a href="#position">Position</a>} required>
      The position of the symbol to rename.
    </ResponseField>

    <ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
      Unique identifier for accept/reject tracking.
    </ResponseField>

    <ResponseField name="uri" type={"string"} required>
      The file URI containing the symbol.

      * Format: `uri`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="searchAndReplace" type="object">
  A search-and-replace suggestion.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="isRegex" type={"boolean | null"}>
      Whether `search` is a regular expression. Defaults to `false`.
    </ResponseField>

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

    <ResponseField name="replace" type={"string"} required>
      The replacement text.
    </ResponseField>

    <ResponseField name="search" type={"string"} required>
      The text or pattern to find.
    </ResponseField>

    <ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
      Unique identifier for accept/reject tracking.
    </ResponseField>

    <ResponseField name="uri" type={"string"} required>
      The file URI to search within.

      * Format: `uri`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="other" type="object">
  Custom or future NES suggestion.

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

  Receivers that do not understand this suggestion kind should preserve
  the raw payload when storing, replaying, proxying, or forwarding
  suggestions, and otherwise ignore it or display it generically.

  <Expandable title="Properties">
    <ResponseField name="kind" type={"string"} required>
      Custom or future NES suggestion kind.

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

    <ResponseField name="suggestionId" type={<a href="#nessuggestionid">NesSuggestionId</a>} required>
      Unique identifier for accept/reject tracking.
    </ResponseField>
  </Expandable>
</ResponseField>

## <span class="font-mono">NesSuggestionId</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Unique identifier for an NES suggestion.

**Type:** `string`

## <span class="font-mono">NesTextEdit</span>

A text edit within a suggestion.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="newText" type={"string"} required>
  The replacement text.
</ResponseField>

<ResponseField name="range" type={<a href="#range">Range</a>} required>
  The range to replace.
</ResponseField>

## <span class="font-mono">NesTriggerKind</span>

What triggered the suggestion request.

**Type:** Union

<ResponseField name="automatic" type="string">
  Triggered by user typing or cursor movement.
</ResponseField>

<ResponseField name="diagnostic" type="string">
  Triggered by a diagnostic appearing at or near the cursor.
</ResponseField>

<ResponseField name="manual" type="string">
  Triggered by an explicit user action (keyboard shortcut).
</ResponseField>

<ResponseField name="Other" type="string">
  Custom or future suggestion trigger kind.

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

## <span class="font-mono">NesUserAction</span>

A user action (typing, cursor movement, etc.).

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="action" type={"string"} required>
  The kind of action (e.g., "insertChar", "cursorMovement").
</ResponseField>

<ResponseField name="position" type={<a href="#position">Position</a>} required>
  The position where the action occurred.
</ResponseField>

<ResponseField name="timestampMs" type={"uint64"} required>
  Timestamp in milliseconds since epoch.

  * Minimum: `0`
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the file where the action occurred.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">NesUserActionsCapabilities</span>

Capabilities for user actions context.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="maxCount" type={"integer | null"}>
  Maximum number of user actions the agent can use.

  * Minimum: `0`
</ResponseField>

## <span class="font-mono">NumberPropertySchema</span>

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.

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

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

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

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

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

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

## <span class="font-mono">PermissionOption</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="kind" type={<a href="#permissionoptionkind">PermissionOptionKind</a>} required>
  Hint about the nature of this permission option.
</ResponseField>

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

<ResponseField name="optionId" type={<a href="#permissionoptionid">PermissionOptionId</a>} required>
  Unique identifier for this permission option.
</ResponseField>

## <span class="font-mono">PermissionOptionId</span>

Unique identifier for a permission option.

**Type:** `string`

## <span class="font-mono">PermissionOptionKind</span>

The type of permission option being presented to the user.

Helps clients choose appropriate icons and UI treatment.

**Type:** Union

<ResponseField name="allow_once" type="string">
  Allow this operation only this time.
</ResponseField>

<ResponseField name="allow_always" type="string">
  Allow this operation and remember the choice.
</ResponseField>

<ResponseField name="reject_once" type="string">
  Reject this operation only this time.
</ResponseField>

<ResponseField name="reject_always" type="string">
  Reject this operation and remember the choice.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future permission option kind.

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

## <span class="font-mono">PlanEntry</span>

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](https://agentclientprotocol.com/protocol/v2/draft/agent-plan#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

<ResponseField name="priority" type={<a href="#planentrypriority">PlanEntryPriority</a>} required>
  The relative importance of this task.
  Used to indicate which tasks are most critical to the overall goal.
</ResponseField>

<ResponseField name="status" type={<a href="#planentrystatus">PlanEntryStatus</a>} required>
  Current execution status of this task.
</ResponseField>

## <span class="font-mono">PlanEntryPriority</span>

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](https://agentclientprotocol.com/protocol/v2/draft/agent-plan#plan-entries)

**Type:** Union

<ResponseField name="high" type="string">
  High priority task - critical to the overall goal.
</ResponseField>

<ResponseField name="medium" type="string">
  Medium priority task - important but not critical.
</ResponseField>

<ResponseField name="low" type="string">
  Low priority task - nice to have but not essential.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future plan entry priority.

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

## <span class="font-mono">PlanEntryStatus</span>

Status of a plan entry in the execution flow.

Tracks the lifecycle of each task from planning through completion.
See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/v2/draft/agent-plan#plan-entries)

**Type:** Union

<ResponseField name="pending" type="string">
  The task has not started yet.
</ResponseField>

<ResponseField name="in_progress" type="string">
  The task is currently being worked on.
</ResponseField>

<ResponseField name="completed" type="string">
  The task has been successfully completed.
</ResponseField>

<ResponseField name="cancelled" type="string">
  The task was cancelled before it completed.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future plan entry status.

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

## <span class="font-mono">PlanFile</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

A plan represented by a file URI.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="planId" type={<a href="#planid">PlanId</a>} required>
  The plan ID to update.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the file containing the plan.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">PlanId</span>

Unique identifier for a plan within a session.

**Type:** `string`

## <span class="font-mono">PlanItems</span>

A plan represented as structured 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

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

<ResponseField name="planId" type={<a href="#planid">PlanId</a>} required>
  The plan ID to update.
</ResponseField>

## <span class="font-mono">PlanMarkdown</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

A plan represented as raw markdown 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="content" type={"string"} required>
  Markdown content for the plan.
</ResponseField>

<ResponseField name="planId" type={<a href="#planid">PlanId</a>} required>
  The plan ID to update.
</ResponseField>

## <span class="font-mono">PlanRemoved</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Removal notice for a plan identified by ID.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="planId" type={<a href="#planid">PlanId</a>} required>
  The plan ID to remove.
</ResponseField>

## <span class="font-mono">PlanUpdate</span>

A content update for a plan identified by ID.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="plan" type={<a href="#planupdatecontent">PlanUpdateContent</a>} required>
  The updated plan content.
</ResponseField>

## <span class="font-mono">PlanUpdateContent</span>

Updated content for a plan.

**Type:** Union

<ResponseField name="items" type="object">
  Structured plan entries.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

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

    <ResponseField name="planId" type={<a href="#planid">PlanId</a>} required>
      The plan ID to update.
    </ResponseField>

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

<ResponseField name="file" type="object">
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  A URI pointing to a file containing the plan.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="planId" type={<a href="#planid">PlanId</a>} required>
      The plan ID to update.
    </ResponseField>

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

    <ResponseField name="uri" type={"string"} required>
      The URI of the file containing the plan.

      * Format: `uri`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="markdown" type="object">
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  Raw markdown content for the plan.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="content" type={"string"} required>
      Markdown content for the plan.
    </ResponseField>

    <ResponseField name="planId" type={<a href="#planid">PlanId</a>} required>
      The plan ID to update.
    </ResponseField>

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

<ResponseField name="other" type="object">
  Custom or future plan update content.

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

  Receivers that do not understand this content type should preserve the
  raw payload when storing, replaying, proxying, or forwarding plans, and
  otherwise ignore it or display it generically.

  <Expandable title="Properties">
    <ResponseField name="planId" type={<a href="#planid">PlanId</a>} required>
      The plan ID to update.
    </ResponseField>

    <ResponseField name="type" type={"string"} required>
      Custom or future plan update content type.

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

## <span class="font-mono">Position</span>

A zero-based position in a text document.

The meaning of `character` depends on the negotiated position encoding.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="character" type={"uint32"} required>
  Zero-based character offset (encoding-dependent).

  * Minimum: `0`
</ResponseField>

<ResponseField name="line" type={"uint32"} required>
  Zero-based line number.

  * Minimum: `0`
</ResponseField>

## <span class="font-mono">PositionEncodingKind</span>

The encoding used for character offsets in positions.

Follows the same conventions as LSP 3.17. The default is UTF-16.

**Type:** Union

<ResponseField name="utf-16" type="string">
  Character offsets count UTF-16 code units. This is the default.
</ResponseField>

<ResponseField name="utf-32" type="string">
  Character offsets count Unicode code points.
</ResponseField>

<ResponseField name="utf-8" type="string">
  Character offsets count UTF-8 code units (bytes).
</ResponseField>

## <span class="font-mono">PromptAudioCapabilities</span>

Capabilities for audio content in prompt requests.

Supplying `\{\}` means the agent supports audio content in prompts.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">PromptCapabilities</span>

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](https://agentclientprotocol.com/protocol/v2/draft/initialization#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="audio" type={<><span><a href="#promptaudiocapabilities">PromptAudioCapabilities</a></span><span> | null</span></>}>
  Agent supports `ContentBlock::Audio`.

  Optional. Omitted or `null` both mean the agent does not advertise support.
  Supplying `\{\}` means the agent supports audio content in prompts.
</ResponseField>

<ResponseField name="embeddedContext" type={<><span><a href="#promptembeddedcontextcapabilities">PromptEmbeddedContextCapabilities</a></span><span> | null</span></>}>
  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.

  Optional. Omitted or `null` both mean the agent does not advertise support.
  Supplying `\{\}` means the agent supports embedded context in prompts.
</ResponseField>

<ResponseField name="image" type={<><span><a href="#promptimagecapabilities">PromptImageCapabilities</a></span><span> | null</span></>}>
  Agent supports `ContentBlock::Image`.

  Optional. Omitted or `null` both mean the agent does not advertise support.
  Supplying `\{\}` means the agent supports image content in prompts.
</ResponseField>

## <span class="font-mono">PromptEmbeddedContextCapabilities</span>

Capabilities for embedded context in prompt requests.

Supplying `\{\}` means the agent supports embedded context in prompts.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">PromptImageCapabilities</span>

Capabilities for image content in prompt requests.

Supplying `\{\}` means the agent supports image content in prompts.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">ProtocolVersion</span>

Protocol version identifier.

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

**Type:** `integer (uint16)`

| Constraint | Value   |
| ---------- | ------- |
| Minimum    | `0`     |
| Maximum    | `65535` |

## <span class="font-mono">ProviderCurrentConfig</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Current effective non-secret routing configuration for a provider.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="apiType" type={<a href="#llmprotocol">LlmProtocol</a>} required>
  Protocol currently used by this provider.
</ResponseField>

<ResponseField name="baseUrl" type={"string"} required>
  Base URL currently used by this provider.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">ProviderId</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Unique identifier for a configurable LLM provider.

**Type:** `string`

## <span class="font-mono">ProviderInfo</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Information about a configurable LLM provider.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="current" type={<><span><a href="#providercurrentconfig">ProviderCurrentConfig</a></span><span> | null</span></>}>
  Current effective non-secret routing config.
  Null or omitted means provider is disabled.
</ResponseField>

<ResponseField name="providerId" type={<a href="#providerid">ProviderId</a>} required>
  Provider identifier, for example "main" or "openai".
</ResponseField>

<ResponseField name="required" type={"boolean"} required>
  Whether this provider is mandatory and cannot be disabled via `providers/disable`.
  If true, clients must not call `providers/disable` for this provider ID.
</ResponseField>

<ResponseField name="supported" type={<a href="#llmprotocol">LlmProtocol[]</a>} required>
  Supported protocol types for this provider.
</ResponseField>

## <span class="font-mono">ProvidersCapabilities</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Provider configuration capabilities supported by the agent.

Supplying `\{\}` means the agent supports provider configuration methods.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">Range</span>

A range in a text document, expressed as start and end positions.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="end" type={<a href="#position">Position</a>} required>
  The end position (exclusive).
</ResponseField>

<ResponseField name="start" type={<a href="#position">Position</a>} required>
  The start position (inclusive).
</ResponseField>

## <span class="font-mono">ReplayFrom</span>

Inclusive cursor describing where replayed session history should begin.

Replay includes the position identified by the cursor.

**Type:** Union

<ResponseField name="start" type="object">
  Replay the whole conversation from its first replayable entry.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

<ResponseField name="other" type="object">
  Custom or future replay cursor.

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

  Receivers that do not understand this cursor should preserve the raw
  payload when storing, replaying, proxying, or forwarding requests, and
  otherwise reject the request rather than guessing where to replay from.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="type" type={"string"} required>
      Custom or future replay cursor type.

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

## <span class="font-mono">ReplayFromStart</span>

Inclusive replay cursor requesting replay from the start of the conversation.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">RequestId</span>

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

<ResponseField name="null" type="null">
  The JSON-RPC `null` request id.
</ResponseField>

<ResponseField name="Number" type="int64">
  A numeric JSON-RPC request id.
</ResponseField>

<ResponseField name="Str" type="string">
  A string JSON-RPC request id.
</ResponseField>

## <span class="font-mono">RequestPermissionOutcome</span>

The outcome of a permission request.

**Type:** Union

<ResponseField name="cancelled" type="object">
  Active session work was cancelled before the user responded.

  When a client sends a `session/cancel` notification to cancel active
  session work, it MUST respond to all pending `session/request_permission`
  requests with this `Cancelled` outcome.

  See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/v2/draft/prompt-lifecycle#cancellation)

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

<ResponseField name="selected" type="object">
  The user selected one of the provided options.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/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>
  </Expandable>
</ResponseField>

<ResponseField name="other" type="object">
  Custom or future permission outcome.

  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 outcome MUST NOT treat it as approval.
  They should preserve the raw payload when storing, replaying, proxying, or
  forwarding permission responses, and otherwise fail or decline the
  permission request according to policy.

  <Expandable title="Properties">
    <ResponseField name="outcome" type={"string"} required>
      Custom or future permission outcome.

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

## <span class="font-mono">RequestPermissionSubject</span>

The operation requiring permission.

**Type:** Union

<ResponseField name="tool_call" type="object">
  Permission is requested before executing a tool call.

  <Expandable title="Properties">
    <ResponseField name="toolCall" type={<a href="#toolcallupdate">ToolCallUpdate</a>} required>
      Details about the tool call requiring permission.
    </ResponseField>

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

<ResponseField name="command" type="object">
  Permission is requested before running a command.

  <Expandable title="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. Omitted and `null` are equivalent and mean no subject metadata was provided.

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

    <ResponseField name="command" type={"string"} required>
      The command that would be run if permission is granted.
    </ResponseField>

    <ResponseField name="cwd" type={<a href="#absolutepath">AbsolutePath</a>} required>
      The absolute working directory for the command.
    </ResponseField>

    <ResponseField name="terminalId" type={<><span><a href="#terminalid">TerminalId</a></span><span> | null</span></>}>
      The associated terminal, when already known. Omitted and `null` are equivalent.
    </ResponseField>

    <ResponseField name="toolCallId" type={<><span><a href="#toolcallid">ToolCallId</a></span><span> | null</span></>}>
      The associated tool call, when known. Omitted and `null` are equivalent.
    </ResponseField>

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

<ResponseField name="other" type="object">
  Custom or future permission subject.

  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 subject type should preserve the raw
  payload when storing, replaying, proxying, or forwarding permission
  requests, and otherwise display a generic permission prompt or decline it
  according to policy.

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      Custom or future permission subject type.

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

## <span class="font-mono">RequiresActionStateUpdate</span>

Foreground work is blocked on user action.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">ResourceLink</span>

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](https://agentclientprotocol.com/protocol/v2/draft/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="icons" type={<><span><a href="#icon">Icon[]</a></span><span> | null</span></>}>
  Optional set of sized icons that the client can display in a user interface.
</ResponseField>

<ResponseField name="mimeType" type={<><span><a href="#mediatype">MediaType</a></span><span> | null</span></>}>
  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="uri" type={"string"} required>
  URI associated with this resource or media payload.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">Role</span>

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

**Type:** Union

<ResponseField name="assistant" type="string">
  The assistant side of a conversation.
</ResponseField>

<ResponseField name="user" type="string">
  The user side of a conversation.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future role.

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

## <span class="font-mono">RunningStateUpdate</span>

Foreground work is in progress.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">SelectedPermissionOutcome</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

## <span class="font-mono">SessionAdditionalDirectoriesCapabilities</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">SessionCapabilities</span>

Session capabilities supported by the agent.

Supplying `\{\}` means the agent supports the baseline session methods:
`session/new`, `session/list`, `session/resume`, `session/close`,
`session/prompt`, `session/cancel`, and `session/update`.

Agents that support sessions **MAY** support additional session methods,
prompt content types, and MCP transports by specifying additional
capabilities.

See protocol docs: [Session Capabilities](https://agentclientprotocol.com/protocol/v2/draft/initialization#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="additionalDirectories" type={<><span><a href="#sessionadditionaldirectoriescapabilities">SessionAdditionalDirectoriesCapabilities</a></span><span> | null</span></>}>
  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 may return `SessionInfo.additionalDirectories` to report the
  complete ordered additional-root list associated with a listed session.
</ResponseField>

<ResponseField name="delete" type={<><span><a href="#sessiondeletecapabilities">SessionDeleteCapabilities</a></span><span> | null</span></>}>
  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>

<ResponseField name="fork" type={<><span><a href="#sessionforkcapabilities">SessionForkCapabilities</a></span><span> | null</span></>}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  Whether the agent supports `session/fork`.

  Optional. Omitted or `null` both mean the agent does not advertise support.
  Supplying `\{\}` means the agent supports forking sessions.
</ResponseField>

<ResponseField name="mcp" type={<><span><a href="#mcpcapabilities">McpCapabilities</a></span><span> | null</span></>}>
  MCP capabilities supported by the agent for session lifecycle requests.

  Optional. Omitted or `null` both mean the agent does not advertise MCP
  server transport support for sessions.
</ResponseField>

<ResponseField name="prompt" type={<><span><a href="#promptcapabilities">PromptCapabilities</a></span><span> | null</span></>}>
  Prompt capabilities supported by the agent in `session/prompt` requests.

  Optional. Omitted or `null` both mean the agent does not advertise any
  prompt extensions beyond the baseline text and resource-link content
  required by `session/prompt`.
</ResponseField>

## <span class="font-mono">SessionConfigBoolean</span>

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.
</ResponseField>

## <span class="font-mono">SessionConfigGroupId</span>

Unique identifier for a session configuration option value group.

**Type:** `string`

## <span class="font-mono">SessionConfigId</span>

Unique identifier for a session configuration option.

**Type:** `string`

## <span class="font-mono">SessionConfigOption</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="category" type={<><span><a href="#sessionconfigoptioncategory">SessionConfigOptionCategory</a></span><span> | null</span></>}>
  Optional semantic category for this option (UX only).
</ResponseField>

<ResponseField name="configId" type={<a href="#sessionconfigid">SessionConfigId</a>} required>
  Unique identifier for the configuration option.
</ResponseField>

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

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

**Variants:**

<ResponseField name="select" type="object">
  Single-value selector (dropdown).

  <Expandable title="Properties">
    <ResponseField name="currentValue" type={<a href="#sessionconfigvalueid">SessionConfigValueId</a>} required>
      The currently selected value.
    </ResponseField>

    <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>
  </Expandable>
</ResponseField>

<ResponseField name="boolean" type="object">
  Boolean on/off toggle.

  <Expandable title="Properties">
    <ResponseField name="currentValue" type={"boolean"} required>
      The current value of the boolean option.
    </ResponseField>

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

<ResponseField name="other" type="object">
  Custom or future session configuration option payload.

  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 option type should preserve the raw
  payload when storing, replaying, proxying, or forwarding configuration
  data, and otherwise ignore the option or display it generically.

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      Custom or future session configuration option type.

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

## <span class="font-mono">SessionConfigOptionCategory</span>

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

<ResponseField name="mode" type="string">
  Session mode selector.
</ResponseField>

<ResponseField name="model" type="string">
  Model selector.
</ResponseField>

<ResponseField name="model_config" type="string">
  Model-related configuration parameter.
</ResponseField>

<ResponseField name="thought_level" type="string">
  Thought/reasoning level selector.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future category.

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

## <span class="font-mono">SessionConfigSelect</span>

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

**Type:** Object

**Properties:**

<ResponseField name="currentValue" type={<a href="#sessionconfigvalueid">SessionConfigValueId</a>} required>
  The currently selected value.
</ResponseField>

<ResponseField name="options" type={<a href="#sessionconfigselectoptions">SessionConfigSelectOptions</a>} required>
  The set of selectable options.
</ResponseField>

## <span class="font-mono">SessionConfigSelectGroup</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="groupId" type={<a href="#sessionconfiggroupid">SessionConfigGroupId</a>} required>
  Unique identifier for this group.
</ResponseField>

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

<ResponseField name="options" type={<a href="#sessionconfigselectoption">SessionConfigSelectOption[]</a>} required>
  The set of option values in this group.
</ResponseField>

## <span class="font-mono">SessionConfigSelectOption</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

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

<ResponseField name="value" type={<a href="#sessionconfigvalueid">SessionConfigValueId</a>} required>
  Unique identifier for this option value.
</ResponseField>

## <span class="font-mono">SessionConfigSelectOptions</span>

Possible values for a session configuration option.

**Type:** Union

<ResponseField name="Ungrouped" type="array">
  A flat list of options with no grouping.
</ResponseField>

<ResponseField name="Grouped" type="array">
  A list of options grouped under headers.
</ResponseField>

## <span class="font-mono">SessionConfigValueId</span>

Unique identifier for a session configuration option value.

**Type:** `string`

## <span class="font-mono">SessionDeleteCapabilities</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">SessionForkCapabilities</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Capabilities for the `session/fork` method.

Supplying `\{\}` means the agent supports forking 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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">SessionId</span>

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](https://agentclientprotocol.com/protocol/v2/draft/session-setup#session-id)

**Type:** `string`

## <span class="font-mono">SessionInfo</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="additionalDirectories" type={<a href="#absolutepath">AbsolutePath[]</a>}>
  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>

<ResponseField name="cwd" type={<a href="#absolutepath">AbsolutePath</a>} required>
  The working directory for this session. Must be an absolute path.
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  Unique identifier for the session
</ResponseField>

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

<ResponseField name="updatedAt" type={"string | null"}>
  RFC 3339 timestamp of last activity.

  * Format: `date-time`
</ResponseField>

## <span class="font-mono">SessionInfoUpdate</span>

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.

Omitted fields leave the existing session info unchanged. `null` clears the
corresponding value.

**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. Omitted means no metadata update; `null` is an
  explicit clear signal. Implementations MUST NOT make assumptions about values at these keys.

  See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</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"}>
  RFC 3339 timestamp of last activity. Set to null to clear.

  * Format: `date-time`
</ResponseField>

## <span class="font-mono">SessionListCursor</span>

An opaque cursor used to paginate `session/list` results.

**Type:** `string`

## <span class="font-mono">SessionUpdate</span>

Different types of updates that can be sent while a session exists.

These updates report messages, progress, and other session activity.

See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/v2/draft/prompt-lifecycle#3-agent-reports-output)

**Type:** Union

<ResponseField name="user_message_chunk" type="object">
  A chunk of the user's message being streamed.

  <Expandable title="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. This field is chunk-scoped.

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

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

    <ResponseField name="messageId" type={<a href="#messageid">MessageId</a>} required>
      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>
  </Expandable>
</ResponseField>

<ResponseField name="user_message" type="object">
  A user message has been created or updated.

  Agents can send this when they accept or replay a user message. When a
  client receives another `user_message` update with the same `messageId`,
  fields in the new update patch the previous fields for that message.

  <Expandable title="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. Omitted means no metadata update; `null` is an explicit clear signal.

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

    <ResponseField name="content" type={<><span><a href="#contentblock">ContentBlock[]</a></span><span> | null</span></>}>
      Complete replacement content for this message.
    </ResponseField>

    <ResponseField name="messageId" type={<a href="#messageid">MessageId</a>} required>
      A unique identifier for the message.
    </ResponseField>

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

<ResponseField name="agent_message_chunk" type="object">
  A chunk of the agent's response being streamed.

  <Expandable title="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. This field is chunk-scoped.

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

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

    <ResponseField name="messageId" type={<a href="#messageid">MessageId</a>} required>
      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>
  </Expandable>
</ResponseField>

<ResponseField name="agent_message" type="object">
  An agent message has been created or updated.

  Agents can send this in addition to streamed chunks. When a client
  receives another `agent_message` update with the same `messageId`,
  fields in the new update patch the previous fields for that message.

  <Expandable title="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. Omitted means no metadata update; `null` is an explicit clear signal.

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

    <ResponseField name="content" type={<><span><a href="#contentblock">ContentBlock[]</a></span><span> | null</span></>}>
      Complete replacement content for this message.
    </ResponseField>

    <ResponseField name="messageId" type={<a href="#messageid">MessageId</a>} required>
      A unique identifier for the message.
    </ResponseField>

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

<ResponseField name="agent_thought_chunk" type="object">
  A chunk of the agent's internal reasoning being streamed.

  <Expandable title="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. This field is chunk-scoped.

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

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

    <ResponseField name="messageId" type={<a href="#messageid">MessageId</a>} required>
      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>
  </Expandable>
</ResponseField>

<ResponseField name="agent_thought" type="object">
  An agent thought or reasoning message has been created or updated.

  Agents can send this in addition to streamed chunks. When a client
  receives another `agent_thought` update with the same `messageId`,
  fields in the new update patch the previous fields for that message.

  <Expandable title="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. Omitted means no metadata update; `null` is an explicit clear signal.

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

    <ResponseField name="content" type={<><span><a href="#contentblock">ContentBlock[]</a></span><span> | null</span></>}>
      Complete replacement content for this thought message.
    </ResponseField>

    <ResponseField name="messageId" type={<a href="#messageid">MessageId</a>} required>
      A unique identifier for the thought message.
    </ResponseField>

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

<ResponseField name="state_update" type="object">
  The state of the agent's foreground work has changed.

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

<ResponseField name="tool_call_content_chunk" type="object">
  A chunk of tool-call content being streamed.

  <Expandable title="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. This field is chunk-scoped.

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

    <ResponseField name="content" type={<a href="#toolcallcontent">ToolCallContent</a>} required>
      A single item of content produced by the tool call.
    </ResponseField>

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

    <ResponseField name="toolCallId" type={<a href="#toolcallid">ToolCallId</a>} required>
      The ID of the tool call this content belongs to.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="tool_call_update" type="object">
  A tool call has been created or updated.

  <Expandable title="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. Omitted means no metadata update; `null` is an
      explicit clear signal. Implementations MUST NOT make assumptions about values at these keys.

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

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

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

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

    <ResponseField name="name" type={"string | null"}>
      **UNSTABLE**

      This capability is not part of the spec yet, and may be removed or changed at any point.

      Programmatic name of the tool being invoked.

      This field is optional and has patch semantics. Omission means no
      change, `null` clears the name, and a string replaces it. For a tool
      call ID the client has not seen before, omission or `null` means that no
      tool name is available.
    </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_update"`.
    </ResponseField>

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

    <ResponseField name="title" type={"string | null"}>
      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>
  </Expandable>
</ResponseField>

<ResponseField name="terminal_update" type="object">
  An agent-owned terminal has been created or updated.

  <Expandable title="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. Omitted means no metadata update; `null` is an
      explicit clear signal. Implementations MUST NOT make assumptions about values at these keys.

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

    <ResponseField name="command" type={"string | null"}>
      The command being run.
    </ResponseField>

    <ResponseField name="cwd" type={<><span><a href="#absolutepath">AbsolutePath</a></span><span> | null</span></>}>
      The absolute working directory of the command.
    </ResponseField>

    <ResponseField name="exitStatus" type={<><span><a href="#terminalexitstatus">TerminalExitStatus</a></span><span> | null</span></>}>
      Exit information. A concrete object marks the terminal as exited.
    </ResponseField>

    <ResponseField name="output" type={<><span><a href="#terminaloutput">TerminalOutput</a></span><span> | null</span></>}>
      An authoritative replacement snapshot of terminal output bytes.
    </ResponseField>

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

    <ResponseField name="terminalId" type={<a href="#terminalid">TerminalId</a>} required>
      Unique identifier for this terminal within the session.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="terminal_output_chunk" type="object">
  A chunk of bytes appended to an agent-owned terminal's output.

  <Expandable title="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. This field is chunk-scoped. Omitted and `null` are
      equivalent and mean no chunk metadata was provided.

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

    <ResponseField name="data" type={"string"} required>
      Independently base64-encoded terminal output bytes.

      * Content encoding: `base64`
    </ResponseField>

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

    <ResponseField name="terminalId" type={<a href="#terminalid">TerminalId</a>} required>
      The terminal receiving these bytes.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="plan_update" type="object">
  A content update for a plan identified by ID.
  See protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/v2/draft/agent-plan)

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="plan" type={<a href="#planupdatecontent">PlanUpdateContent</a>} required>
      The updated plan content.
    </ResponseField>

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

<ResponseField name="plan_removed" type="object">
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  Removal notice for a plan identified by ID.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="planId" type={<a href="#planid">PlanId</a>} required>
      The plan ID to remove.
    </ResponseField>

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

<ResponseField name="available_commands_update" type="object">
  Available commands are ready or have changed

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/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>
  </Expandable>
</ResponseField>

<ResponseField name="config_option_update" type="object">
  Session configuration options have been updated.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/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>
  </Expandable>
</ResponseField>

<ResponseField name="session_info_update" type="object">
  Session metadata has been updated (title, timestamps, custom metadata)

  <Expandable title="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. Omitted means no metadata update; `null` is an
      explicit clear signal. Implementations MUST NOT make assumptions about values at these keys.

      See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/v2/draft/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"}>
      RFC 3339 timestamp of last activity. Set to null to clear.

      * Format: `date-time`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="usage_update" type="object">
  Context window and cost update for the session.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/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>
  </Expandable>
</ResponseField>

<ResponseField name="other" type="object">
  Custom or future session update.

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

  Receivers that do not understand this update type should preserve the
  raw payload when storing, replaying, proxying, or forwarding session
  history, and otherwise ignore it or display it generically.

  <Expandable title="Properties">
    <ResponseField name="sessionUpdate" type={"string"} required>
      Custom or future session update type.

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

## <span class="font-mono">StateUpdate</span>

The state of the agent's foreground work has changed.

Background activity can continue and emit other `session/update` notifications
while `idle`. Those notifications do not change this state.

**Type:** Union

<ResponseField name="running" type="object">
  Foreground work is in progress.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

<ResponseField name="idle" type="object">
  The agent is ready to process a new prompt.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

    <ResponseField name="stopReason" type={<><span><a href="#stopreason">StopReason</a></span><span> | null</span></>}>
      Indicates why foreground work stopped.

      Optional. Omitted or `null` both mean the agent is not reporting a stop reason.
      Agents SHOULD include this when the idle transition ends foreground work.
    </ResponseField>

    <ResponseField name="usage" type={<><span><a href="#usage">Usage</a></span><span> | null</span></>}>
      **UNSTABLE**

      This capability is not part of the spec yet, and may be removed or changed at any point.

      Token usage for completed foreground work.

      Optional. Omitted or `null` both mean the agent is not reporting token
      usage for this state update.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="requires_action" type="object">
  Foreground work is blocked on user action.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

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

<ResponseField name="other" type="object">
  Custom or future session state.

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

  <Expandable title="Properties">
    <ResponseField name="state" type={"string"} required>
      Custom or future session state.

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

## <span class="font-mono">StopReason</span>

Reasons why an agent stops active session work.

See protocol docs: [Stop Reasons](https://agentclientprotocol.com/protocol/v2/draft/prompt-lifecycle#stop-reasons)

**Type:** Union

<ResponseField name="end_turn" type="string">
  The active work ended successfully.
</ResponseField>

<ResponseField name="max_tokens" type="string">
  The active work ended because the agent reached the maximum number of tokens.
</ResponseField>

<ResponseField name="max_turn_requests" type="string">
  The active work ended because the agent reached the maximum number of allowed
  agent requests before returning idle.
</ResponseField>

<ResponseField name="refusal" type="string">
  The active work 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.
</ResponseField>

<ResponseField name="cancelled" type="string">
  Active session work was cancelled by the client via `session/cancel`.

  Agents should report this stop reason on an idle `state_update` session update
  when cancellation succeeds, even if cancellation causes exceptions in
  underlying operations.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future stop reason.

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

## <span class="font-mono">StringFormat</span>

String format types for string properties in elicitation schemas.

**Type:** Union

<ResponseField name="email" type="string">
  Email address format.
</ResponseField>

<ResponseField name="uri" type="string">
  URI format.
</ResponseField>

<ResponseField name="date" type="string">
  Date format (YYYY-MM-DD).
</ResponseField>

<ResponseField name="date-time" type="string">
  Date-time format (RFC 3339).
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future string format.

  Unknown formats are preserved. Implementations that do not understand a
  format should treat it as an annotation rather than rejecting the schema.
</ResponseField>

## <span class="font-mono">StringMultiSelectItems</span>

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.

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

<ResponseField name="enum" type={<><span>"string"</span><span>[]</span></>} required>
  Allowed enum values. Must contain at least one value.
</ResponseField>

## <span class="font-mono">StringPropertySchema</span>

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.

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

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

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

<ResponseField name="enum" type={<><span><><span>"string"</span><span>[]</span></></span><span> | null</span></>}>
  Enum values for untitled single-select enums.
  Must contain at least one value when present.
</ResponseField>

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

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

  * Minimum: `0`
</ResponseField>

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

  * 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.
  Must contain at least one option when present.
</ResponseField>

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

  * Format: `regex`
</ResponseField>

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

## <span class="font-mono">Terminal</span>

A display-only reference to an agent-owned terminal.

Terminal state and output are delivered separately through
`TerminalUpdate` and `TerminalOutputChunk`.

**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. This metadata is scoped to the content reference. Omitted
  and `null` are equivalent and mean no item metadata was provided.

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

<ResponseField name="terminalId" type={<a href="#terminalid">TerminalId</a>} required>
  The ID of the terminal to display.
</ResponseField>

## <span class="font-mono">TerminalAuthCapabilities</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Capabilities for terminal authentication methods.

Supplying `\{\}` means the client supports terminal authentication methods.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

## <span class="font-mono">TerminalExitStatus</span>

Exit information for an agent-owned terminal.

The presence of this object marks the terminal as exited, even when neither
an exit code nor a signal is known.

**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. This metadata is scoped to the exit information. Omitted
  and `null` are equivalent and mean no exit metadata was provided.

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

<ResponseField name="exitCode" type={"integer | null"}>
  Process exit code, when known. Omitted and `null` are equivalent.

  * Minimum: `0`
</ResponseField>

<ResponseField name="signal" type={"string | null"}>
  Signal that terminated the process, when known.

  Agents should use the conventional platform signal name. POSIX examples
  include `SIGTERM`, `SIGKILL`, and `SIGINT`. Other platforms may use a
  platform-specific name. Omitted and `null` are equivalent.
</ResponseField>

## <span class="font-mono">TerminalId</span>

Unique identifier for an agent-owned terminal within a session.

**Type:** `string`

## <span class="font-mono">TerminalOutput</span>

An authoritative replacement snapshot of terminal output bytes.

**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. This metadata is scoped to the replacement snapshot. Omitted
  and `null` are equivalent and mean no snapshot metadata was provided.

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

<ResponseField name="data" type={"string"} required>
  Base64-encoded replacement terminal output bytes.

  * Content encoding: `base64`
</ResponseField>

## <span class="font-mono">TerminalOutputChunk</span>

A chunk of bytes appended to an agent-owned terminal's 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. This field is chunk-scoped. Omitted and `null` are
  equivalent and mean no chunk metadata was provided.

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

<ResponseField name="data" type={"string"} required>
  Independently base64-encoded terminal output bytes.

  * Content encoding: `base64`
</ResponseField>

<ResponseField name="terminalId" type={<a href="#terminalid">TerminalId</a>} required>
  The terminal receiving these bytes.
</ResponseField>

## <span class="font-mono">TerminalUpdate</span>

An upsert for the stored state of an agent-owned terminal.

Only `TerminalUpdate::terminal_id` is required. Other fields have patch
semantics: omitted fields leave the stored value unchanged, `null` clears
it, and concrete values replace it. When the terminal ID is new, omitted
fields start unknown.

**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. Omitted means no metadata update; `null` is an
  explicit clear signal. Implementations MUST NOT make assumptions about values at these keys.

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

<ResponseField name="command" type={"string | null"}>
  The command being run.
</ResponseField>

<ResponseField name="cwd" type={<><span><a href="#absolutepath">AbsolutePath</a></span><span> | null</span></>}>
  The absolute working directory of the command.
</ResponseField>

<ResponseField name="exitStatus" type={<><span><a href="#terminalexitstatus">TerminalExitStatus</a></span><span> | null</span></>}>
  Exit information. A concrete object marks the terminal as exited.
</ResponseField>

<ResponseField name="output" type={<><span><a href="#terminaloutput">TerminalOutput</a></span><span> | null</span></>}>
  An authoritative replacement snapshot of terminal output bytes.
</ResponseField>

<ResponseField name="terminalId" type={<a href="#terminalid">TerminalId</a>} required>
  Unique identifier for this terminal within the session.
</ResponseField>

## <span class="font-mono">TextCommandInput</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="hint" type={"string"} required>
  A hint to display when the input hasn't been provided yet
</ResponseField>

## <span class="font-mono">TextContent</span>

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](https://agentclientprotocol.com/protocol/v2/draft/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>

## <span class="font-mono">TextDocumentContentChangeEvent</span>

A content change event for a document.

When `range` is `None`, `text` is the full content of the document.
When `range` is `Some`, `text` replaces the given range.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="range" type={<><span><a href="#range">Range</a></span><span> | null</span></>}>
  The range of the document that changed. If `None`, the entire content is replaced.
</ResponseField>

<ResponseField name="text" type={"string"} required>
  The new text for the range, or the full document content if `range` is `None`.
</ResponseField>

## <span class="font-mono">TextDocumentSyncKind</span>

How the agent wants document changes delivered.

**Type:** Union

<ResponseField name="full" type="string">
  Client sends the entire file content on each change.
</ResponseField>

<ResponseField name="incremental" type="string">
  Client sends only the changed ranges.
</ResponseField>

## <span class="font-mono">TextResourceContents</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="mimeType" type={<><span><a href="#mediatype">MediaType</a></span><span> | null</span></>}>
  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.

  * Format: `uri`
</ResponseField>

## <span class="font-mono">TitledMultiSelectItems</span>

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.

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

<ResponseField name="anyOf" type={<a href="#enumoption">EnumOption[]</a>} required>
  Titled enum options. Must contain at least one option.
</ResponseField>

## <span class="font-mono">ToolCallContent</span>

Content produced by a tool call.

Tool calls can produce different types of content including standard
content blocks (text, images), file diffs, or display-only terminals.

See protocol docs: [Content](https://agentclientprotocol.com/protocol/v2/draft/tool-calls#content)

**Type:** Union

<ResponseField name="content" type="object">
  Standard content block (text, images, resources).

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/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>
  </Expandable>
</ResponseField>

<ResponseField name="diff" type="object">
  File modification shown as a diff.

  <Expandable title="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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
    </ResponseField>

    <ResponseField name="changes" type={<a href="#diffchange">DiffChange[]</a>} required>
      Structured file changes described by this diff.

      Clients can use this field without parsing patch text to determine affected paths.
    </ResponseField>

    <ResponseField name="patch" type={<><span><a href="#diffpatch">DiffPatch</a></span><span> | null</span></>}>
      Renderable patch text for some or all of the structured changes.

      Agents SHOULD provide patch text whenever feasible. Omitted or `null`
      means no renderable patch text was provided.
    </ResponseField>

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

<ResponseField name="terminal" type="object">
  A display-only reference to an agent-owned terminal.

  <Expandable title="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. This metadata is scoped to the content reference. Omitted
      and `null` are equivalent and mean no item metadata was provided.

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

    <ResponseField name="terminalId" type={<a href="#terminalid">TerminalId</a>} required>
      The ID of the terminal to display.
    </ResponseField>

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

<ResponseField name="other" type="object">
  Custom or future tool call content.

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

  Receivers that do not understand this content type should preserve the
  raw payload when storing, replaying, proxying, or forwarding tool call
  output, and otherwise ignore it or display it generically.

  <Expandable title="Properties">
    <ResponseField name="type" type={"string"} required>
      Custom or future tool call content type.

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

## <span class="font-mono">ToolCallContentChunk</span>

A streamed item of tool-call content.

Tool-call content chunks append one `ToolCallContent` item to the current
content for the matching `ToolCallId`. Agents can use
`ToolCallUpdate::content` when they need to replace the whole content
collection instead.

**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. This field is chunk-scoped.

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

<ResponseField name="content" type={<a href="#toolcallcontent">ToolCallContent</a>} required>
  A single item of content produced by the tool call.
</ResponseField>

<ResponseField name="toolCallId" type={<a href="#toolcallid">ToolCallId</a>} required>
  The ID of the tool call this content belongs to.
</ResponseField>

## <span class="font-mono">ToolCallId</span>

Unique identifier for a tool call within a session.

**Type:** `string`

## <span class="font-mono">ToolCallLocation</span>

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](https://agentclientprotocol.com/protocol/v2/draft/tool-calls#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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="line" type={"integer | null"}>
  Optional line number within the file.

  * Minimum: `0`
</ResponseField>

<ResponseField name="path" type={<a href="#absolutepath">AbsolutePath</a>} required>
  The absolute file path being accessed or modified.
</ResponseField>

## <span class="font-mono">ToolCallPermissionSubject</span>

Permission request details for a tool call.

**Type:** Object

**Properties:**

<ResponseField name="toolCall" type={<a href="#toolcallupdate">ToolCallUpdate</a>} required>
  Details about the tool call requiring permission.
</ResponseField>

## <span class="font-mono">ToolCallStatus</span>

Execution status of a tool call.

Tool calls progress through different statuses during their lifecycle.

See protocol docs: [Status](https://agentclientprotocol.com/protocol/v2/draft/tool-calls#status)

**Type:** Union

<ResponseField name="pending" type="string">
  The tool call hasn't started running yet because the input is either streaming
  or we're awaiting approval.
</ResponseField>

<ResponseField name="in_progress" type="string">
  The tool call is currently running.
</ResponseField>

<ResponseField name="completed" type="string">
  The tool call completed successfully.
</ResponseField>

<ResponseField name="failed" type="string">
  The tool call failed with an error.
</ResponseField>

<ResponseField name="cancelled" type="string">
  The tool call was cancelled before it completed.
</ResponseField>

<ResponseField name="other" type="string">
  Custom or future tool call status.

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

## <span class="font-mono">ToolCallUpdate</span>

Represents an upsert for 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.

Only `ToolCallUpdate::tool_call_id` is required. Other fields have patch semantics:
omitted fields leave the existing tool call value unchanged, `null` clears or
unsets the value, and concrete values replace the previous value. For
collection fields, concrete arrays replace the previous collection, and both
`null` and `[]` clear the collection. When a client receives a tool call ID it
has not seen before, omitted fields use client defaults.

See protocol docs: [Tool Calls](https://agentclientprotocol.com/protocol/v2/draft/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. Omitted means no metadata update; `null` is an
  explicit clear signal. Implementations MUST NOT make assumptions about values at these keys.

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

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

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

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

<ResponseField name="name" type={"string | null"}>
  **UNSTABLE**

  This capability is not part of the spec yet, and may be removed or changed at any point.

  Programmatic name of the tool being invoked.

  This field is optional and has patch semantics. Omission means no
  change, `null` clears the name, and a string replaces it. For a tool
  call ID the client has not seen before, omission or `null` means that no
  tool name is available.
</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="status" type={<><span><a href="#toolcallstatus">ToolCallStatus</a></span><span> | null</span></>}>
  Current execution status of the tool call.
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  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>

## <span class="font-mono">ToolKind</span>

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](https://agentclientprotocol.com/protocol/v2/draft/tool-calls#creating)

**Type:** Union

<ResponseField name="read" type="string">
  Reading files or data.
</ResponseField>

<ResponseField name="edit" type="string">
  Modifying files or content.
</ResponseField>

<ResponseField name="delete" type="string">
  Removing files or data.
</ResponseField>

<ResponseField name="move" type="string">
  Moving or renaming files.
</ResponseField>

<ResponseField name="search" type="string">
  Searching for information.
</ResponseField>

<ResponseField name="execute" type="string">
  Running commands or code.
</ResponseField>

<ResponseField name="think" type="string">
  Internal reasoning or planning.
</ResponseField>

<ResponseField name="fetch" type="string">
  Retrieving external data.
</ResponseField>

<ResponseField name="switch_mode" type="string">
  Switching the current session mode.
</ResponseField>

<ResponseField name="other" type="string">
  Other tool types (default).
</ResponseField>

<ResponseField name="unknown" type="string">
  Custom or future tool kind.

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

## <span class="font-mono">Usage</span>

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Token usage information for completed session work.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="cachedReadTokens" type={"integer | null"}>
  Total cache read tokens.

  * Minimum: `0`
</ResponseField>

<ResponseField name="cachedWriteTokens" type={"integer | null"}>
  Total cache write tokens.

  * Minimum: `0`
</ResponseField>

<ResponseField name="inputTokens" type={"uint64"} required>
  Total input tokens.

  * Minimum: `0`
</ResponseField>

<ResponseField name="outputTokens" type={"uint64"} required>
  Total output tokens.

  * Minimum: `0`
</ResponseField>

<ResponseField name="thoughtTokens" type={"integer | null"}>
  Total thought/reasoning tokens

  * Minimum: `0`
</ResponseField>

<ResponseField name="totalTokens" type={"uint64"} required>
  Sum of all token types across session.

  * Minimum: `0`
</ResponseField>

## <span class="font-mono">UsageUpdate</span>

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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

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

## <span class="font-mono">UserMessage</span>

A user message upsert.

Only `UserMessage::message_id` is required. `content` has patch semantics:
an omitted field leaves existing message content unchanged, `null` clears the
value, and a concrete array replaces the previous value. For a new
`messageId`, omitted fields use client defaults. `content` is replaced as a
whole array; send `[]` or `null` to clear it.

Message updates and chunks are applied in the order they are received. When
a `user_message` update includes `content`, that array replaces any content
previously accumulated for the message, including content from earlier
chunks. Later chunks with the same `messageId` append to the current
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. Omitted means no metadata update; `null` is an explicit clear signal.

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

<ResponseField name="content" type={<><span><a href="#contentblock">ContentBlock[]</a></span><span> | null</span></>}>
  Complete replacement content for this message.
</ResponseField>

<ResponseField name="messageId" type={<a href="#messageid">MessageId</a>} required>
  A unique identifier for the message.
</ResponseField>

## <span class="font-mono">WorkspaceFolder</span>

A workspace folder.

**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](https://agentclientprotocol.com/protocol/v2/draft/extensibility)
</ResponseField>

<ResponseField name="name" type={"string"} required>
  The display name of the folder.
</ResponseField>

<ResponseField name="uri" type={"string"} required>
  The URI of the folder.

  * Format: `uri`
</ResponseField>
