MCP server + CLI that gives Claude Code a symbol-level view of your codebase(s). Cultivated context, not codebase dumps.
Six well-named, read-only tools with strong descriptions (avg 180 chars) and complete input schemas. All parameters are typed and described. Tool names follow verb_noun convention (repo_map, read_section, find_symbol, list_repos, find_symbol_global, read_section_global). Descriptions include WHEN to use each tool and how they compose. No output schemas documented in source. Error handling present but minimal guidance. No tool annotations (readOnlyHint, etc.). Composition is excellent, tools chain naturally (repo_map → read_section, find_symbol → read_section). All parameters have descriptions and constraints (enums for kind filter, min/max for depth). Security is strong: read-only operations, no secrets exposed, path traversal protected via safeResolveWithin().
Fuzzy search for a symbol by name across the indexed codebase. Case-insensitive substring match on the symbol's own name (not its qualified name). Faster and more precise than grep for symbol-level lookups. USE THIS when: - you know (or can guess) the symbol's name but not the file - you want all definitions of a name across the repo Returns a list of matches with file, line number, kind, and signature. Follow up with read_section to fetch the body. Args: name: substring to search for, case-insensitive. kind: optional filter — one of "function", "class", "method", "interface", "type", "const".
Cross-repo symbol search. Case-insensitive substring match across every registered repo's persisted symbol index. Returns matches grouped by repo, with file path, line number, and signature. USE THIS when: - you're looking for a symbol and don't know which repo it lives in - you want to compare definitions of the same name across repos (e.g. shared types, similarly-named services) Pass `repo: <slug>` to scope to one repo. Pass `kind: <kind>` to filter by symbol kind. Faster than running grep across multiple repos.
Return the cross-repo registry: every repo the user has registered with `codemap`, with its slug, path, purpose, tech, and codemap location. USE THIS when: - the user's task might involve a repo other than the current one - you need to know what other repos exist before deciding where to look - you want to load another repo's CODEMAP via the Read tool Cheap (a few KB). Always safe to call.
Return the source code for ONE symbol, prefixed with the file's import block (top of file through the last import statement). USE THIS instead of reading the whole file when you already know which symbol you need — typically right after repo_map or find_symbol has identified it. Returns roughly 5-10x fewer tokens than reading the full file. Args: file: source file path, relative to workspace root. symbol: name of the symbol. Use dotted notation for methods (e.g. "ClassName.methodName"). A bare name is accepted if unambiguous within the file.
Output schemas not documented. LLMs cannot plan downstream calls or extract fields without knowing response structure (e.g., what fields does repo_map return? Is it a tree, flat list, or text?). Violates pattern:tool requirement.
No tool annotations (readOnlyHint, idempotentHint). All six tools are read-only and safe to retry, but LLMs cannot infer this without explicit hints. Misses current spec pattern.
Error messages in read_section are actionable ('Symbol not found', 'ambiguous'), but find_symbol and find_symbol_global error handling is not visible in source. Incomplete error guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Read one symbol's source from a specific repo, by slug. Prefixed with the repo's file's import block. USE THIS after `find_symbol_global` has identified a match in a repo other than the current one. Avoids needing to switch projects to inspect code.
Return a compact symbol-level outline of a TypeScript/JavaScript codebase: files, then classes/functions/methods/interfaces/type aliases/enums/exported consts with one-line signatures, line numbers, and (when present) the first line of the symbol's JSDoc. USE THIS FIRST when: - exploring an unfamiliar codebase - the task spans multiple files whose locations you don't yet know - you'd otherwise read several files to figure out what exists This is 5-10x cheaper than reading whole files. After repo_map shows you the relevant symbol, call read_section to fetch only that symbol's source — don't read the file. Args: path: optional subdirectory (relative to workspace root). Default: whole workspace. depth: 1 = files + top-level symbols only. 2 (default) = also include methods inside classes.
list_repos description is minimal ('Return the cross-repo registry...') and lacks WHEN guidance. Should explain when to call it relative to other tools (e.g., 'Call this first if task spans multiple repos').
No pagination support visible. If repo_map or find_symbol return large result sets, no limit or cursor mechanism shown. Could blow context window.