pub struct StdioClientTransport { /* private fields */ }Expand description
Client transport that communicates with a subprocess via stdio.
Spawns a child process and communicates using line-delimited JSON-RPC messages over stdin (write) and stdout (read). Stderr is inherited so server debug output appears in the client’s terminal.
Implementations§
Source§impl StdioClientTransport
impl StdioClientTransport
Sourcepub async fn spawn(program: &str, args: &[&str]) -> Result<Self>
pub async fn spawn(program: &str, args: &[&str]) -> Result<Self>
Spawn a new subprocess and connect to it.
§Errors
Returns an error if the process fails to spawn or if stdin/stdout handles cannot be acquired.
Sourcepub async fn spawn_command(cmd: &mut Command) -> Result<Self>
pub async fn spawn_command(cmd: &mut Command) -> Result<Self>
Spawn from a pre-configured Command.
This allows setting environment variables, working directory, and other process configuration before spawning.
Stdin and stdout are automatically set to piped. Stderr is set to inherited unless already configured.
§Example
use tokio::process::Command;
use tower_mcp::client::StdioClientTransport;
let mut cmd = Command::new("npx");
cmd.args(["-y", "@modelcontextprotocol/server-github"])
.env("GITHUB_TOKEN", "ghp_...");
let transport = StdioClientTransport::spawn_command(&mut cmd).await?;Sourcepub fn from_child(child: Child) -> Result<Self>
pub fn from_child(child: Child) -> Result<Self>
Create from an existing child process.
The child must have piped stdin and stdout.
Trait Implementations§
Source§impl ClientTransport for StdioClientTransport
impl ClientTransport for StdioClientTransport
Source§fn send<'life0, 'life1, 'async_trait>(
&'life0 mut self,
message: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn send<'life0, 'life1, 'async_trait>(
&'life0 mut self,
message: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Send a raw JSON message to the server. Read more
Source§fn recv<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn recv<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Receive the next raw JSON message from the server. Read more
Source§fn is_connected(&self) -> bool
fn is_connected(&self) -> bool
Check if the transport is still connected.
Auto Trait Implementations§
impl Freeze for StdioClientTransport
impl !RefUnwindSafe for StdioClientTransport
impl Send for StdioClientTransport
impl Sync for StdioClientTransport
impl Unpin for StdioClientTransport
impl UnsafeUnpin for StdioClientTransport
impl !UnwindSafe for StdioClientTransport
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more