Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [1.7.24](https://github.com/cube-js/cube/compare/v1.7.23...v1.7.24) (2026-08-19)

### Bug Fixes

- Validate query timezone against IANA zones ([#11575](https://github.com/cube-js/cube/issues/11575)) ([d1ba22a](https://github.com/cube-js/cube/commit/d1ba22a31cdfdeb07b50cb3fc0763be6c2c57c4a))

## [1.7.23](https://github.com/cube-js/cube/compare/v1.7.22...v1.7.23) (2026-08-18)

### Performance Improvements
Expand Down
3 changes: 2 additions & 1 deletion docs-mintlify/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,8 @@
"docs/integrations/semantic-layer-sync/tableau"
]
},
"docs/integrations/mcp-server"
"docs/integrations/mcp-server",
"docs/integrations/agent-skills"
]
}
]
Expand Down
78 changes: 78 additions & 0 deletions docs-mintlify/docs/explore-analyze/charts/chart-types/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,81 @@ Cube includes a library of built-in chart types covering the most common visuali
- [HTML](/docs/explore-analyze/charts/chart-types/html)

For configuration options that apply across chart types — axes, color, series settings, tooltips — see [Configure charts](/docs/explore-analyze/charts/configuration).

## Recommended chart type

When your query returns a result, Cube outlines the one chart type that best fits it and labels it
**Recommended**. It is a suggestion: every other available type stays selectable, and the outline
yields as soon as you pick a type in that picker.

Cube never applies a chart type for you. The recommendation is always only outlined, wherever the
picker appears, and choosing a type is always your action.

### What Cube looks at

The recommendation reads the shape of your query and its result: how many measures, dimensions and
time dimensions you selected, how many distinct values each dimension has, and how long the
category labels are. It is computed in your browser and is not saved — the suggestion lasts for the
current session only.

Where a threshold is involved, it comes from
[Draco](https://idl.cs.washington.edu/papers/draco/) (Moritz et al., *Formalizing Visualization
Design Knowledge as Constraints*, IEEE VIS 2018), which encodes established visualization research
as rules: a category axis becomes crowded past 12 values, a color or stacking channel saturates
past 10 series, and no axis reads past 30 values.

One number is Cube's own rather than Draco's: a mean label length past **16 characters** counts as
long.

No threshold is applied to the number of rows. A few rules read the row count directly — a KPI
needs exactly one row, a heatmap needs its grid at least half filled — but none of them treats "too
many rows" as a reason to recommend a different chart, because the row count follows the
granularity you chose rather than the shape of your query.

### The conditions

Cube first checks whether the query disqualifies every chart, and recommends the
[table](/docs/explore-analyze/charts/chart-types/table) if it does:

| Recommendation | When |
| -- | -- |
| **Table** | The query has no measure, two time dimensions, three or more dimensions, or a category past 30 values |

A query meeting any of these has no chart encoding that reads well, so the table is the honest
answer. [Maps](/docs/explore-analyze/charts/chart-types/map) are the exception and are still
recommended over the table — a map has no category axis to crowd, so a large number of plotted
places is normal rather than unreadable.

Otherwise Cube checks these in order and takes the first that matches:

| Recommendation | When |
| -- | -- |
| **Map** | The query contains latitude and longitude |
| **KPI** | One measure, no dimensions, and a single row |
| **Line** | A measure over a time dimension, optionally split by one category of up to 10 values |
| **Scatter** | Two or more measures with no time dimension, across one category or several rows — the shape for correlating them |
| **Bar (stacked)** | One measure split by two categories, the first up to 12 values and the second up to 10 |
| **Heatmap** | One measure split by two categories, both past those bounds — the first past 12 values and the second past 10 — whose combinations fill at least half the grid |
| **Bar** | One measure across up to 12 categories whose labels average 16 characters or fewer |
| **Bar (horizontal)** | The same, where the labels are longer or the categories run past 12 |

The two [bar](/docs/explore-analyze/charts/chart-types/bar) rows are variants of the same chart
type, not separate ones.

Pie, area, boxplot and HTML are never recommended — pick them yourself. Pie's shape, one measure
across a few categories, is the one Bar already answers, and a bar chart compares those values more
accurately. All four stay available in the picker like any other chart type.

### When nothing is recommended

Cube suppresses the recommendation rather than guessing. You will see no outline when:

