Semantic vector search MCP server powered by Qdrant and FastEmbed for natural language querying of vector databases
mcp-qdrant provides 7 read-only semantic search tools with HTTP transport and basic Qdrant integration. All tools have descriptions (10-50 chars) and schemas with typed parameters, placing it in the Fair-to-Good range. However, descriptions are very brief and lack context for when/why to use each tool. Parameters are documented but lack guidance on constraints, ranges, or expected formats. No tool annotations (readOnlyHint/destructiveHint) are present. Error handling is not visible in the source. Output schemas are not explicitly documented in the tool definitions. The tool names follow verb_noun convention (search_*, filter_*, count_*, get_*), which is correct, but some tools have overlapping functionality (search_text vs filter_search vs keyword_search) without clear differentiation in descriptions. No evidence of pagination guidance in scroll_points despite being the pagination tool. Overall, definitions are present and minimally functional but fall short of production-grade LLM-optimization patterns.
Count total points in the collection
Semantic search with metadata filters
Collection statistics and information
Semantic search with keyword filtering
Paginate through points in the collection
Natural language semantic search
Search with pre-computed vectors
Tool descriptions are extremely brief (10-50 chars, mostly one-liner summaries). Rubric baseline for A+/A tools is 194 chars (median). Descriptions lack context: WHEN to use search_text vs filter_search? What are the performance tradeoffs? What does 'semantically similar' mean in this context?
Three semantic search tools (search_text, filter_search, keyword_search) overlap in functionality without clear differentiation. LLMs will struggle to pick the right one. Descriptions do not explain: 'Use search_text for simple semantic queries. Use filter_search when you need to narrow results by metadata. Use keyword_search for hybrid semantic+keyword matching.' This violates the naming clarity principle: similar names confuse LLMs.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | 2024-11-05+ | v1 |
No output schemas documented for any tool. LLMs need to know what fields are returned (e.g., does search_text return [{ id, text, score, payload }]?). Without documented output structure, agents cannot plan downstream calls or extract data correctly. Rubric baseline: 100% of A+ tools have documented return types.
No tool annotations present (readOnlyHint, destructiveHint, idempotentHint). All 7 tools are read-only operations, yet none declare readOnlyHint. Per current MCP spec (2026-07-28), tool annotations are a current pattern that helps agents reason about side effects and retry safety.
Parameter descriptions lack constraint guidance. Example: 'limit' parameter says 'Maximum number of results to return' but does not specify: range (1 - 1000?), default behavior if omitted (10 is default per schema but user context may expect more), or why a default exists. Rubric requires: 'The project key (2-10 uppercase letters)' style guidance.
scroll_points does not document pagination behavior. What does 'offset cursor' mean? Is it an opaque string? A numeric index? How does the agent know if there are more results? scroll_points should return { points: [], next_offset: '...' | null, total_count: N }. Without clear pagination semantics, agents cannot reliably iterate through collections.
Error handling not visible in tool definitions. No evidence of recovery guidance (e.g., 'If query is empty, call search_* with keywords instead'). Rubric requires error responses to tell LLMs what to do next: 'User not found. Try search_users() with a partial name.' Without guidance, agents cannot recover from failures.
search_vectors parameter 'vector' has type 'array' but no item type specified. Is it float32? float64? Does it need a fixed dimension (e.g., 384 for AllMiniLML12V2)? Without this, agents cannot validate vectors before calling the tool.