A FastAPI-based backend for ingesting, indexing, and querying tabular data with vector search capabilities using Qdrant
Scoring was not performed
MCP server implementation is commented out (backend/app/mcp_server.py). The actual tool definitions are REST endpoints in routes_tables.py, not formal MCP tool registrations. Tools are not currently exposed via MCP protocol.
Output schemas are completely undocumented. Tools like get_table_slice and ingest_table return complex objects (rows, metadata, status), but users cannot see what fields are returned. LLMs cannot plan downstream calls without knowing output structure.
Tool descriptions are too brief and lack LLM-optimization. 'Delete a dataset and its associated data' (40 chars) does not explain when to use this vs other tools, consequences of deletion, or any prerequisites. Baseline is 50-200 chars for A+ tools.
Destructive operation (delete_table) has no confirmation mechanism or dry-run option. No error guidance on recovery. Agents could accidentally delete datasets without safeguards.
Parameter descriptions are missing or minimal. 'dataset_id' appears in 5 tools but is described only once in get_cols_for_dataset. Other tools have dataset_id with no description. The 'limit' parameter in get_table_slice has a description but no bounds (min/max constraints).
Error handling is absent. No recovery guidance. Tools do not document what errors they raise (e.g., 'dataset not found', 'invalid file format') or how to recover.
Ingest_table requires a 'file' parameter but offers no validation error guidance. If a non-CSV/TSV file is provided, the error message is unknown. LLM has no way to self-correct.
No pagination in get_table_slice despite returning rows. Offset/limit exist but tool does not return total_rows or next_cursor. LLM cannot know when pagination ends or how many rows remain.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 0 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 27 | - | v1 |