MCP server for code intelligence — semantic context, dependency graphs, and compressed symbol indexes for TypeScript/JavaScript, plus git-aware diffs and fast search. Zero external dependencies: no vector database, no embedding API, fully local.
This server has strong naming conventions (all tools start with action verbs: get_, search_), clear descriptions (all 60-280 chars, well-written), and well-structured Zod schemas with typed parameters. All 5 tools are explicitly registered with descriptions and input schemas visible in src/server.ts. The main weakness is that output schemas are not formally documented, responses are text-wrapped in MCP content blocks, not structured JSON objects with declared fields. Error handling returns formatted text rather than actionable recovery guidance. Tool composition is clean (each does one thing), but parameter interdependencies and format constraints could be more explicit. No security concerns detected (read-only tools, no credential parameters). STDIO transport caps protocol readiness at 50.
Returns a list of files changed since a git ref (default: HEAD~1), grouped by status (added/modified/deleted). Optionally includes the full unified diff. Use this to understand what changed in a branch or commit.
Returns a compressed semantic map of the entire project: all exported functions, classes, interfaces, and types with their signatures — no implementation bodies. Ideal for getting an overview of a large codebase in a single call (~500 tokens). Call this first when exploring an unfamiliar project.
Returns a structured tree view of the project repository, respecting .gitignore rules.
Returns the content of a file along with its local dependency tree, providing rich context for understanding the code.
Searches the codebase for text or regex patterns, returning matches with file paths and line numbers.
Output schemas not formally documented. All tools return text-wrapped responses (content: [{type: 'text', text}]) with no declared output field structure. LLMs cannot plan downstream tool calls or extract structured data without knowing field names/types.
Error handling returns generic formatted text (formatError) rather than actionable recovery guidance. Errors say 'Error: <message>' but do not suggest next steps, categorize as retryable/user-fixable/fatal, or provide invalid values + constraints.
Parameter constraints not fully specified in descriptions. For example, 'max_depth' and 'max_dependency_depth' are numbers but lack min/max bounds. 'is_regex' and 'case_sensitive' are booleans but descriptions don't explain false default clearly enough. 'output_format' has enum constraint but no description hints about when to use json vs markdown.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | <=2025-11-25 | v2 |
No pagination or result limits documented. search_codebase and get_project_index could return thousands of matches/symbols. No limit parameter, no pagination token, no max result count documented in descriptions. Risk of context window explosion.
get_semantic_context has interdependent parameters (outline_only changes what file_path returns) but this dependency is not documented in parameter descriptions.