- no rule matches the query cleanly;
- a measure over time is split into 11 to 30 series — too many for a color channel, too few to give
up on;
- a value it needs is still unknown, such as the number of distinct values in a dimension;
- the result came back empty, so there is nothing to draw;
- the result was truncated by a row limit, so the counts it would read are incomplete;
- you have picked a type by hand in the picker you are looking at. The outline returns the next
time you open it — including on the type you applied, since Cube marks the best fit whether or
not it is already on screen.
6 changes: 3 additions & 3 deletions docs-mintlify/docs/explore-analyze/charts/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ Cube has built-in support for bar, line, area, pie, scatter, heatmap, KPI, map,

Chart type icons at the top of the chart panel let you quickly switch between common layouts — grouped vs. stacked bars, line vs. area, table vs. chart view — without opening the full configuration panel.

Cube automatically picks a chart type when you run a new query. Any manual configuration you apply is preserved when you change query fields.
When you run a query on a new tab, Cube shows the chart type picker rather than picking for you. It outlines the type that best fits your query and labels it **Recommended** — see [Recommended chart type](/docs/explore-analyze/charts/chart-types#recommended-chart-type) — but choosing one is always your action. Any manual configuration you apply is preserved when you change query fields.

### Resetting chart settings

To discard your configuration and let Cube re-select a chart type based on the current query, open the tab options menu and choose **Reset chart**.
Sections of the configuration panel — fields, series, pivot, column widths — each carry their own **Reset** control, which clears that section back to its defaults. Resetting does not change the chart type you picked.

## Generate charts with AI

Describe the visualization you want in plain language — for example, _"show this as a stacked bar grouped by status"_ — and the AI agent will build and configure it. You can also let the agent auto-suggest the best chart for your query results.
Describe the visualization you want in plain language — for example, _"show this as a stacked bar grouped by status"_ — and the AI agent will build and configure it. You can also let the agent auto-suggest the best chart for your query results. This is a separate mechanism from the **Recommended** outline in the chart type picker: the agent writes a Vega-Lite spec and applies it, while the recommendation only marks a built-in type for you to pick.

Charts generated by the AI are written as [Vega-Lite v5](https://vega.github.io/vega-lite/) specs and can be further edited in the [custom visualization](/docs/explore-analyze/charts/custom) spec editor.

Expand Down
5 changes: 5 additions & 0 deletions docs-mintlify/docs/explore-analyze/skills.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ Skills are authored by your data team as part of the semantic model. This page c
to find and run them. To create skills, see [Skills](/admin/ai/skills) in the agent
configuration docs.

This page covers **Agent Skills in Cube**. These are not
[Cube agent skills](/docs/integrations/agent-skills), which run in a coding agent and
operate Cube through the CLI, or the [Cube connector](/docs/integrations/mcp-server),
which connects Claude and other MCP clients directly to Cube.

<Frame>
<img src="https://static.cube.dev/blog/2026/06/introducing-cube-agent-skills/slash-menu.png" alt="The slash menu in Analytics Chat listing available agent skills, each with a title and description" />
</Frame>
Expand Down
119 changes: 119 additions & 0 deletions docs-mintlify/docs/integrations/agent-skills.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
---
title: Cube agent skills
description: Install official Cube skills in your coding agent to operate Cube through the CLI.
---

[Cube agent skills](https://github.com/cube-js/cube-agent-skills) are instruction
packages that teach coding agents how to use the [Cube CLI](/reference/cli). They can
explore and change the semantic model, manage saved content and access, run queries,
configure embedded analytics, and operate deployments.

> Cube agent skills run in your coding agent and operate Cube through the CLI. They are not Agent Skills in Cube, which your data team authors in the semantic model and runs from Analytics Chat.

They are also separate from the [Cube connector](/docs/integrations/mcp-server), which
connects Claude directly to Cube for natural-language analytics.

## Choose the right Cube integration

| Thing | What it is | Where it runs |
| --- | --- | --- |
| [**Cube connector**](/docs/integrations/mcp-server) | Ask Cube questions in natural language | Claude — desktop, web, Code |
| **Cube agent skills** | Operate Cube — model, content, access, deployments | Your coding agent, over the `cube` CLI |
| [**Agent Skills in Cube**](/docs/explore-analyze/skills) | Saved workflows your data team authors in the semantic model | Analytics Chat, via the `/` menu |

You can install the Cube connector and Cube agent skills together. The connector gives
Claude a direct path to governed analytics; the skills give your coding agent repeatable
operational workflows over the CLI.

## Prerequisites

Install the Cube CLI. On Linux or macOS, run:

```bash
curl -fsSL https://raw.githubusercontent.com/cube-js/cube/master/install-cli.sh | sh
```

For Windows installation and other options, see [Cube CLI installation](/reference/cli#installation).

Then authenticate with a browser:

```bash
cube login --url https://TENANT.cubecloud.dev
```

For a headless environment, set `CUBE_API_URL` and `CUBE_API_KEY` instead. See
[Cube CLI authentication](/reference/cli#authentication) for both methods.

Every skill checks that the CLI is installed, verifies authentication, and lists the
available Cube contexts before it acts, so you can confirm the target tenant.

## Install

### Claude Code

Run these commands inside Claude Code:

```text
/plugin marketplace add cube-js/cube-agent-skills
/plugin install cube@cube
```

### Codex, GitHub Copilot, Gemini CLI, and other compatible agents

Install the skills from [skills.sh](https://skills.sh):

```bash
npx skills add cube-js/cube-agent-skills
```

The source is public under Apache 2.0 at
[`cube-js/cube-agent-skills`](https://github.com/cube-js/cube-agent-skills).

## Available skills

| Skill | What it does |
| --- | --- |
| `cube-explore-model` | Searches and inspects cubes, views, measures, dimensions, joins, and model files. |
| `cube-build-model` | Authors cubes and views on a dev-mode branch, validates them, and prepares them to deploy. |
| `cube-explore-content` | Browses workbooks, dashboards, reports, folders, and scheduled notifications. |
| `cube-build-content` | Creates and updates workbooks, reports, dashboards, folders, and scheduled notifications. |
| `cube-run-query` | Runs semantic-layer queries and interprets the results. |
| `cube-configure-agent` | Inspects and tunes the in-product Cube agent, including rules, certified queries, and Agent Skills in Cube. |
| `cube-admin` | Manages users, groups, attributes, access policies, tenant settings, SCIM, and OIDC. |
| `cube-embed` | Configures embed sessions, tokens, embeddable dashboards, and embed tenants. |
| `cube-deploy` | Manages deployments, environments, environment variables, builds, and logs. |

## Use the skills

Skills activate automatically when a request matches their description. You can also name
a skill explicitly:

```text
Use cube-build-model to add a churn measure.
```

The skills distinguish between inspection and state-changing work. Exploration skills are
read-only. Skills that write first inspect the current state, confirm the Cube context, and
use the platform's normal safety boundaries, such as dev-mode branches for data model edits.

### Connector or `cube-run-query`?

Use the [Cube connector](/docs/integrations/mcp-server) when you want Claude to answer a
natural-language data question directly in a conversation. Use `cube-run-query` when the
query is part of a broader coding-agent task—for example, validating a measure you just
changed, checking exact query output before saving a report, or combining query results
with repository work.

Both paths apply the authenticated user's Cube permissions and security context. They are
complementary, so a Claude Code setup can use both.

## Troubleshooting

- **The agent says the Cube CLI is missing:** Install it from the
[Cube CLI reference](/reference/cli#installation), then start a new agent session.
- **Authentication fails:** Run `cube whoami`. If needed, sign in again with
`cube login --url https://TENANT.cubecloud.dev`.
- **The request targets the wrong tenant:** Run `cube context list` and tell the agent
which context to use.
- **A skill does not activate automatically:** Name it in the request, for example,
`Use cube-explore-model to find the revenue measure.`
59 changes: 19 additions & 40 deletions docs-mintlify/docs/integrations/mcp-server.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ description: Connect MCP-aware assistants to Cube through a hosted HTTPS endpoin

Cube MCP (Model Context Protocol) lets MCP-compatible AI clients connect to Cube over HTTPS using OAuth.

This page covers the **Cube connector**, which gives an AI assistant direct access to Cube
through MCP. It is not [Cube agent skills](/docs/integrations/agent-skills), which run in a
coding agent and operate Cube through the CLI, or
[Agent Skills in Cube](/docs/explore-analyze/skills), which are saved workflows your data
team authors for Analytics Chat.

<Note>

The MCP server is available on [Premium and Enterprise plans](https://cube.dev/pricing). <br />Users need the [Viewer][ref-roles] role or higher to interact with the MCP server. Which tools a
Expand Down Expand Up @@ -85,54 +91,27 @@ authenticated user is allowed to see.

## Connect to Claude

### Claude Code
Cube is available in the
[Claude Connectors Directory](https://claude.ai/customize/connectors). Connect it once
and use it in Claude on the web, desktop, or Claude Code—there is no endpoint to paste or
local server to configure.

```bash
claude mcp add --transport http cube-mcp-server https://cubecloud.dev/mcp
```
1. In Claude on the web or desktop, open **Customize → Connectors**.
2. Click **+**, choose **Browse connectors**, and search for **Cube**.
3. Select Cube and click **Connect**.
4. Complete the Cube OAuth flow and choose your tenant.

#### Authentication and usage flow:
On a Team or Enterprise plan, an owner may need to enable Cube first under
**Admin Settings → Connectors**.

1. Run the command copied from **Admin → MCP Server → AI Clients → Claude Code**.
2. Then run Claude and use `/mcp` to list available servers.
3. Select `cube-mcp-server` and choose `Authenticate`.
4. A browser window opens for authentication.
5. Log into Cube and choose your tenant.
6. Return to Claude Code and start asking questions.
To use Cube in a chat, open the tools menu and enable the Cube connector, then ask a data
question. In Claude Code, run `/mcp` to confirm the connector is available and authenticate
if prompted.

<Frame>
<img src="https://lgo0ecceic.ucarecd.net/68c3e7e2-def2-4aec-84a5-8cded3473def/" />
</Frame>

### Claude (Team/Enterprise)

1. Open Settings in Claude (web or desktop).
2. Scroll to **Integrations** and click **Add more**.
3. Use:
- **Integration name:** Cube MCP
- **Integration URL:** `https://cubecloud.dev/mcp`
4. Complete the OAuth flow to grant access.
5. Enable tools in any new chats.

#### Use Cube in Claude chat

1. Start a new chat in Claude.
2. Open the tools menu and enable **Cube MCP** (use the tools search if you have many tools).
3. Ask a data question. Toggle the tool off to disable it for that chat.

### Claude (Desktop app)

```json
{
"mcpServers": {
"cube-mcp-server": {
"command": "npx",
"args": ["-y", "mcp-remote", "--transport", "http", "https://cubecloud.dev/mcp"]
}
}
}
```

## Connect to Cursor

Add the MCP endpoint under Tools & MCP Settings, then complete the OAuth flow.
Expand Down
14 changes: 14 additions & 0 deletions docs-mintlify/reference/configuration/environment-variables.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -1106,6 +1106,13 @@ The default [time zone][ref-time-zone] for queries.
You can set the time zone name in the [TZ Database Name][link-tzdb] format, e.g.,
`America/Los_Angeles`.

<Warning>

An invalid value fails at server startup. Only TZ Database names are accepted — fixed
UTC offsets such as `+05:00` are rejected.

</Warning>

This is the fallback. When [user time zones](/admin/time-zones) are enabled for the
account, a resolved account, personal, dashboard, or embed zone is sent with the query and
takes precedence over this value.
Expand Down Expand Up @@ -1408,6 +1415,13 @@ for][ref-config-sched-refresh-timer].
| --------------------------------------------------------- | ---------------------- | --------------------- |
| [A valid timezone from the tz database][wiki-tz-database] | N/A | N/A |

<Warning>

An invalid value fails at server startup. Only TZ Database names are accepted — fixed
UTC offsets such as `+05:00` are rejected.

</Warning>

It can be also set using the [`scheduled_refresh_time_zones` configuration
option](/reference/configuration/config#scheduled_refresh_time_zones).

Expand Down
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": "1.7.23",
"version": "1.7.24",
"npmClient": "yarn",
"command": {
"bootstrap": {
Expand Down
6 changes: 6 additions & 0 deletions packages/cubejs-api-gateway/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [1.7.24](https://github.com/cube-js/cube/compare/v1.7.23...v1.7.24) (2026-08-19)

### Bug Fixes

- Validate query timezone against IANA zones ([#11575](https://github.com/cube-js/cube/issues/11575)) ([d1ba22a](https://github.com/cube-js/cube/commit/d1ba22a31cdfdeb07b50cb3fc0763be6c2c57c4a))

## [1.7.23](https://github.com/cube-js/cube/compare/v1.7.22...v1.7.23) (2026-08-18)

**Note:** Version bump only for package @cubejs-backend/api-gateway
Expand Down
Loading
Loading