feat: deprecate roots, sampling, and logging (SEP-2577) (#884)
SEP-2577 deprecates the Roots, Sampling, and Logging features. The deprecation is advisory: the features stay fully functional and there is no wire-level change. Mark the corresponding Rust APIs as deprecated so downstream users get compiler warnings and migration guidance. - Forward attributes through the service `method!` macros and deprecate `Peer::create_message`, `Peer::list_roots`, `Peer::set_level`, and `Peer::notify_logging_message`. - Forward per-field attributes through the capability `builder!` macro and deprecate the generated `enable_roots`, `enable_sampling`, and `enable_logging` builders, plus the hand-written `enable_roots_list_changed`, `enable_sampling_tools`, and `enable_sampling_context`. - Document the deprecation on the capability types and fields, and in the README feature sections. - Allow `deprecated` at the crate's own call sites so the build stays warning-clean, and refresh the message schema snapshots.
This commit is contained in:
parent
254f04a764
commit
82b04a31f5
2 changed files with 132 additions and 38 deletions
|
|
@ -270,7 +270,8 @@ where
|
|||
}
|
||||
|
||||
macro_rules! method {
|
||||
(peer_req $method:ident $Req:ident() => $Resp: ident ) => {
|
||||
($(#[$meta:meta])* peer_req $method:ident $Req:ident() => $Resp: ident ) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method(&self) -> Result<$Resp, ServiceError> {
|
||||
let result = self
|
||||
.send_request(ClientRequest::$Req($Req {
|
||||
|
|
@ -283,7 +284,8 @@ macro_rules! method {
|
|||
}
|
||||
}
|
||||
};
|
||||
(peer_req $method:ident $Req:ident($Param: ident) => $Resp: ident ) => {
|
||||
($(#[$meta:meta])* peer_req $method:ident $Req:ident($Param: ident) => $Resp: ident ) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method(&self, params: $Param) -> Result<$Resp, ServiceError> {
|
||||
let result = self
|
||||
.send_request(ClientRequest::$Req($Req {
|
||||
|
|
@ -298,7 +300,8 @@ macro_rules! method {
|
|||
}
|
||||
}
|
||||
};
|
||||
(peer_req $method:ident $Req:ident($Param: ident)? => $Resp: ident ) => {
|
||||
($(#[$meta:meta])* peer_req $method:ident $Req:ident($Param: ident)? => $Resp: ident ) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method(&self, params: Option<$Param>) -> Result<$Resp, ServiceError> {
|
||||
let result = self
|
||||
.send_request(ClientRequest::$Req($Req {
|
||||
|
|
@ -313,7 +316,8 @@ macro_rules! method {
|
|||
}
|
||||
}
|
||||
};
|
||||
(peer_req $method:ident $Req:ident($Param: ident)) => {
|
||||
($(#[$meta:meta])* peer_req $method:ident $Req:ident($Param: ident)) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method(&self, params: $Param) -> Result<(), ServiceError> {
|
||||
let result = self
|
||||
.send_request(ClientRequest::$Req($Req {
|
||||
|
|
@ -329,7 +333,8 @@ macro_rules! method {
|
|||
}
|
||||
};
|
||||
|
||||
(peer_not $method:ident $Not:ident($Param: ident)) => {
|
||||
($(#[$meta:meta])* peer_not $method:ident $Not:ident($Param: ident)) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method(&self, params: $Param) -> Result<(), ServiceError> {
|
||||
self.send_notification(ClientNotification::$Not($Not {
|
||||
method: Default::default(),
|
||||
|
|
@ -340,7 +345,8 @@ macro_rules! method {
|
|||
Ok(())
|
||||
}
|
||||
};
|
||||
(peer_not $method:ident $Not:ident) => {
|
||||
($(#[$meta:meta])* peer_not $method:ident $Not:ident) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method(&self) -> Result<(), ServiceError> {
|
||||
self.send_notification(ClientNotification::$Not($Not {
|
||||
method: Default::default(),
|
||||
|
|
@ -354,7 +360,13 @@ macro_rules! method {
|
|||
|
||||
impl Peer<RoleClient> {
|
||||
method!(peer_req complete CompleteRequest(CompleteRequestParams) => CompleteResult);
|
||||
method!(peer_req set_level SetLevelRequest(SetLevelRequestParams));
|
||||
method!(
|
||||
#[deprecated(
|
||||
since = "1.8.0",
|
||||
note = "Logging is deprecated by SEP-2577 and will be removed in a future release. See https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577"
|
||||
)]
|
||||
peer_req set_level SetLevelRequest(SetLevelRequestParams)
|
||||
);
|
||||
method!(peer_req get_prompt GetPromptRequest(GetPromptRequestParams) => GetPromptResult);
|
||||
method!(peer_req list_prompts ListPromptsRequest(PaginatedRequestParams)? => ListPromptsResult);
|
||||
method!(peer_req list_resources ListResourcesRequest(PaginatedRequestParams)? => ListResourcesResult);
|
||||
|
|
|
|||
|
|
@ -272,7 +272,8 @@ where
|
|||
}
|
||||
|
||||
macro_rules! method {
|
||||
(peer_req $method:ident $Req:ident() => $Resp: ident ) => {
|
||||
($(#[$meta:meta])* peer_req $method:ident $Req:ident() => $Resp: ident ) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method(&self) -> Result<$Resp, ServiceError> {
|
||||
let result = self
|
||||
.send_request(ServerRequest::$Req($Req {
|
||||
|
|
@ -286,7 +287,8 @@ macro_rules! method {
|
|||
}
|
||||
}
|
||||
};
|
||||
(peer_req $method:ident $Req:ident($Param: ident) => $Resp: ident ) => {
|
||||
($(#[$meta:meta])* peer_req $method:ident $Req:ident($Param: ident) => $Resp: ident ) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method(&self, params: $Param) -> Result<$Resp, ServiceError> {
|
||||
let result = self
|
||||
.send_request(ServerRequest::$Req($Req {
|
||||
|
|
@ -301,7 +303,8 @@ macro_rules! method {
|
|||
}
|
||||
}
|
||||
};
|
||||
(peer_req $method:ident $Req:ident($Param: ident)) => {
|
||||
($(#[$meta:meta])* peer_req $method:ident $Req:ident($Param: ident)) => {
|
||||
$(#[$meta])*
|
||||
pub fn $method(
|
||||
&self,
|
||||
params: $Param,
|
||||
|
|
@ -321,7 +324,8 @@ macro_rules! method {
|
|||
}
|
||||
};
|
||||
|
||||
(peer_not $method:ident $Not:ident($Param: ident)) => {
|
||||
($(#[$meta:meta])* peer_not $method:ident $Not:ident($Param: ident)) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method(&self, params: $Param) -> Result<(), ServiceError> {
|
||||
self.send_notification(ServerNotification::$Not($Not {
|
||||
method: Default::default(),
|
||||
|
|
@ -332,7 +336,8 @@ macro_rules! method {
|
|||
Ok(())
|
||||
}
|
||||
};
|
||||
(peer_not $method:ident $Not:ident) => {
|
||||
($(#[$meta:meta])* peer_not $method:ident $Not:ident) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method(&self) -> Result<(), ServiceError> {
|
||||
self.send_notification(ServerNotification::$Not($Not {
|
||||
method: Default::default(),
|
||||
|
|
@ -344,7 +349,8 @@ macro_rules! method {
|
|||
};
|
||||
|
||||
// Timeout-only variants (base method should be created separately with peer_req)
|
||||
(peer_req_with_timeout $method_with_timeout:ident $Req:ident() => $Resp: ident) => {
|
||||
($(#[$meta:meta])* peer_req_with_timeout $method_with_timeout:ident $Req:ident() => $Resp: ident) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method_with_timeout(
|
||||
&self,
|
||||
timeout: Option<std::time::Duration>,
|
||||
|
|
@ -369,7 +375,8 @@ macro_rules! method {
|
|||
}
|
||||
};
|
||||
|
||||
(peer_req_with_timeout $method_with_timeout:ident $Req:ident($Param: ident) => $Resp: ident) => {
|
||||
($(#[$meta:meta])* peer_req_with_timeout $method_with_timeout:ident $Req:ident($Param: ident) => $Resp: ident) => {
|
||||
$(#[$meta])*
|
||||
pub async fn $method_with_timeout(
|
||||
&self,
|
||||
params: $Param,
|
||||
|
|
@ -412,6 +419,10 @@ impl Peer<RoleServer> {
|
|||
}
|
||||
}
|
||||
|
||||
#[deprecated(
|
||||
since = "1.8.0",
|
||||
note = "Sampling is deprecated by SEP-2577 and will be removed in a future release. See https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577"
|
||||
)]
|
||||
pub async fn create_message(
|
||||
&self,
|
||||
params: CreateMessageRequestParams,
|
||||
|
|
@ -441,7 +452,13 @@ impl Peer<RoleServer> {
|
|||
_ => Err(ServiceError::UnexpectedResponse),
|
||||
}
|
||||
}
|
||||
method!(peer_req list_roots ListRootsRequest() => ListRootsResult);
|
||||
method!(
|
||||
#[deprecated(
|
||||
since = "1.8.0",
|
||||
note = "Roots is deprecated by SEP-2577 and will be removed in a future release. See https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577"
|
||||
)]
|
||||
peer_req list_roots ListRootsRequest() => ListRootsResult
|
||||
);
|
||||
#[cfg(feature = "elicitation")]
|
||||
method!(peer_req create_elicitation CreateElicitationRequest(CreateElicitationRequestParams) => CreateElicitationResult);
|
||||
#[cfg(feature = "elicitation")]
|
||||
|
|
@ -451,7 +468,13 @@ impl Peer<RoleServer> {
|
|||
|
||||
method!(peer_not notify_cancelled CancelledNotification(CancelledNotificationParam));
|
||||
method!(peer_not notify_progress ProgressNotification(ProgressNotificationParam));
|
||||
method!(peer_not notify_logging_message LoggingMessageNotification(LoggingMessageNotificationParam));
|
||||
method!(
|
||||
#[deprecated(
|
||||
since = "1.8.0",
|
||||
note = "Logging is deprecated by SEP-2577 and will be removed in a future release. See https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577"
|
||||
)]
|
||||
peer_not notify_logging_message LoggingMessageNotification(LoggingMessageNotificationParam)
|
||||
);
|
||||
method!(peer_not notify_resource_updated ResourceUpdatedNotification(ResourceUpdatedNotificationParam));
|
||||
method!(peer_not notify_resource_list_changed ResourceListChangedNotification);
|
||||
method!(peer_not notify_tool_list_changed ToolListChangedNotification);
|
||||
|
|
|
|||
Loading…
Reference in a new issue