Skip to content

Commit 602240b

Browse files
benbrandtclaude
andauthored
docs: prepare the 5.0 release (migration guide, stability policy, version pins) (#479)
* fix(acp): retry unhandled session messages only on v1 and unguarded connections The Agent role's default handler retried session-scoped messages on every connection that was not v2, so a future protocol version would inherit the v1 parking path. Check for v1 (or an unguarded connection) explicitly. Behavior on v1, v2 and unguarded connections is unchanged. Co-Authored-By: Claude <noreply@anthropic.com> * docs: pin install snippets to 5 and drop stale upcoming-release wording The READMEs, crate docs and book still told users to depend on "3", called 3.x upcoming and rmcp 4.x unreleased. Co-Authored-By: Claude <noreply@anthropic.com> * docs(migration): cover the conductor, core and stability changes in the v5 guide - Explain why the version jumps from 3.6 to 5.0. - Summarize the stability policy and the exact schema pin. - Add a conductor section: instantiators receive a SelectedInitializeRequest, the v2 instantiator methods, ConductorHostRole::initialize* and InitializationOutcome are removed. - Add a core section: JSON-RPC batches, non-exhaustive TransportFrame, MetaCapability, the dropped-Responder answer, unknown fields surviving v1 forwarding, and ProxyProtocolRouter's retry after a rejected first message. - Drop rows and sections for APIs 3.6 never had (OpenedSession, v2_id(), the Responder<T, V1/V2> markers, ProxiesAndAgentComponents). - List all four third-party types in the HTTP crate's public API. Co-Authored-By: Claude <noreply@anthropic.com> * docs(acp): add a stability policy and describe the schema pin and module layout - Add a Stability section to the crate docs and README, mirrored in the v2 module: unstable_* features, including all of v2, may change in minor releases, stabilizing v2 only removes the gate, and the stable v1 API follows semver. - Document the exact agent-client-protocol-schema pin and to use the schema types through agent_client_protocol::schema, v1::schema and v2::schema. - Note in .release-plz.toml that a major release of a public dependency forces a major release of the whole acp version group. - The schema module docs no longer describe a flat layout, and the v1/v2 docs say where the two modules differ instead of claiming they match. - README: v1 connections also have prepare_request_to. Co-Authored-By: Claude <noreply@anthropic.com> * docs: correct rustdoc and book pages that describe old behavior - read_to_string: unhandled requests get -32601, not -32603. - Client::v2: point to send_initialize and InitializeOutcome::LowerVersion. - unsupported_protocol_version takes requested and supported versions. - Cookbook one-shot recipe: start_session returns a v1::SessionSetup. - Features table: the rmcp crate has no draft-v2 feature. - Trace docs: from/to are Client, Proxy(N) and Agent, and ResponseEvent has error_domain. - v1 with_mcp_server entry points: note the mcpCapabilities.acp requirement and the polyfill. - Instantiators run once; a repeated initialize is forwarded. - Session builders: cwd must be absolute. - Routers and modules: slots and payloads are not version-checked. - Drop the stale schema 1.10.1 sentence and fix the mcp/connect banner. Co-Authored-By: Claude <noreply@anthropic.com> * docs: add a versioning page with the protocol-version checklist and semver gate plan The page states the release policy for the acp version group, gives the cargo-semver-checks job to add once 5.0.0 is published, and lists what to change when adding a protocol version (marker, module, feature gate, negotiation, router slots, conductor, tests, docs). Co-Authored-By: Claude <noreply@anthropic.com> * test(acp): assert auto traits on public handles and returned futures Connections, builders, request handles, sessions, transports and the futures from connect_with, connect_to, block_task, start_session, run_until, read_update and send_initialize must stay Send (and Sync and 'static where they are today). A compile-time test catches a regression, which would otherwise be a silent breaking change. Co-Authored-By: Claude <noreply@anthropic.com> * docs(acp): keep the schema module docs in one place The outer and inner doc comments were joined and resolved links in different scopes, which stable and nightly rustdoc reported differently. Co-Authored-By: Claude <noreply@anthropic.com> * docs(cookbook): resolve the cookbook's rustdoc links and check docs for every published crate The cookbook's rustdoc links into agent-client-protocol and agent-client-protocol-rmcp, but both were dev-dependencies, and rustdoc only resolves links against regular dependencies. About 130 links were broken on docs.rs. Make them regular dependencies; the cookbook is documentation that nothing depends on as a library. CI's docs.rs build check covered only the core and rmcp crates. Run it for every published crate so broken links fail CI. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 79a3501 commit 602240b

33 files changed

Lines changed: 731 additions & 137 deletions

File tree

‎.github/workflows/ci.yml‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,16 @@ jobs:
112112
- name: Check docs.rs build
113113
env:
114114
RUSTDOCFLAGS: --cfg docsrs -D warnings
115-
run: cargo +nightly doc -p agent-client-protocol -p agent-client-protocol-rmcp --all-features --no-deps --locked
115+
run: >-
116+
cargo +nightly doc --all-features --no-deps --locked
117+
-p agent-client-protocol
118+
-p agent-client-protocol-cookbook
119+
-p agent-client-protocol-conductor
120+
-p agent-client-protocol-derive
121+
-p agent-client-protocol-http
122+
-p agent-client-protocol-polyfill
123+
-p agent-client-protocol-rmcp
124+
-p agent-client-protocol-trace-viewer
116125
117126
- name: Check WASI documentation
118127
env:

