diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index e9adce4..0499ac9 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -47,7 +47,25 @@ chacha20poly1305 = "0.10" getrandom = "0.2" zeroize = "1" # wipe key material from memory on lock keyring = { version = "3", optional = true, features = ["windows-native"] } # OS credential store (sync + AI creds); windows-native = real Credential Manager (else keyring 3.x uses a no-op mock store) -rmcp = { version = "0.16", optional = true, features = ["server"] } # MCP server (ADR-0011) +# MCP server (ADR-0011). `client`/`transport-streamable-http-client-reqwest` +# are only ever constructed by this crate's own in-process tests (an actual +# MCP client talking to our loopback server) -- WA never opens an outbound +# MCP connection at runtime, so this adds no egress (FR-MCP-7). +rmcp = { version = "0.16", optional = true, features = [ + "server", "transport-streamable-http-server", "transport-io", + "client", "transport-streamable-http-client-reqwest", +] } +# Low-level HTTP glue for the Streamable HTTP transport: `rmcp`'s +# `StreamableHttpService` is a bare `tower_service::Service`, so something has +# to actually accept TCP connections and run HTTP/1 on top of it. All four +# versions are already in Cargo.lock transitively (via reqwest/tauri), so this +# just promotes them to direct deps -- no new crates. +hyper = { version = "1", optional = true, features = ["server", "http1"] } +hyper-util = { version = "0.1", optional = true, features = ["tokio"] } +http-body-util = { version = "0.1", optional = true } +http = { version = "1", optional = true } +bytes = { version = "1", optional = true } +tower-service = { version = "0.3", optional = true } # audio / transcription / diarization / calendar are integrated per-phase and are # feature-gated so the CPU-only build always compiles (NFR-MNT-4). @@ -106,7 +124,10 @@ pst = [] # shells out to readpst (libpst) — no cra # Phase 9 sync = ["dep:keyring"] # remote upload (WebDAV + OAuth providers) # Phase 10 -mcp = ["dep:rmcp", "dep:keyring"] # WhispAssist as an MCP server + hosted-AI creds +mcp = [ + "dep:rmcp", "dep:keyring", "dep:hyper", "dep:hyper-util", + "dep:http-body-util", "dep:http", "dep:bytes", "dep:tower-service", +] # WhispAssist as an MCP server + hosted-AI creds [profile.release] opt-level = "z" # optimize for size — keep the binary small (NFR-RES-1)