MCP server that provides access to a Cube semantic layer for querying cubes, views, measures, dimensions, and segments via an AI-friendly interface
Bonnard demonstrates solid definition quality with all 5 tools having clear verb-prefixed names (explore_, list_, search_, query, sql) and substantive descriptions (115-194 chars). Input schemas are present for all tools with proper type definitions and descriptions. The server implements thoughtful error classification and recovery guidance. However, output schemas are not explicitly documented, parameter constraints could be more specific, and some descriptions lack dependency hints or prerequisite guidance. The coercion logic and error handling show production consideration. Overall: B-grade (good, minor gaps).
Fetch detailed metadata (measures, dimensions, segments) for a specific cube or view. Returns formatted documentation with all available fields.
List all available cubes and views in the semantic layer with summaries showing measure, dimension, time dimension, and segment counts.
Execute a JSON query against the Cube load API. Query must specify measures, dimensions, and optional filters/segments. Returns up to 250 rows with pagination support.
Search for measures, dimensions, and segments by name or description across all cubes and views. Returns up to 50 matches.
Execute raw SQL against the Cube SQL API. Returns results with column schema and up to 250 rows of data.
Output schemas not documented in tool definitions. Users/LLMs cannot predict response structure (field names, types, pagination info) without reading source code or empirical testing.
Missing parameter constraints for numeric fields. 'query' tool accepts 'limit' (default 250) and 'offset' but no min/max bounds specified. 'search_schema' returns 'up to 50 matches' but no limit parameter exposed to control this.
No pagination metadata in tool descriptions. Tools mention result limits (250 rows, 50 matches) but do not specify whether pagination is supported, what offset/limit values are valid, or whether a next_cursor/total_count is returned.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 29 | - | v1 |
'query' tool description mentions optional filter/segment/order/limit/offset parameters but the input schema shows only 'query' as an object. The object structure/schema is not documented, LLMs cannot construct the nested object correctly.
Error handling is strong (ErrorCode enum, classifyError logic), but descriptions do not guide recovery. E.g., 'CONNECTION_ERROR' suggests the user should 'check credentials' or 'verify the Cube API is running', but no such guidance is in tool descriptions.
Missing prerequisite/dependency guidance. search_schema says 'search for measures, dimensions, segments' but does not explain when to call list_schema first to discover available cubes/views. Tool selection order is left to the LLM.