Skip to main content

turbomcp_stdio/
lib.rs

1//! # TurboMCP STDIO Transport
2//!
3//! Standard I/O transport implementation for the TurboMCP Model Context Protocol SDK.
4//! This transport uses stdin/stdout for communication, which is the standard way
5//! MCP servers communicate with clients.
6//!
7//! ## MCP Specification Compliance
8//!
9//! This implementation is **fully compliant** with the MCP stdio transport specification:
10//!
11//! - **Newline-delimited JSON**: Uses `LinesCodec` for proper message framing
12//! - **No embedded newlines**: Validates messages don't contain `\n` or `\r` characters
13//! - **UTF-8 encoding**: All messages are UTF-8 encoded (enforced by `std::str::from_utf8`)
14//! - **stderr for logging**: Uses `tracing` crate which outputs to stderr by default
15//! - **Bidirectional communication**: Supports both client→server and server→client messages
16//! - **Valid JSON only**: Validates all messages are well-formed JSON before sending
17//!
18//! Per MCP spec: "Messages are delimited by newlines, and **MUST NOT** contain embedded newlines."
19//!
20//! ## Usage
21//!
22//! ```rust,ignore
23//! use turbomcp_stdio::StdioTransport;
24//! use turbomcp_transport_traits::Transport;
25//!
26//! #[tokio::main]
27//! async fn main() {
28//!     let transport = StdioTransport::new();
29//!     transport.connect().await.unwrap();
30//!
31//!     // Send and receive messages...
32//! }
33//! ```
34
35#![warn(
36    missing_docs,
37    missing_debug_implementations,
38    rust_2018_idioms,
39    unreachable_pub,
40    clippy::all
41)]
42#![deny(unsafe_code)]
43#![cfg_attr(docsrs, feature(doc_cfg))]
44#![allow(
45    clippy::module_name_repetitions,
46    clippy::missing_errors_doc,
47    clippy::must_use_candidate
48)]
49
50mod transport;
51
52pub use transport::{StdioTransport, StdioTransportFactory};
53
54// Re-export common types for convenience
55pub use turbomcp_transport_traits::{
56    Transport, TransportCapabilities, TransportConfig, TransportError, TransportFactory,
57    TransportMessage, TransportMetrics, TransportResult, TransportState, TransportType,
58};