A Model Context Protocol (MCP) server for Supavec that enables AI assistants to fetch relevant embeddings and content
The server defines 2 tools with explicit schemas and descriptions visible in src/tools/index.ts. Both tools have properly structured input schemas with type definitions and property descriptions. However, there are significant gaps in parameter documentation, no output schemas are documented, error handling is minimal, and no tool annotations are present. The tool naming follows the verb_noun pattern (fetch-embeddings, list-user-files) which is good, but parameter descriptions are inconsistent in detail and depth. The tools are simple read-only operations with basic error handling that returns unstructured error messages without actionable recovery guidance.
Fetch embeddings for a file by ID and query
List all files uploaded to Supavec for the current user
No output schemas documented. Tool descriptions state what is returned as plain text JSON, but LLMs cannot reliably parse unstructured responses or plan downstream tool calls without a formal output schema.
Error responses lack actionable recovery guidance. When fetch-embeddings fails with 'Failed to retrieve embeddings for {file_id}: {error}', the LLM has no hint on what to try next. Errors should say 'Try verifying the file_id exists by calling list-user-files' or similar.
Parameter descriptions are inconsistent and lack detail. 'order_dir' has a description 'Order direction for results' without explaining what it sorts by (creation time? file size? name?). 'limit' says 'Number of files to fetch' but should include bounds (min=1, max=100?).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Both tools are read-only and safe to retry, but this is not formally declared via MCP annotations, forcing LLMs to infer safety.
fetch-embeddings returns a joined string of document contents with no structure. The response is serialized JSON text, not a typed response object. LLMs must parse and reason about free-form text rather than working with structured fields.
list-user-files returns the entire API response (success boolean, pagination, count, results array) without filtering irrelevant metadata. The response includes raw fields like 'team_id' and 'created_at' which the LLM may not need, inflating token usage.