#![allow(deprecated)] use rmcp::model::{ ClientCapabilities, Implementation, LoggingLevel, ProtocolVersion, RequestMetaObject, }; use serde_json::json; const META_KEY_PROTOCOL_VERSION: &str = "io.modelcontextprotocol/protocolVersion"; const META_KEY_CLIENT_INFO: &str = "io.modelcontextprotocol/clientInfo"; const META_KEY_CLIENT_CAPABILITIES: &str = "io.modelcontextprotocol/clientCapabilities"; const META_KEY_LOG_LEVEL: &str = "io.modelcontextprotocol/logLevel"; #[test] fn meta_setters_store_sep_2575_values() { let mut meta = RequestMetaObject::new(); meta.set_protocol_version(ProtocolVersion::V_2026_07_28); meta.set_client_info(Implementation::new("test-client", "1.0.0")); meta.set_client_capabilities(ClientCapabilities::default()); meta.set_log_level(LoggingLevel::Warning); assert_eq!( meta.get(META_KEY_PROTOCOL_VERSION), Some(&json!("2026-07-28")) ); assert_eq!( meta.get(META_KEY_CLIENT_INFO), Some(&json!({ "name": "test-client", "version": "1.0.0" })) ); assert_eq!(meta.get(META_KEY_CLIENT_CAPABILITIES), Some(&json!({}))); assert_eq!(meta.get(META_KEY_LOG_LEVEL), Some(&json!("warning"))); } #[test] fn with_client_context_sets_all_required_sep_2575_fields() { let meta = RequestMetaObject::with_client_context( ProtocolVersion::V_2026_07_28, Implementation::new("test-client", "1.0.0"), ClientCapabilities::default(), ); assert!( meta.missing_required_keys(&ProtocolVersion::V_2026_07_28) .is_empty() ); assert_eq!(meta.protocol_version(), Some(ProtocolVersion::V_2026_07_28)); assert_eq!( meta.client_info(), Some(Implementation::new("test-client", "1.0.0")) ); assert_eq!( meta.client_capabilities(), Some(ClientCapabilities::default()) ); } #[test] fn meta_accessors_decode_wire_values() { let meta: RequestMetaObject = serde_json::from_value(json!({ "progressToken": "progress-1", "io.modelcontextprotocol/protocolVersion": "2026-07-28", "io.modelcontextprotocol/clientInfo": { "name": "wire-client", "version": "9.0.0" }, "io.modelcontextprotocol/clientCapabilities": { "sampling": {} }, "io.modelcontextprotocol/logLevel": "error" })) .unwrap(); assert_eq!(meta.protocol_version(), Some(ProtocolVersion::V_2026_07_28)); assert_eq!( meta.client_info(), Some(Implementation::new("wire-client", "9.0.0")) ); assert!( meta.client_capabilities() .is_some_and(|capabilities| capabilities.sampling.is_some()) ); assert_eq!(meta.log_level(), Some(LoggingLevel::Error)); } #[test] fn meta_accessors_ignore_missing_or_malformed_values() { let meta: RequestMetaObject = serde_json::from_value(json!({ "io.modelcontextprotocol/protocolVersion": 20260728, "io.modelcontextprotocol/clientInfo": "not an implementation", "io.modelcontextprotocol/clientCapabilities": "not capabilities", "io.modelcontextprotocol/logLevel": "loud" })) .unwrap(); assert_eq!(meta.protocol_version(), None); assert_eq!(meta.client_info(), None); assert_eq!(meta.client_capabilities(), None); assert_eq!(meta.log_level(), None); }