MCP server for indexing and querying code symbols in a codebase, building a knowledge graph of functions, classes, and methods
This server has 2 tools with basic schemas and descriptions, but suffers from significant gaps in documentation, parameter completeness, and error handling. Naming is acceptable (search_nodes, get_node_details follow verb_noun convention), but descriptions are terse (58 and 85 chars respectively, baseline avg 194). Neither tool documents its output schema. Parameter descriptions are minimal. Error handling is absent, no guidance on what to do if a node is not found or if the query returns no results. The descriptions lack context for when to use each tool or what prerequisites exist. No validation of numeric IDs or query constraints visible in the handler code.
Get detailed information about a node, including its content and children
Search for code symbols (functions, classes, methods) by name
No output schema documented for either tool. LLMs cannot know what fields to expect from search_nodes (e.g., does it return id, name, type, path, startLine, endLine?) or get_node_details. This forces LLMs to guess and wastes tokens parsing unstructured responses.
Descriptions are too short and lack context. search_nodes (58 chars) does not explain when to use it vs get_node_details, what constitutes a valid query, or what happens if no results match. get_node_details (85 chars) does not explain why you need a node ID first or what 'children' means. Baseline avg is 194 chars.
Parameter descriptions are missing or minimal. search_nodes has 'query' described vaguely ('Name or partial name of the symbol') without explaining case sensitivity, minimum length, or special characters. The 'type' parameter accepts 'function, class, method, file' but does not state whether it is case-sensitive or required. get_node_details 'id' has no description of what happens if the ID does not exist.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
No error handling or recovery guidance. Handler code shows no validation of inputs (e.g., is id a positive integer?) and no error responses. If a query returns 0 results, the LLM receives an empty list with no context, should it try a different query, or is the symbol genuinely absent? If an ID is invalid, does it return null, throw, or hang?
'type' parameter in search_nodes has no enum constraint. Free-form strings ('function', 'class', 'method', 'file') invite hallucination. An LLM could pass 'func' or 'Function' and get silently ignored results.
No pagination support. search_nodes queries the database without LIMIT, offset, or cursor. If a query like 'get' matches hundreds of nodes, all are returned, blowing the context window. Handler code shows no pagination parameters or result capping.
Tool composition issue: get_node_details returns 'children' according to the description, but the handler code does not show how children are retrieved or included. If children are related nodes via the 'edges' table, that logic is missing. This breaks the tool-chain pattern.