transport::stdio() runs every read and write on tokio's blocking pool, which caps stdio throughput
I maintainer di solito rispondono entro 3 giorni
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 58/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- rust
- Ambito
- networking, performance
Direzione di ricerca
Start by locating the implementation of rmcp::transport::stdio() and review how its Tokio stdin and stdout handles perform reads and writes. Run the Carmy comparison harness linked in the issue, then verify that a pipe-based path improves throughput while retaining the current fallback for TTYs, files, and Windows.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
rmcp::transport::stdio() returns (tokio::io::Stdin, tokio::io::Stdout). In tokio, each read
from and write to these handles goes through the blocking thread pool, so every message pays a
cross-thread hand-off. Under concurrent tools/call, a profile of an rmcp stdio server
shows most of its time in __psynch_mutexwait / cvsignal, not in actual work.
When the server's stdin and stdout are pipes, which is how MCP clients launch servers,
readiness-driven pipes avoid the hand-off:
use std::os::fd::AsFd;
use tokio::net::unix::pipe;
let stdin = std::io::stdin().as_fd().try_clone_to_owned()?;
let stdout = std::io::stdout().as_fd().try_clone_to_owned()?;
// Both fail unless the descriptors are FIFOs; fall back to transport::stdio() then.
let transport = (pipe::Receiver::from_owned_fd(stdin)?, pipe::Sender::from_owned_fd(stdout)?);
The fallback keeps TTYs, files and Windows on the current path.
Numbers: the same trivial tool, 32 concurrent callers over one stdio connection, on an
Apple M3 Pro. Reproducible harness:
https://github.com/igorvieira/Carmy/tree/main/benches/compare
| server | throughput |
|---|---|
rmcp 3.4 with transport::stdio() |
~41k req/s |
the same rmcp server over tokio::net::unix::pipe |
~86k req/s |
@modelcontextprotocol/sdk (TypeScript), for reference |
~73k req/s |
Would a pipe-based fast path in transport::stdio(), or a separate stdio_pipes()
constructor, be welcome? I'm happy to send a PR.
- Lingua principale
- Rust
- Stelle
- 4k
- Fork
- 654
- Merge medio
- 4g 3h
- PR unite (30g)
- 40
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di modelcontextprotocol/rust-sdk
-
P3 question T-documentation T-enhancement
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
modelcontextprotocol/rust-sdk#1155 ·
I maintainer di solito rispondono entro 3 giorni
-
LocalSessionManager session workers don't cancel in-flight tool calls on client disconnect (follow-up to #857)Forse già presa @kkkhs l’ha presa oggi. Apertabug P1 ready for work T-transport
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
modelcontextprotocol/rust-sdk#1325 ·
I maintainer di solito rispondono entro 3 giorni
-
streamable-http server: client responses to server-initiated requests (sampling/elicitation/roots) are 202-accepted and silently discarded under the 2026-07-28 protocol — the pending request hangs foreverForse già presa @DaleSeo l’ha presa oggi. Apertabug P1 ready for work T-transport
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
modelcontextprotocol/rust-sdk#1321 · 1 reazione · 1 assegnatario ·
I maintainer di solito rispondono entro 3 giorni
-
Bound pre-lifecycle bootstrap attempts in server initializationForse già presa @DaleSeo l’ha presa 4 giorni fa. Apertaenhancement P2 T-service T-transport
modelcontextprotocol/rust-sdk#1315 · 1 assegnatario ·
I maintainer di solito rispondono entro 3 giorni
-
ProgressDispatcher: a slow progress subscriber blocks subscribe() and delivery for other tokensForse già presa @monody0007 l’ha presa 8 giorni fa. Apertabug P1 ready for work T-handler
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
modelcontextprotocol/rust-sdk#1312 ·
I maintainer di solito rispondono entro 3 giorni
Tutte le issue di modelcontextprotocol/rust-sdk
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
rubys/roundhouse#571 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
documentation
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
fastrevmd-lab/rustmistmcp#161 ·
-
arch-audit refactor
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
SocketDev/socket-patch#1011 ·
I maintainer di solito rispondono entro 1 giorno