mod common; use common::counter::Counter; use hyper_util::{ rt::{TokioExecutor, TokioIo}, server::conn::auto::Builder, service::TowerToHyperService, }; use rmcp::transport::streamable_http_server::{ StreamableHttpService, session::local::LocalSessionManager, }; #[tokio::main] async fn main() -> anyhow::Result<()> { let service = TowerToHyperService::new(StreamableHttpService::new( || Ok(Counter::new()), LocalSessionManager::default().into(), Default::default(), )); let listener = tokio::net::TcpListener::bind("[::1]:8080").await?; loop { let io = tokio::select! { _ = tokio::signal::ctrl_c() => break, accept = listener.accept() => { TokioIo::new(accept?.0) } }; let service = service.clone(); tokio::spawn(async move { let _result = Builder::new(TokioExecutor::default()) .serve_connection(io, service) .await; }); } Ok(()) }