A Model Context Protocol (MCP) server that provides chat functionality with Cube's AI agent for analytics and data exploration
The server defines 1 tool ('chat') with a complete input schema and reasonable description. The tool schema is properly structured with required parameters, nested objects, and array types. However, there are significant gaps in parameter descriptions, missing output schema documentation, and no error handling guidance. The tool does one primary job (interact with Cube AI), but the definition lacks production-grade completeness expected at scores above 70.
Chat with Cube AI agent for analytics and data exploration. Returns streaming response with AI insights, tool calls, and data visualizations. Supports both external users (with custom attributes) and internal Cube users (with existing permissions).
Output schema not documented. Tool description states it 'Returns streaming response with AI insights, tool calls, and data visualizations' but no formal output schema is defined in the code or specification. LLMs cannot predict what fields to extract or plan downstream operations.
Parameter 'userAttributes' uses generic 'object' type without explicit field definitions. Schema defines items as object with 'name' and 'value' properties, but the description is vague: 'Array of user attributes for row-level security (only valid with externalId). Each attribute has 'name' and 'value' properties.' No guidance on what valid attribute names are, whether they're case-sensitive, or what format values should take.
No error handling guidance in tool definition. Code throws errors like 'Cube Chat API URL not configured' and 'Cannot provide both externalId and internalId', but the tool description and schema do not document error conditions or recovery steps. LLMs receive raw error strings with no context for next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | 2024-11-05+ | v1 |
Mutual exclusivity constraints documented inconsistently. The code validates that externalId and internalId are mutually exclusive, and that userAttributes only work with externalId. The schema descriptions mention this, but a formal constraint mechanism (oneOf, dependentSchemas) is not used. LLMs may still pass both parameters, relying on runtime validation.
Streaming response handling not documented in tool definition. The implementation iterates over response.body as a stream and accumulates content, but the tool description does not specify whether the output is a single text response, a structured object with streaming fields, or something else. Agents cannot predict the format.