From 589815a40e5c098a2c0e9a7f11b90f27500d5b91 Mon Sep 17 00:00:00 2001 From: Jack Amadeo Date: Thu, 7 Aug 2025 12:59:38 -0400 Subject: [PATCH] fix: correct numeric types in progress notifications (#361) * fix: correct numeric types in progress notifications The standard specifies that these may be floating-point. * fix: regenerate schemas --- crates/rmcp/src/model.rs | 4 ++-- .../client_json_rpc_message_schema.json | 10 ++++------ .../server_json_rpc_message_schema.json | 10 ++++------ .../server_json_rpc_message_schema_current.json | 10 ++++------ crates/rmcp/tests/test_progress_subscriber.rs | 4 ++-- 5 files changed, 16 insertions(+), 22 deletions(-) diff --git a/crates/rmcp/src/model.rs b/crates/rmcp/src/model.rs index 7156cca..dccfb1b 100644 --- a/crates/rmcp/src/model.rs +++ b/crates/rmcp/src/model.rs @@ -758,10 +758,10 @@ const_string!(ProgressNotificationMethod = "notifications/progress"); pub struct ProgressNotificationParam { pub progress_token: ProgressToken, /// The progress thus far. This should increase every time progress is made, even if the total is unknown. - pub progress: u32, + pub progress: f64, /// Total number of items to process (or total progress required), if known #[serde(skip_serializing_if = "Option::is_none")] - pub total: Option, + pub total: Option, /// An optional message describing the current progress. #[serde(skip_serializing_if = "Option::is_none")] pub message: Option, diff --git a/crates/rmcp/tests/test_message_schema/client_json_rpc_message_schema.json b/crates/rmcp/tests/test_message_schema/client_json_rpc_message_schema.json index 5dbc97f..b780d16 100644 --- a/crates/rmcp/tests/test_message_schema/client_json_rpc_message_schema.json +++ b/crates/rmcp/tests/test_message_schema/client_json_rpc_message_schema.json @@ -762,9 +762,8 @@ }, "progress": { "description": "The progress thus far. This should increase every time progress is made, even if the total is unknown.", - "type": "integer", - "format": "uint32", - "minimum": 0 + "type": "number", + "format": "double" }, "progressToken": { "$ref": "#/definitions/ProgressToken" @@ -772,11 +771,10 @@ "total": { "description": "Total number of items to process (or total progress required), if known", "type": [ - "integer", + "number", "null" ], - "format": "uint32", - "minimum": 0 + "format": "double" } }, "required": [ diff --git a/crates/rmcp/tests/test_message_schema/server_json_rpc_message_schema.json b/crates/rmcp/tests/test_message_schema/server_json_rpc_message_schema.json index 09eca25..a0fa15e 100644 --- a/crates/rmcp/tests/test_message_schema/server_json_rpc_message_schema.json +++ b/crates/rmcp/tests/test_message_schema/server_json_rpc_message_schema.json @@ -1027,9 +1027,8 @@ }, "progress": { "description": "The progress thus far. This should increase every time progress is made, even if the total is unknown.", - "type": "integer", - "format": "uint32", - "minimum": 0 + "type": "number", + "format": "double" }, "progressToken": { "$ref": "#/definitions/ProgressToken" @@ -1037,11 +1036,10 @@ "total": { "description": "Total number of items to process (or total progress required), if known", "type": [ - "integer", + "number", "null" ], - "format": "uint32", - "minimum": 0 + "format": "double" } }, "required": [ diff --git a/crates/rmcp/tests/test_message_schema/server_json_rpc_message_schema_current.json b/crates/rmcp/tests/test_message_schema/server_json_rpc_message_schema_current.json index 09eca25..a0fa15e 100644 --- a/crates/rmcp/tests/test_message_schema/server_json_rpc_message_schema_current.json +++ b/crates/rmcp/tests/test_message_schema/server_json_rpc_message_schema_current.json @@ -1027,9 +1027,8 @@ }, "progress": { "description": "The progress thus far. This should increase every time progress is made, even if the total is unknown.", - "type": "integer", - "format": "uint32", - "minimum": 0 + "type": "number", + "format": "double" }, "progressToken": { "$ref": "#/definitions/ProgressToken" @@ -1037,11 +1036,10 @@ "total": { "description": "Total number of items to process (or total progress required), if known", "type": [ - "integer", + "number", "null" ], - "format": "uint32", - "minimum": 0 + "format": "double" } }, "required": [ diff --git a/crates/rmcp/tests/test_progress_subscriber.rs b/crates/rmcp/tests/test_progress_subscriber.rs index 24576c0..e1e4913 100644 --- a/crates/rmcp/tests/test_progress_subscriber.rs +++ b/crates/rmcp/tests/test_progress_subscriber.rs @@ -69,8 +69,8 @@ impl MyServer { let _ = client .notify_progress(ProgressNotificationParam { progress_token: progress_token.clone(), - progress: step, - total: Some(10), + progress: (step as f64), + total: Some(10.0), message: Some("Some message".into()), }) .await;