Skip to content

g06.033 — Claude Agent ACP consumer HTTP MCP wiring - #375

Merged
betterthanclay merged 4 commits into
mainfrom
ns-c25fac35-61d6-4ef8-9e57-c8a571b40248
Sep 25, 2026
Merged

betterthanclay merged 4 commits into
mainfrom
ns-c25fac35-61d6-4ef8-9e57-c8a571b40248

Conversation

@betterthanclay

Copy link
Copy Markdown
Contributor

Summary

  • Wire Contract 063's consumer-supplied streamable-HTTP MCP placement into claude-agent.acp production session/new under the reserved name swallowtail-claude-agent-acp.
  • Facade: bind ClaudeAgentAcpRemoteMcpPlacement on ClaudeAgentSessionProfileInput (and the low-level driver). Encoding emits { type: "http", name, url, headers: [{name, value}] } verbatim. Public encoder is ClaudeAgentAcpEncodedMcpServers (Debug redacts URL and header values); wire JSON stays crate-private. Omission keeps mcpServers: []. Load/resume still send []. SSE stays modelled and is refused before session/new. The Contract 061 projection names consumer-supplied-http only when HTTP is bound.
  • Research 351 claude-agent.acp at 0.79.0 is a direct-http-candidate with mcpCapabilities {http:true,sse:true}; the provider map has no gate. Typed outcomes: valid HTTP (empty headers allowed) is admitted; sse fails closed as mcp_sse_not_emitted; a foreign name fails as mcp_name_collision; a bad URL or header name fails as mcp_http_invalid. Emission is not honouring: client_mcp_servers stays No.

Test plan

  • cargo fmt -p swallowtail-adapter-claude-agent -- --check
  • effigy validate:focused swallowtail-adapter-claude-agent
  • effigy package:verify-affected swallowtail-adapter-claude-agent
  • effigy qa:routes
  • effigy qa:docs
  • git diff --check

Made with Cursor

Contract 063 admitted the URL-plus-header placement; emit the ACP http form verbatim under the route-owned name, keep sse modelled, and leave live honouring gated.

Co-authored-by: Cursor <cursoragent@cursor.com>
@betterthanclay

Copy link
Copy Markdown
Contributor Author

Changes required

  1. [P1] Align the Claude ACP matrix classification with the task’s live-gate state — docs/guides/provider-solution-feature-matrix.csv:5 (claude-agent.acp, client_mcp_servers). The row still classifies this cell as provider_limitation and points to docs/research/290-feature-matrix-cross-evidence.tsv#L69. Research 351 establishes that provider 0.79.0 accepts HTTP MCP entries with headers, and this PR now emits a validated HTTP entry. The g06.033 task requires the unavailable cell to remain a producer gap naming the live gate. Update cross_kind and cross_ref to match that task state, while keeping the cell No until a live gate proves a tool call. As written, the matrix classification and evidence reference contradict the row’s updated notes and the implementation. effigy qa:routes passes, but it checks structural consistency and does not catch this task-level mismatch.

Reviewed head: 12c1922.

Validation: cargo fmt -p swallowtail-adapter-claude-agent -- --check, effigy package:verify-affected swallowtail-adapter-claude-agent, effigy qa:routes, effigy qa:docs, and git diff --check passed. All hosted PR checks passed, including both stable nextest shards. The local effigy validate:focused swallowtail-adapter-claude-agent run did not complete: it stalled for over four minutes in the existing unrelated test claude_agent_sdk_driver::framing::events_outside_an_active_turn_fail_closed, so I stopped that local run. The exact head remained clean.

Research 351 and this wiring remove the adapter pin; the cell stays No because live honouring is unbuilt, not because the provider rejects HTTP.

Co-authored-by: Cursor <cursoragent@cursor.com>
@betterthanclay

Copy link
Copy Markdown
Contributor Author

Ready to merge

Reviewed exact head 0cc8d9a. No blocking findings remain. The client_mcp_servers cell stays No, its cross classification is now producer_gap, and its reference points to the open g06.033 task as required. The guide and changelog describe the same unqualified live-honouring state.

Validation at this head: effigy qa:routes, effigy qa:docs, and git diff --check passed. This revision changes documentation and roadmap status only; implementation files are unchanged from 12c1922, where package verification and all hosted CI checks passed. No hosted checks are currently reported for the revised SHA. The workspace is clean at the expected head.

betterthanclay and others added 2 commits September 25, 2026 01:11
Keep the claude-agent.acp Unreleased entry beside the merged copilot-cli and kiro HTTP MCP notes.

Co-authored-by: Cursor <cursoragent@cursor.com>
Keep the claude-agent.acp Unreleased entry beside the merged goose entry.

Co-authored-by: Cursor <cursoragent@cursor.com>
@betterthanclay

Copy link
Copy Markdown
Contributor Author

Ready to merge

Reviewed exact head 23addb7 against the current PR base. No blocking findings remain. The merge commits bring sibling lanes into the branch history, but the actual PR diff against current main remains scoped to g06.033's Claude Agent ACP implementation, guide, matrix, changelog, task status, and public API baseline.

The previous matrix finding is fixed: client_mcp_servers remains No, is classified as producer_gap, and references the open g06.033 task. Its notes and the guide/changelog state that live honouring remains unproven.

Validation at this head passed: effigy qa:routes, effigy qa:docs, effigy package:verify-affected swallowtail-adapter-claude-agent, and git diff --check. All hosted PR checks passed, including stable format/lint, both stable nextest shards, process-spawning nextest, documentation/API, route contracts, and MSRV floor. The exact-head workspace is clean.

@betterthanclay
betterthanclay merged commit 9a93f52 into main Sep 25, 2026
11 checks passed
betterthanclay added a commit that referenced this pull request Sep 25, 2026
The g06.033 worker added a Status line to the pinned card in #375; the
closeout hook refuses unreported task-file mutations.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant