Struct ServerStdioTransport

Source
pub struct ServerStdioTransport { /* private fields */ }
Expand description

Server transport that communicates with MCP clients over standard I/O.

The ServerStdioTransport uses standard input and output streams (stdin/stdout) to send and receive MCP messages. This transport is ideal for command-line applications, where the server needs to communicate with a client that launched it as a child process.

Use cases include:

  • CLI tools that implement MCP
  • Embedding MCP in existing command-line applications
  • Testing and development scenarios

§Example

use mcp_core::{protocol::Protocol, transport::{ServerStdioTransport, Transport}};

async fn example() {
    let protocol = Protocol::builder().build();
    let transport = ServerStdioTransport::new(protocol);
    // Start handling messages
    transport.open().await.expect("Failed to start stdio server");
}

Implementations§

Source§

impl ServerStdioTransport

Source

pub fn new(protocol: Protocol) -> Self

Creates a new ServerStdioTransport instance.

§Arguments
  • protocol - The MCP protocol instance to use for handling messages
§Returns

A new ServerStdioTransport instance

Trait Implementations§

Source§

impl Clone for ServerStdioTransport

Source§

fn clone(&self) -> ServerStdioTransport

Returns a duplicate of the value. Read more
1.0.0 · Source§

const fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Transport for ServerStdioTransport

Source§

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

Opens the transport and starts processing messages.

This method enters a loop that:

  1. Polls for incoming messages from stdin
  2. Processes each message according to its type (request, notification, response)
  3. Sends responses as needed
  4. Continues until EOF is received on stdin
§Returns

A Result indicating success or failure

Source§

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

Closes the transport.

This is a no-op for the stdio transport as standard I/O streams are managed by the OS.

§Returns

A Result indicating success

Source§

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

Polls for incoming messages from stdin.

This method reads a line from stdin and parses it as a JSON-RPC message.

§Returns

A Result containing an Option<Message>. None indicates EOF.

Source§

fn request( &self, method: &str, params: Option<Value>, options: RequestOptions, ) -> Pin<Box<dyn Future<Output = Result<JsonRpcResponse>> + Send + Sync>>

Sends a request to the client and waits for a response.

This method:

  1. Creates a new request ID
  2. Constructs a JSON-RPC request
  3. Sends it to stdout
  4. Waits for a response with the same ID, with a timeout
§Arguments
  • method - The method name for the request
  • params - Optional parameters for the request
  • options - Request options (like timeout)
§Returns

A Future that resolves to a Result containing the response

Source§

fn send_notification<'life0, 'life1, 'async_trait>( &'life0 self, method: &'life1 str, params: Option<Value>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Sends a notification to the client.

This method constructs a JSON-RPC notification and writes it to stdout. Unlike requests, notifications do not expect a response.

§Arguments
  • method - The method name for the notification
  • params - Optional parameters for the notification
§Returns

A Result indicating success or failure

Source§

fn send_response<'life0, 'async_trait>( &'life0 self, id: RequestId, result: Option<Value>, error: Option<JsonRpcError>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Sends a response to the client.

This method constructs a JSON-RPC response and writes it to stdout.

§Arguments
  • id - The ID of the request being responded to
  • result - Optional successful result
  • error - Optional error information
§Returns

A Result indicating success or failure

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T