Local knowledge graph for Claude Code — call graphs, impact radius, and code search via MCP, powered by Tree-sitter and SQLite. Supports Python, JS/TS, Go, Rust, Java, C#, Ruby, C/C++, Swift and more.
claude-graph provides 6 well-named, verb-prefixed tools with clear descriptions (avg 156 chars, within baseline 194). All tools have input schemas with typed parameters and descriptions. However, output schemas are not documented, responses are inferred from code (dict/list returns without explicit schema declarations). Error handling is minimal; no recovery guidance or actionable error messages. Parameter descriptions lack format constraints (e.g., 'pattern' enum values are documented in description text, not as JSON Schema enum). Missing tool annotations (readOnlyHint, destructiveHint). Composition is sound, tools chain well (e.g., search_nodes_tool → query_graph_tool). No security issues detected (no secrets in params, no destructive operations without safeguards).
Build the graph if none exists, or incrementally update it.
Node/edge/file counts and languages detected.
Blast radius of the given changed file paths: callers, importers, and tests that could be affected. `depth` controls how many hops of the `calls` graph to walk backwards from the changed files when collecting callers (default 2).
Structural query. `pattern` is one of: callers_of, callees_of, imports_of, tests_for, file_summary. `target` is a function/class name for callers_of/callees_of, or a file path for the others.
Render the graph (or a scoped neighborhood) to a self-contained, offline HTML file at .claude-graph/graph.html. `scope` is one of: full (default, whole graph), symbol (neighborhood of `symbol`), or impact (impact radius of `changed_files` at `depth`). Returns the file path — tell the user to open it in a browser; this tool does not open it for them.
Keyword search over function/class names and signatures.
Output schemas not documented. Tools return dict/list without explicit schema declarations. LLMs cannot plan downstream calls or extract fields reliably.
Enum constraints for 'pattern' and 'scope' parameters are documented in descriptions, not declared as JSON Schema enums. LLMs cannot parse valid options from schema alone.
No error handling or recovery guidance. Tools fail silently (e.g., missing database) or return empty results without actionable error messages.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
Tool names contain '_tool' suffix (query_graph_tool, get_impact_radius_tool, search_nodes_tool, render_graph_tool). Suffix is redundant; names should be verb_noun only.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot determine which tools are safe to retry or have side effects.