build(mcp): pull in the HTTP/stdio transport features (T10.4)

rmcp gains transport-streamable-http-server + transport-io (the actual
serving code -- the base "server" feature only got tool routing) plus
client + transport-streamable-http-client-reqwest, used solely by this
crate's own in-process MCP-client tests (WA never opens an outbound MCP
connection at runtime, so this is not new egress, FR-MCP-7). hyper/
hyper-util/http-body-util/http/bytes/tower-service are the low-level glue
to run HTTP/1 over a loopback TcpListener in front of rmcp's
StreamableHttpService (a bare tower_service::Service, not an axum app).
All are already in Cargo.lock transitively via reqwest/tauri -- no new
crates, just promoted to direct deps under the existing `mcp` feature.
This commit is contained in:
iamdoubz committed 2026-07-07 00:19:15 -05:00
1 parent 14868d4e5c
commit c48c67760d
1 file changed
+23 -2
+23 -2
View File
@@ -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)