rust-mcp-actix 0.1.4

Actix-web HTTP server integration for rust-mcp-sdk
Documentation
use actix_web::{web, HttpRequest, HttpResponse};
use rust_mcp_sdk::mcp_http::{McpAppState, McpHttpHandler};
use std::sync::Arc;

pub async fn handle_streamable_http_get(
    req: HttpRequest,
    state: web::Data<Arc<McpAppState>>,
    handler: web::Data<McpHttpHandler>,
) -> HttpResponse {
    let request = crate::bridge::from_actix_request(&req, None);
    match handler
        .handle_streamable_http(request, state.get_ref().clone())
        .await
    {
        Ok(res) => crate::bridge::to_actix_response(res).await,
        Err(err) => crate::bridge::to_actix_error(err),
    }
}

pub async fn handle_streamable_http_post(
    req: HttpRequest,
    state: web::Data<Arc<McpAppState>>,
    handler: web::Data<McpHttpHandler>,
    payload: web::Bytes,
) -> HttpResponse {
    let payload = match std::str::from_utf8(&payload) {
        Ok(payload) => payload,
        Err(_) => {
            return HttpResponse::BadRequest().body("Request body must be valid UTF-8");
        }
    };
    let request = crate::bridge::from_actix_request(&req, Some(payload));
    match handler
        .handle_streamable_http(request, state.get_ref().clone())
        .await
    {
        Ok(res) => crate::bridge::to_actix_response(res).await,
        Err(err) => crate::bridge::to_actix_error(err),
    }
}

pub async fn handle_streamable_http_delete(
    req: HttpRequest,
    state: web::Data<Arc<McpAppState>>,
    handler: web::Data<McpHttpHandler>,
) -> HttpResponse {
    let request = crate::bridge::from_actix_request(&req, None);
    match handler
        .handle_streamable_http(request, state.get_ref().clone())
        .await
    {
        Ok(res) => crate::bridge::to_actix_response(res).await,
        Err(err) => crate::bridge::to_actix_error(err),
    }
}