Expand description
§agent-client-protocol – the Agent Client Protocol (ACP) SDK
agent-client-protocol is a Rust SDK for building Agent-Client Protocol (ACP) applications. ACP is a protocol for communication between AI agents and their clients (IDEs, CLIs, etc.), enabling features like tool use, permission requests, and streaming responses.
§What can you build with agent-client-protocol?
- Clients that talk to ACP agents (like building your own Claude Code interface)
- Proxies that add capabilities to existing agents (like adding custom tools via MCP)
- Agents that respond to prompts with AI-powered responses
§Quick Start: Connecting to an Agent
The most common use case is connecting to an existing ACP agent as a client. Here’s a minimal example that initializes a connection, creates a session, and sends a prompt:
use agent_client_protocol::Client;
use agent_client_protocol::schema::{InitializeRequest, ProtocolVersion};
Client.builder()
.name("my-client")
.connect_with(transport, async |cx| {
// Step 1: Initialize the connection
cx.send_request(InitializeRequest::new(ProtocolVersion::V1))
.block_task().await?;
// Step 2: Create a session and send a prompt
cx.build_session_cwd()?
.block_task()
.run_until(async |mut session| {
session.send_prompt("What is 2 + 2?")?;
let response = session.read_to_string().await?;
println!("{}", response);
Ok(())
})
.await
})
.awaitFor a complete working example, see yolo_one_shot_client.rs.
§Cookbook
The agent_client_protocol_cookbook crate contains practical guides and examples:
- Connecting as a client
- Global MCP server
- Per-session MCP server with workspace context
- Building agents and reusable components
- Running proxies with the conductor
§Core Concepts
The concepts module provides detailed explanations of how agent-client-protocol works,
including connections, sessions, callbacks, ordering guarantees, and more.
§Related Crates
agent-client-protocol-tokio- Tokio utilities for spawning agent processesagent-client-protocol-conductor- Binary for running proxy chains
Re-exports§
pub use role::Role;pub use role::RoleId;pub use role::UntypedRole;pub use role::acp::Agent;pub use role::acp::Client;pub use role::acp::Conductor;pub use role::acp::Proxy;pub use component::ConnectTo;pub use component::DynConnectTo;
Modules§
- component
- Component abstraction for agents and proxies ConnectTo abstraction for agents and proxies.
- concepts
- Core concepts for understanding and using agent-client-protocol Core concepts for understanding and using agent-client-protocol.
- cookbook
- Cookbook of common patterns for building ACP components Cookbook of common patterns for building ACP components.
- handler
- JSON-RPC handler types for building custom message handlers Handler types for building custom JSON-RPC message handlers.
- jsonrpcmsg
- JSON-RPC message types.
- mcp_
server - MCP server support for providing MCP tools over ACP MCP server support for providing MCP tools over ACP.
- role
- Role types for ACP connections Role types for ACP connections.
- schema
- ACP protocol schema types - all message types, requests, responses, and supporting types ACP protocol schema types and message implementations.
- util
- Utility functions and types
Macros§
- on_
receive_ dispatch - This macro is used for the value of the
to_future_hackparameter ofBuilder::on_receive_dispatchandBuilder::on_receive_dispatch_from. - on_
receive_ notification - This macro is used for the value of the
to_future_hackparameter ofBuilder::on_receive_notificationandBuilder::on_receive_notification_from. - on_
receive_ request - This macro is used for the value of the
to_future_hackparameter ofBuilder::on_receive_requestandBuilder::on_receive_request_from. - tool_fn
- This is a hack that must be given as the final argument of
McpServerBuilder::tool_fnwhen defining stateless concurrent tools. Seetool_fn_mut!for the gory details. - tool_
fn_ mut - This is a hack that must be given as the final argument of
McpServerBuilder::tool_fnwhen defining tools. Look away, lest ye be blinded by its vileness!
Structs§
- Active
Session - Active session struct that lets you send prompts and receive updates.
- Blocking
- Marker type indicating the session builder will block the current task.
- Builder
- A JSON-RPC connection that can act as either a server, client, or both.
- Byte
Streams - A component that communicates over byte streams (stdin/stdout, sockets, pipes, etc.).
- Chain
Run - Chains two RunIn implementations to run in parallel.
- Channel
- A channel endpoint representing one side of a bidirectional message channel.
- Connection
To - Connection context for sending messages and spawning tasks.
- Error
- JSON-RPC error object.
- Lines
- A component that communicates over line streams.
- McpAcp
Transport - The mcp_acp_transport capability - indicates support for MCP-over-ACP bridging.
- NonBlocking
- Marker type indicating the session builder will not block the current task.
- Null
Handler - Null handler that accepts no messages.
- NullRun
- A no-op RunIn that completes immediately.
- Responder
- The context to respond to an incoming request.
- Response
Router - Context for handling an incoming JSON-RPC response.
- Sent
Request - Represents a pending response of type
Rfrom an outgoing request. - Session
Builder - Session builder for a new session request. Allows you to add MCP servers or set other details for this session.
- Untyped
Message - An incoming JSON message without any typing. Can be a request or a notification.
Enums§
- Agent
Notification - All possible notifications that an agent can send to a client.
- Agent
Request - All possible requests that an agent can send to a client.
- Agent
Response - All possible responses that an agent can send to a client.
- Client
Notification - All possible notifications that a client can send to an agent.
- Client
Request - All possible requests that a client can send to an agent.
- Client
Response - All possible responses that a client can send to an agent.
- Dispatch
- An enum capturing an in-flight request or notification. In the case of a request, also includes the context used to respond to the request.
- Error
Code - Predefined error codes for common JSON-RPC and ACP-specific errors.
- Handled
- Return type from JrHandler; indicates whether the request was handled or not.
- Session
Message - Incoming message from the agent
Traits§
- Handle
Dispatch From - Handlers process incoming JSON-RPC messages on a connection.
- Into
Handled - Trait for converting handler return values into
Handled. - Json
RpcMessage - Common bounds for any JSON-RPC message.
- Json
RpcNotification - A struct that represents a notification (JSON-RPC message that does not expect a response).
- Json
RpcRequest - A struct that represents a request (JSON-RPC message expecting a response).
- Json
RpcResponse - Defines the “payload” of a successful response to a JSON-RPC request.
- Meta
Capability - Trait for capabilities stored in the
_meta.symposiumobject. - Meta
Capability Ext - Extension trait for checking and modifying capabilities in
InitializeRequest. - RunWith
Connection To - A background task that runs alongside a connection.
- Session
Block State - Trait for marker types that indicate blocking vs blocking API.
See
SessionBuilder::block_task.
Type Aliases§
- BoxFuture
- An owned dynamically typed
Futurefor use in cases where you can’t statically type your result or need to add some indirection. - Result
Derive Macros§
- Json
RpcNotification - Derive macro for implementing
JsonRpcNotificationandJsonRpcMessagetraits. - Json
RpcRequest - Derive macro for implementing
JsonRpcRequestandJsonRpcMessagetraits. - Json
RpcResponse - Derive macro for implementing
JsonRpcResponsetrait.