Skip to content

Releases: cliftonc/drizzle-cube

v0.5.6

22 Apr 19:22
Immutable release. Only release title and notes can be modified.
v0.5.6
d108fc1

Choose a tag to compare

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

12 Apr 04:12
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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 MCP tools/call wrapping 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/sdk to ^0.88.0
  • Updated TanStack Query to v5.99.0

v0.5.4

11 Apr 04:48
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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 discover REST endpoint and handleDiscover return value gain two new fields. Existing consumers that destructure cubes keep working unchanged.
  • Custom mcp.instructions is 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

10 Apr 04:24
Immutable release. Only release title and notes can be modified.
v0.5.3
a12ac49

Choose a tag to compare

Bug fix

  • fix: honor BaseQueryDefinition.joins on the joined-cube side of multi-cube plans (#646) — Table-level joins declared inside a cube's sql factory 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

06 Apr 16:53
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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

01 Apr 04:55
Immutable release. Only release title and notes can be modified.
v0.5.0
7c5242e

Choose a tag to compare

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 locale prop on CubeProvider — no remount required
  • Type-safe translation keys: TranslationKey union 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 translations prop to CubeProvider for per-app customisation
  • Server-side locale: X-DC-Locale header propagated through all adapters into SecurityContext
  • Crowdin integration: npm run i18n:push / i18n:pull for translation management
  • Crowdin In-Context editor: Live translation overlay in the dev site
  • Debug mode: debugI18n prop on CubeProvider warns 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

30 Mar 09:24
Immutable release. Only release title and notes can be modified.
v0.4.53
54c45a9

Choose a tag to compare

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 inDateRange filter rather than on the timeDimension object. Gap filling required td.dateRange, so it never triggered for these queries, resulting in missing time periods in results. Now falls back to extracting the date range from matching inDateRange filters, supporting both absolute dates and relative strings like "this month", "this year", etc.

v0.4.52

30 Mar 08:50
Immutable release. Only release title and notes can be modified.
v0.4.52
a496bde

Choose a tag to compare

Bug Fix

  • fix: handle node-postgres/Neon result format in explainQuery and getTableIndexespostgres-js returns rows as a direct array, but node-postgres (pg) and Neon drivers return a QueryResult object with a .rows property. The executor only checked Array.isArray(), causing empty EXPLAIN results for non-postgres-js users.

v0.4.51

29 Mar 11:00
Immutable release. Only release title and notes can be modified.
v0.4.51
fc01cf6

Choose a tag to compare

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

29 Mar 10:23
Immutable release. Only release title and notes can be modified.
v0.4.50
65a9612

Choose a tag to compare

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 only
  • docs: add chart tool to README MCP tools table

Full Changelog: v0.4.49...v0.4.50