litecode 0.1.1

An ultra-lightweight Coding MCP server built with Rust
Documentation
use std::net::SocketAddr;

use axum::Router;
use rmcp::transport::{
    StreamableHttpServerConfig,
    streamable_http_server::{session::local::LocalSessionManager, tower::StreamableHttpService},
};
use tokio_util::sync::CancellationToken;

use crate::{error::Result, server::LiteCodeServer};

pub async fn serve(server: LiteCodeServer, bind: SocketAddr) -> Result<()> {
    let cancellation_token = CancellationToken::new();
    let shutdown_token = cancellation_token.clone();
    let service: StreamableHttpService<LiteCodeServer, LocalSessionManager> =
        StreamableHttpService::new(
            move || Ok(server.clone()),
            Default::default(),
            StreamableHttpServerConfig {
                stateful_mode: true,
                sse_keep_alive: Some(std::time::Duration::from_secs(15)),
                cancellation_token,
                ..Default::default()
            },
        );

    let router = Router::new().nest_service("/mcp", service);
    let listener = tokio::net::TcpListener::bind(bind).await?;

    axum::serve(listener, router)
        .with_graceful_shutdown(async move {
            let _ = tokio::signal::ctrl_c().await;
            shutdown_token.cancel();
        })
        .await?;

    Ok(())
}