feat!: align model types with MCP 2025-11-25 spec (#927)
* feat!: align model types with MCP 2025-11-25 spec * fix: complete 2025-11-25 model spec conformance
This commit is contained in:
parent
42a1069833
commit
77932141e3
1 changed files with 4321 additions and 3886 deletions
|
|
@ -11,8 +11,8 @@ use anyhow::{Result, anyhow};
|
|||
use rmcp::{
|
||||
ServiceExt,
|
||||
model::{
|
||||
CallToolRequestParams, CallToolResult, ClientRequest, GetTaskInfoParams,
|
||||
GetTaskResultParams, JsonObject, Request, ServerResult, TaskStatus,
|
||||
CallToolRequestParams, CallToolResult, ClientRequest, GetTaskParams, GetTaskPayloadParams,
|
||||
Request, ServerResult, TaskMetadata, TaskStatus,
|
||||
},
|
||||
object,
|
||||
transport::{ConfigureCommandExt, TokioChildProcess},
|
||||
|
|
@ -53,14 +53,14 @@ async fn main() -> Result<()> {
|
|||
.await?;
|
||||
tracing::info!("quick_echo -> {echo:#?}");
|
||||
|
||||
// 2) Task call. `slow_sum` is task_support = required, so we MUST attach a
|
||||
// `task` object. An empty object is fine — clients can stash arbitrary
|
||||
// metadata here that the server-side `OperationDescriptor` will keep.
|
||||
// 2) Task call. `slow_sum` is task_support = required, so we MUST attach
|
||||
// `task` metadata. An empty `TaskMetadata` is fine; use `.with_ttl(...)`
|
||||
// to set a retention window.
|
||||
let create = client
|
||||
.send_request(ClientRequest::CallToolRequest(Request::new(
|
||||
CallToolRequestParams::new("slow_sum")
|
||||
.with_arguments(object!({ "a": 40, "b": 2 }))
|
||||
.with_task(JsonObject::new()),
|
||||
.with_task(TaskMetadata::new()),
|
||||
)))
|
||||
.await?;
|
||||
let ServerResult::CreateTaskResult(create) = create else {
|
||||
|
|
@ -77,11 +77,8 @@ async fn main() -> Result<()> {
|
|||
tokio::time::sleep(std::time::Duration::from_millis(250)).await;
|
||||
|
||||
let info = client
|
||||
.send_request(ClientRequest::GetTaskInfoRequest(Request::new(
|
||||
GetTaskInfoParams {
|
||||
meta: None,
|
||||
task_id: task_id.clone(),
|
||||
},
|
||||
.send_request(ClientRequest::GetTaskRequest(Request::new(
|
||||
GetTaskParams::new(task_id.clone()),
|
||||
)))
|
||||
.await?;
|
||||
let ServerResult::GetTaskResult(info) = info else {
|
||||
|
|
@ -108,11 +105,8 @@ async fn main() -> Result<()> {
|
|||
// here. (For a non-tool task the same value would surface as
|
||||
// `ServerResult::CustomResult` and need manual `serde_json::from_value`.)
|
||||
let payload = client
|
||||
.send_request(ClientRequest::GetTaskResultRequest(Request::new(
|
||||
GetTaskResultParams {
|
||||
meta: None,
|
||||
task_id: task_id.clone(),
|
||||
},
|
||||
.send_request(ClientRequest::GetTaskPayloadRequest(Request::new(
|
||||
GetTaskPayloadParams::new(task_id.clone()),
|
||||
)))
|
||||
.await?;
|
||||
let call_result: CallToolResult = match payload {
|
||||
|
|
|
|||
Loading…
Reference in a new issue