Skip to main content

StdioClientTransport

Struct StdioClientTransport 

Source
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

Source

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.

Source

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?;
Source

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

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,

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,

Receive the next raw JSON message from the server. Read more
Source§

fn is_connected(&self) -> bool

Check if the transport is still connected.
Source§

fn close<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Close the transport gracefully. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more