feat(unstable): make MCP-over-ACP request-scoped - #2223
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft: MCP 2026-07-28 only
Replace the connection-oriented MCP-over-ACP proposal with the request-scoped design exercised by the Rust SDK. No legacy MCP compatibility mode is planned. Supersedes the design/audit checkpoint in #2222.
Companion implementation: agentclientprotocol/rust-sdk#376
Wire contract
RFD
The proposal now distinguishes reusable application services from individual owned operations, defines registration identity/lifetime and error domains, and makes cleanup and resource admission explicit. The logical ID remains admitted until owned cleanup finishes. It preserves modern discovery, MRTR, and subscription semantics without an MCP handshake.
The HTTP section describes a new local endpoint re-exporting native tools: one authenticated connection listener, no hidden descriptor lookups, and schema-aware removal of HTTP-only parameter-header annotations. It does not claim to preserve another gateway's authorization policy.
The reference implementation includes a deterministic cleanup regression for both mutable and concurrent tools: pause the runner while ACP continues dispatching, prove cancellation cannot settle or release its logical ID, then allow cleanup and reuse the ID. Real rmcp tests cover native and HTTP workflows; transport tests cover bounded queues, retained replies, cancellation, and EOF draining.
Latest review follow-ups
mcp/messagename. JSON-RPC message kind and direction distinguish requests from notifications; the inner MCP method remains unchanged. The companion SDK now has three regression tests for outer-ID discrimination, separate v1/v2 method enums, and rejection of malformed request IDs without notification fallback.npm run check, the targeted SDK deserialization tests, and strict workspace Clippy.Validation
npm run checkpassed: schema/generator tests, doctests, Clippy, formatting, and spellcheck.Release gates
This remains an unstable protocol draft, not certification of every optional MCP/HTTP feature. The Rust SDK's cancellation and joined-cleanup safeguards are implementation behavior, not an additional requirement for advertising the transport. The SDK currently pins schema revision
e5c36d2671fd355f983533bc83b5feb7981d25a6; release the matching schema and coordinate dependent SDK major versions before replacing that pin and publishing packages. No packages were published.