Local-first MCP server for hybrid codebase retrieval.
Strong foundation with 8 well-named tools following verb_noun convention (search, fetch, search_code, get_code_context, find_symbol, get_file_outline, get_index_status, refresh_index). All tools have descriptions (avg 120 chars, within 10-1024 baseline). Input schemas present with type definitions and constraints (enums, min/max, patterns). Tool annotations correctly applied (readOnlyHint=true for 7 tools, destructiveHint=false). Key gaps: output schemas documented in code but not visible in provided snippet; parameter descriptions vary in quality (some excellent like search_code's pathGlob, others minimal like fetch's id); error handling guidance absent from descriptions; no recovery hints for common failure modes.
Fetch the complete text and metadata for a document ID returned by search or search_code.
Find class, function, method, interface, type, enum, module, or variable definitions by identifier.
Retrieve a matched code chunk with configurable surrounding lines. Use the chunkId returned by search_code.
Return imports and symbol definitions for an indexed repository-relative path.
Return repository root, index time, counts, duration, and skipped-file statistics.
Rescan the configured repository and rebuild the in-memory retrieval index after files change. Repository files are never modified.
Output schemas documented in code (Zod shapes: symbolShape, statsShape) but descriptions lack explicit 'returns' documentation. LLMs cannot infer what fields to expect without seeing the schema in the tool definition.
Parameter descriptions inconsistent in detail. search_code's pathGlob is excellent ('Optional repository-relative globs, for example [...]'); fetch's id is minimal ('Document ID returned by search, such as code:...'). Descriptions under 50 chars risk LLM confusion.
Error handling guidance absent. Descriptions do not explain failure modes or recovery steps. E.g., search_code should note 'If no results, try broader queries or check pathGlob syntax.' fetch should explain 'Document ID must match format returned by search (e.g., code:src/file.ts:123).'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
Search indexed repository files. This standard read-only search tool is compatible with ChatGPT company knowledge and returns document IDs for fetch.
Run hybrid BM25, symbol, path, and exact-match retrieval over code chunks. Use this first for implementation, behavior, error, and call-site questions.
refresh_index (WRITE operation) lacks confirmation/dry-run pattern. Description says 'Repository files are never modified' but does not explain what happens to in-memory state or whether this is safe to call during active queries.
Result limits not documented. search returns 10 results (hardcoded .slice(0, 10)), search_code defaults topK=8 with max=50, but descriptions do not explain why these limits exist or how to paginate for more results.