MCP server for semantic code search and retrieval. Indexes C# code chunks with embeddings and provides hybrid search (semantic + keyword) and chunk lookup capabilities.
Two tools with clear verb-noun naming (search_code, get_chunk_by_id) and reasonable descriptions (194 and 108 chars respectively). Input schemas are visible and properly typed with descriptions for all parameters. However, output schemas are not documented, the code returns JSON but LLMs cannot see what fields to expect. Parameter descriptions are adequate but lack format constraints (e.g., no guidance on query length, ID format, or limit bounds). Error handling returns text messages but does not categorize errors as retryable vs. fatal or guide recovery steps. No tool annotations (readOnlyHint, idempotentHint) despite both being read-only operations.
Fetch a single indexed code chunk by its ID. Returns null if no chunk with that ID exists.
Search the indexed code base semantically. Returns up to `limit` (default 3) code chunks ranked by hybrid score (semantic similarity + keyword match). Use namespace/class/filePattern to scope the search.
Output schemas not documented. Code returns JSON with query, expandedQuery, effectiveThreshold, resultCount, suggestions, results fields for search_code and a chunk object for get_chunk_by_id, but LLMs cannot see this structure. Agents cannot plan downstream calls or extract fields reliably.
Parameter constraints missing. 'query' has no length bounds; 'limit' defaults to 3 but no min/max specified; 'id' format undefined. LLMs may pass empty strings, negative limits, or malformed IDs without guidance.
Error messages lack recovery guidance. ErrorResult() returns plain text like 'Database not initialized. Run index mode first.' but does not indicate whether the error is retryable, user-fixable, or fatal. Agents cannot decide next steps.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Tool annotations absent. Both tools are read-only and idempotent, but McpToolDescriptor does not include readOnlyHint or idempotentHint fields. Agents cannot infer safety properties without explicit hints.
Parameter descriptions lack actionable format guidance. 'namespace', 'class', 'filePattern' are described as 'Optional' but do not explain expected format (e.g., 'C# namespace like MyApp.Services', 'class name without namespace', 'glob pattern or regex'). LLMs guess at valid input.