Structural code graph queries over HTTP+SSE or stdio — parses repositories into a multi-language AST graph and exposes queryable tools for code intelligence
Five tools with complete input schemas and descriptions. Naming follows verb_noun pattern (graph_rebuild, codebase_graph_query, graph_augment, graph_status, taint_analysis). Descriptions are substantive (100-250 chars), explaining WHAT and WHEN. However, parameter descriptions lack actionable constraints (no enums for query_type values, no min/max for limit, no format specs for node IDs). Output schemas are not documented, LLMs cannot predict response structure. Error handling and recovery guidance absent. No tool annotations (readOnlyHint/destructiveHint). Composition is sound: tools chain logically (rebuild → query → augment). Risk classification present (WRITE vs READ_ONLY) but not exposed to LLM.
Query the codebase graph and return YAML results. Choose ``query_type`` based on your goal: lexical (list symbols by name/file), referential (traverse CALLS/IMPORTS/EXTENDS edges), semantic (traverse TAINT_FLOW edges), dependency (list external packages), cypher (raw Cypher for Neo4j), or gremlin (raw Gremlin for JanusGraph).
Add agent-inferred relationships (confidence < 1.0) to the graph. Record relationships you have inferred that the parser could not detect (e.g. dynamic calls).
Build or incrementally update the codebase graph. Parse the repository and write LexicalNode / edge data to the configured graph backend (Neo4j or JanusGraph). Must be called before ``codebase_graph_query`` will return results.
Return metadata about the current graph state. Check whether a graph already exists for the repository, when it was last built, node/edge counts, and backend connection status.
Trace how untrusted input propagates to dangerous sinks (SQL, shell, file I/O, outbound HTTP). This tool is only present when the codesteward-taint binary is installed. After it returns, codebase_graph_query with query_type='semantic' will return taint findings.
query_type parameter lacks enum constraint. Description lists valid values ('lexical', 'referential', 'semantic', 'dependency', 'cypher', 'gremlin') as prose, not as JSON Schema enum. LLMs will hallucinate invalid values.
Output schemas not documented. Tools return YAML results (graph_rebuild, codebase_graph_query, graph_augment, taint_analysis) but LLMs cannot predict field names, types, or structure. Agents cannot plan downstream calls or extract data reliably.
No error handling guidance. Tools lack recovery hints (e.g., 'If graph not found, call graph_rebuild first'). Agents cannot self-correct on failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
Node ID format undocumented. graph_augment requires source_id and target_id in format '{node_type}:{tenant_id}:{repo_id}:{file}:{name}' but this constraint is buried in the description, not formalized as a pattern or regex in the schema.
No tool annotations. Risk classification (WRITE vs READ_ONLY) is metadata but not exposed via destructiveHint/readOnlyHint. LLMs cannot infer idempotency or side effects from the schema alone.