mcp-transports-are-reliable — Každý transport MCP doručí každý požadavek nejvýše jednou, omezuje to, co nese, a respektuje zrušení
Klient dostane každou odpověď jednou, nebo se dozví, že výsledek je neznámý, může zrušit, co spustil, nemůže jednou zprávou vyčerpat server a najde svou spouštěcí konfiguraci vygenerovanou z deklarace providera a diagnostikovanou jejím parsováním.
AKTIVNÍ 2 ze 3 úkolů hotovo
- připraveno
- 1
- blokováno
- 0
- aktivní
- 0
- verify
- 0
- hotovo
- 2
- zrušeno
- 0
Problém
Projekce MCP je už jeden průchod registrem: nástroje a zdroje pocházejí z apps/majordomus-cli/src/mcp/surface.rs:367-394, anotace z deklarovaného efektu (apps/majordomus-cli/src/mcp/protocol.rs:446-456), drženo apps/majordomus-cli/tests/projections.rs:26, apps/majordomus-cli/tests/mcp_conformance.rs a případem 940. Premisa balíku, že MCP vede nezávislé seznamy, je vyvrácena. Vadou je transport. Most stdio znovu odesílá totéž tools/call po timeoutu 60 s nebo po jakémkoli 4xx kromě 404 (apps/majordomus-cli/src/mcp/bridge.rs:25,352; apps/majordomus-cli/src/commands/mcp.rs:283,301), takže pomalý zapisovač může běžet dvakrát. notifications/cancelled se zahazuje (apps/majordomus-cli/src/mcp/protocol.rs:234-238) a stejně by se nedalo přeposlat, protože most je sekvenční pod mutexem (apps/majordomus-cli/src/commands/mcp.rs:218). Řádky stdin a odpovědi mostu jsou neomezené (apps/majordomus-cli/src/mcp/stdio.rs:40, apps/majordomus-cli/src/mcp/bridge.rs:85); koncový bod Streamable HTTP ignoruje MCP-Protocol-Version, vydává předvídatelná id relací (apps/majordomus-cli/src/http/mcp.rs:159) a může uklidit relaci, jejíž požadavek stále běží (apps/majordomus-cli/src/http/mcp.rs:138). Konfigurace spuštění poskytovatelů jsou psány ručně a diagnostikovány podle podřetězce (apps/majordomus-cli/src/capability/builtin/mcp.rs:394-399). Změřeno v základním auditu runtime z 2026-10-09 na master 1fb8d6be44 (plan/RUNTIME_BASELINE.md).
Výsledek
Klient dostane každou odpověď jednou, nebo se dozví, že výsledek je neznámý, může zrušit, co spustil, nemůže jednou zprávou vyčerpat server a najde svou spouštěcí konfiguraci vygenerovanou z deklarace providera a diagnostikovanou jejím parsováním.
Aktuální stav
Implementováno a otestováno: hygiena stdout (apps/majordomus-cli/tests/mcp_stdio.rs), špatně utvořený provoz (apps/majordomus-cli/tests/mcp_conformance.rs::malformed_traffic_is_answered_and_the_session_survives), izolace relací přes HTTP (apps/majordomus-cli/tests/mcp_conformance_http.rs), vyjednání protokolu (apps/majordomus-cli/src/mcp/protocol.rs:71). Chybí: idempotence při opakovaném odeslání, zrušení, symetrické meze, hlavička verze, generované konfigurace klientů. Autorizace zapisovatelů a praní účinků přes executions.start pro vzdálené volající jsou I2123 (runtime-trust).
Cílový stav
Všechny řádky MCP v auditu jsou I v plan/RUNTIME_BASELINE.md, každý s testem skutečného procesu: zapisovač, který vypršel, běží jednou, zrušené volání se zastaví, příliš velká zpráva je odmítnuta se svou skutečnou příčinou, dlouhý požadavek není sklizen, konfigurace Codexu bez své tabulky je hlášena jako nezapojená.
Rozsah
- apps/majordomus-cli/src/mcp
- apps/majordomus-cli/src/commands/mcp.rs
- apps/majordomus-cli/src/http/mcp.rs
- apps/majordomus-cli/src/http/server.rs
- apps/majordomus-cli/src/execution/engine.rs
- apps/majordomus-cli/src/capability/builtin/mcp.rs
- share/providers.yaml
- lib/update.sh
- .mcp.json
- .gemini/settings.json
- .codex/config.toml
- apps/majordomus-cli/tests/
- test/cases
- docs/MCP.md
Mimo rozsah
- Proud GET/SSE na endpointu Streamable HTTP; docs/MCP.md dokumentuje jeho absenci a žádný zdejší klient jej nepotřebuje.
- Autorizace a vzdálení volající, což je I2123.
- Druhý seznam nástrojů nebo metadata schopností specifická pro MCP; registr zůstává jediným zdrojem.
Kritéria přijetí
- Volání nástroje s mutací, které přetrvá déle než timeout mostu, se provede právě jednou
- notifications/cancelled zastaví běžící volání v mezích
- Jedna deklarovaná mez zprávy platí pro stdin, těla požadavků a odpovědi mostu, každá s testem o jeden bajt nad ní
- Tři konfigurace spouštění klientů jsou generované a jejich diagnostika je parsuje
Validace
- bin/majordomus plan validate
- cargo test --test mcp_shared --test mcp_conformance --test mcp_conformance_http --test shared_units --test providers_projection
- MJ_TEST_JOBS=4 bash test/run.sh 620_mcp_tools_are_invoked_and_answer 940_mcp_says_nothing_its_capability_does_not
Požadované důkazy
- at_most_once_tool_calls
- cancellation_test
- transport_bounds_tests
Rizika
- Claude Code kdysi na měsíc zahodil každý nástroj tohoto serveru kvůli jednomu detailu schématu; jakákoli změna odpovědi initialize nebo výpisu nástrojů vyžaduje zelený test přijetí klientem (apps/majordomus-cli/tests/mcp_conformance.rs::every_listed_tool_is_one_a_client_accepts).
- Odpověď 'výsledek neznámý' místo opětovného odeslání přesouvá rozhodnutí na klienta; text chyby musí říct, co zkontrolovat.
Úkoly
Každý z nich je prováděcí kontrakt s vlastními kritérii přijetí, validačním příkazem a požadovanými důkazy. Sloupec wave je vrstva grafu závislostí, v níž úkol leží.
| issue | status | vlna | závisí na | název |
|---|---|---|---|---|
| I2145 | HOTOVO | 0 | — | Volání nástroje, které mohlo proběhnout, se nikdy neodešle podruhé |
| I2147 | HOTOVO | 0 | — | Transporty MCP omezují, co čtou, a dodržují pravidla Streamable HTTP, ke kterým se hlásí |
| I2840 | PŘIPRAVENO | 0 | — | Zrušené volání MCP se zastaví a klient se dozví, že se zastavilo |
Graf
flowchart LR
I2145["I2145<br/>A tool call that may have run is never sent a second time"]:::done
I2147["I2147<br/>The MCP transports bound what they read and follow the Streamable HTTP rules they claim"]:::done
I2840["I2840<br/>A cancelled MCP call stops, and the client is told it stopped"]:::ready
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxKanonický záznam: .ai/repo/project/milestones/mcp-transports-are-reliable.yaml. Načtěte ho zpět pomocí majordomus plan show mcp-transports-are-reliable.