Local code intelligence server with semantic search, code navigation, and symbol indexing via tree-sitter and tantivy/lancedb
The server defines 12 tools with generally clear naming and adequate descriptions, but falls short of production-grade quality due to incomplete parameter documentation, missing output schemas, and lack of error handling guidance. Tool names follow verb_noun conventions (get_*, search_*, refresh_*) which is good. Descriptions are present and in the 50-150 character range for most tools, adequate but not optimized for LLM decision-making. However, critical gaps emerge: parameter types are declared (boolean, string, integer) but descriptions for parameters are sparse or missing context. Output schemas are not documented anywhere in the provided source, the server does not declare what fields callers should expect from each tool. Error handling is completely absent from tool definitions. Security considerations around symbol_id format and injection risks are not addressed.
Comprehensive analysis of a symbol including definition, references, type info, and usage patterns
Find all implementations of an interface, trait, or abstract method
Get the call graph for a specific function or method
Get indexing diagnostics and error information
Get all symbols defined in a specific file
Get statistics about the current code index (symbol count, file count, latest index run timestamp)
Get the definition and location of a specific symbol
Get all references to a specific symbol across the codebase
No output schemas documented for any tool. Callers cannot plan downstream tool invocations without knowing what fields to expect (e.g., does get_symbol_definition return file_path, line_number, column_number?). This forces agents to infer structure from results, wasting tokens and increasing error likelihood.
Parameter descriptions are minimal or absent. For example, search_symbols accepts 'limit' with type integer but no description of valid range (1 - 100? 1 - 1000?). Agents cannot infer whether passing limit=500 will cause a timeout or return results. Missing descriptions for symbol_id, file_path, and other string parameters invite ambiguous input.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 29 | 2024-11-05+ | v1 |
Get the definition of a type/class/interface
Trigger a refresh of the code index for the bound repository
Full-text search the code index for symbols by name or content
Semantic similarity search across indexed code using embeddings
No error recovery guidance. None of the tool descriptions indicate what to do if a symbol_id is not found, if the index is stale, or if a file_path does not exist. Agents need to know: is this retryable? Should I call search_symbols first? Leaving this to agent guessing invites failures.
Pagination and result limits not documented. search_symbols and semantic_search accept a 'limit' parameter but there is no documented maximum (e.g., is it capped at 100?), no indication of whether they support offset/cursor, and no description of what happens if limit is omitted. This violates the paginated-result pattern.
Parameter 'symbol_id' is opaque and undocumented. The description does not explain: is it a file path + symbol name? A hash? An LSP SymbolInformation JSON? Agents cannot construct a symbol_id without calling search_symbols first, but the relationship is not documented. This blocks single-turn tool composition.
Tool descriptions do not specify prerequisites or assumptions. For example, search_symbols, semantic_search, and get_index_stats assume the index has been built and is up-to-date. The relationship between refresh_index and the other tools is not documented. Agents may call get_symbol_definition without knowing the index is stale, leading to 'not found' errors.
No distinction between similar discovery tools. get_file_symbols and get_symbol_definition both retrieve symbol information, but the tool descriptions do not clarify when to use each. Agents may pick the wrong one and waste a round-trip. Recommend: document the relationship and use case for each.
No security considerations documented. symbol_id, file_path parameters are strings and could be vulnerable to path traversal or injection attacks. The descriptions do not mention: are these sanitized? Are there allowed characters? Can an agent pass '../../../sensitive_file'? This is a security debt.