rust-mcp-sdk 0.9.0

An asynchronous SDK and framework for building MCP-Servers and MCP-Clients, leveraging the rust-mcp-schema for type safe MCP Schema Objects.
Documentation
use crate::{
    hyper_servers::error::TransportServerResult,
    mcp_http::{McpAppState, McpHttpHandler},
    utils::remove_query_and_hash,
};
use axum::{extract::State, response::IntoResponse, routing::post, Extension, Router};
use http::{HeaderMap, Method, Uri};
use std::sync::Arc;

pub fn routes(sse_message_endpoint: &str) -> Router<Arc<McpAppState>> {
    Router::new().route(
        remove_query_and_hash(sse_message_endpoint).as_str(),
        post(handle_messages),
    )
}

pub async fn handle_messages(
    uri: Uri,
    headers: HeaderMap,
    State(state): State<Arc<McpAppState>>,
    Extension(http_handler): Extension<Arc<McpHttpHandler>>,
    message: String,
) -> TransportServerResult<impl IntoResponse> {
    let request = McpHttpHandler::create_request(Method::POST, uri, headers, Some(&message));
    let generic_response = http_handler
        .handle_sse_message(request, state.clone())
        .await?;
    let (parts, body) = generic_response.into_parts();
    let resp = axum::response::Response::from_parts(parts, axum::body::Body::new(body));
    Ok(resp)
}