The Agent Client Protocol (ACP) standardizes communication between code editors (interactive programs for viewing and editing source code) and coding agents (programs that use generative AI to autonomously modify code).
Learn more at agentclientprotocol.com.
This repository is the official Rust SDK for ACP. It provides crates for building clients, agents, and proxies, plus a conductor that orchestrates chains of proxies between an editor and an agent so that behavior can be extended without modifying the agent itself.
Core SDK
agent-client-protocol– Roles (Client, Agent, Proxy, Conductor), connection builders, handlers, and protocol types.agent-client-protocol-http– HTTP/SSE and WebSocket transports.agent-client-protocol-rmcp– Integration with thermcpMCP SDK.agent-client-protocol-derive– Derive macros used by the core crate.
Native MCP-over-ACP support is currently opt-in through the core crate's
unstable_mcp_over_acp feature. Standalone MCP servers need no ACP transport
feature; the rmcp integration exposes a matching passthrough feature when those
servers are attached to ACP. Stable protocol v1 supports per-session and global
proxy attachment. Draft protocol v2 supports the same two attachment scopes
when both unstable_protocol_v2 and unstable_mcp_over_acp are enabled:
Proxy.v2().with_mcp_server(...) injects a global declaration into each
supported session setup request, while
V2SessionBuilder::with_mcp_server(...) attaches a server to one new session.
Successful v2 attachments remain active for the connection lifetime, and
V2SessionBuilder::on_proxy_session_start forwards a proxied setup response
without coupling later session events to that response.
Proxy orchestration
agent-client-protocol-conductor– Binary and library that manages chains of proxy components.agent-client-protocol-polyfill– Compatibility proxies, including adapting native MCP-over-ACP declarations to HTTP for agents that cannot consume them directly.agent-client-protocol-trace-viewer– Interactive sequence-diagram viewer for conductor trace files.
Patterns, examples, and testing
agent-client-protocol-cookbook– Practical patterns for clients, agents, and proxies, rendered as rustdoc.agent-client-protocol-test– Shared test utilities and fixtures.yopo– "You Only Prompt Once", an example client.
- API reference for individual crates is on docs.rs/agent-client-protocol.
- Design and architecture documentation lives in the mdbook at agentclientprotocol.github.io/rust-sdk. Source is in
md/. - Draft protocol v2 setup, version-typed connections, and high-level session usage are covered in Protocol V2.
Client.builder(), Agent.builder(), and Proxy.builder() remain stable-v1
entry points; their .v2() counterparts select the draft-v2 API. Raw proxy
routing infrastructure that selects and validates a version itself can use
without_acp_version_guard, but ordinary v2 proxy implementations should use
Proxy.v2().
- Protocol schema and documentation
- Agents
- Clients
- Official Libraries
- Kotlin:
acp-kotlin– supports JVM, other targets are in progress - Rust:
agent-client-protocol- See the agent and client examples - TypeScript:
@agentclientprotocol/sdk- See examples/
- Kotlin:
- Community Libraries
Pull requests should intend to close an existing issue.
- Bug Reports: If you notice a bug in the protocol, please file an issue and we will be in touch.
- Protocol Suggestions: If you'd like to propose additions or changes to the protocol, please start a discussion first. We want to make sure proposed suggestions align well with the project. If accepted, we can have a conversation around the implementation of these changes. Once that is complete, we will create an issue for pull requests to target.
By contributing, you agree that your contributions will be licensed under the Apache 2.0 License.