Dual-engine code intelligence MCP server: semantic search (Voyage Code 4 + LanceDB) and symbol intelligence (tree-sitter AST parsing)
lgrep demonstrates solid tool design with 23 well-organized tools across semantic search, symbol intelligence, and maintenance domains. All tools have descriptions (avg 180 chars, within 10-1024 baseline). Tool names follow verb_noun convention (search_semantic, index_symbols_folder, prune_orphans). Input schemas are present and typed. However, several tools lack parameter descriptions, output schemas are not documented in the source, and error handling guidance is minimal. Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are correctly applied to diagnostics and maintenance tools, showing awareness of pattern:tool-annotation. Destructive tools (prune_orphans, invalidate_cache) document the LGREP_ALLOW_DESTRUCTIVE_MCP=1 guard, addressing pattern:permission-gate partially. Parameter descriptions vary in quality: some are detailed (e.g., search_semantic's 'hybrid' param), others are sparse (e.g., index_symbols_folder's 'path' param lacks format guidance). No documented output schemas visible in source.
Return symbol outline for a single source file (functions, classes, methods). Works without prior indexing and is ideal for file-level orientation. MCP tool call only; do not invoke via shell.
Return repository file tree with ignore rules applied. Use for quick structural navigation before deeper symbol or semantic queries. MCP tool call only; do not invoke via shell.
Return symbol outlines across a repository for structural understanding. Use this for architecture mapping or broad navigation of code entities. MCP tool call only; do not invoke via shell.
Retrieve a single symbol by its stable identifier. Returns definition location, signature, and source content. Requires prior indexing via index_symbols_folder or index_symbols_repo.
Retrieve multiple symbols by their stable identifiers in a single call. Returns definition locations, signatures, and source content. Requires prior indexing.
Output schemas not documented in source code. Tools return structured responses (DiagnosticsResult, etc.) but LLMs cannot see field definitions, types, or required fields. Agents cannot plan downstream tool calls or extract data reliably.
Parameter descriptions inconsistent and sometimes minimal. 'path' parameters lack format guidance (absolute vs relative, required vs optional). 'repo' parameter in symbol tools uses 'github:owner/name@ref' format but description does not explain the syntax clearly.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | <=2025-11-25 | v2 |
Index a project for semantic search. Chunks code, embeds with Voyage Code 4, and stores in LanceDB. Incremental by default (skips unchanged files); set incremental=false to force full rebuild. Respects .gitignore and .lgrep-ignore.
Index symbols from a local repository for exact symbol lookup tools. Run before symbol search/get operations, then refresh after major code changes. MCP tool call only; do not invoke via shell.
Index symbols directly from a GitHub repository via API without cloning locally. Use for remote code exploration when a local checkout is unavailable. MCP tool call only; do not invoke via shell.
Invalidate the symbol index cache for a repository. Removes the index file and forces a fresh rebuild on next indexing. Deletion over MCP requires the server to set LGREP_ALLOW_DESTRUCTIVE_MCP=1; otherwise the call refuses deletion and says so.
Invalidate worktree-specific cache entries. For each path: removes the worktree alias from project_meta.json and unloads from server memory. If the canonical project path is gone and no aliases remain, the cache directory is deleted. Deletion over MCP requires the server to set LGREP_ALLOW_DESTRUCTIVE_MCP=1; otherwise the call refuses deletion and says so. There is no CLI equivalent. MCP tool call only; do not invoke via shell.
Return a read-only diagnostic snapshot of the lgrep daemon. Includes PID, uptime, loaded projects, active/recent jobs, and timeout/abandonment summary. Contains no secrets or env vars.
List repositories currently indexed in the symbol store. Use to discover available repository keys before symbol queries. MCP tool call only; do not invoke via shell.
Prune orphaned semantic cache directories. Dry-run by default; set dry_run=false to delete. Skips active in-memory projects and the symbols/ cache subtree. Deletion over MCP requires the server to set LGREP_ALLOW_DESTRUCTIVE_MCP=1; otherwise the call returns a preview and says so — run the CLI (`lgrep prune-orphans --execute`) instead. MCP tool call only; do not invoke via shell.
Prune stale symbol-store index files. Dry-run by default; set dry_run=false to delete. Skips active in-memory projects. Deletion over MCP requires the server to set LGREP_ALLOW_DESTRUCTIVE_MCP=1; otherwise the call returns a preview and says so — run the CLI (`lgrep prune-symbols --execute`) instead. MCP tool call only; do not invoke via shell.
Find all references to a symbol across an indexed repository. Returns file paths, line numbers, and context for each occurrence. Requires prior indexing.
Search a project's semantic index with a natural-language query. Returns ranked chunks with scores. Requires prior indexing via index_semantic. Hybrid search (vector + BM25) is default; set hybrid=false for vector-only. Auto-staleness detection triggers background re-indexing if drift is detected.
Search for symbols by name across an indexed repository. Returns matching function/class/method definitions with locations and signatures. Requires prior indexing via index_symbols_folder or index_symbols_repo.
Full-text search across an indexed repository. Returns matching lines with file paths and line numbers. Requires prior indexing.
Return semantic index status for all loaded projects. Cheap operation (memory-only counts).
Return semantic index status for a project. Shows file/chunk counts, watch state, and disk cache info. Cheap operation (memory-only for global status; deep counts require path argument).
Start watching a project for file changes and auto-reindex on edits. Watches are per-project and persistent across tool calls. Respects .gitignore and .lgrep-ignore.
Stop watching a specific project for file changes.
Stop watching all projects for file changes.
Error handling guidance absent. Destructive tools (prune_orphans, invalidate_cache) document the LGREP_ALLOW_DESTRUCTIVE_MCP=1 guard but do not explain what error the LLM receives if the guard is missing or how to recover. No actionable error messages visible.
No pagination or result-limiting guidance for search tools. search_semantic, search_symbols, search_references, search_text accept 'limit' but do not document whether results are truncated, whether a next_cursor exists, or how to fetch additional pages.
Tool composition risk: watch_start and watch_stop are separate tools, but no tool documents the current watch state or lists active watches. Agents cannot verify watch status before stopping, risking silent failures.