Local-first hybrid semantic code search with dependency graphs and cross-repo search, providing MCP tools for searching indexed code, listing indexes, managing indexes, and indexing codebases
CocoSearch provides 11 tools with generally adequate schemas and descriptions. Most tools have clear verb-based names (search, list, get_*, clear_, index_, analyze_, extract_) and non-empty descriptions. However, significant gaps exist: output schemas are not documented (only input schemas visible), descriptions lack context about when/why to use each tool, error handling guidance is minimal, and some parameters lack adequate constraints. The server implements code search semantics well but falls short of production-grade tool definition quality. Average tool score: 62/100.
Analyze the search pipeline for a query, showing embeddings, rewriting, and retrieval stages
Delete an index and all its associated data from the database
Extract and analyze dependencies from a codebase, building the dependency graph
Get dependencies of a specific code symbol or file
Get the dependency tree for a symbol or file with depth control
Get code that depends on a specific symbol or file
Analyze the impact of changes to a symbol or file on dependent code
Get comprehensive statistics for a specific index including file counts, chunk counts, grammar failures, and staleness information
Output schemas not documented. No visibility into what fields are returned by any tool, forcing LLMs to guess at response structure and making tool chaining unreliable.
Descriptions lack context on when/why to use each tool. Most are bare one-liners describing WHAT without guidance on WHEN or why an LLM should choose this tool over similar alternatives (e.g., get_dependencies vs get_dependents vs get_dependency_tree distinction not explained).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | D | 54 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 31 | - | v1 |
Index a codebase by scanning files, chunking code, generating embeddings, and storing in the database
List all available indexes with their metadata and status
Search indexed code using semantic search with optional hybrid mode
Missing parameter constraints. Integer parameters (limit, context_before, context_after, max_depth) lack min/max bounds. Float min_score lacks range documentation (claimed 0.0-1.0 but not formally constrained). Arrays (symbol_type, include_patterns, exclude_patterns) lack item type or length constraints.
No error handling guidance. Tool descriptions do not indicate what errors might occur, how to recover, or what the LLM should do if a call fails (e.g., index_name not found, project_path invalid, permission denied on file access).
Destructive operations lack confirmation pattern. clear_index and fresh reindexing (index_codebase with fresh=true) can irreversibly delete data, but no dry-run, confirmation step, or warning is documented.
index_name and project_path parameters accept free-form strings with no format validation guidance. Unclear what constitutes a valid index name (alphanumeric? spaces? special chars?) or whether project_path must be absolute.
No pagination or result limits documented. search() can return arbitrary numbers of results but no limit parameter is documented as capped, and no pagination/offset pattern is visible.
Tool annotations missing. No destructiveHint, readOnlyHint, or idempotentHint annotations visible in schema, forcing LLMs to infer risk from descriptions alone.