Expand description
§sacp – the Symposium Agent Client Protocol (ACP) SDK
sacp 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 sacp?
- 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 sacp::ClientToAgent;
use sacp::schema::{InitializeRequest, ProtocolVersion};
ClientToAgent::builder()
.name("my-client")
.run_until(transport, async |cx| {
// Step 1: Initialize the connection
cx.send_request(InitializeRequest::new(ProtocolVersion::LATEST))
.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 sacp_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 sacp works,
including connections, sessions, callbacks, ordering guarantees, and more.
§Related Crates
sacp-tokio- Tokio utilities for spawning agent processessacp-conductor- Binary for running proxy chains
Re-exports§
pub use link::AgentToClient;pub use link::ClientToAgent;pub use link::HasDefaultPeer;pub use link::HasPeer;pub use link::JrLink;pub use link::ProxyToConductor;pub use peer::AgentPeer;pub use peer::ClientPeer;pub use peer::ConductorPeer;pub use peer::JrPeer;pub use component::Component;pub use component::DynComponent;
Modules§
- component
- Component abstraction for agents and proxies Component abstraction for agents and proxies.
- concepts
- Core concepts for understanding and using sacp Core concepts for understanding and using sacp.
- 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.
- link
- Link types for JSON-RPC connections Link types for ACP and related protocols.
- mcp
- MCP declarations (minimal)
- mcp_
server - MCP server support for providing MCP tools over ACP MCP server support for providing MCP tools over ACP.
- peer
- Peer types for JSON-RPC connections Peer types for ACP and related protocols.
- 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_ message - This macro is used for the value of the
to_future_hackparameter ofJrConnectionBuilder::on_receive_messageandJrConnectionBuilder::on_receive_message_from. - on_
receive_ notification - This macro is used for the value of the
to_future_hackparameter ofJrConnectionBuilder::on_receive_notificationandJrConnectionBuilder::on_receive_notification_from. - on_
receive_ request - This macro is used for the value of the
to_future_hackparameter ofJrConnectionBuilder::on_receive_requestandJrConnectionBuilder::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.
- Byte
Streams - A component that communicates over byte streams (stdin/stdout, sockets, pipes, etc.).
- Chain
Responder - Chains two responders to run in parallel.
- Channel
- A channel endpoint representing one side of a bidirectional message channel.
- Error
- JSON-RPC error object.
- JrConnection
- A JSON-RPC connection with an active transport.
- JrConnection
Builder - A JSON-RPC connection that can act as either a server, client, or both.
- JrConnection
Cx - Trait for types that can provide transport for JSON-RPC messages.
- JrRequest
Cx - The context to respond to an incoming request.
- JrResponse
- Represents a pending response of type
Rfrom an outgoing request. - 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.
- Null
Responder - A no-op responder that completes immediately.
- 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.
- 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.
- Message
Cx - 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.
- Session
Message - Incoming message from the agent
Traits§
- Into
Handled - Trait for converting handler return values into
Handled. - JrMessage
- Common bounds for any JSON-RPC message.
- JrMessage
Handler - Handlers process incoming JSON-RPC messages on a
JrConnection. - JrNotification
- A struct that represents a notification (JSON-RPC message that does not expect a response).
- JrRequest
- A struct that represents a request (JSON-RPC message expecting a response).
- JrResponder
- A responder runs background tasks alongside a connection.
- JrResponse
Payload - 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. - 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.
Derive Macros§
- JrNotification
- Derive macro for implementing
JrNotificationandJrMessagetraits. - JrRequest
- Derive macro for implementing
JrRequestandJrMessagetraits. - JrResponse
Payload - Derive macro for implementing
JrResponsePayloadtrait.