‎.release-plz.toml‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
# Every published crate below is in the `acp` version group, so they always
2+
# share one version number. Consequence: a major release of a public
3+
# dependency of any crate in the group forces a major release of the whole
4+
# group. That applies to `axum` and `reqwest`, whose types appear in
5+
# agent-client-protocol-http's API, and to dropping support for an `rmcp` major
6+
# version (adding one is a new feature; see agent-client-protocol-rmcp below).
7+
# The SDK also pins agent-client-protocol-schema exactly (`=`), so a schema
8+
# release with breaking changes in stable types forces a major release too.
9+
110
[workspace]
211
git_release_type = "auto"
312
git_release_latest = false

‎md/SUMMARY.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
# Reference
3636

37+
- [Versioning and Protocol Versions](./versioning.md)
3738
- [Migrating to v5](./migration-v5.md)
3839
- [Migrating to Core v3](./migration-v3.md)
3940
- [Migrating the Config API](./migration-config-api.md)

‎md/features.md‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# Cargo Features
22

3-
Starting with the upcoming **3.x** release, the core `agent-client-protocol`
4-
crate enables **no features by default**. Protocol serialization, connections,
5-
sessions, custom MCP servers, and the `Channel`, `Lines`, and `ByteStreams`
3+
Since the 3.0 release, the core `agent-client-protocol` crate enables **no
4+
features by default**. Protocol serialization, connections, sessions, custom
5+
MCP servers, and the `Channel`, `Lines`, and `ByteStreams`
66
adapters remain available without native I/O or JSON Schema generation.
77

88
```toml
99
[dependencies]
10-
agent-client-protocol = "3"
10+
agent-client-protocol = "5"
1111
```
1212

1313
You do not need `default-features = false` for a lean core dependency.
@@ -27,14 +27,14 @@ For a client that launches an external agent:
2727

2828
```toml
2929
[dependencies]
30-
agent-client-protocol = { version = "3", features = ["process"] }
30+
agent-client-protocol = { version = "5", features = ["process"] }
3131
```
3232

3333
For an agent that uses `Stdio::new()`:
3434

3535
```toml
3636
[dependencies]
37-
agent-client-protocol = { version = "3", features = ["stdio"] }
37+
agent-client-protocol = { version = "5", features = ["stdio"] }
3838
```
3939

4040
The conductor explicitly enables both native features. Other libraries using
@@ -47,7 +47,7 @@ Opt into `schemars` to generate JSON Schemas for protocol types and typed tools:
4747

4848
```toml
4949
[dependencies]
50-
agent-client-protocol = { version = "3", features = ["schemars"] }
50+
agent-client-protocol = { version = "5", features = ["schemars"] }
5151
```
5252

5353
This enables the SDK's direct dependency and the matching
@@ -77,7 +77,7 @@ Internal crates request only the core capabilities they use:
7777
| --- | --- |
7878
| HTTP client/server | None; transport sides remain opt-in through `client` and `server` |
7979
| MCP-over-ACP polyfill | `unstable_mcp_over_acp`, with independent draft-v2 and session-fork passthrough features |
80-
| rmcp integration | `schemars`; one feature per rmcp major version (`rmcp_3`), with independent draft-v2 and MCP-over-ACP passthrough features |
80+
| rmcp integration | `schemars`; one feature per rmcp major version (`rmcp_3`), and an `unstable_mcp_over_acp` passthrough feature. It has no draft-v2 feature: enable `unstable_protocol_v2` on `agent-client-protocol` itself |
8181
| Conductor | `process`, `stdio`, and `unstable_mcp_over_acp` for launching components, serving stdio, and classifying MCP traces |
8282
| YOPO | `process` for launching the agent |
8383
| Test utilities | `process` and `stdio` for fixture binaries and launch helpers |
@@ -110,7 +110,7 @@ For example, to use draft v2 and MCP-over-ACP without JSON Schema generation:
110110

111111
```toml
112112
[dependencies]
113-
agent-client-protocol = { version = "3", features = ["unstable_protocol_v2", "unstable_mcp_over_acp"] }
113+
agent-client-protocol = { version = "5", features = ["unstable_protocol_v2", "unstable_mcp_over_acp"] }
114114
```
115115

116116
The `unstable` aggregate does not select draft v2; enable `unstable_protocol_v2`
@@ -167,10 +167,10 @@ A dependency that previously relied on native transports and typed tools:
167167
agent-client-protocol = "2.2"
168168

