A vector database MCP server running on Cloudflare Workers with OAuth authentication, providing tools for searching, retrieving, listing, upserting, and deleting documents in a mock vector database.
Server has 6 tools with complete schemas and descriptions. Naming follows verb_noun convention (vector_search, vector_get, vector_list, vector_upsert, vector_delete, health). Descriptions are present and adequate (avg ~100 chars). However, several tools lack parameter descriptions for optional fields, and output schemas are not formally documented. Error handling is basic (isError flag present but recovery guidance missing). No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification. Mock implementation limits real-world applicability.
Check if the vector DB MCP server is running.
Delete a document from the vector database by ID.
Retrieve a specific document from the vector database by its ID.
List all document IDs currently stored in the vector database.
Search the vector database with a natural language query. Returns the top-k most similar documents.
Insert or update a document in the vector database.
Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are stratified by risk (READ_ONLY, WRITE, DESTRUCTIVE) but this is not declared in the MCP schema, forcing LLMs to infer safety from descriptions alone.
Output schemas not formally documented. Tools return JSON via text content, but the structure (fields, types, required vs optional) is not declared in the tool definition. LLMs cannot plan downstream calls or validate responses.
Error handling lacks recovery guidance. vector_get and vector_delete return isError=true with a message, but do not suggest next steps (e.g., 'Try vector_list() to see available IDs'). Errors should guide the LLM toward resolution.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
vector_upsert metadata parameter lacks description. The schema declares it as z.record(z.string()).optional() but does not explain what metadata is, when to use it, or what keys are valid. LLMs cannot reason about optional parameters without guidance.
Mock vector database with hardcoded embeddings and word-overlap search. Not production-ready. Real vector DB integration (Pinecone, Weaviate, Milvus) needed for actual semantic search. Current implementation cannot handle real workloads.