Skip to main content

do_memory_mcp/server/tools/external_signals/
status.rs

1//! External signal provider status tool handler for MCP server
2//!
3//! This module provides the tool for checking the status of configured
4//! external signal providers.
5
6use crate::server::MemoryMCPServer;
7use anyhow::Result;
8use serde_json::json;
9use tracing::debug;
10
11impl MemoryMCPServer {
12    /// Execute the external_signal_status tool
13    ///
14    /// # Arguments
15    ///
16    /// * `input` - Parameters for status check (provider filter)
17    ///
18    /// # Returns
19    ///
20    /// Returns detailed status information about configured external signal providers
21    pub async fn execute_external_signal_status(
22        &self,
23        input: crate::mcp::tools::external_signals::ExternalSignalStatusInput,
24    ) -> Result<serde_json::Value> {
25        self.track_tool_usage("external_signal_status").await;
26
27        debug!(
28            "Getting external signal provider status for: {:?}",
29            input.provider
30        );
31
32        // Build provider status list
33        let mut providers = vec![];
34
35        // Check AgentFS provider status (example implementation)
36        let agentfs_status = crate::mcp::tools::external_signals::ProviderStatus {
37            name: "agentfs".to_string(),
38            configured: false, // Would check actual configuration
39            enabled: false,
40            connected: false,
41            last_error: None,
42            signal_count: 0,
43            weight: 0.3,
44            metadata: json!({
45                "db_path": null,
46                "sanitize": true,
47            }),
48        };
49
50        // Filter by provider if specified
51        if let Some(ref provider_filter) = input.provider {
52            if provider_filter == "agentfs" {
53                providers.push(agentfs_status);
54            }
55        } else {
56            // Return all providers
57            providers.push(agentfs_status);
58        }
59
60        let result = crate::mcp::tools::external_signals::ExternalSignalStatusOutput {
61            total_providers: providers.len(),
62            active_providers: providers
63                .iter()
64                .filter(|p| p.enabled && p.connected)
65                .count(),
66            providers,
67        };
68
69        // Convert result to JSON
70        Ok(json!(result))
71    }
72}
73
74#[cfg(test)]
75mod tests {
76    use super::*;
77
78    #[test]
79    #[allow(clippy::manual_async_fn)]
80    fn test_external_signal_status_signature_compile() {
81        // This test ensures the method signature compiles correctly
82        use crate::mcp::tools::external_signals::ExternalSignalStatusInput;
83        fn method_signature(
84            _server: &MemoryMCPServer,
85            _input: ExternalSignalStatusInput,
86        ) -> impl std::future::Future<Output = Result<serde_json::Value>> {
87            async { Ok(json!({})) }
88        }
89        let _ = method_signature; // Use the function to avoid unused warnings
90    }
91}