Skip to content

Commit 9e881a6

Browse files
authored
Implement SEP-1319: Decouple Request Payload from RPC Methods (#617)
* feat: implement SEP-1319 Decouple Request Payload from RPC Methods * test: update tests * fix: update handler trait methods to use new types * fix: update examples * fix: correct deprecation version * fix: update wrapper macros to use new *Params type names
1 parent 48e989b commit 9e881a6

38 files changed

Lines changed: 913 additions & 278 deletions

crates/rmcp-macros/src/prompt_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ pub fn prompt_handler(attr: TokenStream, input: TokenStream) -> syn::Result<Toke
2828
let get_prompt_impl: ImplItem = parse_quote! {
2929
async fn get_prompt(
3030
&self,
31-
request: GetPromptRequestParam,
31+
request: GetPromptRequestParams,
3232
context: RequestContext<RoleServer>,
3333
) -> Result<GetPromptResult, rmcp::ErrorData> {
3434
let prompt_context = rmcp::handler::server::prompt::PromptContext::new(
@@ -51,7 +51,7 @@ pub fn prompt_handler(attr: TokenStream, input: TokenStream) -> syn::Result<Toke
5151
let list_prompts_impl: ImplItem = parse_quote! {
5252
async fn list_prompts(
5353
&self,
54-
_request: Option<PaginatedRequestParam>,
54+
_request: Option<PaginatedRequestParams>,
5555
_context: RequestContext<RoleServer>,
5656
) -> Result<ListPromptsResult, rmcp::ErrorData> {
5757
let prompts = #router_expr.list_all();

crates/rmcp-macros/src/tool_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pub fn tool_handler(attr: TokenStream, input: TokenStream) -> syn::Result<TokenS
2929
let tool_call_fn = quote! {
3030
async fn call_tool(
3131
&self,
32-
request: rmcp::model::CallToolRequestParam,
32+
request: rmcp::model::CallToolRequestParams,
3333
context: rmcp::service::RequestContext<rmcp::RoleServer>,
3434
) -> Result<rmcp::model::CallToolResult, rmcp::ErrorData> {
3535
let tcc = rmcp::handler::server::tool::ToolCallContext::new(self, request, context);
@@ -46,7 +46,7 @@ pub fn tool_handler(attr: TokenStream, input: TokenStream) -> syn::Result<TokenS
4646
let tool_list_fn = quote! {
4747
async fn list_tools(
4848
&self,
49-
_request: Option<rmcp::model::PaginatedRequestParam>,
49+
_request: Option<rmcp::model::PaginatedRequestParams>,
5050
_context: rmcp::service::RequestContext<rmcp::RoleServer>,
5151
) -> Result<rmcp::model::ListToolsResult, rmcp::ErrorData> {
5252
Ok(rmcp::model::ListToolsResult{

crates/rmcp/src/handler/client.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ pub trait ClientHandler: Sized + Send + Sync + 'static {
8585

8686
fn create_message(
8787
&self,
88-
params: CreateMessageRequestParam,
88+
params: CreateMessageRequestParams,
8989
context: RequestContext<RoleClient>,
9090
) -> impl Future<Output = Result<CreateMessageResult, McpError>> + Send + '_ {
9191
std::future::ready(Err(
@@ -118,7 +118,7 @@ pub trait ClientHandler: Sized + Send + Sync + 'static {
118118
/// Real clients should override this to provide user interaction.
119119
fn create_elicitation(
120120
&self,
121-
request: CreateElicitationRequestParam,
121+
request: CreateElicitationRequestParams,
122122
context: RequestContext<RoleClient>,
123123
) -> impl Future<Output = Result<CreateElicitationResult, McpError>> + Send + '_ {
124124
// Default implementation declines all requests - real clients should override this
@@ -225,7 +225,7 @@ macro_rules! impl_client_handler_for_wrapper {
225225

226226
fn create_message(
227227
&self,
228-
params: CreateMessageRequestParam,
228+
params: CreateMessageRequestParams,
229229
context: RequestContext<RoleClient>,
230230
) -> impl Future<Output = Result<CreateMessageResult, McpError>> + Send + '_ {
231231
(**self).create_message(params, context)
@@ -240,7 +240,7 @@ macro_rules! impl_client_handler_for_wrapper {
240240

241241
fn create_elicitation(
242242
&self,
243-
request: CreateElicitationRequestParam,
243+
request: CreateElicitationRequestParams,
244244
context: RequestContext<RoleClient>,
245245
) -> impl Future<Output = Result<CreateElicitationResult, McpError>> + Send + '_ {
246246
(**self).create_elicitation(request, context)

crates/rmcp/src/handler/server.rs

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ impl<H: ServerHandler> Service<RoleServer> for H {
137137
pub trait ServerHandler: Sized + Send + Sync + 'static {
138138
fn enqueue_task(
139139
&self,
140-
_request: CallToolRequestParam,
140+
_request: CallToolRequestParams,
141141
_context: RequestContext<RoleServer>,
142142
) -> impl Future<Output = Result<CreateTaskResult, McpError>> + Send + '_ {
143143
std::future::ready(Err(McpError::internal_error(
@@ -154,7 +154,7 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
154154
// handle requests
155155
fn initialize(
156156
&self,
157-
request: InitializeRequestParam,
157+
request: InitializeRequestParams,
158158
context: RequestContext<RoleServer>,
159159
) -> impl Future<Output = Result<InitializeResult, McpError>> + Send + '_ {
160160
if context.peer.peer_info().is_none() {
@@ -164,49 +164,49 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
164164
}
165165
fn complete(
166166
&self,
167-
request: CompleteRequestParam,
167+
request: CompleteRequestParams,
168168
context: RequestContext<RoleServer>,
169169
) -> impl Future<Output = Result<CompleteResult, McpError>> + Send + '_ {
170170
std::future::ready(Ok(CompleteResult::default()))
171171
}
172172
fn set_level(
173173
&self,
174-
request: SetLevelRequestParam,
174+
request: SetLevelRequestParams,
175175
context: RequestContext<RoleServer>,
176176
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
177177
std::future::ready(Err(McpError::method_not_found::<SetLevelRequestMethod>()))
178178
}
179179
fn get_prompt(
180180
&self,
181-
request: GetPromptRequestParam,
181+
request: GetPromptRequestParams,
182182
context: RequestContext<RoleServer>,
183183
) -> impl Future<Output = Result<GetPromptResult, McpError>> + Send + '_ {
184184
std::future::ready(Err(McpError::method_not_found::<GetPromptRequestMethod>()))
185185
}
186186
fn list_prompts(
187187
&self,
188-
request: Option<PaginatedRequestParam>,
188+
request: Option<PaginatedRequestParams>,
189189
context: RequestContext<RoleServer>,
190190
) -> impl Future<Output = Result<ListPromptsResult, McpError>> + Send + '_ {
191191
std::future::ready(Ok(ListPromptsResult::default()))
192192
}
193193
fn list_resources(
194194
&self,
195-
request: Option<PaginatedRequestParam>,
195+
request: Option<PaginatedRequestParams>,
196196
context: RequestContext<RoleServer>,
197197
) -> impl Future<Output = Result<ListResourcesResult, McpError>> + Send + '_ {
198198
std::future::ready(Ok(ListResourcesResult::default()))
199199
}
200200
fn list_resource_templates(
201201
&self,
202-
request: Option<PaginatedRequestParam>,
202+
request: Option<PaginatedRequestParams>,
203203
context: RequestContext<RoleServer>,
204204
) -> impl Future<Output = Result<ListResourceTemplatesResult, McpError>> + Send + '_ {
205205
std::future::ready(Ok(ListResourceTemplatesResult::default()))
206206
}
207207
fn read_resource(
208208
&self,
209-
request: ReadResourceRequestParam,
209+
request: ReadResourceRequestParams,
210210
context: RequestContext<RoleServer>,
211211
) -> impl Future<Output = Result<ReadResourceResult, McpError>> + Send + '_ {
212212
std::future::ready(Err(
@@ -215,28 +215,28 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
215215
}
216216
fn subscribe(
217217
&self,
218-
request: SubscribeRequestParam,
218+
request: SubscribeRequestParams,
219219
context: RequestContext<RoleServer>,
220220
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
221221
std::future::ready(Err(McpError::method_not_found::<SubscribeRequestMethod>()))
222222
}
223223
fn unsubscribe(
224224
&self,
225-
request: UnsubscribeRequestParam,
225+
request: UnsubscribeRequestParams,
226226
context: RequestContext<RoleServer>,
227227
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
228228
std::future::ready(Err(McpError::method_not_found::<UnsubscribeRequestMethod>()))
229229
}
230230
fn call_tool(
231231
&self,
232-
request: CallToolRequestParam,
232+
request: CallToolRequestParams,
233233
context: RequestContext<RoleServer>,
234234
) -> impl Future<Output = Result<CallToolResult, McpError>> + Send + '_ {
235235
std::future::ready(Err(McpError::method_not_found::<CallToolRequestMethod>()))
236236
}
237237
fn list_tools(
238238
&self,
239-
request: Option<PaginatedRequestParam>,
239+
request: Option<PaginatedRequestParams>,
240240
context: RequestContext<RoleServer>,
241241
) -> impl Future<Output = Result<ListToolsResult, McpError>> + Send + '_ {
242242
std::future::ready(Ok(ListToolsResult::default()))
@@ -297,23 +297,23 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
297297

298298
fn list_tasks(
299299
&self,
300-
request: Option<PaginatedRequestParam>,
300+
request: Option<PaginatedRequestParams>,
301301
context: RequestContext<RoleServer>,
302302
) -> impl Future<Output = Result<ListTasksResult, McpError>> + Send + '_ {
303303
std::future::ready(Err(McpError::method_not_found::<ListTasksMethod>()))
304304
}
305305

306306
fn get_task_info(
307307
&self,
308-
request: GetTaskInfoParam,
308+
request: GetTaskInfoParams,
309309
context: RequestContext<RoleServer>,
310310
) -> impl Future<Output = Result<GetTaskInfoResult, McpError>> + Send + '_ {
311311
std::future::ready(Err(McpError::method_not_found::<GetTaskInfoMethod>()))
312312
}
313313

314314
fn get_task_result(
315315
&self,
316-
request: GetTaskResultParam,
316+
request: GetTaskResultParams,
317317
context: RequestContext<RoleServer>,
318318
) -> impl Future<Output = Result<TaskResult, McpError>> + Send + '_ {
319319
let _ = (request, context);
@@ -322,7 +322,7 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
322322

323323
fn cancel_task(
324324
&self,
325-
request: CancelTaskParam,
325+
request: CancelTaskParams,
326326
context: RequestContext<RoleServer>,
327327
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
328328
let _ = (request, context);
@@ -335,7 +335,7 @@ macro_rules! impl_server_handler_for_wrapper {
335335
impl<T: ServerHandler> ServerHandler for $wrapper<T> {
336336
fn enqueue_task(
337337
&self,
338-
request: CallToolRequestParam,
338+
request: CallToolRequestParams,
339339
context: RequestContext<RoleServer>,
340340
) -> impl Future<Output = Result<CreateTaskResult, McpError>> + Send + '_ {
341341
(**self).enqueue_task(request, context)
@@ -350,55 +350,55 @@ macro_rules! impl_server_handler_for_wrapper {
350350

351351
fn initialize(
352352
&self,
353-
request: InitializeRequestParam,
353+
request: InitializeRequestParams,
354354
context: RequestContext<RoleServer>,
355355
) -> impl Future<Output = Result<InitializeResult, McpError>> + Send + '_ {
356356
(**self).initialize(request, context)
357357
}
358358

359359
fn complete(
360360
&self,
361-
request: CompleteRequestParam,
361+
request: CompleteRequestParams,
362362
context: RequestContext<RoleServer>,
363363
) -> impl Future<Output = Result<CompleteResult, McpError>> + Send + '_ {
364364
(**self).complete(request, context)
365365
}
366366

367367
fn set_level(
368368
&self,
369-
request: SetLevelRequestParam,
369+
request: SetLevelRequestParams,
370370
context: RequestContext<RoleServer>,
371371
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
372372
(**self).set_level(request, context)
373373
}
374374

375375
fn get_prompt(
376376
&self,
377-
request: GetPromptRequestParam,
377+
request: GetPromptRequestParams,
378378
context: RequestContext<RoleServer>,
379379
) -> impl Future<Output = Result<GetPromptResult, McpError>> + Send + '_ {
380380
(**self).get_prompt(request, context)
381381
}
382382

383383
fn list_prompts(
384384
&self,
385-
request: Option<PaginatedRequestParam>,
385+
request: Option<PaginatedRequestParams>,
386386
context: RequestContext<RoleServer>,
387387
) -> impl Future<Output = Result<ListPromptsResult, McpError>> + Send + '_ {
388388
(**self).list_prompts(request, context)
389389
}
390390

391391
fn list_resources(
392392
&self,
393-
request: Option<PaginatedRequestParam>,
393+
request: Option<PaginatedRequestParams>,
394394
context: RequestContext<RoleServer>,
395395
) -> impl Future<Output = Result<ListResourcesResult, McpError>> + Send + '_ {
396396
(**self).list_resources(request, context)
397397
}
398398

399399
fn list_resource_templates(
400400
&self,
401-
request: Option<PaginatedRequestParam>,
401+
request: Option<PaginatedRequestParams>,
402402
context: RequestContext<RoleServer>,
403403
) -> impl Future<Output = Result<ListResourceTemplatesResult, McpError>> + Send + '_
404404
{
@@ -407,39 +407,39 @@ macro_rules! impl_server_handler_for_wrapper {
407407

408408
fn read_resource(
409409
&self,
410-
request: ReadResourceRequestParam,
410+
request: ReadResourceRequestParams,
411411
context: RequestContext<RoleServer>,
412412
) -> impl Future<Output = Result<ReadResourceResult, McpError>> + Send + '_ {
413413
(**self).read_resource(request, context)
414414
}
415415

416416
fn subscribe(
417417
&self,
418-
request: SubscribeRequestParam,
418+
request: SubscribeRequestParams,
419419
context: RequestContext<RoleServer>,
420420
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
421421
(**self).subscribe(request, context)
422422
}
423423

424424
fn unsubscribe(
425425
&self,
426-
request: UnsubscribeRequestParam,
426+
request: UnsubscribeRequestParams,
427427
context: RequestContext<RoleServer>,
428428
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
429429
(**self).unsubscribe(request, context)
430430
}
431431

432432
fn call_tool(
433433
&self,
434-
request: CallToolRequestParam,
434+
request: CallToolRequestParams,
435435
context: RequestContext<RoleServer>,
436436
) -> impl Future<Output = Result<CallToolResult, McpError>> + Send + '_ {
437437
(**self).call_tool(request, context)
438438
}
439439

440440
fn list_tools(
441441
&self,
442-
request: Option<PaginatedRequestParam>,
442+
request: Option<PaginatedRequestParams>,
443443
context: RequestContext<RoleServer>,
444444
) -> impl Future<Output = Result<ListToolsResult, McpError>> + Send + '_ {
445445
(**self).list_tools(request, context)
@@ -497,31 +497,31 @@ macro_rules! impl_server_handler_for_wrapper {
497497

498498
fn list_tasks(
499499
&self,
500-
request: Option<PaginatedRequestParam>,
500+
request: Option<PaginatedRequestParams>,
501501
context: RequestContext<RoleServer>,
502502
) -> impl Future<Output = Result<ListTasksResult, McpError>> + Send + '_ {
503503
(**self).list_tasks(request, context)
504504
}
505505

506506
fn get_task_info(
507507
&self,
508-
request: GetTaskInfoParam,
508+
request: GetTaskInfoParams,
509509
context: RequestContext<RoleServer>,
510510
) -> impl Future<Output = Result<GetTaskInfoResult, McpError>> + Send + '_ {
511511
(**self).get_task_info(request, context)
512512
}
513513

514514
fn get_task_result(
515515
&self,
516-
request: GetTaskResultParam,
516+
request: GetTaskResultParams,
517517
context: RequestContext<RoleServer>,
518518
) -> impl Future<Output = Result<TaskResult, McpError>> + Send + '_ {
519519
(**self).get_task_result(request, context)
520520
}
521521

522522
fn cancel_task(
523523
&self,
524-
request: CancelTaskParam,
524+
request: CancelTaskParams,
525525
context: RequestContext<RoleServer>,
526526
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
527527
(**self).cancel_task(request, context)

crates/rmcp/src/handler/server/tool.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub use super::{
1515
use crate::{
1616
RoleServer,
1717
handler::server::wrapper::Parameters,
18-
model::{CallToolRequestParam, CallToolResult, IntoContents, JsonObject},
18+
model::{CallToolRequestParams, CallToolResult, IntoContents, JsonObject},
1919
service::RequestContext,
2020
};
2121

@@ -39,11 +39,12 @@ pub struct ToolCallContext<'s, S> {
3939
impl<'s, S> ToolCallContext<'s, S> {
4040
pub fn new(
4141
service: &'s S,
42-
CallToolRequestParam {
42+
CallToolRequestParams {
43+
meta: _,
4344
name,
4445
arguments,
4546
task,
46-
}: CallToolRequestParam,
47+
}: CallToolRequestParams,
4748
request_context: RequestContext<RoleServer>,
4849
) -> Self {
4950
Self {

0 commit comments

Comments
 (0)