From 9fe004b61d39d3d5da089ae7d7ee12bdd5365fbe Mon Sep 17 00:00:00 2001 From: anaslimem Date: Thu, 2 Apr 2026 18:00:06 +0100 Subject: [PATCH] fix: propagate client connection errors and check capability value truthiness --- .../src/capabilities.rs | 42 ++++++++++++++++++- .../src/mcp_server/builder.rs | 14 +++---- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/agent-client-protocol-core/src/capabilities.rs b/src/agent-client-protocol-core/src/capabilities.rs index ee3eff8..f50520f 100644 --- a/src/agent-client-protocol-core/src/capabilities.rs +++ b/src/agent-client-protocol-core/src/capabilities.rs @@ -67,7 +67,8 @@ impl MetaCapabilityExt for InitializeRequest { .as_ref() .and_then(|meta| meta.get("symposium")) .and_then(|symposium| symposium.get(capability.key())) - .is_some() + .and_then(|v| v.as_bool()) + .unwrap_or(false) } fn add_meta_capability(mut self, capability: impl MetaCapability) -> Self { @@ -104,7 +105,8 @@ impl MetaCapabilityExt for InitializeResponse { .as_ref() .and_then(|meta| meta.get("symposium")) .and_then(|symposium| symposium.get(capability.key())) - .is_some() + .and_then(|v| v.as_bool()) + .unwrap_or(false) } fn add_meta_capability(mut self, capability: impl MetaCapability) -> Self { @@ -185,4 +187,40 @@ mod tests { json!(true) ); } + + #[test] + fn test_has_meta_capability_false_value() { + let mut meta = serde_json::Map::new(); + meta.insert( + "symposium".to_string(), + json!({ + "version": "1.0", + "mcp_acp_transport": false + }), + ); + let client_capabilities = ClientCapabilities::new().meta(meta); + + let request = InitializeRequest::new(ProtocolVersion::LATEST) + .client_capabilities(client_capabilities); + + assert!(!request.has_meta_capability(McpAcpTransport)); + } + + #[test] + fn test_has_meta_capability_null_value() { + let mut meta = serde_json::Map::new(); + meta.insert( + "symposium".to_string(), + json!({ + "version": "1.0", + "mcp_acp_transport": null + }), + ); + let client_capabilities = ClientCapabilities::new().meta(meta); + + let request = InitializeRequest::new(ProtocolVersion::LATEST) + .client_capabilities(client_capabilities); + + assert!(!request.has_meta_capability(McpAcpTransport)); + } } diff --git a/src/agent-client-protocol-core/src/mcp_server/builder.rs b/src/agent-client-protocol-core/src/mcp_server/builder.rs index 6bd9891..8eb3578 100644 --- a/src/agent-client-protocol-core/src/mcp_server/builder.rs +++ b/src/agent-client-protocol-core/src/mcp_server/builder.rs @@ -393,17 +393,13 @@ impl ConnectTo for McpServerConnection as ConnectTo>::connect_to( - byte_streams, - client, - ) - .await, - ); - Ok(()) + as ConnectTo>::connect_to( + byte_streams, + client, + ) + .await }; let run_server = async {