MCP server for retrieving context from a Qdrant vector database
The server defines 2 tools with partial schema clarity. Both tools have descriptions, but parameter schemas lack detail and completeness. The naming is action-oriented (qdrant-find, qdrant-store) and appropriate for the domain. Descriptions are present but brief (89-95 chars), below the 194-char baseline for production tools. Input schemas are visible in the code but lack JSON Schema type declarations for some parameters (e.g., query_filter is declared as 'object' with no nested structure, metadata is declared as 'object' with no constraints). The store tool has a confusing parameter design: 'metadata' is marked non-optional in the schema but internally can be None, creating ambiguity for LLMs. Output schemas are minimally documented, qdrant-find returns 'list[str] | None' with no indication of structure, and qdrant-store returns a plain string with no field definitions. Error handling is not visible in the tool definitions. Security: credentials are injected via environment variables (QDRANT_URL, QDRANT_API_KEY) rather than exposed as parameters, which is correct.
Look up memories in Qdrant. Use this tool when you need to: - Find memories by their content - Access memories for further analysis - Get some personal information about the user
Keep the memory for later use, when you are asked to remember something.
Parameter schema for 'query_filter' in qdrant-find lacks structure definition. Declared as 'object' with minimal guidance. LLMs cannot determine what fields or nesting are valid.
Parameter 'metadata' in qdrant-store is marked as non-optional in schema but internally accepts None, creating a contract violation. The comment acknowledges some MCP clients cannot handle optional params correctly, but this workaround confuses LLMs about whether metadata is required.
Output schema for qdrant-find is 'list[str] | None' with no documented structure. LLMs cannot determine what each string contains or how to parse results for downstream use. The format_entry() method hints at structured output, but this is not exposed in the tool schema.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Tool descriptions are concise (89 - 95 chars) but lack guidance on when to use each tool. qdrant-find's description lists use cases but does not explain what information is returned or how to interpret results. qdrant-store lacks context on what 'memory' means in the domain or when metadata should be provided.
No error handling guidance in tool definitions. If a collection does not exist, the API returns an error, but the tool documentation does not explain recovery steps or whether the error is retryable.
Parameter 'collection_name' in both tools has a description but no enum or default value. LLMs may hallucinate collection names. The tool should either accept a well-known set of collections or guide the LLM to discover them first.