Releases: cliftonc/drizzle-cube
v0.5.6
Features
- Show All X Labels option for Bar, Line, and Area charts (#691, #692) — new display toggle (enabled by default) that forces recharts to render every X-axis category label instead of auto-hiding overlaps.
Fixes
- Remove ambiguous "BOTH" branch in MCP date filtering guide.
Chores
- Numerous dependency updates via Renovate.
v0.5.5
What's Changed
Fixes
- MCP validate now returns generated SQL — when auth is available, the validate tool includes the dry-run SQL in its response, making it easier to debug unexpected query results (e.g., null values)
- Remove legacy MCP dispatch — bare method-name dispatch (
discover/validate/load) that bypassed MCPtools/callwrapping has been removed; all tool calls now go through the proper MCP protocol path - Analysis builder auto-populates table columns and drops noisy validation warnings
Improvements
- Chart availability checks co-located — each chart config now contains its own availability logic instead of a central registry
- Updated
@anthropic-ai/sdkto ^0.88.0 - Updated TanStack Query to v5.99.0
v0.5.4
MCP server reliably tells the model what to do
Most MCP clients (Claude Desktop, Claude Code, …) treat prompts/* and resources/* as user-triggered slash commands, so the model never sees them. As a result, even with a date-filtering decision tree defined as an MCP prompt, the LLM kept inventing timeDimensions queries when users asked for aggregated totals.
This release fixes that by using the two channels that do reach the model on every turn:
InitializeResult.instructions
The MCP initialize handshake now returns an instructions string. Per the MCP spec, clients merge this into the LLM system prompt. The default content mandates discover-first and inlines the inDateRange-vs-timeDimensions rule.
Override or extend it via the new mcp.instructions option (string or (defaults) => string resolver):
createCubeRouter({
mcp: {
instructions: (defaults) => `${defaults}
## Acme-specific rules
- Always join Sales with Customers via customerId for revenue analysis.
- Quarterly reports use fiscal-year quarters, not calendar quarters.\`
}
})Discover now embeds the full query language reference
handleDiscover (and the discover MCP tool) returns two new fields alongside cubes:
queryLanguageReference— the complete TypeScript DSL (filter operators, time dimensions, analysis modes)dateFilteringGuide— the decision tree for date filtering vs time grouping
Because the workflow mandates discover as the first call, the model now receives the authoritative DSL on its very first tool call without an extra round trip. The discover and load tool descriptions are also strengthened with an explicit "MUST call discover first" gate.
The existing prompts/* and resources/* endpoints are kept for clients (and end-users) that do consume them, but query correctness no longer depends on them.
Adapter changes
The new mcp.instructions option is wired through all four adapters (Express, Fastify, Hono, Next.js). Existing config (prompts, resources, serverName, app, allowedOrigins, resourceMetadataUrl) is unchanged.
Documentation
The MCP Server docs have been updated with a full configuration reference, the new instructions/discover behaviour, and a "How guidance reaches the model" explainer.
Backward compatibility
- The
discoverREST endpoint andhandleDiscoverreturn value gain two new fields. Existing consumers that destructurecubeskeep working unchanged. - Custom
mcp.instructionsis optional. Existing deployments will start returning the new defaults automatically — there is no behavioural change for the LLM beyond improved query correctness.
v0.5.3
Bug fix
- fix: honor BaseQueryDefinition.joins on the joined-cube side of multi-cube plans (#646) — Table-level joins declared inside a cube's
sqlfactory were silently dropped whenever the cube participated in a multi-cube plan as the non-primary (joined) branch. Fixed in joins-processor, drizzle-plan-builder (keys CTE + agg CTE), and cte-builder (pre-aggregation CTE + propagating-filter subqueries). Adds regression test covering all three code paths.
CI
- ci: skip test matrix on version-only commits — Version bump commits (from
npm version patch) now skip the full test matrix since the parent commit was already tested. Lint, typecheck, and build still run so CI reports success for the npm-publish workflow.
v0.5.1
What's Changed
Features
- Make MCP server name configurable via MCPOptions (#615)
- Add configurable locale support to MCP App (#620)
- Make default MCP prompts and resources overrideable (#609)
Bug Fixes
- Preserve MCP table columns when switching chart types (#614)
Dependencies
- Update hono to v4.12.11, dotenv to v17.4.1, postgres to v3.4.9, eslint to v10.2.0, react-router-dom to v7.14.0, @modelcontextprotocol/ext-apps to v1.5.0, @anthropic-ai/sdk to ^0.82.0, and other dependency updates
v0.5.0
Internationalisation (i18n)
drizzle-cube now ships with full internationalisation support. All user-visible text across 170+ components is translatable.
Highlights
- Built-in locales: en-GB (default), en-US, and nl-NL (Dutch) included out of the box
- Dynamic locale switching: Change
localeprop onCubeProvider— no remount required - Type-safe translation keys:
TranslationKeyunion derived from en.json catches typos at compile time - Lazy-loaded locales: Only the active locale is fetched at runtime (en-GB bundled statically)
- Translation overrides: Pass custom
translationsprop toCubeProviderfor per-app customisation - Server-side locale:
X-DC-Localeheader propagated through all adapters intoSecurityContext - Crowdin integration:
npm run i18n:push/i18n:pullfor translation management - Crowdin In-Context editor: Live translation overlay in the dev site
- Debug mode:
debugI18nprop onCubeProviderwarns on missing translation keys - Chart configs store keys, components resolve: Translation happens at render time for proper locale reactivity
Breaking Changes
None — locale and translations are optional props with backwards-compatible defaults.
Migration
No changes required. Existing apps continue to work in en-GB. To enable i18n:
<CubeProvider locale="nl-NL" ...>See the Internationalisation guide for full documentation.
v0.4.53
Bug Fix
- fix: gap filling now works when dateRange is on filter instead of timeDimension — The AnalysisBuilder (and common API usage) puts date ranges in an
inDateRangefilter rather than on thetimeDimensionobject. Gap filling requiredtd.dateRange, so it never triggered for these queries, resulting in missing time periods in results. Now falls back to extracting the date range from matchinginDateRangefilters, supporting both absolute dates and relative strings like "this month", "this year", etc.
v0.4.52
Bug Fix
- fix: handle node-postgres/Neon result format in explainQuery and getTableIndexes —
postgres-jsreturns rows as a direct array, butnode-postgres(pg) and Neon drivers return aQueryResultobject with a.rowsproperty. The executor only checkedArray.isArray(), causing empty EXPLAIN results for non-postgres-js users.
v0.4.51
What's Changed
MCP Accept header compatibility
Fixed connection errors with Claude app (Desktop/Web). The MCP transport strictly required Accept: application/json, text/event-stream on every POST, but Claude's initial probe sends application/json alone. The 400 rejection caused "Couldn't reach the MCP server" errors in the UI.
Now accepts application/json alone (responds with JSON, no SSE streaming) and */* wildcard. The spec-compliant dual header still works as before.
Changes
fix: accept JSON-only Accept header for MCP compatibility
Full Changelog: v0.4.50...v0.4.51
v0.4.50
What's Changed
Separate load and chart MCP tools
The load tool now returns data as text only — no chart UI. A new chart tool executes the same query but renders an interactive chart visualization via MCP App.
This lets AI models choose between raw data retrieval (load) and visual presentation (chart), giving users cleaner responses when they just need numbers.
| Tool | Purpose |
|---|---|
drizzle_cube_discover |
Find relevant cubes by topic |
drizzle_cube_validate |
Validate queries with auto-corrections |
drizzle_cube_load |
Execute queries and return data |
drizzle_cube_chart |
Execute queries with interactive chart visualization |
Changes
feat: split load/chart MCP tools — chart renders UI, load returns data onlydocs: add chart tool to README MCP tools table
Full Changelog: v0.4.49...v0.4.50