Skip to content

Commit 43c7370

Browse files
committed
refactor: migrate to rmcp 0.11.0
Signed-off-by: Xin Liu <sam@secondstate.io>
1 parent f4aaac6 commit 43c7370

File tree

3 files changed

+42
-44
lines changed

3 files changed

+42
-44
lines changed

Cargo.lock

Lines changed: 21 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@ repository = "https://github.com/cardea-mcp/cardea-calculator"
66
license = "Apache-2.0"
77

88
[dependencies]
9-
rmcp = { version = "0.6.4", features = [
9+
rmcp = { version = "^0.11.0", features = [
1010
"server",
1111
"macros",
1212
"transport-streamable-http-server",
1313
"transport-worker",
14-
"transport-sse-server",
1514
] }
1615
tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread", "io-std", "net", "fs", "time", "signal"] }
1716
serde = { version = "1.0", features = ["derive"] }
@@ -24,6 +23,7 @@ rand = { version = "0.9" }
2423
hyper = { version = "1", features = ["client", "server", "http1"] }
2524
hyper-util = { version = "0.1", features = ["tokio"] }
2625
tokio-tungstenite = { version = "0.27.0" }
26+
tokio-util = { version = "0.7" }
2727
reqwest = { version = "0.12", default-features = false }
2828
pin-project-lite = { version = "0.2" }
2929
axum = { version = "0.8", features = ["macros"] }

src/main.rs

Lines changed: 19 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
mod calculator;
22

33
use 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
};
98
use 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

Comments
 (0)