Semantic code search MCP server: Tree-sitter AST chunking + voyage-code-3 embeddings + hybrid retrieval (sqlite-vec + FTS5 + RRF) + Voyage rerank-2.5 + call graph expansion
Single tool 'codebase_search' has a complete JSON Schema with all parameters typed and described in Chinese. Naming follows verb_noun pattern (search_*). Description is detailed (~280 chars) but in Chinese, limiting LLM comprehension in English-first contexts. Schema includes proper types (string, integer, boolean), defaults, and descriptions. However, output schema is not documented, LLMs cannot predict return structure. No error handling guidance. No tool annotations (readOnlyHint, etc.). Parameter descriptions are functional but lack constraint examples (e.g., glob pattern syntax, score range). Missing English descriptions is a moderate gap for production use.
语义检索代码库,返回最相关的代码片段。 Args: information_request: 自然语言查询,例如"用户登录鉴权逻辑在哪里" directory_path: 要检索的代码库绝对路径 top_n: 可选,返回结果数(0 = 用默认值 SCM_TOP_N,默认 10) path_filter: 可选,文件路径过滤;含通配符按 glob 匹配(如 "*.java"、"**/service/**"), 否则按路径子串匹配(如 "controller") include_related: 可选,是否附带 call graph 关联块(调用者/被调用者),默认 True
Output schema not documented. LLMs cannot predict return structure (fields, types, pagination). Agents cannot plan downstream operations or extract results reliably.
Tool description and all parameter descriptions are in Chinese only. English-speaking LLMs and clients cannot reliably understand intent, constraints, or usage. Reduces cross-language compatibility.
No error handling guidance. Tool description does not explain failure modes (e.g., 'directory not found', 'embedding service unavailable') or recovery steps. Agents cannot self-correct on errors.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot determine if the tool is safe to retry or has side effects. Idempotency is unclear.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
Parameter constraints lack examples. 'path_filter' description mentions glob and substring matching but does not show valid patterns. 'top_n' has no min/max bounds. LLMs may pass invalid values.