McpHttpHandler

Struct McpHttpHandler 

Source
pub struct McpHttpHandler { /* private fields */ }

Implementations§

Source§

impl McpHttpHandler

Source

pub fn new( auth: Option<Arc<dyn AuthProvider>>, middlewares: Vec<Arc<dyn Middleware>>, ) -> Self

Source

pub fn add_middleware<M: Middleware + 'static>(&mut self, middleware: M)

Source

pub fn create_request( method: Method, uri: Uri, headers: HeaderMap, body: Option<&str>, ) -> Request<&str>

An http::Request<&str> initialized with the specified method, URI, headers, and body. If the body is None, an empty string is used as the default.

Source§

impl McpHttpHandler

Source§

impl McpHttpHandler

Source

pub async fn handle_sse_connection( &self, request: Request<&str>, state: Arc<McpAppState>, sse_message_endpoint: Option<&str>, ) -> TransportServerResult<Response<GenericBody>>

Handles an MCP connection using the SSE (Server-Sent Events) transport.

This function serves as the entry point for initializing and managing a client connection over SSE when the sse feature is enabled.

§Arguments
  • state - Shared application state required to manage the MCP session.
  • sse_message_endpoint - Optional message endpoint to override the default SSE route (default: /messages ).
§Features

This function is only available when the sse feature is enabled.

Source

pub async fn handle_sse_message( &self, request: Request<&str>, state: Arc<McpAppState>, ) -> TransportServerResult<Response<GenericBody>>

Handles incoming MCP messages from the client after an SSE connection is established.

This function processes a message sent by the client as part of an active SSE session. It:

  • Extracts the sessionId from the request query parameters.
  • Locates the corresponding session’s transmit channel.
  • Forwards the incoming message payload to the MCP transport stream for consumption.
§Arguments
  • request - The HTTP request containing the message body and query parameters (including sessionId).
  • state - Shared application state, including access to the session store.
§Returns
  • TransportServerResult<http::Response<GenericBody>>:
    • Returns a 202 Accepted HTTP response if the message is successfully forwarded.
    • Returns an error if the session ID is missing, invalid, or if any I/O issues occur while processing the message.
§Errors
  • SessionIdMissing: if the sessionId query parameter is not present.
  • SessionIdInvalid: if the session ID does not map to a valid session in the session store.
  • StreamIoError: if an error occurs while writing to the stream.
  • HttpError: if constructing the HTTP response fails.
Source

pub async fn handle_streamable_http( &self, request: Request<&str>, state: Arc<McpAppState>, ) -> TransportServerResult<Response<GenericBody>>

Handles incoming MCP messages over the StreamableHTTP transport.

It supports GET, POST, and DELETE methods for handling streaming operations, and performs optional DNS rebinding protection if it is configured.

§Arguments
  • request - The HTTP request from the client, including method, headers, and optional body.
  • state - Shared application state, including configuration and session management.
§Behavior
  • If DNS rebinding protection is enabled via the app state, the function checks the request headers. If dns protection fails, a 403 Forbidden response is returned.
  • Dispatches the request to method-specific handlers based on the HTTP method:
    • GEThandle_http_get
    • POSThandle_http_post
    • DELETEhandle_http_delete
  • Returns 405 Method Not Allowed for unsupported methods.
§Returns
  • A TransportServerResult wrapping an HTTP response indicating success or failure of the operation.

Trait Implementations§

Source§

impl Clone for McpHttpHandler

Source§

fn clone(&self) -> McpHttpHandler

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

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

Performs copy-assignment from source. 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> 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> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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