MCP server for code search, documentation search, GitHub search, and package fetching with hybrid BM25+vector search capabilities
Server provides 7 well-named tools with clear verb-noun patterns (search_code, get_file, list_repos). Descriptions are present and substantive (100-200 chars typical), explaining WHAT each tool does and WHEN to use it. Input schemas are visible with typed parameters and descriptions. However, output schemas are NOT documented, LLMs cannot predict what fields to expect from search results or file retrieval. Error handling guidance is absent; tools do not indicate what to do on failure (retry? lookup alternatives?). Parameter constraints are incomplete: search tools accept 'limit' but no min/max bounds are stated; 'repo_path' accepts SQL LIKE patterns but this is buried in description text, not formalized as a constraint. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles. fetch_package is marked WRITE but lacks confirmation/dry-run pattern for safety.
BM25 full-text only search over code. Best for exact identifiers, symbols, or keywords. Supports filtering by language and symbol_kind.
Download and index a package from a package ecosystem (Haskell/CHaP, Rust/crates.io, or Python/PyPI).
Retrieve the full contents of a file from an indexed repository.
List all indexed repositories with their metadata (source kind, package name, version).
Hybrid BM25+vector search over indexed code with optional cross-encoder reranking. Supports filtering by language and symbol_kind (function, class, etc.).
Hybrid BM25+vector search over indexed documentation: README files, AGENTS.md, CLAUDE.md, and .agent/** workflow/skill/plan/SOP files. Filter by doc_kind: readme, workflow, sop, plan, skill, agent_instruction.
Output schemas not documented. LLMs cannot predict what fields search_code, search_docs, search_github, or get_file return. This forces agents to guess at response structure and risks failed downstream tool chaining.
No error recovery guidance. Tools do not indicate what to do on failure (e.g., 'If search returns no results, try a broader query' or 'If repo_path is invalid, call list_repos first'). Agents have no fallback strategy.
Numeric parameter bounds not specified. 'limit' parameter in search tools has no min/max constraint stated in schema or description. LLMs may pass 0, negative, or absurdly large values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Hybrid BM25+vector search over indexed GitHub issues and pull requests. Filter by entity type (issues/prs), repository, and state (open/closed/merged).
fetch_package is a WRITE operation but lacks confirmation/dry-run pattern. Agents cannot preview what will be indexed before committing. No idempotency guarantee stated.
Tool annotations missing. No readOnlyHint or destructiveHint declared despite clear risk profiles (search_* are read-only; fetch_package is destructive). Agents cannot reason about safety.