fix(mcp): prevent internal handler serialization errors from being silently discarded or defaulting to empty strings

This commit is contained in:
Riz Ashraf committed 2026-09-27 22:30:32 +01:00
1 parent 8f32a09399
commit febd48c65d
5 files changed
+12 -12

No files matched your search

+1 -1
View File
@@ -61,7 +61,7 @@ impl McpTool for ReadEnvFingerprintHandler {
.env_fingerprints
.read_with(|fps| fps.get(&req.namespace).cloned());
if let Some(fp) = data {
let data = serde_json::to_string(&fp).unwrap_or_default();
let data = serde_json::to_string(&fp).map_err(|e| e.to_string())?;
Ok(data)
} else {
Ok("{}".to_string())
+7 -7
View File
@@ -353,7 +353,7 @@ impl McpTool for ReadGraphHandler {
async fn execute(&self, args: Value, state: Arc<MemoryState>) -> Result<String, String> {
let req: ReadGraphTool = serde_json::from_value(args).map_err(|e| e.to_string())?;
let data = state.read_graph(|full| {
let data = state.read_graph(|full| -> Result<String, String> {
if let Some(ns) = req.namespace {
let mut filtered = BorrowedGraph::default();
for (k, v) in &full.entities {
@@ -366,11 +366,11 @@ impl McpTool for ReadGraphHandler {
filtered.relations.push(r);
}
}
serde_json::to_string(&filtered).unwrap_or_default()
serde_json::to_string(&filtered).map_err(|e| e.to_string())
} else {
serde_json::to_string(full).unwrap_or_default()
serde_json::to_string(full).map_err(|e| e.to_string())
}
});
})?;
Ok(data)
}
}
@@ -396,7 +396,7 @@ impl McpTool for SearchNodesHandler {
vec![]
};
let data = state.read_graph(|full| {
let data = state.read_graph(|full| -> Result<String, String> {
let mut result = BorrowedGraph::default();
for (id, doc_type, _, _, _) in &matches {
if doc_type == "entity"
@@ -425,7 +425,7 @@ impl McpTool for OpenNodesHandler {
async fn execute(&self, args: Value, state: Arc<MemoryState>) -> Result<String, String> {
let req: OpenNodesTool = serde_json::from_value(args).map_err(|e| e.to_string())?;
let data = state.read_graph(|full| {
let data = state.read_graph(|full| -> Result<String, String> {
let targets: HashSet<&str> = req.names.iter().map(|s| s.as_str()).collect();
let mut result = BorrowedGraph::default();
let mut connected: HashSet<&str> = HashSet::new();
@@ -650,7 +650,7 @@ impl McpTool for FindOrphansHandler {
.cloned()
.collect::<Vec<String>>()
});
let data = serde_json::to_string(&orphans).unwrap_or_default();
let data = serde_json::to_string(&orphans).map_err(|e| e.to_string())?;
Ok(data)
}
}
+2 -2
View File
@@ -276,8 +276,8 @@ impl McpTool for ReadPreferencesHandler {
async fn execute(&self, _args: Value, state: Arc<MemoryState>) -> Result<String, String> {
let data = state
.prefs
.read_with(|prefs| serde_json::to_string(prefs).unwrap_or_default());
Ok(data)
.read_with(|prefs| serde_json::to_string(prefs).map_err(|e| e.to_string()));
data
}
}