MCP server for sales analytics and business intelligence. Provides tools for analyzing sales data, inventory status, client information, and product performance from a PostgreSQL database.
The server defines 12 read-only sales/inventory analysis tools with clear, domain-specific descriptions and structured schemas. Tool naming follows verb_noun patterns well (get_*, search_*). However, parameter descriptions lack depth, many are minimal or missing actionable constraints. Output schemas are inferred from code rather than formally documented. Error handling is absent from tool definitions. No tool annotations (readOnlyHint, etc.) despite all being read-only. Missing per-parameter type precision in some cases. The server is competent for its narrow domain (sales reporting) but falls short of production-grade polish expected at 70+.
Ejecuta una consulta SELECT personalizada (solo lectura). Útil para reportes específicos no cubiertos por otras herramientas.
Agrupa clientes por frecuencia de compra para análisis de fidelidad.
Obtiene estadísticas generales de clientes: totales, nuevos, con/sin compras.
Obtiene estado del inventario con alertas de productos con stock bajo o agotados.
Agrupa productos por rangos de precio para análisis de portafolio.
Identifica productos con mayor rotación (ventas vs stock). Útil para decisiones de reorden.
No output schemas documented. While code shows SQL queries return structured objects, the tool definitions lack formal response type documentation. LLMs cannot infer what fields downstream tools need.
Missing tool annotations. All 12 tools are read-only (verified via Risk field), but none declare readOnlyHint=true in their schema. This prevents clients from optimizing caching or retry logic.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Obtiene ingresos agrupados por día/semana/mes para generar gráficos de tendencias.
Obtiene ventas filtradas por rango de fechas con paginación. Útil para reportes mensuales o personalizados.
Obtiene resumen estadístico general de todas las ventas: total vendido, tickets promedio, estado de ventas, etc.
Obtiene los clientes que más han comprado por volumen total gastado.
Obtiene los productos más vendidos por ingresos generados. Ideal para identificar bestsellers.
Busca ventas por nombre de cliente, email o ID de venta. Soporta búsqueda parcial.
Parameter descriptions lack actionable constraints. E.g., 'limit' params say 'Número de productos a retornar' (number of products to return) but do not explain that minimum is 1 or maximum is 20. Constraints are in JSON Schema but not in natural-language descriptions LLMs read first.
Four tools accept no parameters (get_sales_summary, get_products_by_price_range, get_clients_summary, get_clients_by_purchase_frequency). Tool descriptions do not hint at filtering options or when to call related tools instead. E.g., 'get_clients_summary' could mention 'For client-specific details, use get_top_clients() with a limit.'
execute_custom_query accepts arbitrary SQL. No validation visible in tool definition, relies on internal server checks. Description says 'Solo lectura, sin operaciones de escritura' (read-only, no write ops) but LLMs may attempt INSERT/UPDATE/DELETE anyway. Needs explicit error handling example in description.
No error handling guidance in tool definitions. If a date range query returns no results, or inventory threshold triggers an alert, or custom query is malformed, how should the LLM proceed? Tool descriptions do not include recovery hints.
Pagination implemented in get_sales_by_date_range and search_sales (page/limit params), but response schema does not document total_count or has_more. LLMs cannot know if there are more results to fetch.