Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 36 additions & 1 deletion docs/protocol/initialization.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ Before a Session can be created, Clients **MUST** initialize the connection by c
- The latest [protocol version](#protocol-version) supported
- The [capabilities](#client-capabilities) supported

They **SHOULD** also provide a name and version to the Agent.

```json
{
"jsonrpc": "2.0",
Expand All @@ -41,12 +43,17 @@ Before a Session can be created, Clients **MUST** initialize the connection by c
"writeTextFile": true
},
"terminal": true
},
"clientInfo": {
"name": "my-client",
"title": "My Client",
"version": "1.0.0"
}
}
}
```

The Agent **MUST** respond with the chosen [protocol version](#protocol-version) and the [capabilities](#agent-capabilities) it supports:
The Agent **MUST** respond with the chosen [protocol version](#protocol-version) and the [capabilities](#agent-capabilities) it supports. It **SHOULD** also provide a name and version to the Client as well:

```json
{
Expand All @@ -66,6 +73,11 @@ The Agent **MUST** respond with the chosen [protocol version](#protocol-version)
"sse": true
}
},
"agentInfo": {
"name": "my-agent",
"title": "My Agent",
"version": "1.0.0"
},
"authMethods": []
}
}
Expand Down Expand Up @@ -174,6 +186,29 @@ Note: This transport has been deprecated by the MCP spec.

</ResponseField>

## Implementation Information

Both Clients and Agents **SHOULD** provide information about their implementation in the `clientInfo` and `agentInfo` fields respectively. Both take the following three fields:

<ParamField path="name" type="string">
Intended for programmatic or logical use, but can be used as a display name
fallback if title isn’t present.
</ParamField>

<ParamField path="title" type="string">
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.
</ParamField>

<ParamField path="version" type="string">
Version of the implementation. Can be displayed to the user or used for
debugging or metrics purposes.
</ParamField>

<Info>
Note: in future versions of the protocol, this information will be required.
</Info>

---

Once the connection is initialized, you're ready to [create a session](./session-setup) and begin the conversation with the Agent.
37 changes: 37 additions & 0 deletions docs/protocol/schema.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@ See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/ini

- Default: `{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false}`

</ResponseField>
<ResponseField name="clientInfo" type={<><span><a href="#implementation">Implementation</a></span><span> | null</span></>} >
Information about the Client name and version sent to the Agent.

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

</ResponseField>
<ResponseField name="protocolVersion" type={<a href="#protocolversion">ProtocolVersion</a>} required>
The latest protocol version supported by the client.
Expand All @@ -115,6 +121,12 @@ See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/ini

- Default: `{"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false}}`

</ResponseField>
<ResponseField name="agentInfo" type={<><span><a href="#implementation">Implementation</a></span><span> | null</span></>} >
Information about the Agent name and version sent to the Client.

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

</ResponseField>
<ResponseField name="authMethods" type={<><span><a href="#authmethod">AuthMethod</a></span><span>[]</span></>} >
Authentication methods supported by the agent.
Expand Down Expand Up @@ -1491,6 +1503,31 @@ An HTTP header to set when making requests to the MCP server.
The value to set for the HTTP header.
</ResponseField>

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

Describes the name and version of an MCP implementation, with an optional
title for UI representation.

**Type:** Object

**Properties:**

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

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

MCP capabilities supported by the agent
Expand Down
9 changes: 9 additions & 0 deletions docs/v2-changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Proposal for changes in an ACP v2

A WIP document to keep track of ideas and proposals for breaking changes that would require a version bump in the protocol.

## Proposed Changes

- Make `clientInfo` and `agentInfo` required in the `initialize` request.

## Agreed on Changes
28 changes: 28 additions & 0 deletions rust/agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ pub struct InitializeRequest {
/// Capabilities supported by the client.
#[serde(default)]
pub client_capabilities: ClientCapabilities,
/// Information about the Client name and version sent to the Agent.
///
/// Note: in future versions of the protocol, this will be required.
#[serde(skip_serializing_if = "Option::is_none")]
pub client_info: Option<Implementation>,
/// Extension point for implementations
#[serde(skip_serializing_if = "Option::is_none", rename = "_meta")]
pub meta: Option<serde_json::Value>,
Expand All @@ -54,11 +59,34 @@ pub struct InitializeResponse {
/// Authentication methods supported by the agent.
#[serde(default)]
pub auth_methods: Vec<AuthMethod>,
/// Information about the Agent name and version sent to the Client.
///
/// Note: in future versions of the protocol, this will be required.
#[serde(skip_serializing_if = "Option::is_none")]
pub agent_info: Option<Implementation>,
/// Extension point for implementations
#[serde(skip_serializing_if = "Option::is_none", rename = "_meta")]
pub meta: Option<serde_json::Value>,
}

/// Describes the name and version of an MCP implementation, with an optional
/// title for UI representation.
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct Implementation {
/// Intended for programmatic or logical use, but can be used as a display
/// name fallback if title isn’t present.
name: String,
/// 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.
title: Option<String>,
/// Version of the implementation. Can be displayed to the user or used
/// for debugging or metrics purposes.
version: String,
}

// Authentication

/// Request parameters for the authenticate method.
Expand Down
2 changes: 1 addition & 1 deletion rust/bin/generate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ struct AgentOutgoingMessage(JsonRpcMessage<OutgoingMessage<AgentSide, ClientSide
#[schemars(extend("x-docs-ignore" = true))]
struct ClientOutgoingMessage(JsonRpcMessage<OutgoingMessage<ClientSide, AgentSide>>);

#[expect(dead_code, clippy::large_enum_variant)]
#[expect(dead_code)]
#[derive(JsonSchema)]
#[serde(untagged)]
enum AcpTypes {
Expand Down
41 changes: 41 additions & 0 deletions schema/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -958,6 +958,25 @@
"required": ["name", "value"],
"type": "object"
},
"Implementation": {
"description": "Describes the name and version of an MCP implementation, with an optional\ntitle for UI representation.",
"properties": {
"name": {
"description": "Intended for programmatic or logical use, but can be used as a display\nname fallback if title isn’t present.",
"type": "string"
},
"title": {
"description": "Intended for UI and end-user contexts — optimized to be human-readable\nand easily understood.\n\nIf not provided, the name should be used for display.",
"type": ["string", "null"]
},
"version": {
"description": "Version of the implementation. Can be displayed to the user or used\nfor debugging or metrics purposes.",
"type": "string"
}
},
"required": ["name", "version"],
"type": "object"
},
"InitializeRequest": {
"description": "Request parameters for the initialize method.\n\nSent by the client to establish connection and negotiate capabilities.\n\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)",
"properties": {
Expand All @@ -975,6 +994,17 @@
},
"description": "Capabilities supported by the client."
},
"clientInfo": {
"anyOf": [
{
"$ref": "#/$defs/Implementation"
},
{
"type": "null"
}
],
"description": "Information about the Client name and version sent to the Agent.\n\nNote: in future versions of the protocol, this will be required."
},
"protocolVersion": {
"$ref": "#/$defs/ProtocolVersion",
"description": "The latest protocol version supported by the client."
Expand Down Expand Up @@ -1007,6 +1037,17 @@
},
"description": "Capabilities supported by the agent."
},
"agentInfo": {
"anyOf": [
{
"$ref": "#/$defs/Implementation"
},
{
"type": "null"
}
],
"description": "Information about the Agent name and version sent to the Client.\n\nNote: in future versions of the protocol, this will be required."
},
"authMethods": {
"default": [],
"description": "Authentication methods supported by the agent.",
Expand Down