Skip to main content

mcp_memory/
tools.rs

1pub struct ToolMeta {
2    pub name: &'static str,
3    pub write: bool,
4}
5
6pub const ALL_TOOLS: &[ToolMeta] = &[
7    ToolMeta { name: "create_entities",    write: true  },
8    ToolMeta { name: "create_relations",   write: true  },
9    ToolMeta { name: "add_observations",   write: true  },
10    ToolMeta { name: "delete_entities",    write: true  },
11    ToolMeta { name: "delete_observations",write: true  },
12    ToolMeta { name: "delete_relations",   write: true  },
13    ToolMeta { name: "read_graph",         write: false },
14    ToolMeta { name: "search_nodes",       write: false },
15    ToolMeta { name: "open_nodes",         write: false },
16    ToolMeta { name: "get_entity",         write: false },
17    ToolMeta { name: "graph_stats",        write: false },
18    ToolMeta { name: "search_relations",   write: false },
19    ToolMeta { name: "find_path",          write: false },
20    ToolMeta { name: "compact",            write: true  },
21];
22
23#[inline]
24pub fn tool_exists(name: &str) -> bool {
25    ALL_TOOLS.iter().any(|t| t.name == name)
26}
27
28#[inline]
29pub fn is_write_tool(name: &str) -> bool {
30    ALL_TOOLS.iter().find(|t| t.name == name).map(|t| t.write).unwrap_or(false)
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36
37    #[test]
38    fn test_tool_exists_known() {
39        assert!(tool_exists("create_entities"));
40        assert!(tool_exists("read_graph"));
41        assert!(tool_exists("search_nodes"));
42    }
43
44    #[test]
45    fn test_tool_exists_unknown() {
46        assert!(!tool_exists("nonexistent_tool"));
47    }
48
49    #[test]
50    fn test_is_write_tool() {
51        assert!(is_write_tool("create_entities"));
52        assert!(is_write_tool("delete_entities"));
53        assert!(!is_write_tool("read_graph"));
54        assert!(!is_write_tool("search_nodes"));
55    }
56
57    #[test]
58    fn test_all_tools_unique() {
59        let mut names: Vec<&str> = ALL_TOOLS.iter().map(|t| t.name).collect();
60        names.sort();
61        names.dedup();
62        assert_eq!(names.len(), ALL_TOOLS.len(), "Duplicate tool names");
63    }
64}