MCP server for Blazer, a business intelligence tool. Provides tools to query, manage, and explore data sources, queries, dashboards, and checks through the Model Context Protocol.
blazer-mcp demonstrates solid fundamentals: all 12 tools have clear verb-noun names (list_*, get_*, create_*, update_*), descriptions are present and contextual (avg ~120 chars), and input schemas are properly typed with descriptions. Error handling is robust, BaseTool wraps exceptions and returns structured JSON responses with actionable messages. However, output schemas are not documented (no description of what fields each tool returns), parameter descriptions lack format/constraint details (e.g., run_query's 'variables' object lacks structure guidance), and no tool annotations (readOnlyHint/destructiveHint) are present despite clear risk stratification (8 READ_ONLY, 4 WRITE). Pagination is absent from list_* tools, risking context window exhaustion. Overall: production-ready for small deployments but lacks polish for enterprise scale.
Create a new Blazer dashboard. Pass `query_ids` (ordered) to populate it. Returns the dashboard's id and (when configured) its Blazer UI url.
Save a new Blazer query. Returns the new query's id and (when configured) its Blazer UI url.
Return a Blazer dashboard: id, name, and its queries (id, name, position) in display order.
Return a saved Blazer query: id, name, description, data source, full SQL statement, and its variables.
Return a data source's schema: tables and their columns (name, type, nullable).
List Blazer checks: id, name, query id, and status.
Output schemas not documented. Tools return JSON but LLMs cannot infer field names, types, or structure. E.g., run_query returns 'columns, rows, row count, truncation/error status' as prose, not a schema. Agents cannot reliably extract or chain results.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk field is present in metadata but not exposed to LLM. 8 READ_ONLY and 4 WRITE tools should declare hints so agents know which calls are safe to retry.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
List Blazer dashboards: id, name, and creator.
List all available Blazer data sources (respecting the configured allowlist).
List saved Blazer queries: id, name, description, data source, and creator.
Execute a Blazer query (saved or ad-hoc) and return results: columns, rows, row count, and truncation/error status.
Update a Blazer dashboard's name and/or queries. Returns the dashboard's id and (when configured) its Blazer UI url.
Update a saved Blazer query. Returns the query's id and (when configured) its Blazer UI url.
List tools lack pagination. list_queries, list_dashboards, list_checks, list_data_sources have no limit/offset/page parameters. Large result sets will exhaust context window and degrade LLM reasoning.
Parameter descriptions lack format/constraint details. run_query's 'variables' param is typed as 'object' with description 'Variable substitutions for {var} placeholders' but does not specify expected structure (key-value pairs? nested objects?). Agents cannot validate input.
No confirmation/dry-run for destructive operations. create_query, update_query, create_dashboard, update_dashboard modify state but offer no preview or confirmation step. Agents can accidentally overwrite or delete data.