Skip to main content

turbomcp_tcp/
lib.rs

1//! # TurboMCP TCP Transport
2//!
3//! TCP socket transport implementation for the TurboMCP SDK.
4//! This crate provides newline-delimited JSON-RPC communication over TCP sockets.
5//!
6//! ## Features
7//!
8//! - **Server Mode**: Accept multiple client connections with automatic handling
9//! - **Client Mode**: Connect to a remote TCP server
10//! - **Bidirectional Communication**: Full-duplex message exchange
11//! - **Backpressure Handling**: Bounded channels prevent memory exhaustion
12//! - **Graceful Shutdown**: Clean task termination on disconnect
13//! - **Message Framing**: Uses LinesCodec for reliable newline-delimited JSON
14//!
15//! ## Quick Start
16//!
17//! ### Server Mode
18//!
19//! ```rust,ignore
20//! use turbomcp_tcp::{TcpTransport, TcpTransportBuilder};
21//! use turbomcp_transport_traits::Transport;
22//! use std::net::SocketAddr;
23//!
24//! #[tokio::main]
25//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
26//!     let addr: SocketAddr = "127.0.0.1:8080".parse()?;
27//!     let transport = TcpTransportBuilder::new()
28//!         .bind_addr(addr)
29//!         .build();
30//!
31//!     transport.connect().await?; // Starts listening
32//!     Ok(())
33//! }
34//! ```
35//!
36//! ### Client Mode
37//!
38//! ```rust,ignore
39//! use turbomcp_tcp::{TcpTransport, TcpTransportBuilder};
40//! use turbomcp_transport_traits::Transport;
41//! use std::net::SocketAddr;
42//!
43//! #[tokio::main]
44//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
45//!     let bind_addr: SocketAddr = "127.0.0.1:0".parse()?;
46//!     let remote_addr: SocketAddr = "127.0.0.1:8080".parse()?;
47//!
48//!     let transport = TcpTransportBuilder::new()
49//!         .bind_addr(bind_addr)
50//!         .remote_addr(remote_addr)
51//!         .build();
52//!
53//!     transport.connect().await?;
54//!     Ok(())
55//! }
56//! ```
57
58#![warn(
59    missing_docs,
60    missing_debug_implementations,
61    rust_2018_idioms,
62    unreachable_pub,
63    clippy::all
64)]
65#![deny(unsafe_code)]
66#![cfg_attr(docsrs, feature(doc_cfg))]
67#![allow(
68    clippy::module_name_repetitions,
69    clippy::missing_errors_doc,
70    clippy::must_use_candidate
71)]
72
73mod transport;
74
75pub use transport::{TcpConfig, TcpTransport, TcpTransportBuilder};
76
77// Re-export transport traits for convenience
78pub use turbomcp_transport_traits::{
79    AtomicMetrics, Transport, TransportCapabilities, TransportError, TransportMessage,
80    TransportMetrics, TransportResult, TransportState, TransportType,
81};