1.14.0 - 2026-10-30
- (unstable-v2) remove JSON-RPC batching from v2 (#2625)
- (unstable-v2) add schema types for defined error data (#2605)
- (unstable-v2) accept other JSON values in elicitation content (#2595)
- (unstable) report subagent working directories (#2593)
- (unstable-v2) encode the at-least-one-value rule for select options (#2662)
- (unstable-v2) match MCP's ISO 8601 lastModified (#2661)
- (unstable) use AbsolutePath for subagent cwd and additionalDirectories (#2660)
- (unstable-v2) require type and properties on elicitation requestedSchema (#2645)
- (unstable-v2) allow null error response ids in the generated schema (#2634)
- (schema) allow non-ISO currency units such as credits (#2621)
- (unstable-v2) make usage_update cost a patch field (#2617)
- (schema) mark SessionInfo.additionalDirectories as default-on-null (#2571)
- (schema) adopt MCP's icon fetch rules (#2728)
- (schema) reject duplicate stdio env names (#2693)
- (schema) align max_turn_requests wording with the docs (#2717)
- (schema) Clients ignore config options of unknown type (#2712)
- (schema) auth methods trigger is a non-empty authMethods list (#2710)
- (schema) initialize can be repeated before other requests (#2711)
- (schema) an unknown plan type still replaces the plan (#2703)
- (schema) resource links are readable by the receiver (#2706)
- (schema) define annotation semantics (#2704)
- (schema) _meta docs forbid assigning meaning to unrecognized keys (#2701)
- (schema) document omission rules for setup-response configOptions (#2696)
- (schema) MCP transport headers take precedence over Client headers (#2694)
- (schema) cancel_request names a request its sender issued (#2687)
- (schema) align the session/close schema doc with the spec (#2682)
- (schema) an empty-string session/list cursor is valid (#2673)
- (schema) ignore cancel_request for unknown or answered requests (#2672)
- (unstable) clean up the SystemPrompt.mode description (#2668)
- (schema) new entities start at protocol defaults, not Client defaults (#2652)
- (schema) git_patch paths match changes, including on Windows (#2650)
- (schema) align close's prompt rule and call pending prompts held (#2648)
- (schema) Clients must not send an empty prompt (#2647)
- (schema) require a boundary after a command name (#2646)
- (schema) require session/resume cwd to match the session (#2640)
- (schema) SessionInfo.additionalDirectories doesn't allow null (#2638)
- (schema) allow a normal response after $/cancel_request (#2636)
- (unstable-v2) scope end-turn Usage fields to the completed work (#2630)
- (schema) define AbsolutePath syntax and reject relative cwd (#2629)
- (schema) state request ID rules for a bidirectional connection (#2622)
- (schema) drop the v1 exclusion note from the v2 refusal stop reason (#2619)
- (schema) resume mcpServers is the complete Client-provided set (#2614)
- (schema) require session/resume cwd to match the session (#2612)
- (schema) define session/list cwd matching (#2609)
- (schema) specify slash command names and invocation (#2598)
- (schema) clarify authMethods obligations, terminal gating and auth/login errors (#2589)
- (schema) define declining a permission request and unknown option IDs (#2582)
- (schema) let cancelled cover stops the user chose through the Agent (#2576)
1.13.0 - 2026-10-27
- (unstable-v2) add optional terminal size to terminal_update (#2550)
- (unstable-v2) make ResourceLink.size unsigned and define unknown tool kinds (#2521)
- (unstable-v2) add _meta to DiffPatch, ToolCallPermissionSubject, Icon and the cancelled outcome (#2517)
- (unstable-v2) disallow null request IDs (#2499)
- (unstable-v2) add type discriminator to available commands (#2494)
- (unstable) link session message views and keep identity off chunks (#2465)
- (unstable-v2) define version mismatch errors (#2412)
- (unstable-v2) parse nextCursor and listed session directories strictly (#2567)
- (unstable-v2) don't clear replacement lists on a malformed value (#2568)
- (unstable-v2) keep optional fields of unknown variants verbatim (#2561)
- (unstable-v2) reject a non-object elicitation schema root type (#2558)
- (unstable) null clears session_message participant IDs and message references (#2555)
- (unstable-v2) make ToolCallLocation.line 1-based (#2546)
- (unstable-v2) make terminal exitCode a signed integer (#2545)
- (schema) require exactly one elicitation scope in v2 (#2498)
- (schema) state null handling for every optional v2 field (#2570)
- (schema) mark DefaultOnNull lists with an x-deserialize hint (#2569)
- (schema) fix broken v2 doc anchors (#2565)
- (schema) put the text-content Markdown rule on the content page (#2562)
- (schema) use one description for every v2 _meta field (#2560)
- (schema) define config option defaults via currentValue and state select invariants (#2557)
- (schema) document the elicitation form-schema subset and unrenderable forms (#2556)
- (schema) say permission tool_call subjects apply as tool_call_update upserts (#2554)
- (schema) specify v2 diff baseline, path uniqueness and patch conflicts (#2547)
- (schema) define tool call field defaults and null resets in v2 (#2544)
- (schema) define switch_mode as changing the mode config option in v2 (#2543)
- (schema) note that titled multi-select items omit type, as in MCP (#2538)
- (schema) ExtNotification can be sent by either side (#2534)
- (schema) include -32800's range in the reserved error codes (#2531)
- (schema) write versioned doc links in source and drop the generator's link rewriting (#2525)
- (schema) define which stop reason applies to v2 cancellations (#2523)
- (schema) mark required v2 fields in the docs and rename ClientAuthCapabilities (#2522)
- (schema) use wire names instead of Rust identifiers in schema descriptions (#2520)
- (schema) define Client handling of unknown v2 session states and tool statuses (#2510)
- (schema) define timeline placement for v2 entities (#2509)
- (schema) define session/cancel as cancelling foreground work in v2 (#2508)
- (schema) write the error pages for v1 and v2 (#2504)
- (schema) define receiver behavior for unknown v2 variants (#2500)
- (schema) define when session/set_config_option is available in v2 (#2497)
1.12.0 - 2026-10-16
- (unstable-v2) patch upsert _meta by top-level key (#2372)
- (unstable) add client system prompt schema (#2361)
- (rust) implement Eq for content blocks (#2352)
- (unstable) remove next edit suggestions (#2266)
- (schema) align v2 experimental feature compatibility (#2397)
- (unstable-v2) define foreground state transitions (#2411)
- (v2) clarify replay IDs and unsupported cursors (#2398)
- (v2) align normative cancellation requirements (#2390)
- (unstable-v2) clarify prompt insertion contract (#2392)
- (unstable-v2) clarify foreground work lifecycle (#2387)
- (v2) clarify prompt cancellation when closing sessions (#2385)
- (schema) specify how git_patch writes paths (#2362)
- (unstable) clarify that a forked session is active (#2359)
- (schema) list full v2 session baseline on AgentCapabilities.session (#2358)
- (schema) clarify v2 foreground work can start without a prompt (#2357)
1.11.0 - 2026-10-09
- (schema) stabilize session notices (#2336)
- (schema) stabilize session compaction (#2334)
- (unstable) report failures after prompt insertion with an error stop reason (#2281)
- (schema) reject malformed values receivers act on (#2333)
- (schema) clarify v2 entity IDs are unique per entity type (#2332)
- (rust) compare empty collections with assert_eq! (#2279)
1.10.2 - 2026-10-01
- (rust) remove skipped-entry deserialization logging (#2273)
- (rust) silently skip malformed list entries without logging Serde errors or private payload values. The
tracingfeature remains available as a backwards-compatible no-op.
1.10.1 - 2026-09-30
- (unstable) allow MCP response extensions (#2265)
1.10.0 - 2026-09-30
- (unstable-v2) return available commands in session responses (#2259)
- (unstable) Initial RFD and schema for subagents (#1992)
- (unstable) make MCP-over-ACP request-scoped (#2223)
1.9.1 - 2026-09-18
- (rust) accept null for defaultable payloads (#2178)
1.9.0 - 2026-09-18
- (unstable-v2) return message ID on prompt insertion (#2175)
- (unstable) add v1 session notice capability (#2171)
- (unstable-v2) cover stateful tool and terminal patches (#2174)
1.8.0 - 2026-09-17
- (deps) bump actions-rust-lang/setup-rust-toolchain from 1.17.0 to 2.0.0 (#2156)
1.7.0 - 2026-08-20
- (unstable) add session compaction updates (#2002)
- (schema) stabilize terminal authentication (#2000)
- (rust) make schemars optional (#1939)
- (schema) stabilize elicitation (#1779)
1.6.0 - 2026-07-21
- (unstable) add tool call name (#1752)
- (unstable-v2) add cancelled variant to tool call and plan item (#1750)
1.5.0 - 2026-07-20
- (unstable-v2) add v2 semantic string types (#1742)
- (unstable-v2) rename diff patch payload to text (#1730)
- (unstable-v2) add v2 terminal output surface (#1679)
- (unstable-v2) gate v2 auth methods on authMethods (#1728)
- (unstable-v2) Clean up conversion helpers (#1640)
- (schema) remove enum discriminators from invalid schemas (#1612)
- (unstable-v2) clarify idle session semantics (#1729)
1.4.0 - 2026-07-06
- (unstable) Add descriptions to elicitation enum options (#1397)
1.3.0 - 2026-07-06
- (schema) Stabilize boolean session config options (#1604)
- (unstable-v2) tighten v2 field validation (#1587)
- (unstable-v2) New diff format (#1586)
- (unstable-v2) Unify session/load and session/resume (#1584)
- (unstable-v2) require more session methods by default (#1578)
- (unstable-v2) More flexible permission requests (#1577)
- (unstable-v2) Align v2 Content types with the latest MCP spec (#1576)
- (unstable-v2) Unify the ID naming conventions across the schema (#1567)
- (unstable-v2) require typed config values (#1561)
- (schema) Reject malformed protocol fields (#1583)
- (unstable) remove URL elicitation error (#1574)
- (unstable-v2) Preserve meta update signals in v2 (#1573)
- (unstable-v2) Continue to make more enums future compatible (#1571)
- (unstable-v2) Make empty MCP arrays optional (#1570)
- (unstable-v2) Make all session lifecycle requests consistent (#1555)
- (schema) Clean up generated documentation and make wording more consistent (#1568)
- (rust) Box v2 protocol enum variants (#1562)
1.2.0 - 2026-06-29
- (schema) Stabilize request cancellation (#1549)
- (unstable-v2) use EnvVariable for terminal auth env (#1522)
- (unstable-v2) Require auth logout support (#1520)
- (unstable-v2) Group v2 auth methods under auth/* (#1519)
- (unstable-v2) require v2 implementation info (#1517)
- (unstable-v2) allow null auth capabilities (#1539)
- Deserialization leniency part 2 (#1526)
- (unstable-v2) make mcpServers optional in new sessions (#1523)
- (rust) Clean up Protocol version handling (#1515)
- (unstable-v2) reorder v2 content fields (#1541)
- (unstable-v2) Clean up client schema types (#1540)
- (schema) correct Implementation description (#1518)
1.1.0 - 2026-06-24
- (schema) Stabilize model_config option category (#1502)
1.0.0 - 2026-06-24
- (unstable) Add boolean config option capabilities (#1490)
0.14.0 - 2026-06-18
- (rust) Expose v1 schema types only under v1 module (#1457)
0.13.8 - 2026-06-18
- (rust) Move schema crate into workspace subdirectory (#1456)
- various cleanups (#1453)
- Clarify schema release versioning docs (#1443)
0.13.7 - 2026-06-16
- (unstable-v2) Add streaming tool-call content in v2 (#1407)
- (unstable-v2) Add v2 whole-message session updates (#1396)
- (unstable-v2) Unify v2 tool call updates (#1390)
- (unstable-v2) Require auth method type discriminator in v2 (#1387)
- (unstable-v2) Nest session-scoped capabilities under session (#1373)
- (rust) Preserve JSON object key order (#1393)
- (schema) Add missing _meta fields to protocol schemas (#1440)
- (unstable-v2) Tolerate errors in v1/v2 conversions (#1420)
- (unstable-v2) Clean up old agent auth deserialization (#1388)
- Setup separate publishes for JSON Schemas (#1377)
0.13.6 - 2026-06-05
- (schema) Stabilize optional message IDs (#1372)
- (schema) Stabilize session usage updates (#1371)
- (schema) Stabilize session/delete (#1370)
- (unstable-v2) Remove MCP SSE transport and make stdio opt-in (#1368)
- (unstable-v2) Clean up capability objects (#1367)
- (unstable-v2) Require message IDs in v2 chunks (#1352)
- (unstable-v2) Adopt plan_update as v2 plan shape (#1347)
- (unstable-v2) Remove v2 client filesystem and terminal surface (#1346)
- (unstable) Fix plan capability key (#1369)
- (rfd) Add JSON-RPC batch guidance for v2 (#1348)
- (rfd) Split end-turn token usage from session usage (#1345)
- (rfd) Clarify agent-owned message IDs in RFDs (#1344)
- (deps) bump the minor group with 5 updates (#1341)
- Render feature docs in docs.rs (#1331)
0.13.5 - 2026-06-01
- (schema) Experiment annotating lenient deserialize opportunities (#1328)
- Stabilize additionalDirectories for sessions (#1327)
- (unstable) Remove unstable session model API (#1325)
- (unstable-v2) Remove dedicated session modes and models apis from v2 (#1324)
- (unstable) Add v2 enum extension RFD and fallbacks (#1304)
0.13.4 - 2026-05-27
- (unstable) Add unstable plan operations (#1299)
0.13.3 - 2026-05-22
- Stabilize logout method (#1273)
- (unstable) Rename provider method types to singular (#1272)
- (rfd) Move additional directories RFD to Preview (#1276)
- Add schema download note to schema page (#1269)
- (deps) bump num-conv from 0.2.1 to 0.2.2 in the minor group (#1244)
- Set minimum supported Rust version (#1232)
- Document ACP versioning semantics (#1229)
0.13.2 - 2026-05-17
- (unstable) Update additionalDirectories guidance (#1227)
0.13.1 - 2026-05-16
- (unstable) Add unstable session delete support (#1216)
0.13.0 - 2026-05-12
- (unstable) Add experimental MCP-over-ACP message types (#1185)
- add unstable mcp-over-acp additions to the schema (#1173)
- (deps) bump the minor group with 3 updates (#1178)
- (deps) bump the minor group with 2 updates (#1121)
- (unstable) Start setting up v2 Schema scaffolding for experimentation (#1099)
- reorganize to v1 module (#1094)
0.12.2 - 2026-04-23
0.12.1 - 2026-04-21
0.12.0 - 2026-04-17
- (rust-only) Remove unused RPC message schema types (schema.json unchanged) (#1009)
- (rust-only) better tolerate malformed optional fields in deserialization (#1006)
- (rpc) preserve '_' prefix for extension methods and reject empty ext (#883)
0.11.7 - 2026-04-15
- (unstable) Initial implementation of providers (#899)
0.11.6 - 2026-04-14
- (unstable) Move elicitation scope into mode variants (#966)
0.11.5 - 2026-04-09
- (unstable) elicitation for session, tool call, and requests (#792)
0.11.4 - 2026-03-28
- (unstable) initial unstable nes implementation (#754)
- (unstable) initial additional directories implementation (#838)
- properly interpolate variables in generate.rs error messages (#862)
- add tests for content file (#850)
- Update README.md (#836)
0.11.3 - 2026-03-18
- (unstable) More robust schema for elicitation types (#771)
- (unstable) initial implementation for the logout method capability (#751)
- (rust-only) Add meta getter for AuthMethod enum (#725)
- initial implementation: elicitation (#769)
0.11.2 - 2026-03-11
- (unstable) Complete session/stop → session/close rename (#724)
- Update ecosystem docs for new clients and libraries (#715)
0.11.1 - 2026-03-09
- (unstable) Remove unused auth_methods from Error type (#708)
- Stabilize session/list and session_info_update (#705)
- (unstable) Rename unstable session/stop method to session/close (#701)
- (unstable) Add config option type for boolean on/off toggles (#576)
- (rfd) Move initial registry RFD to completed (#706)
- (deps) bump quote from 1.0.44 to 1.0.45 in the minor group (#698)
0.11.0 - 2026-03-04
- (unstable) implementation for unstable session/stop (#583)
- (unstable) implement message id rfd (#581)
- (unstable) Initial support for various auth methods (#588)
- Align struct naming and documentation (#637)
- remove duplicate word typos across docs and source (#606)
- use impl IntoOption for CancelRequestNotification::meta() (#467)
- avoid redundant JSON validation in extension notification decoding (#459)
- Clean up some builder pattern inconsistencies (#635)
- fix incomplete sentence in KillTerminalCommandRequest doc comment (#608)
- (deps) bump the minor group with 2 updates (#563)
- (deps) bump strum from 0.27.2 to 0.28.0 (#564)
- (deps) bump the minor group with 3 updates (#518)
- (deps) bump the minor group with 4 updates (#480)
0.10.8 - 2026-02-04
0.10.7 - 2026-01-15
- (schema) Add missing titles for enum variants in schema (#384)
- (unstable) Add missing session capabilities builder method (#380)
- (unstable) Add copy to SessionConfigOptionCategory (#368)
- (rfd) Session Config Options to Preview stage (#378)
- (deps) bump the minor group with 5 updates (#375)
0.10.6 - 2026-01-09
- (unstable) Add a category to session config options (#366)
- (unstable) Add a request cancelled error constructor (#347)
- (error) Add human readable titles for error code variants (#367)
- (deps) bump the minor group with 2 updates (#362)
- (deps) bump the minor group across 1 directory with 7 updates (#358)
0.10.5 - 2025-12-17
- (unstable) Make constructing SessionConfigSelects on the Rust side nicer (#343)
0.10.4 - 2025-12-16
- (unstable) Draft implementation of session config options (#339)
0.10.3 - 2025-12-15
- (unstable) add SessionInfoUpdate to SessionUpdate enum (#334)
- (rust-only) Introduce MaybeUndefined type to allow for distinguishing between null and undefined (#337)
0.10.2 - 2025-12-11
- (unstable) add cwd and mcp_servers to session/fork (#333)
- (unstable) Draft implementation of session/resume (#324)
0.10.1 - 2025-12-09
- (unstable) Draft implementation of
$/cancel_requestnotification (#303)
- (schema) Add title field back (#321)
0.10.0 - 2025-12-06
This release mostly contains several nice quality-of-life improvements for the Rust version of the schema, as well as an unstable draft implementation of session/fork for people to start trying out.
- (rust-only) More convenient builder method params (#313)
- (unstable) Draft implementation of session/fork (#311)
- (rust-only): Provide nicer interface to
ErrorCodeand add them to the docs (#301)
- (rust) Make new methods consistent for all id params (#306)
0.9.1 - 2025-12-01
- Remove incorrect discriminator on
McpServertype (#292)
0.9.0 - 2025-12-01
This release defines the _meta properties in the schema as intended and currently used, which is always an object of key/value pairs, with string keys and arbitrary values.
While this is how everyone is using them, it became clear in code generation that the types weren't quite matching up to the expected usage. This should alleviate some extra checks on the implementer side.
- [breaking] Provide clearer schema for _meta properties (#290)
0.8.0 - 2025-11-28
Some follow-up changes from 0.7.0. Most of the changes were in the Rust schema to make things a bit easier to work with.
However, there were some further cleanups to the JSON schema to remove some $ref indirection where possible to have the schema be a bit flatter.
There are also some fixes that were causing issues with code generators related to Extension methods, these now have concrete types in the schema as well.
Rust: There are some breaking changes to the OutgoingMessage types and other low-level RPC types to make them generate clearer JSON schema representations. Likely these are only used by SDKs, but they moved to tuple enum variants.
Also, rather than having free-floating V0 and V1 constants, these are now associated constants on the ProtocolVersion type itself.
- Broken doctest and test in CI (#267)
- Remove some nesting of the JSON schema (#278)
- Easier ids in constructors (#275)
- Exhaustive RPC types (#272)
- Easier
newmethods for ExtRequest + ExtNotification (#271) - Protocol Version constants (#270)
- Cleanup Rust example from schema docs (#269)
- Introduce helper methods to get the corresponding method name of a (#268)
This is a big release as we move towards a v1.0 release of the JSON Schema.
This should be the final form, we just want to go through the motions of upgrading all of the SDKs to verify no further changes are needed.
NOTE: The Protocol version is already, and remains, 1. This is just for the JSON Schema itself. There are no breaking changes to the protocol, we just reworked the schema representation to be more compliant with code generation tooling for the various SDKs.
We also now have two variants of the schema attached to the release:
Stable
- schema.json
- meta.json
Unstable
- schema.unstable.json
- meta.unstable.json
As we have more RFD implementations in progress, this will allow us to iterate on the schema without requiring SDKs to churn through the changes.
For SDK authors, it is important if you use the unstable version, to make sure the unstable features are behind a flag of some kind with clear direction to your users about the state of these features. But this will also allow teams to start testing the unstable features and provide feedback to the RFD authors.
The Rust crate, agent-client-protocol-schema has major breaking changes. All exported type are now marked as #[non_exhaustive]. Since the schema itself is JSON, and we can introduce new fields and variants in a non-breaking way, we wanted to allow for the same behavior in the Rust library.
All enum variants are also tuple variants now, with their own structs. This made it nicer to represent in the JSON Schema, and also made sure we have _meta fields on all variants.
This upgrade will likely come with a lot of compilation errors, but ideally upgrading will be more painless in the future.
- Add
discriminatorfields to the schema.json for tagged enums to aid with code generation in language tooling.
Fix incorrectly named _meta field on SetSessionModeResponse
- No changes
- Make
Implementationfields public
- Add ability for agents and clients to provide information about their implementation #192
- JSON Schema: More consistent inlining for enum representations to fix issues with code generation in language tooling.
- Provide more schema-level information about JSON-RPC format.
- Provide missing
_metafields on certain enum variants.
- More consistent enum usage. Enums are always either newtype or struct variants within a single enum, not mixed.
- No changes
- Make id types easier to create and add
PartialEqandEqimpls for as many types as possible.
- No changes
- Export
Resulttype with a default ofacp::Error
- Fix schema publishing
- Fix publishing
- Schema uploaded to GitHub releases
- SDK has moved to https://github.com/agentclientprotocol/rust-sdk
- Start publishing schema types to crates.io: https://crates.io/crates/agent-client-protocol-schema
- No changes
- Fix: support all valid JSON-RPC ids (int, string, null)
- No changes
- Unstable initial support for model selection.
- No changes
- Provide default trait implementations for optional capability-based
AgentandClientmethods.
- Correctly mark capability-based
AgentandClientmethods as optional.
- Defined
Resource not founderror type as code-32002(same as MCP)
- impl
AgentandClientforRc<T>andArc<T>whereTimplements either trait.
Unstable fix missing method for model selection in Rust library.
Unstable initial support for model selection.
No changes.
- Make
AgentandClientdyn compatible (you'll need to annotate them with#[async_trait]) #97 ext_methodandext_notificationmethods are now more consistent with the other trait methods #95- There are also distinct types for
ExtRequest,ExtResponse, andExtNotification
- There are also distinct types for
- Rexport
serde_json::RawValuefor easier use #95