do_memory_mcp/server/tools/external_signals/
status.rs1use crate::server::MemoryMCPServer;
7use anyhow::Result;
8use serde_json::json;
9use tracing::debug;
10
11impl MemoryMCPServer {
12 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 let mut providers = vec![];
34
35 let agentfs_status = crate::mcp::tools::external_signals::ProviderStatus {
38 name: "agentfs".to_string(),
39 configured: false,
40 enabled: false,
41 connected: false,
42 last_error: Some(
43 "SDK not integrated - stub implementation, no real signal data available"
44 .to_string(),
45 ),
46 signal_count: 0,
47 weight: 0.3,
48 metadata: json!({
49 "db_path": null,
50 "sanitize": true,
51 "sdk_integrated": false,
52 "stub_implementation": true,
53 "sdk_version_available": "0.6.4",
54 }),
55 };
56
57 if let Some(ref provider_filter) = input.provider {
59 if provider_filter == "agentfs" {
60 providers.push(agentfs_status);
61 }
62 } else {
63 providers.push(agentfs_status);
65 }
66
67 let result = crate::mcp::tools::external_signals::ExternalSignalStatusOutput {
68 total_providers: providers.len(),
69 active_providers: providers
70 .iter()
71 .filter(|p| p.enabled && p.connected)
72 .count(),
73 providers,
74 };
75
76 Ok(json!(result))
78 }
79}
80
81#[cfg(test)]
82mod tests {
83 use super::*;
84
85 #[test]
86 #[allow(clippy::manual_async_fn)]
87 fn test_external_signal_status_signature_compile() {
88 use crate::mcp::tools::external_signals::ExternalSignalStatusInput;
90 fn method_signature(
91 _server: &MemoryMCPServer,
92 _input: ExternalSignalStatusInput,
93 ) -> impl std::future::Future<Output = Result<serde_json::Value>> {
94 async { Ok(json!({})) }
95 }
96 let _ = method_signature; }
98
99 #[test]
100 fn test_agentfs_status_has_sdk_unavailable_info() {
101 let status = crate::mcp::tools::external_signals::ProviderStatus {
103 name: "agentfs".to_string(),
104 configured: false,
105 enabled: false,
106 connected: false,
107 last_error: Some("SDK not integrated".to_string()),
108 signal_count: 0,
109 weight: 0.3,
110 metadata: json!({"sdk_integrated": false}),
111 };
112
113 assert!(status.last_error.is_some());
115 if let serde_json::Value::Object(map) = status.metadata {
117 assert!(map.contains_key("sdk_integrated"));
118 assert_eq!(map.get("sdk_integrated"), Some(&json!(false)));
119 }
120 }
121}