@@ -27,6 +27,9 @@ impl<H: ServerHandler> Service<RoleServer> for H {
2727 ) -> Result < <RoleServer as ServiceRole >:: Resp , McpError > {
2828 // `context` is moved into the dispatch below, so read the negotiated version first.
2929 let protocol_version = context. protocol_version ( ) ;
30+ let mrtr_supported = protocol_version
31+ . as_ref ( )
32+ . is_some_and ( |v| v. as_str ( ) >= ProtocolVersion :: V_2026_07_28 . as_str ( ) ) ;
3033 let result = match request {
3134 ClientRequest :: InitializeRequest ( request) => self
3235 . initialize ( request. params , context)
@@ -46,7 +49,7 @@ impl<H: ServerHandler> Service<RoleServer> for H {
4649 ClientRequest :: GetPromptRequest ( request) => self
4750 . get_prompt ( request. params , context)
4851 . await
49- . map ( ServerResult :: GetPromptResult ) ,
52+ . map ( ServerResult :: from ) ,
5053 ClientRequest :: ListPromptsRequest ( request) => self
5154 . list_prompts ( request. params , context)
5255 . await
@@ -62,7 +65,7 @@ impl<H: ServerHandler> Service<RoleServer> for H {
6265 ClientRequest :: ReadResourceRequest ( request) => self
6366 . read_resource ( request. params , context)
6467 . await
65- . map ( ServerResult :: ReadResourceResult ) ,
68+ . map ( ServerResult :: from ) ,
6669 ClientRequest :: SubscribeRequest ( request) => self
6770 . subscribe ( request. params , context)
6871 . await
@@ -105,7 +108,7 @@ impl<H: ServerHandler> Service<RoleServer> for H {
105108 } else {
106109 self . call_tool ( request. params , context)
107110 . await
108- . map ( ServerResult :: CallToolResult )
111+ . map ( ServerResult :: from )
109112 }
110113 }
111114 ClientRequest :: ListToolsRequest ( request) => self
@@ -133,6 +136,17 @@ impl<H: ServerHandler> Service<RoleServer> for H {
133136 . await
134137 . map ( ServerResult :: CancelTaskResult ) ,
135138 } ;
139+ let result = result. and_then ( |result| {
140+ if matches ! ( result, ServerResult :: InputRequiredResult ( _) ) && !mrtr_supported {
141+ Err ( McpError :: invalid_request (
142+ "InputRequiredResult requires negotiated protocol version 2026-07-28 or newer" ,
143+ None ,
144+ ) )
145+ } else {
146+ Ok ( result)
147+ }
148+ } ) ;
149+
136150 // SEP-2164: peers negotiating 2026-07-28+ get the standard INVALID_PARAMS code for
137151 // resource-not-found; older peers keep RESOURCE_NOT_FOUND. ISO `YYYY-MM-DD` versions
138152 // compare lexically the same as chronologically.
@@ -229,7 +243,7 @@ macro_rules! server_handler_methods {
229243 & self ,
230244 request: GetPromptRequestParams ,
231245 context: RequestContext <RoleServer >,
232- ) -> impl Future <Output = Result <GetPromptResult , McpError >> + MaybeSendFuture + ' _ {
246+ ) -> impl Future <Output = Result <GetPromptResponse , McpError >> + MaybeSendFuture + ' _ {
233247 std:: future:: ready( Err ( McpError :: method_not_found:: <GetPromptRequestMethod >( ) ) )
234248 }
235249 fn list_prompts(
@@ -259,7 +273,7 @@ macro_rules! server_handler_methods {
259273 & self ,
260274 request: ReadResourceRequestParams ,
261275 context: RequestContext <RoleServer >,
262- ) -> impl Future <Output = Result <ReadResourceResult , McpError >> + MaybeSendFuture + ' _ {
276+ ) -> impl Future <Output = Result <ReadResourceResponse , McpError >> + MaybeSendFuture + ' _ {
263277 std:: future:: ready( Err (
264278 McpError :: method_not_found:: <ReadResourceRequestMethod >( ) ,
265279 ) )
@@ -312,7 +326,7 @@ macro_rules! server_handler_methods {
312326 & self ,
313327 request: CallToolRequestParams ,
314328 context: RequestContext <RoleServer >,
315- ) -> impl Future <Output = Result <CallToolResult , McpError >> + MaybeSendFuture + ' _ {
329+ ) -> impl Future <Output = Result <CallToolResponse , McpError >> + MaybeSendFuture + ' _ {
316330 std:: future:: ready( Err ( McpError :: method_not_found:: <CallToolRequestMethod >( ) ) )
317331 }
318332 fn list_tools(
@@ -485,7 +499,7 @@ macro_rules! impl_server_handler_for_wrapper {
485499 & self ,
486500 request: GetPromptRequestParams ,
487501 context: RequestContext <RoleServer >,
488- ) -> impl Future <Output = Result <GetPromptResult , McpError >> + MaybeSendFuture + ' _ {
502+ ) -> impl Future <Output = Result <GetPromptResponse , McpError >> + MaybeSendFuture + ' _ {
489503 ( * * self ) . get_prompt( request, context)
490504 }
491505
@@ -518,7 +532,7 @@ macro_rules! impl_server_handler_for_wrapper {
518532 & self ,
519533 request: ReadResourceRequestParams ,
520534 context: RequestContext <RoleServer >,
521- ) -> impl Future <Output = Result <ReadResourceResult , McpError >> + MaybeSendFuture + ' _ {
535+ ) -> impl Future <Output = Result <ReadResourceResponse , McpError >> + MaybeSendFuture + ' _ {
522536 ( * * self ) . read_resource( request, context)
523537 }
524538
@@ -542,7 +556,7 @@ macro_rules! impl_server_handler_for_wrapper {
542556 & self ,
543557 request: CallToolRequestParams ,
544558 context: RequestContext <RoleServer >,
545- ) -> impl Future <Output = Result <CallToolResult , McpError >> + MaybeSendFuture + ' _ {
559+ ) -> impl Future <Output = Result <CallToolResponse , McpError >> + MaybeSendFuture + ' _ {
546560 ( * * self ) . call_tool( request, context)
547561 }
548562
0 commit comments