@@ -4,22 +4,34 @@ use rmcp::transport::SseServer;
44use tracing_subscriber:: FmtSubscriber ;
55
66use rmcp:: {
7- ServerHandler ,
8- model:: { ServerCapabilities , ServerInfo } ,
9- schemars, tool,
7+ ErrorData as McpError ,
8+ handler:: server:: { router:: tool:: ToolRouter , wrapper:: Parameters } ,
9+ model:: * ,
10+ tool, tool_handler, tool_router,
1011} ;
12+
1113#[ derive( Debug , Clone , Default ) ]
12- pub struct Echo ;
13- #[ tool( tool_box) ]
14+ pub struct Echo {
15+ tool_router : ToolRouter < Echo > ,
16+ }
17+ #[ tool_router]
1418impl Echo {
19+ fn new ( ) -> Self {
20+ Self {
21+ tool_router : Self :: tool_router ( ) ,
22+ }
23+ }
24+
1525 #[ tool( description = "Echo a message" ) ]
16- fn echo ( & self , #[ tool( param) ] message : String ) -> String {
17- message
26+ fn echo ( & self , Parameters ( object) : Parameters < JsonObject > ) -> Result < CallToolResult , McpError > {
27+ Ok ( CallToolResult :: success ( vec ! [ Content :: text(
28+ serde_json:: Value :: Object ( object) . to_string( ) ,
29+ ) ] ) )
1830 }
1931}
2032
21- #[ tool ( tool_box ) ]
22- impl ServerHandler for Echo {
33+ #[ tool_handler ]
34+ impl rmcp :: ServerHandler for Echo {
2335 fn get_info ( & self ) -> ServerInfo {
2436 ServerInfo {
2537 instructions : Some ( "A simple echo server" . into ( ) ) ,
@@ -51,7 +63,7 @@ async fn main() -> anyhow::Result<()> {
5163
5264 let ct = SseServer :: serve ( args. address )
5365 . await ?
54- . with_service ( Echo :: default ) ;
66+ . with_service_directly ( Echo :: new ) ;
5567
5668 tokio:: signal:: ctrl_c ( ) . await ?;
5769 ct. cancel ( ) ;
0 commit comments