From 4ec85e12c6be3c79a97e798ddc61639c9a9e2acd Mon Sep 17 00:00:00 2001 From: John Howard Date: Mon, 29 Jun 2026 09:07:53 -0700 Subject: [PATCH] feat!: add server/discover model types Add the SEP-2575 server/discover request and result model. Wire it into the JSON-RPC request/result unions and cover basic serde routing. BREAKING CHANGE: Adds variants to public ClientRequest and ServerResult enums. Fixes #869 --- crates/rmcp/tests/test_deserialization.rs | 51 ++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/crates/rmcp/tests/test_deserialization.rs b/crates/rmcp/tests/test_deserialization.rs index 58e9a58a..df60cb83 100644 --- a/crates/rmcp/tests/test_deserialization.rs +++ b/crates/rmcp/tests/test_deserialization.rs @@ -1,4 +1,53 @@ -use rmcp::model::{JsonRpcResponse, ServerJsonRpcMessage, ServerResult}; +use rmcp::model::{ + ClientJsonRpcMessage, ClientRequest, JsonRpcResponse, ServerJsonRpcMessage, ServerResult, +}; +use serde_json::json; + +#[test] +fn test_discover_request() { + let message: ClientJsonRpcMessage = serde_json::from_value(json!({ + "jsonrpc": "2.0", + "id": 1, + "method": "server/discover", + "params": {} + })) + .unwrap(); + + assert!(matches!( + message, + ClientJsonRpcMessage::Request(r) + if matches!(r.request, ClientRequest::DiscoverRequest(_)) + )); +} + +#[test] +fn test_discover_result() { + let message: ServerJsonRpcMessage = serde_json::from_value(json!({ + "jsonrpc": "2.0", + "id": 1, + "result": { + "resultType": "complete", + "supportedVersions": ["2026-07-28", "2025-11-25"], + "capabilities": {}, + "serverInfo": { + "name": "test-server", + "version": "1.0.0" + }, + "ttlMs": 0, + "cacheScope": "private" + } + })) + .unwrap(); + + assert!(matches!( + message, + ServerJsonRpcMessage::Response(JsonRpcResponse { + result: ServerResult::DiscoverResult(_), + .. + }) + )); +} + #[test] fn test_tool_list_result() { let json = std::fs::read("tests/test_deserialization/tool_list_result.json").unwrap();