Skip to main content

turbomcp_unix/
lib.rs

1//! # TurboMCP Unix Domain Socket Transport
2//!
3//! Unix domain socket transport implementation for the TurboMCP SDK.
4//!
5//! This crate provides inter-process communication over Unix domain sockets with:
6//!
7//! - **Server Mode**: Accept multiple client connections with automatic handling
8//! - **Client Mode**: Connect to a Unix socket server
9//! - **Bidirectional Communication**: Full-duplex message exchange
10//! - **Backpressure Handling**: Bounded channels prevent memory exhaustion
11//! - **Graceful Shutdown**: Clean task termination and socket cleanup
12//! - **Message Framing**: Uses LinesCodec for reliable newline-delimited JSON
13//!
14//! ## Quick Start
15//!
16//! ### Server Mode
17//!
18//! ```rust,ignore
19//! use turbomcp_unix::{UnixTransport, UnixTransportBuilder};
20//! use turbomcp_transport_traits::Transport;
21//! use std::path::PathBuf;
22//!
23//! #[tokio::main]
24//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
25//!     let transport = UnixTransportBuilder::new_server()
26//!         .socket_path("/tmp/my-mcp.sock")
27//!         .permissions(0o600)
28//!         .build();
29//!
30//!     transport.connect().await?; // Starts listening
31//!     Ok(())
32//! }
33//! ```
34//!
35//! ### Client Mode
36//!
37//! ```rust,ignore
38//! use turbomcp_unix::{UnixTransport, UnixTransportBuilder};
39//! use turbomcp_transport_traits::Transport;
40//!
41//! #[tokio::main]
42//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
43//!     let transport = UnixTransportBuilder::new_client()
44//!         .socket_path("/tmp/my-mcp.sock")
45//!         .build();
46//!
47//!     transport.connect().await?;
48//!     Ok(())
49//! }
50//! ```
51//!
52//! ## v3.0 Modular Architecture
53//!
54//! This crate is part of TurboMCP v3.0's modular transport architecture:
55//!
56//! - **Foundation**: `turbomcp-transport-traits` provides core abstractions
57//! - **Individual Transports**: Each transport (stdio, http, websocket, tcp, unix) is a separate crate
58//! - **Backward Compatibility**: `turbomcp-transport` re-exports all transports
59
60#![warn(
61    missing_docs,
62    missing_debug_implementations,
63    rust_2018_idioms,
64    unreachable_pub,
65    clippy::all
66)]
67#![deny(unsafe_code)]
68#![cfg_attr(docsrs, feature(doc_cfg))]
69#![allow(
70    clippy::module_name_repetitions,
71    clippy::missing_errors_doc,
72    clippy::must_use_candidate,
73    clippy::return_self_not_must_use,
74    clippy::missing_panics_doc,
75    clippy::default_trait_access
76)]
77
78mod transport;
79
80pub use transport::{UnixConfig, UnixTransport, UnixTransportBuilder};
81
82// Re-export transport traits for convenience
83pub use turbomcp_transport_traits::{
84    AtomicMetrics, Transport, TransportCapabilities, TransportError, TransportMessage,
85    TransportMetrics, TransportResult, TransportState, TransportType,
86};