MCP server providing comprehensive customer sales database access with individual table schema tools for Zava Retail DIY Business, including semantic search capabilities and PostgreSQL query execution.
This server demonstrates good definition quality with clear tool naming, well-structured schemas, and comprehensive parameter descriptions. All 4 tools use strong verb-noun naming (semantic_search_products, get_multiple_table_schemas, execute_sales_query, get_current_utc_date). Schemas are properly defined with JSON types and constraints. However, there are notable gaps in output schema documentation, error handling guidance, and some parameter descriptions could be more prescriptive. The semantic_search_products tool stands out with excellent constraint documentation (similarity_threshold 20-80 range), while execute_sales_query has extensive contextual guidance. The server caps query results at 20 rows and explicitly forbids returning UUIDs, showing thoughtful API design. Tool descriptions average ~150-200 chars, which is in the optimal range (baseline 194). Main deficiencies: output schemas not explicitly documented in parameter definitions, no error classification or recovery guidance visible, and no mention of idempotency guarantees or side-effect management.
Execute a well-formed PostgreSQL query against the sales database. Always fetch and inspect the database schema before generating any SQL using the get_multiple_table_schemas tool; use only exact table and column names, and never invent or infer data, columns, tables, or values—if the information isn't present in the schema or database, clearly state that it cannot be answered. Join related tables for clarity, aggregate results where appropriate, and limit output to 20 rows with a note that the limit is for readability. To identify store types, use the retail.store.is_online boolean: true indicates an online store, false indicates a physical store. **NEVER** return entity IDs or UUIDs in the response, as they are not meaningful to the user. Instead, use descriptive names or values.
Get the current UTC date and time in ISO format. Useful for date time relative queries or understanding the current date for time-sensitive analysis.
Retrieve schemas for multiple tables. Use this tool only for schemas you have not already fetched during the conversation.
Search for Zava products using natural language descriptions to find matches based on semantic similarity—considering functionality, form, use, and other attributes.
Output schemas not documented. Tools return results but the response structure (fields, types, pagination) is not specified in descriptions or visible in source. LLMs cannot plan downstream calls without knowing what fields to extract.
No error handling or recovery guidance. Tools do not document what errors can occur (invalid similarity_threshold, malformed SQL, DB connection failure) or what the LLM should do next (retry, ask user, fallback). Bare errors give agents nothing actionable.
execute_sales_query accepts freeform SQL with no validation hints. Description says 'never invent data' but provides no constraint format, length limit, or complexity guard. Agents can pass arbitrary SQL that hangs, errors, or leaks data. Needs validation guardrails or explicit constraints in description.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 79 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 56 | - | v1 |
No idempotency guarantees documented. semantic_search_products and execute_sales_query do not state whether repeated calls are safe (they appear to be, given read-only designation, but this must be explicit for agent safety).
get_current_utc_date has minimal description (41 chars). While technically compliant (>10 chars), description is generic and does not explain WHEN to use it (e.g., 'Call before time-relative queries like "sales last month"'). Should be 50-150 chars with context.
semantic_search_products description includes example queries ('waterproof electrical box for outdoor use') which agents may reuse literally. Should rely on constraint and enum validation, not examples in text.