169169
# After: select only the capabilities your application actually uses.
170-
agent-client-protocol = { version = "3", features = ["process", "stdio", "schemars"] }
170+
agent-client-protocol = { version = "5", features = ["process", "stdio", "schemars"] }
171171
```
172172

173-
A protocol-only application can instead use `agent-client-protocol = "3"`.
173+
A protocol-only application can instead use `agent-client-protocol = "5"`.
174174
Applications that already disabled defaults must still enable `process` or
175175
`stdio` if they use those adapters: native I/O used to be unconditional on
176176
native targets, independently of defaults.

‎md/http-transport.md‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,17 @@ stream for that returned session before expecting updates or responses for it.
7373
The crate does not enable either transport side by default. Opt into only the side(s) you need.
7474

7575
```toml
76-
agent-client-protocol-http = { version = "3", features = ["client"] }
76+
agent-client-protocol-http = { version = "5", features = ["client"] }
7777
# For a server instead:
78-
# agent-client-protocol-http = { version = "3", features = ["server"] }
78+
# agent-client-protocol-http = { version = "5", features = ["server"] }
7979
# To enable both sides:
80-
# agent-client-protocol-http = { version = "3", features = ["client", "server"] }
80+
# agent-client-protocol-http = { version = "5", features = ["client", "server"] }
8181
```
8282

8383
The `client` feature exposes `HttpClient`. Its `configure_http` and
84-
`from_http_client` hooks take reqwest types, so add a matching `reqwest`
85-
dependency to customize the HTTP client. The `server` feature exposes
84+
`from_http_client` hooks take reqwest types, and `HttpClientError::Reqwest`
85+
holds a `reqwest::Error`, so add a matching `reqwest` dependency to customize
86+
the HTTP client or inspect that error. The `server` feature exposes
8687
`AcpHttpServer`, `ServerOptions`, and `CorsOptions`.
8788
`AcpHttpServer::into_router` returns an `axum::Router` to mount in your axum
8889
application, so your axum dependency must match this crate's.
@@ -92,7 +93,7 @@ application, so your axum dependency must match this crate's.
9293
Request cancellation is available through the core SDK:
9394

9495
```toml
95-
agent-client-protocol-http = { version = "3", features = ["client", "server"] }
96+
agent-client-protocol-http = { version = "5", features = ["client", "server"] }
9697
```
9798

9899
`$/cancel_request` is connection-scoped. The HTTP transport does not apply

‎md/mcp-over-acp.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
The native binding exposes **MCP 2026-07-28** over an existing ACP connection.
44
Enable `unstable_mcp_over_acp`; draft ACP v2 also requires
5-
`unstable_protocol_v2`. The SDK uses the released schema 1.10.1.
5+
`unstable_protocol_v2`.
66

77
## Services and operations
88

‎md/migration-config-api.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Migrating the Config API
22

3-
The upcoming 3.x release makes `agent-client-protocol-http::ServerOptions`,
3+
The 3.0 release made `agent-client-protocol-http::ServerOptions`,
44
`agent-client-protocol-http::CorsOptions`, and
55
`agent-client-protocol::AcpAgentConfig` non-exhaustive so future configuration
66
fields or policies can be added without another breaking release.

‎md/migration-rmcp-v4.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
# Migrating the rmcp Integration to v4
22

3-
The next major release of `agent-client-protocol-rmcp` upgrades its public
4-
`rmcp` dependency from 2.x to 3.4. This is a breaking change for integrations
5-
that pass rmcp services or types across the crate boundary. It ships together
6-
with the core `agent-client-protocol` 3.x release, which also changes public
3+
The 4.0 release of `agent-client-protocol-rmcp` upgraded its public `rmcp`
4+
dependency from 2.x to 3.4. This is a breaking change for integrations that
5+
pass rmcp services or types across the crate boundary. It shipped together
6+
with the core `agent-client-protocol` 3.x release, which also changed public
77
APIs. Migrate both public dependencies together; the minimum supported Rust
88
version remains 1.88.
99

1010
| Integration crate | Core ACP SDK | MCP SDK |
1111
| --- | --- | --- |
12-
| `agent-client-protocol-rmcp` 4.x (unreleased) | 3.x | `rmcp` 3.x |
12+
| `agent-client-protocol-rmcp` 4.x | 3.x | `rmcp` 3.x |
1313
| `agent-client-protocol-rmcp` 3.x | 2.x | `rmcp` 2.x |
1414

1515
Upgrade the application's core ACP and rmcp dependencies together with the

‎md/migration-v3.md‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
# Migrating to Core v3
22

3-
The upcoming combined breaking release pairs `agent-client-protocol` 3.x with
3+
The 3.0 release paired `agent-client-protocol` 3.x with
44
`agent-client-protocol-rmcp` 4.x and `rmcp` 3.x. Applications using the
55
integration must upgrade both public dependencies together; see the
66
[rmcp integration migration](./migration-rmcp-v4.md) for service and tool API
7-
changes. These are planned release versions, not the workspace's current
8-
package versions. The minimum supported Rust version remains 1.88.
7+
changes. The minimum supported Rust version remains 1.88.
98

109
For the other transport changes in core 3.x, follow:
1110

0 commit comments

Comments
 (0)