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
This commit is contained in:
parent
48e989b711
commit
9e881a645b
3 changed files with 913 additions and 278 deletions
|
|
@ -85,7 +85,7 @@ pub trait ClientHandler: Sized + Send + Sync + 'static {
|
|||
|
||||
fn create_message(
|
||||
&self,
|
||||
params: CreateMessageRequestParam,
|
||||
params: CreateMessageRequestParams,
|
||||
context: RequestContext<RoleClient>,
|
||||
) -> impl Future<Output = Result<CreateMessageResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Err(
|
||||
|
|
@ -118,7 +118,7 @@ pub trait ClientHandler: Sized + Send + Sync + 'static {
|
|||
/// Real clients should override this to provide user interaction.
|
||||
fn create_elicitation(
|
||||
&self,
|
||||
request: CreateElicitationRequestParam,
|
||||
request: CreateElicitationRequestParams,
|
||||
context: RequestContext<RoleClient>,
|
||||
) -> impl Future<Output = Result<CreateElicitationResult, McpError>> + Send + '_ {
|
||||
// Default implementation declines all requests - real clients should override this
|
||||
|
|
@ -225,7 +225,7 @@ macro_rules! impl_client_handler_for_wrapper {
|
|||
|
||||
fn create_message(
|
||||
&self,
|
||||
params: CreateMessageRequestParam,
|
||||
params: CreateMessageRequestParams,
|
||||
context: RequestContext<RoleClient>,
|
||||
) -> impl Future<Output = Result<CreateMessageResult, McpError>> + Send + '_ {
|
||||
(**self).create_message(params, context)
|
||||
|
|
@ -240,7 +240,7 @@ macro_rules! impl_client_handler_for_wrapper {
|
|||
|
||||
fn create_elicitation(
|
||||
&self,
|
||||
request: CreateElicitationRequestParam,
|
||||
request: CreateElicitationRequestParams,
|
||||
context: RequestContext<RoleClient>,
|
||||
) -> impl Future<Output = Result<CreateElicitationResult, McpError>> + Send + '_ {
|
||||
(**self).create_elicitation(request, context)
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ impl<H: ServerHandler> Service<RoleServer> for H {
|
|||
pub trait ServerHandler: Sized + Send + Sync + 'static {
|
||||
fn enqueue_task(
|
||||
&self,
|
||||
_request: CallToolRequestParam,
|
||||
_request: CallToolRequestParams,
|
||||
_context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<CreateTaskResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Err(McpError::internal_error(
|
||||
|
|
@ -154,7 +154,7 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
|
|||
// handle requests
|
||||
fn initialize(
|
||||
&self,
|
||||
request: InitializeRequestParam,
|
||||
request: InitializeRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<InitializeResult, McpError>> + Send + '_ {
|
||||
if context.peer.peer_info().is_none() {
|
||||
|
|
@ -164,49 +164,49 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
|
|||
}
|
||||
fn complete(
|
||||
&self,
|
||||
request: CompleteRequestParam,
|
||||
request: CompleteRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<CompleteResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Ok(CompleteResult::default()))
|
||||
}
|
||||
fn set_level(
|
||||
&self,
|
||||
request: SetLevelRequestParam,
|
||||
request: SetLevelRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
|
||||
std::future::ready(Err(McpError::method_not_found::<SetLevelRequestMethod>()))
|
||||
}
|
||||
fn get_prompt(
|
||||
&self,
|
||||
request: GetPromptRequestParam,
|
||||
request: GetPromptRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<GetPromptResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Err(McpError::method_not_found::<GetPromptRequestMethod>()))
|
||||
}
|
||||
fn list_prompts(
|
||||
&self,
|
||||
request: Option<PaginatedRequestParam>,
|
||||
request: Option<PaginatedRequestParams>,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ListPromptsResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Ok(ListPromptsResult::default()))
|
||||
}
|
||||
fn list_resources(
|
||||
&self,
|
||||
request: Option<PaginatedRequestParam>,
|
||||
request: Option<PaginatedRequestParams>,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ListResourcesResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Ok(ListResourcesResult::default()))
|
||||
}
|
||||
fn list_resource_templates(
|
||||
&self,
|
||||
request: Option<PaginatedRequestParam>,
|
||||
request: Option<PaginatedRequestParams>,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ListResourceTemplatesResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Ok(ListResourceTemplatesResult::default()))
|
||||
}
|
||||
fn read_resource(
|
||||
&self,
|
||||
request: ReadResourceRequestParam,
|
||||
request: ReadResourceRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ReadResourceResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Err(
|
||||
|
|
@ -215,28 +215,28 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
|
|||
}
|
||||
fn subscribe(
|
||||
&self,
|
||||
request: SubscribeRequestParam,
|
||||
request: SubscribeRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
|
||||
std::future::ready(Err(McpError::method_not_found::<SubscribeRequestMethod>()))
|
||||
}
|
||||
fn unsubscribe(
|
||||
&self,
|
||||
request: UnsubscribeRequestParam,
|
||||
request: UnsubscribeRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
|
||||
std::future::ready(Err(McpError::method_not_found::<UnsubscribeRequestMethod>()))
|
||||
}
|
||||
fn call_tool(
|
||||
&self,
|
||||
request: CallToolRequestParam,
|
||||
request: CallToolRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<CallToolResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Err(McpError::method_not_found::<CallToolRequestMethod>()))
|
||||
}
|
||||
fn list_tools(
|
||||
&self,
|
||||
request: Option<PaginatedRequestParam>,
|
||||
request: Option<PaginatedRequestParams>,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ListToolsResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Ok(ListToolsResult::default()))
|
||||
|
|
@ -297,7 +297,7 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
|
|||
|
||||
fn list_tasks(
|
||||
&self,
|
||||
request: Option<PaginatedRequestParam>,
|
||||
request: Option<PaginatedRequestParams>,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ListTasksResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Err(McpError::method_not_found::<ListTasksMethod>()))
|
||||
|
|
@ -305,7 +305,7 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
|
|||
|
||||
fn get_task_info(
|
||||
&self,
|
||||
request: GetTaskInfoParam,
|
||||
request: GetTaskInfoParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<GetTaskInfoResult, McpError>> + Send + '_ {
|
||||
std::future::ready(Err(McpError::method_not_found::<GetTaskInfoMethod>()))
|
||||
|
|
@ -313,7 +313,7 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
|
|||
|
||||
fn get_task_result(
|
||||
&self,
|
||||
request: GetTaskResultParam,
|
||||
request: GetTaskResultParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<TaskResult, McpError>> + Send + '_ {
|
||||
let _ = (request, context);
|
||||
|
|
@ -322,7 +322,7 @@ pub trait ServerHandler: Sized + Send + Sync + 'static {
|
|||
|
||||
fn cancel_task(
|
||||
&self,
|
||||
request: CancelTaskParam,
|
||||
request: CancelTaskParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
|
||||
let _ = (request, context);
|
||||
|
|
@ -335,7 +335,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
impl<T: ServerHandler> ServerHandler for $wrapper<T> {
|
||||
fn enqueue_task(
|
||||
&self,
|
||||
request: CallToolRequestParam,
|
||||
request: CallToolRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<CreateTaskResult, McpError>> + Send + '_ {
|
||||
(**self).enqueue_task(request, context)
|
||||
|
|
@ -350,7 +350,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn initialize(
|
||||
&self,
|
||||
request: InitializeRequestParam,
|
||||
request: InitializeRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<InitializeResult, McpError>> + Send + '_ {
|
||||
(**self).initialize(request, context)
|
||||
|
|
@ -358,7 +358,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn complete(
|
||||
&self,
|
||||
request: CompleteRequestParam,
|
||||
request: CompleteRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<CompleteResult, McpError>> + Send + '_ {
|
||||
(**self).complete(request, context)
|
||||
|
|
@ -366,7 +366,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn set_level(
|
||||
&self,
|
||||
request: SetLevelRequestParam,
|
||||
request: SetLevelRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
|
||||
(**self).set_level(request, context)
|
||||
|
|
@ -374,7 +374,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn get_prompt(
|
||||
&self,
|
||||
request: GetPromptRequestParam,
|
||||
request: GetPromptRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<GetPromptResult, McpError>> + Send + '_ {
|
||||
(**self).get_prompt(request, context)
|
||||
|
|
@ -382,7 +382,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn list_prompts(
|
||||
&self,
|
||||
request: Option<PaginatedRequestParam>,
|
||||
request: Option<PaginatedRequestParams>,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ListPromptsResult, McpError>> + Send + '_ {
|
||||
(**self).list_prompts(request, context)
|
||||
|
|
@ -390,7 +390,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn list_resources(
|
||||
&self,
|
||||
request: Option<PaginatedRequestParam>,
|
||||
request: Option<PaginatedRequestParams>,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ListResourcesResult, McpError>> + Send + '_ {
|
||||
(**self).list_resources(request, context)
|
||||
|
|
@ -398,7 +398,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn list_resource_templates(
|
||||
&self,
|
||||
request: Option<PaginatedRequestParam>,
|
||||
request: Option<PaginatedRequestParams>,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ListResourceTemplatesResult, McpError>> + Send + '_
|
||||
{
|
||||
|
|
@ -407,7 +407,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn read_resource(
|
||||
&self,
|
||||
request: ReadResourceRequestParam,
|
||||
request: ReadResourceRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ReadResourceResult, McpError>> + Send + '_ {
|
||||
(**self).read_resource(request, context)
|
||||
|
|
@ -415,7 +415,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn subscribe(
|
||||
&self,
|
||||
request: SubscribeRequestParam,
|
||||
request: SubscribeRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
|
||||
(**self).subscribe(request, context)
|
||||
|
|
@ -423,7 +423,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn unsubscribe(
|
||||
&self,
|
||||
request: UnsubscribeRequestParam,
|
||||
request: UnsubscribeRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
|
||||
(**self).unsubscribe(request, context)
|
||||
|
|
@ -431,7 +431,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn call_tool(
|
||||
&self,
|
||||
request: CallToolRequestParam,
|
||||
request: CallToolRequestParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<CallToolResult, McpError>> + Send + '_ {
|
||||
(**self).call_tool(request, context)
|
||||
|
|
@ -439,7 +439,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn list_tools(
|
||||
&self,
|
||||
request: Option<PaginatedRequestParam>,
|
||||
request: Option<PaginatedRequestParams>,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ListToolsResult, McpError>> + Send + '_ {
|
||||
(**self).list_tools(request, context)
|
||||
|
|
@ -497,7 +497,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn list_tasks(
|
||||
&self,
|
||||
request: Option<PaginatedRequestParam>,
|
||||
request: Option<PaginatedRequestParams>,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<ListTasksResult, McpError>> + Send + '_ {
|
||||
(**self).list_tasks(request, context)
|
||||
|
|
@ -505,7 +505,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn get_task_info(
|
||||
&self,
|
||||
request: GetTaskInfoParam,
|
||||
request: GetTaskInfoParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<GetTaskInfoResult, McpError>> + Send + '_ {
|
||||
(**self).get_task_info(request, context)
|
||||
|
|
@ -513,7 +513,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn get_task_result(
|
||||
&self,
|
||||
request: GetTaskResultParam,
|
||||
request: GetTaskResultParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<TaskResult, McpError>> + Send + '_ {
|
||||
(**self).get_task_result(request, context)
|
||||
|
|
@ -521,7 +521,7 @@ macro_rules! impl_server_handler_for_wrapper {
|
|||
|
||||
fn cancel_task(
|
||||
&self,
|
||||
request: CancelTaskParam,
|
||||
request: CancelTaskParams,
|
||||
context: RequestContext<RoleServer>,
|
||||
) -> impl Future<Output = Result<(), McpError>> + Send + '_ {
|
||||
(**self).cancel_task(request, context)
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ pub use super::{
|
|||
use crate::{
|
||||
RoleServer,
|
||||
handler::server::wrapper::Parameters,
|
||||
model::{CallToolRequestParam, CallToolResult, IntoContents, JsonObject},
|
||||
model::{CallToolRequestParams, CallToolResult, IntoContents, JsonObject},
|
||||
service::RequestContext,
|
||||
};
|
||||
|
||||
|
|
@ -39,11 +39,12 @@ pub struct ToolCallContext<'s, S> {
|
|||
impl<'s, S> ToolCallContext<'s, S> {
|
||||
pub fn new(
|
||||
service: &'s S,
|
||||
CallToolRequestParam {
|
||||
CallToolRequestParams {
|
||||
meta: _,
|
||||
name,
|
||||
arguments,
|
||||
task,
|
||||
}: CallToolRequestParam,
|
||||
}: CallToolRequestParams,
|
||||
request_context: RequestContext<RoleServer>,
|
||||
) -> Self {
|
||||
Self {
|
||||
|
|
|
|||
Loading…
Reference in a new issue