TypeScript code indexing and search tool with Language Server Protocol support for semantic search, symbol analysis, and AST-based code queries
This Go-based MCP server implements 8 code analysis tools with reasonable naming and basic schema coverage, but falls short in parameter descriptions and output schema documentation. Tool names follow verb_noun conventions (semantic_search, lsp_analyze, ast_grep_search, read_file) which is good. However, parameter descriptions are minimal or missing context, and there is no visible documentation of output schemas or return field structures. The server implements a custom HTTP transport and uses the mark3labs/mcp-go framework (v0.43.2), suggesting modern MCP support, but critical details about response shapes and error handling are not evident in the provided code samples.
AST-based code search using patterns
Analyze symbol at position using LSP
Find declarations of symbol at position
Find implementations of symbol at position
Search workspace symbols via LSP
Find type definitions of symbol at position
Read file contents with optional line range
Output schemas not documented. No visible description of what tools return (field names, types, structure). LLMs cannot plan downstream tool calls or extract data when return structures are opaque.
LSP tools (lsp_analyze, lsp_symbols, lsp_implementation, lsp_type_definition, lsp_declaration) lack clear descriptions of when to use each. Descriptions like 'Analyze symbol at position using LSP' are too generic, they do not explain what 'analyze' returns or when to prefer lsp_analyze over lsp_implementation.
Parameter descriptions are minimal. 'File path', 'Line', 'Character', 'Pattern' lack context about expected formats, ranges, or constraints. E.g., are lines 0-based or 1-based? What happens if line/character is out of bounds?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Semantic code search by natural language query
No error handling guidance visible. No evidence of recovery suggestions (e.g., 'File not found, verify path exists'), categorization (retryable vs. fatal), or actionable error messages. Tools return opaque failures.
read_file tool allows optional line ranges (start_line, end_line). No guidance on default behavior if end_line < start_line, or what happens if file has fewer lines than requested. This ambiguity forces LLM guessing.
ast_grep_search accepts optional 'project' parameter but description does not clarify what happens if omitted. Is there a default project? How does the tool infer scope?