--- id: adapter-mcp name: from_mcp + to_mcp (mcp feature) status: pending depends_on: [client-http-host, gateway-routes] scope: broad risk: medium impact: component level: implementation tags: [adapters, mcp, phase-3] --- ## Description Port both MCP adapters from `/workspace/@alkdev/alknet/crates/alknet-http/src/adapters/{from_mcp/`, `to_mcp.rs}` behind the `mcp` feature (rmcp, streamable HTTP only — ADR-037). from_mcp: tools/list discovery, per-tool HandlerRegistration (Mutation, HandlerKind::Once, FromMCP leaf), structuredContent-preferred output handling, ContentBlock-union fallback, isError→CallError. to_mcp: 4 fixed gateway tools (search/schema/call/batch — Sub AND Pub excluded), StreamableHttpService into axum under /mcp with bearer middleware. Shared dispatch spine with to_openapi via GatewayDispatch. ## Acceptance Criteria - [ ] Both adapters behind `mcp`; default features compile without rmcp - [ ] from_mcp round-trip against a mock MCP server (tools/list, tools/call, structured + content-block outputs) - [ ] to_mcp: 4 tools listed; call dispatch filtered by ACL; Pub/Sub ops excluded - [ ] stdio transport not present anywhere (dependency audit) - [ ] `cargo test --all-features` passes ## References - docs/architecture/http-mcp.md - docs/architecture/decisions/037-mcp-stdio-transport-exclusion.md, 041-mcp-tool-gateway-pattern.md - Old source: `/workspace/@alkdev/alknet/crates/alknet-http/src/adapters/from_mcp/`, `to_mcp.rs`, `tests/from_mcp_integration.rs` ## Notes > Agent fills during implementation. ## Summary > Agent fills on completion.