11mod calculator;
22
33use calculator:: Calculator ;
4- use clap:: { Parser , ValueEnum } ;
5- use rmcp:: transport:: {
6- sse_server:: SseServer ,
7- streamable_http_server:: { StreamableHttpService , session:: local:: LocalSessionManager } ,
4+ use clap:: Parser ;
5+ use rmcp:: transport:: streamable_http_server:: {
6+ StreamableHttpServerConfig , StreamableHttpService , session:: local:: LocalSessionManager ,
87} ;
98use tracing_subscriber:: { self , layer:: SubscriberExt , util:: SubscriberInitExt } ;
109
@@ -16,15 +15,6 @@ struct Args {
1615 /// Socket address to bind to
1716 #[ arg( short, long, default_value = DEFAULT_SOCKET_ADDR ) ]
1817 socket_addr : String ,
19- /// Transport type to use (sse or stream-http)
20- #[ arg( short, long, value_enum, default_value = "stream-http" ) ]
21- transport : TransportType ,
22- }
23-
24- #[ derive( Debug , Clone , ValueEnum ) ]
25- enum TransportType {
26- Sse ,
27- StreamHttp ,
2818}
2919
3020#[ tokio:: main]
@@ -44,29 +34,25 @@ async fn main() -> anyhow::Result<()> {
4434 args. socket_addr
4535 ) ;
4636
47- match args. transport {
48- TransportType :: StreamHttp => {
49- let service = StreamableHttpService :: new (
50- || Ok ( Calculator :: new ( ) ) ,
51- LocalSessionManager :: default ( ) . into ( ) ,
52- Default :: default ( ) ,
53- ) ;
37+ let ct = tokio_util:: sync:: CancellationToken :: new ( ) ;
5438
55- let router = axum:: Router :: new ( ) . nest_service ( "/mcp" , service) ;
56- let tcp_listener = tokio:: net:: TcpListener :: bind ( args. socket_addr ) . await ?;
57- let _ = axum:: serve ( tcp_listener, router)
58- . with_graceful_shutdown ( async { tokio:: signal:: ctrl_c ( ) . await . unwrap ( ) } )
59- . await ;
60- }
61- TransportType :: Sse => {
62- let ct = SseServer :: serve ( args. socket_addr . parse ( ) ?)
63- . await ?
64- . with_service ( Calculator :: new) ;
39+ let service = StreamableHttpService :: new (
40+ || Ok ( Calculator :: new ( ) ) ,
41+ LocalSessionManager :: default ( ) . into ( ) ,
42+ StreamableHttpServerConfig {
43+ cancellation_token : ct. clone ( ) ,
44+ ..Default :: default ( )
45+ } ,
46+ ) ;
6547
66- tokio:: signal:: ctrl_c ( ) . await ?;
48+ let router = axum:: Router :: new ( ) . nest_service ( "/mcp" , service) ;
49+ let tcp_listener = tokio:: net:: TcpListener :: bind ( args. socket_addr ) . await ?;
50+ let _ = axum:: serve ( tcp_listener, router)
51+ . with_graceful_shutdown ( async move {
52+ tokio:: signal:: ctrl_c ( ) . await . unwrap ( ) ;
6753 ct. cancel ( ) ;
68- }
69- }
54+ } )
55+ . await ;
7056
7157 Ok ( ( ) )
7258}
0 commit comments