From 5bc2b278f3e70aeb2c773016d8eb0634d12a7288 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:18:54 +0000 Subject: [PATCH 001/117] docs: document undocumented Cube Cloud features from cubejs-enterprise - MCP server: document the new manageFolders tool, and the six new branch/commit tools (getBranchState, commitDataModelChanges, commitToNewBranch, mergeToDefaultBranch, discardDataModelChanges, switchUserBranch) that let an MCP client commit, publish, and switch branches directly. Corrects the now-false "the MCP server deliberately exposes no commit tool" safety claim, and updates the tool count and destructive-tool list. - Excel/Sheets add-ins: document the new Row totals switch (mirrors Column totals), the new ability to organize saved explorations into folders from chat, and dragging an exploration onto the chat composer to attach it as context. Corrects the chat history section, which now syncs via a server-side Chat History list rather than staying local to the device. - Analytics Chat: note the agent can now organize saved work into folders. - Embed APIs: document the new POST /api/v1/embed/session/revoke endpoint for ending a signed-embed session from a logout handler. - Embedding feature visibility: allowExport now also governs CSV download from a workbook's report builder in Creator Mode, not just dashboard chart widgets. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- .../docs/explore-analyze/analytics-chat.mdx | 1 + .../docs/integrations/google-sheets.mdx | 36 +++++++- .../docs/integrations/mcp-server.mdx | 83 +++++++++++++++---- .../docs/integrations/microsoft-excel.mdx | 36 +++++++- .../embedding/iframe/feature-visibility.mdx | 2 +- .../reference/embed-apis/generate-session.mdx | 29 +++++++ 6 files changed, 162 insertions(+), 25 deletions(-) diff --git a/docs-mintlify/docs/explore-analyze/analytics-chat.mdx b/docs-mintlify/docs/explore-analyze/analytics-chat.mdx index 8ef3eaaa2dfc2..b3631bb6ccdb6 100644 --- a/docs-mintlify/docs/explore-analyze/analytics-chat.mdx +++ b/docs-mintlify/docs/explore-analyze/analytics-chat.mdx @@ -17,6 +17,7 @@ The AI agent interprets your questions, generates queries against your semantic - **Semantic model integration** – All queries run against your semantic model with proper access control and security, honoring the active [security context](/docs/explore-analyze/workbooks/querying-data#applying-a-security-context)—including an override applied by a developer or admin - **Queued messages** – Send follow-up messages while the agent is still processing - **Save your results** – Ask the agent to save a result as a [report](/docs/explore-analyze/workbooks) inside a workbook, or as a standalone [exploration](/docs/explore-analyze/explore#saving-explorations) when you don't want to create a workbook +- **Organize saved work** – Ask the agent to save an exploration into a specific [folder](/docs/organize-content/folders), or to list, create, rename, move, or delete folders in your workspace. Deleting a folder this way doesn't delete what's inside it — its contents move to the workspace root - **Link saved artifacts** – The agent can link an existing exploration, workbook, or dashboard to the conversation, on request or automatically when it creates or edits one, so you can reopen it from the thread later ## Discover available fields diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index 77449f367069d..1d6872d552cb1 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -181,6 +181,28 @@ change. {/* TODO: screenshot — a pivoted exploration with the Total row on the sheet */} +### Row totals + +The **Row totals** switch, next to **Column totals** on the **Display** tab, +appends a bold **Total** column at the right of the written range, totaling +each row across the pivot columns. It needs both a measure and a dimension on +**Columns** to pivot across — it's disabled, with a tooltip explaining which +is missing, until both are set. With measures on **Columns**, each measure +gets its own total column; with measures on **Rows**, a single total column +covers them all, since each row already holds one measure. + +Like column totals, each total comes from a separate query grouped by the +opposite zone, so it's correct for non-additive measures. With both switches +on, the cell where they meet holds a grand total across the whole result; a +corner total that can't be derived is left blank rather than restating a row +or column total. + +Row totals are saved with the exploration and survive **Refresh**; with +auto-run off, toggling the switch waits for **Run** like any other display +change. + +{/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} + When your exploration is ready, click **Save** to add it to your workspace. You can then [work with the exploration](#work-with-explorations) from the add-on. To discard an unsaved exploration instead, choose **Delete exploration** from @@ -264,7 +286,13 @@ The chat pane is currently in preview, and the tools it can call may still chang With chat enabled, the add-on's sidebar gains a pane that can act on the spreadsheet, not just answer questions about it. Ask it to run a query and place the results, or refresh or clear a placed exploration. It can also -create, rename, or delete a sheet. +create, rename, or delete a sheet, and organize your saved explorations into +[folders][ref-folders] — list, create, rename, move, or delete one on +request. Deleting a folder this way doesn't delete what's inside it; its +contents move to the workspace root. + +Drag a saved exploration or an unsaved draft from the workbook list onto the +chat composer to attach it as context for your next question. Before any destructive or ambiguous action — writing over an occupied area, clearing a placement, renaming or deleting a sheet — the pane asks you to @@ -272,9 +300,8 @@ confirm first. A query the agent places lands as an **unsaved** exploration; save it yourself if you want to keep it. Answers are tables, not charts — the chat pane doesn't render -visualizations. Chat history is stored locally per spreadsheet, on the -device where you had the conversation — it isn't available if you open the -file elsewhere. +visualizations. Past conversations are listed under **Chat History** in the +pane and sync with your Cube account, so they're available from any device. {/* TODO: screenshot — the chat pane open in the add-on sidebar */} @@ -288,3 +315,4 @@ file elsewhere. [ref-sql-api-enabled]: /reference/core-data-apis/sql-api#cube-cloud [ref-explorations]: /docs/explore-analyze/explore#saving-explorations [ref-calculated-fields]: /docs/explore-analyze/workbooks/calculated-fields +[ref-folders]: /docs/organize-content/folders diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 5c178dd70af75..5b7162003cd68 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -233,7 +233,7 @@ queried. ## Available actions -The MCP server exposes 23 tools, grouped below. +The MCP server exposes 30 tools, grouped below. Every tool runs as the authenticated user. Queries respect the same [permissions][ref-roles] as the rest of Cube, including row-level security — MCP is a new @@ -243,10 +243,11 @@ way to reach your data, not a new access surface. Each tool is annotated as read-only or destructive. MCP clients that honor these annotations — including Claude — run read-only tools automatically and **always ask for -confirmation** before any of the six destructive ones: `updateReport`, `deleteReport`, -`updateDashboard`, `publishDashboard`, `writeDataModelFile`, and `deleteDataModelFile`. -Nothing that changes a workbook report, an exploration, a dashboard, or your data model -happens without an explicit approval. +confirmation** before any of the nine destructive ones: `updateReport`, `deleteReport`, +`manageFolders`, `updateDashboard`, `publishDashboard`, `writeDataModelFile`, +`deleteDataModelFile`, `mergeToDefaultBranch`, and `discardDataModelChanges`. Nothing +that changes a workbook report, an exploration, a dashboard, your data model, or a +workspace folder happens without an explicit approval. ### Deployments and chat @@ -297,6 +298,7 @@ programmatically. Creating and editing workbooks requires the Explorer role or h | `readReport` | Reads one workbook report or standalone exploration by id — its title, SQL, chart spec, placement, and a shareable URL. | Read-only | | `updateReport` | Edits an existing workbook report or exploration in place, keeping its `reportId`. Send only the fields you want to change. | Destructive — prompts | | `deleteReport` | Deletes a workbook report or exploration. | Destructive — prompts | +| `manageFolders` | Lists, creates, renames, moves, or deletes the [workspace folders][ref-folders] standalone explorations, workbooks, and dashboards are filed in. | Destructive — prompts | | `updateDashboard` | Saves the dashboard layout to the workbook **draft**. Replaces the full widget set and does not go live. | Destructive — prompts | | `publishDashboard` | Publishes the current draft to make it live. Idempotent — republishing an unchanged draft is a no-op. | Destructive — prompts | @@ -304,6 +306,12 @@ Drafts are the safety net here: `updateDashboard` only ever writes to the draft, published dashboard keeps serving its previous version until you approve `publishDashboard`. See [Build a dashboard](#build-a-dashboard) for the full sequence. +Call `manageFolders` with `action: "list"` first to get a folder's numeric id — that id, +not its name, is what `folderId` takes on `createReport` and `updateReport` to place a +standalone exploration inside it. Deleting a folder does not delete what's inside it; +its contents move to the workspace root, and a folder that still holds sub-folders can't +be deleted. + **To change an existing report, use `updateReport` — never recreate it.** A dashboard's chart widget points at a specific `reportId`, so replacing a report with a new one orphans every widget referencing it. The same caution applies to moving a report between workbooks: @@ -343,7 +351,7 @@ variable is set without ever seeing what it is set to. #### How model edits stay safe -Letting an AI client edit your semantic model is safe because of four constraints built +Letting an AI client edit your semantic model is safe because of five constraints built into the MCP server: - **Edits never touch production.** Every write goes to a personal dev branch named @@ -352,20 +360,51 @@ into the MCP server: - **`startDataModelEdit` is the only entry point.** It returns the dev `branchName`, and `writeDataModelFile` and `deleteDataModelFile` require it. There is no way to write without going through it first. -- **Promotion is manual and human.** To publish model changes you commit the dev branch - from the Cube UI, as described in [Development mode][ref-dev-mode]. The MCP server - deliberately exposes no commit tool — an AI client can prepare changes, but only a - person can ship them. -- **Registration is permission-gated.** Every tool in the two sections above — the six - model-editing tools, `getBranchDiff`, `getDeploymentEnv`, and both pre-aggregation - tools — is offered only to users whose role allows editing the semantic model. A Viewer - never sees them at all. +- **Publishing to production needs an explicit ask.** `mergeToDefaultBranch` — the tool + that makes a branch live — is marked destructive so a client always prompts for + confirmation, and its own description tells the agent to call it only when you've + asked to publish, never on its own initiative after a commit. See [Committing and + publishing changes](#committing-and-publishing-changes). +- **Registration is permission-gated.** Every tool in the three sections above and below + — the six model-editing tools, `getBranchDiff`, `getDeploymentEnv`, the six commit and + branch tools, and both pre-aggregation tools — is offered only to users whose role + allows editing the semantic model. A Viewer never sees any of them. - **Verification happens on the branch, before a merge, not after.** Pass the dev `branchName` to `runQuery` to check that an edit returns the right data — `valid: true` from `writeDataModelFile` only means the model compiles, not that it's correct. Review pending work with `getDataModelChanges` before you commit. +### Committing and publishing changes + +Editing the model with the tools above only ever writes to a personal dev branch's +working copy — until it's committed, the change exists nowhere a person can see it. +These tools commit that work, publish it, or throw it away. They're registered under +the same semantic-model permission as the data model tools above, and a client can call +them without ever using the Cube UI. + +| Tool | Description | Access | +| --- | --- | --- | +| `getBranchState` | Reports the branch this session works on, the branch the user is looking at in the Cube console, the deployment's default branch, and whether the session's branch has uncommitted edits. | Read-only | +| `commitDataModelChanges` | Commits the dev branch's edits onto the branch it was created from. | Write | +| `commitToNewBranch` | Commits the dev branch's edits to a new branch instead, optionally opening a pull request. | Write | +| `mergeToDefaultBranch` | Merges a committed branch into the deployment's default branch, making it live for everyone. | Destructive — prompts | +| `discardDataModelChanges` | Resets the dev branch to its parent (or to a given commit hash), throwing away pending edits. | Destructive — prompts | +| `switchUserBranch` | Switches the user's own console over to a branch, the same action as the branch switcher in the UI, so they can see and test what was committed. | Write | + +These mirror the "Commit & Sync", "Merge" / "Create a Pull Request", and branch-switching +actions described in [Development mode][ref-dev-mode] — a client can now drive that same +flow instead of asking you to click through it. + +Call `getBranchState` before editing, so work doesn't land on a branch the user never +looks at, and again after committing, to see whether the user still needs +`switchUserBranch` to see it. `commitDataModelChanges` refuses to commit a dev branch +whose parent is the deployment's default branch unless the call also sets +`confirmPublishToDefaultBranch` — publishing that way should only happen once you've +said so. `mergeToDefaultBranch` is separate from committing: it publishes an already +committed branch, and its description tells the agent to call it only when you've +explicitly asked to publish or merge to production. + ### Pre-aggregations These tools inspect and trigger [pre-aggregation][ref-pre-aggregations] builds. They are @@ -445,13 +484,24 @@ with `writeDataModelFile` or `deleteDataModelFile`, passing that `branchName`. E recompiles the model and reports validation errors, so you can iterate until it compiles. Before committing, verify the change returns the right data: call `runQuery` with the same `branchName` and check the numbers, since a compiling model can still return wrong results. -Review the result with `getDataModelChanges`, then commit the branch from the Cube UI to -publish it. +Review the result with `getDataModelChanges`, then see [Commit and publish a model +edit](#commit-and-publish-a-model-edit) to land the change and make it live. To review a branch you didn't author — a colleague's feature branch, say — call `getBranchDiff` with its name instead. It compares against the deploy branch and returns the full changed-file list even when the patch itself is trimmed. +### Commit and publish a model edit + +Once `writeDataModelFile` edits compile and `runQuery` confirms they return the right +data, call `commitDataModelChanges` to land them on the branch the dev branch forked +from — or `commitToNewBranch` to put them on a new branch instead, optionally with a +pull request. Offer `switchUserBranch` so you can see the result in the Cube console. +Only call `mergeToDefaultBranch` once you've explicitly asked to publish; it makes the +branch live for everyone and can't be undone from the response it returns. Call +`getBranchState` at any point to check which branch you and the session are each on, and +`discardDataModelChanges` to throw away an edit that isn't working out. + ### Verify a pre-aggregation After adding or changing a pre-aggregation, call `getPreAggregationStatus` to see whether @@ -475,3 +525,4 @@ and friends) are set. [ref-workbooks]: /docs/explore-analyze/workbooks [ref-dashboards]: /docs/explore-analyze/dashboards [ref-dev-mode]: /docs/data-modeling/dev-mode +[ref-folders]: /docs/organize-content/folders diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index 002df503e42cc..e0b614d50f492 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -170,6 +170,28 @@ change. {/* TODO: screenshot — a pivoted exploration with the Total row on the sheet */} +### Row totals + +The **Row totals** switch, next to **Column totals** on the **Display** tab, +appends a bold **Total** column at the right of the written range, totaling +each row across the pivot columns. It needs both a measure and a dimension on +**Columns** to pivot across — it's disabled, with a tooltip explaining which +is missing, until both are set. With measures on **Columns**, each measure +gets its own total column; with measures on **Rows**, a single total column +covers them all, since each row already holds one measure. + +Like column totals, each total comes from a separate query grouped by the +opposite zone, so it's correct for non-additive measures. With both switches +on, the cell where they meet holds a grand total across the whole result; a +corner total that can't be derived is left blank rather than restating a row +or column total. + +Row totals are saved with the exploration and survive **Refresh**; with +auto-run off, toggling the switch waits for **Run** like any other display +change. + +{/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} + When your exploration is ready, click **Save** to add it to your workspace. You can then [work with the exploration](#work-with-explorations) from the add-in. To discard an unsaved exploration instead, choose **Delete exploration** from @@ -253,7 +275,13 @@ The chat pane is currently in preview, and the tools it can call may still chang With chat enabled, the add-in's sidebar gains a pane that can act on the workbook, not just answer questions about it. Ask it to run a query and place the results, or refresh or clear a placed exploration. It can also -create, rename, or delete a sheet. +create, rename, or delete a sheet, and organize your saved explorations into +[folders][ref-folders] — list, create, rename, move, or delete one on +request. Deleting a folder this way doesn't delete what's inside it; its +contents move to the workspace root. + +Drag a saved exploration or an unsaved draft from the workbook list onto the +chat composer to attach it as context for your next question. Before any destructive or ambiguous action — writing over an occupied area, clearing a placement, renaming or deleting a sheet — the pane asks you to @@ -261,9 +289,8 @@ confirm first. A query the agent places lands as an **unsaved** exploration; save it yourself if you want to keep it. Answers are tables, not charts — the chat pane doesn't render -visualizations. Chat history is stored locally per workbook, on the device -where you had the conversation — it isn't available if you open the file -elsewhere. +visualizations. Past conversations are listed under **Chat History** in the +pane and sync with your Cube account, so they're available from any device. {/* TODO: screenshot — the chat pane open in the add-in sidebar */} @@ -279,3 +306,4 @@ elsewhere. [link-ms-appsource]: https://appsource.microsoft.com/en-us/product/office/WA200008486 [ref-explorations]: /docs/explore-analyze/explore#saving-explorations [ref-calculated-fields]: /docs/explore-analyze/workbooks/calculated-fields +[ref-folders]: /docs/organize-content/folders diff --git a/docs-mintlify/embedding/iframe/feature-visibility.mdx b/docs-mintlify/embedding/iframe/feature-visibility.mdx index 04da2c51811f6..1df1da5879a55 100644 --- a/docs-mintlify/embedding/iframe/feature-visibility.mdx +++ b/docs-mintlify/embedding/iframe/feature-visibility.mdx @@ -133,7 +133,7 @@ they are ignored outside `/embed/*`. | Parameter | Effect | Surface | | --- | --- | --- | -| `allowExport=true` | Offers per-widget **Download as CSV / PNG / PDF** on chart widgets. The single switch for all three formats. | Dashboards | +| `allowExport=true` | Offers per-widget **Download as CSV / PNG / PDF** on chart widgets, and **Download as CSV** on a workbook's report builder before it's published. The single switch for all formats, on either surface. | Dashboards, Creator Mode | | `showDashboardExportMenu=false` | Hides the whole-dashboard download menu (in the Creator Mode dashboard header; floating over a published-dashboard embed). A hide switch, not the grant — `allowExport=true` is still what hands out export at all. | Dashboards | | `showDashboardHeader=false` | Hides the entire dashboard header bar. | Dashboards | | `showDashboardBackButton=false` | Hides the dashboard header's back button. | Dashboards | diff --git a/docs-mintlify/reference/embed-apis/generate-session.mdx b/docs-mintlify/reference/embed-apis/generate-session.mdx index c2aa54a2b73e3..d86935902bfb5 100644 --- a/docs-mintlify/reference/embed-apis/generate-session.mdx +++ b/docs-mintlify/reference/embed-apis/generate-session.mdx @@ -430,6 +430,35 @@ curl -X POST "https://your-account.cubecloud.dev/api/v1/embed/generate-session" Use session ID in [signed embedding][ref-signed-embedding]. +## Revoke a session + +```text +POST https://{accountName}.cubecloud.dev/api/v1/embed/session/revoke +``` + +Call this from your application's logout handler to end an embed session from the +server side, rather than relying on its token to expire on its own. Removing the +embedded iframe on logout is still required — revoking a session doesn't tear it down. + +```json +{ "sessionId": "abc123def456..." } +``` + +Pass the `sessionId` that Generate Session returned. It works on a session in either +state: an id that hasn't been exchanged for a token yet can no longer be redeemed, and +the token an already-exchanged id produced is rejected from that point on. The call is +idempotent — revoking an unknown, expired, or already-revoked id also returns `204`, so +the response alone doesn't tell you whether a token was actually revocable. It requires +the same admin `Api-Key` authentication as Generate Session. + + + +Only sessions Cube minted after this endpoint shipped carry the claim revocation checks +against — a token minted before that keeps working until it expires on its own, within +24 hours. + + + [ref-api-keys]: /admin/account-billing/api-keys [ref-personal-api-keys]: /admin/account-billing/api-keys#personal-api-keys [ref-signed-embedding]: /embedding/iframe/auth/signed From 67a6f26d09882cd3c2dbc2e2dd33b9fe0d48be2a Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:22:57 +0000 Subject: [PATCH 002/117] docs(mcp): note commitDataModelChanges as a second, unprompted publish path commitDataModelChanges is not marked destructiveHint, yet a call with confirmPublishToDefaultBranch commits straight onto the deployment's default branch, live. The safety section previously named mergeToDefaultBranch as the only route to production, which understated what a client isn't guaranteed to prompt for. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 5b7162003cd68..3278f1d8f24c7 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -361,10 +361,14 @@ into the MCP server: `writeDataModelFile` and `deleteDataModelFile` require it. There is no way to write without going through it first. - **Publishing to production needs an explicit ask.** `mergeToDefaultBranch` — the tool - that makes a branch live — is marked destructive so a client always prompts for - confirmation, and its own description tells the agent to call it only when you've - asked to publish, never on its own initiative after a commit. See [Committing and - publishing changes](#committing-and-publishing-changes). + that publishes an already-committed branch — is marked destructive so a client always + prompts for confirmation. `commitDataModelChanges` is a second route to production: a + dev branch created from the deployment's default branch commits straight onto it, live, + when the call sets `confirmPublishToDefaultBranch`. That tool is **not** marked + destructive, so a client isn't guaranteed to prompt before calling it — the guard there + is the tool's own description, which tells the agent to set that flag only once you've + said so, never to retry a refusal on its own. See [Committing and publishing + changes](#committing-and-publishing-changes). - **Registration is permission-gated.** Every tool in the three sections above and below — the six model-editing tools, `getBranchDiff`, `getDeploymentEnv`, the six commit and branch tools, and both pre-aggregation tools — is offered only to users whose role From 05b133e0f4f4afc1c95f56f4dc87145e379ca451 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:25:38 +0000 Subject: [PATCH 003/117] docs: address review feedback on terminology and clarity - Row totals: fix an enablement rule that read as requiring the measure specifically on Columns, when any measure plus a dimension on Columns is enough. - Sheets/Excel chat: match each product's own term for the workbook home surface (workbook's home vs. spreadsheet's home), rather than a generic "workbook list" neither UI uses. - MCP server: reuse "deploy branch," the term already used elsewhere on the page, instead of introducing a second name for the same branch; name the three sections a permission bullet was pointing at instead of "above and below." - Embed session revoke: note the 403 when embedding is disabled and that a deployment API token is a separate, unaffected credential; clarify why no ship date is given (continuous deployment, no customer-facing version number). - Feature visibility: allowExport grants CSV only in the Creator Mode report builder, not all three formats there. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- .../docs/integrations/google-sheets.mdx | 14 +++++++------- docs-mintlify/docs/integrations/mcp-server.mdx | 17 +++++++++-------- .../docs/integrations/microsoft-excel.mdx | 14 +++++++------- .../embedding/iframe/feature-visibility.mdx | 2 +- .../reference/embed-apis/generate-session.mdx | 11 +++++++---- 5 files changed, 31 insertions(+), 27 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index 1d6872d552cb1..96f9220d4063a 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -185,11 +185,11 @@ change. The **Row totals** switch, next to **Column totals** on the **Display** tab, appends a bold **Total** column at the right of the written range, totaling -each row across the pivot columns. It needs both a measure and a dimension on -**Columns** to pivot across — it's disabled, with a tooltip explaining which -is missing, until both are set. With measures on **Columns**, each measure -gets its own total column; with measures on **Rows**, a single total column -covers them all, since each row already holds one measure. +each row across the pivot columns. It needs a measure in the query and a +dimension on **Columns** to pivot across — it's disabled, with a tooltip +explaining which is missing, until both are set. With measures on **Columns**, +each measure gets its own total column; with measures on **Rows**, a single +total column covers them all, since each row already holds one measure. Like column totals, each total comes from a separate query grouped by the opposite zone, so it's correct for non-additive measures. With both switches @@ -291,8 +291,8 @@ create, rename, or delete a sheet, and organize your saved explorations into request. Deleting a folder this way doesn't delete what's inside it; its contents move to the workspace root. -Drag a saved exploration or an unsaved draft from the workbook list onto the -chat composer to attach it as context for your next question. +Drag a saved exploration or an unsaved draft from the spreadsheet's home onto +the chat composer to attach it as context for your next question. Before any destructive or ambiguous action — writing over an occupied area, clearing a placement, renaming or deleting a sheet — the pane asks you to diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 3278f1d8f24c7..3c47d02a2a92f 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -363,16 +363,17 @@ into the MCP server: - **Publishing to production needs an explicit ask.** `mergeToDefaultBranch` — the tool that publishes an already-committed branch — is marked destructive so a client always prompts for confirmation. `commitDataModelChanges` is a second route to production: a - dev branch created from the deployment's default branch commits straight onto it, live, + dev branch created from the deploy branch commits straight onto it, live, when the call sets `confirmPublishToDefaultBranch`. That tool is **not** marked destructive, so a client isn't guaranteed to prompt before calling it — the guard there is the tool's own description, which tells the agent to set that flag only once you've said so, never to retry a refusal on its own. See [Committing and publishing changes](#committing-and-publishing-changes). -- **Registration is permission-gated.** Every tool in the three sections above and below - — the six model-editing tools, `getBranchDiff`, `getDeploymentEnv`, the six commit and - branch tools, and both pre-aggregation tools — is offered only to users whose role - allows editing the semantic model. A Viewer never sees any of them. +- **Registration is permission-gated.** Every tool in Data model editing, Committing and + publishing changes, and Pre-aggregations — the six model-editing tools, `getBranchDiff`, + `getDeploymentEnv`, the six commit and branch tools, and both pre-aggregation tools — is + offered only to users whose role allows editing the semantic model. A Viewer never sees + any of them. - **Verification happens on the branch, before a merge, not after.** Pass the dev `branchName` to `runQuery` to check that an edit returns the right data — `valid: true` from `writeDataModelFile` only means the model compiles, not that it's correct. @@ -389,10 +390,10 @@ them without ever using the Cube UI. | Tool | Description | Access | | --- | --- | --- | -| `getBranchState` | Reports the branch this session works on, the branch the user is looking at in the Cube console, the deployment's default branch, and whether the session's branch has uncommitted edits. | Read-only | +| `getBranchState` | Reports the branch this session works on, the branch the user is looking at in the Cube console, the deploy branch, and whether the session's branch has uncommitted edits. | Read-only | | `commitDataModelChanges` | Commits the dev branch's edits onto the branch it was created from. | Write | | `commitToNewBranch` | Commits the dev branch's edits to a new branch instead, optionally opening a pull request. | Write | -| `mergeToDefaultBranch` | Merges a committed branch into the deployment's default branch, making it live for everyone. | Destructive — prompts | +| `mergeToDefaultBranch` | Merges a committed branch into the deploy branch, making it live for everyone. | Destructive — prompts | | `discardDataModelChanges` | Resets the dev branch to its parent (or to a given commit hash), throwing away pending edits. | Destructive — prompts | | `switchUserBranch` | Switches the user's own console over to a branch, the same action as the branch switcher in the UI, so they can see and test what was committed. | Write | @@ -403,7 +404,7 @@ flow instead of asking you to click through it. Call `getBranchState` before editing, so work doesn't land on a branch the user never looks at, and again after committing, to see whether the user still needs `switchUserBranch` to see it. `commitDataModelChanges` refuses to commit a dev branch -whose parent is the deployment's default branch unless the call also sets +whose parent is the deploy branch unless the call also sets `confirmPublishToDefaultBranch` — publishing that way should only happen once you've said so. `mergeToDefaultBranch` is separate from committing: it publishes an already committed branch, and its description tells the agent to call it only when you've diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index e0b614d50f492..b5c502d119441 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -174,11 +174,11 @@ change. The **Row totals** switch, next to **Column totals** on the **Display** tab, appends a bold **Total** column at the right of the written range, totaling -each row across the pivot columns. It needs both a measure and a dimension on -**Columns** to pivot across — it's disabled, with a tooltip explaining which -is missing, until both are set. With measures on **Columns**, each measure -gets its own total column; with measures on **Rows**, a single total column -covers them all, since each row already holds one measure. +each row across the pivot columns. It needs a measure in the query and a +dimension on **Columns** to pivot across — it's disabled, with a tooltip +explaining which is missing, until both are set. With measures on **Columns**, +each measure gets its own total column; with measures on **Rows**, a single +total column covers them all, since each row already holds one measure. Like column totals, each total comes from a separate query grouped by the opposite zone, so it's correct for non-additive measures. With both switches @@ -280,8 +280,8 @@ create, rename, or delete a sheet, and organize your saved explorations into request. Deleting a folder this way doesn't delete what's inside it; its contents move to the workspace root. -Drag a saved exploration or an unsaved draft from the workbook list onto the -chat composer to attach it as context for your next question. +Drag a saved exploration or an unsaved draft from the workbook's home onto +the chat composer to attach it as context for your next question. Before any destructive or ambiguous action — writing over an occupied area, clearing a placement, renaming or deleting a sheet — the pane asks you to diff --git a/docs-mintlify/embedding/iframe/feature-visibility.mdx b/docs-mintlify/embedding/iframe/feature-visibility.mdx index 1df1da5879a55..2a75576108004 100644 --- a/docs-mintlify/embedding/iframe/feature-visibility.mdx +++ b/docs-mintlify/embedding/iframe/feature-visibility.mdx @@ -133,7 +133,7 @@ they are ignored outside `/embed/*`. | Parameter | Effect | Surface | | --- | --- | --- | -| `allowExport=true` | Offers per-widget **Download as CSV / PNG / PDF** on chart widgets, and **Download as CSV** on a workbook's report builder before it's published. The single switch for all formats, on either surface. | Dashboards, Creator Mode | +| `allowExport=true` | Offers per-widget **Download as CSV / PNG / PDF** on chart widgets, and **Download as CSV** in the Creator Mode report builder, where a workbook's queries are authored before publishing. Grants CSV in the report builder and all three formats on chart widgets. | Dashboards, Creator Mode | | `showDashboardExportMenu=false` | Hides the whole-dashboard download menu (in the Creator Mode dashboard header; floating over a published-dashboard embed). A hide switch, not the grant — `allowExport=true` is still what hands out export at all. | Dashboards | | `showDashboardHeader=false` | Hides the entire dashboard header bar. | Dashboards | | `showDashboardBackButton=false` | Hides the dashboard header's back button. | Dashboards | diff --git a/docs-mintlify/reference/embed-apis/generate-session.mdx b/docs-mintlify/reference/embed-apis/generate-session.mdx index d86935902bfb5..e862f5eceb6e5 100644 --- a/docs-mintlify/reference/embed-apis/generate-session.mdx +++ b/docs-mintlify/reference/embed-apis/generate-session.mdx @@ -449,13 +449,16 @@ state: an id that hasn't been exchanged for a token yet can no longer be redeeme the token an already-exchanged id produced is rejected from that point on. The call is idempotent — revoking an unknown, expired, or already-revoked id also returns `204`, so the response alone doesn't tell you whether a token was actually revocable. It requires -the same admin `Api-Key` authentication as Generate Session. +the same admin `Api-Key` authentication as Generate Session, and returns `403` if +embedding isn't enabled for the account. -Only sessions Cube minted after this endpoint shipped carry the claim revocation checks -against — a token minted before that keeps working until it expires on its own, within -24 hours. +Revocation only affects the embed session token, not a Cube API token obtained from +`POST /api/v1/deployments/{deploymentId}/token` — that's a separate credential. Cube +Cloud rolls this out continuously with no version number to check against; the only +tokens it doesn't cover are ones minted before your account received the update, and +those still expire on their own within 24 hours. From 970e3118870c05d66c9d07ad96d772ede15588dc Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:29:31 +0000 Subject: [PATCH 004/117] docs(mcp): stop claiming every write needs a prompt "Nothing that changes ... happens without an explicit approval" contradicted the safety section 100 lines down: commitDataModelChanges is annotated write, not destructive, yet can publish straight to the deploy branch. Scope the confirmation guarantee to the destructive list and point at the safety section for the write-tool exception. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 3c47d02a2a92f..7f79a1041139a 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -241,13 +241,14 @@ way to reach your data, not a new access surface. ### Read and write tools -Each tool is annotated as read-only or destructive. MCP clients that honor these +Each tool is annotated as read-only, write, or destructive. MCP clients that honor these annotations — including Claude — run read-only tools automatically and **always ask for confirmation** before any of the nine destructive ones: `updateReport`, `deleteReport`, `manageFolders`, `updateDashboard`, `publishDashboard`, `writeDataModelFile`, -`deleteDataModelFile`, `mergeToDefaultBranch`, and `discardDataModelChanges`. Nothing -that changes a workbook report, an exploration, a dashboard, your data model, or a -workspace folder happens without an explicit approval. +`deleteDataModelFile`, `mergeToDefaultBranch`, and `discardDataModelChanges`. A tool +annotated write, not destructive, may run without a prompt — including +`commitDataModelChanges`, which can publish straight to production in one case; see [How +model edits stay safe](#how-model-edits-stay-safe). ### Deployments and chat From 4eae799a78e848cf94fc42edf98ef994bf89f3bc Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:31:49 +0000 Subject: [PATCH 005/117] docs: address second round of review feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MCP server: stop counting the commitDataModelChanges publish path as one of the "five constraints" (it isn't enforced, only a prompt convention) — move it to a Warning below the list instead, and standardize on "Cube UI" (the term the page already used) over a newly introduced "Cube console". - Commit and publish a model edit: fix a mid-sentence pronoun switch between the agent and the reader ("you"), and name the MCP session explicitly where "the session" was ambiguous. - Row totals: drop an unsupported claim about when a corner total "can't be derived" — the grand-total query has no such gap in the add-in's own code. - Feature visibility: cut a redundant restatement in the allowExport row. - Embed session revoke: split a Note that mixed a durable scoping fact with rollout commentary, and drop "Cube Cloud" (legacy naming per docs-mintlify/CLAUDE.md) from newly added prose. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- .../docs/integrations/google-sheets.mdx | 5 ++-- .../docs/integrations/mcp-server.mdx | 30 +++++++++++-------- .../docs/integrations/microsoft-excel.mdx | 5 ++-- .../embedding/iframe/feature-visibility.mdx | 2 +- .../reference/embed-apis/generate-session.mdx | 7 ++--- 5 files changed, 26 insertions(+), 23 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index 96f9220d4063a..ed82a2e161bd2 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -193,9 +193,8 @@ total column covers them all, since each row already holds one measure. Like column totals, each total comes from a separate query grouped by the opposite zone, so it's correct for non-additive measures. With both switches -on, the cell where they meet holds a grand total across the whole result; a -corner total that can't be derived is left blank rather than restating a row -or column total. +on, the cell where they meet holds a grand total across the whole result, +from a third query with neither zone kept. Row totals are saved with the exploration and survive **Refresh**; with auto-run off, toggling the switch waits for **Run** like any other display diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 7f79a1041139a..25d8d438c9388 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -362,13 +362,8 @@ into the MCP server: `writeDataModelFile` and `deleteDataModelFile` require it. There is no way to write without going through it first. - **Publishing to production needs an explicit ask.** `mergeToDefaultBranch` — the tool - that publishes an already-committed branch — is marked destructive so a client always - prompts for confirmation. `commitDataModelChanges` is a second route to production: a - dev branch created from the deploy branch commits straight onto it, live, - when the call sets `confirmPublishToDefaultBranch`. That tool is **not** marked - destructive, so a client isn't guaranteed to prompt before calling it — the guard there - is the tool's own description, which tells the agent to set that flag only once you've - said so, never to retry a refusal on its own. See [Committing and publishing + that publishes an already-committed branch — is marked destructive, so a client always + prompts for confirmation. See [Committing and publishing changes](#committing-and-publishing-changes). - **Registration is permission-gated.** Every tool in Data model editing, Committing and publishing changes, and Pre-aggregations — the six model-editing tools, `getBranchDiff`, @@ -379,6 +374,17 @@ into the MCP server: `branchName` to `runQuery` to check that an edit returns the right data — `valid: true` from `writeDataModelFile` only means the model compiles, not that it's correct. + + +`commitDataModelChanges` is a second route to production: a dev branch created from the +deploy branch commits straight onto it, live, when the call sets +`confirmPublishToDefaultBranch`. That tool is **not** annotated destructive, so a client +isn't guaranteed to prompt first — the only guard is the tool's own description, which +tells the agent to set the flag only on your explicit say-so, never to retry a refusal on +its own. + + + Review pending work with `getDataModelChanges` before you commit. ### Committing and publishing changes @@ -391,7 +397,7 @@ them without ever using the Cube UI. | Tool | Description | Access | | --- | --- | --- | -| `getBranchState` | Reports the branch this session works on, the branch the user is looking at in the Cube console, the deploy branch, and whether the session's branch has uncommitted edits. | Read-only | +| `getBranchState` | Reports the branch this session works on, the branch the user is looking at in the Cube UI, the deploy branch, and whether the session's branch has uncommitted edits. | Read-only | | `commitDataModelChanges` | Commits the dev branch's edits onto the branch it was created from. | Write | | `commitToNewBranch` | Commits the dev branch's edits to a new branch instead, optionally opening a pull request. | Write | | `mergeToDefaultBranch` | Merges a committed branch into the deploy branch, making it live for everyone. | Destructive — prompts | @@ -502,11 +508,11 @@ the full changed-file list even when the patch itself is trimmed. Once `writeDataModelFile` edits compile and `runQuery` confirms they return the right data, call `commitDataModelChanges` to land them on the branch the dev branch forked from — or `commitToNewBranch` to put them on a new branch instead, optionally with a -pull request. Offer `switchUserBranch` so you can see the result in the Cube console. -Only call `mergeToDefaultBranch` once you've explicitly asked to publish; it makes the +pull request. Use `switchUserBranch` to point the user's console at the result so they +can see it. Publish only when the user has asked to: `mergeToDefaultBranch` makes the branch live for everyone and can't be undone from the response it returns. Call -`getBranchState` at any point to check which branch you and the session are each on, and -`discardDataModelChanges` to throw away an edit that isn't working out. +`getBranchState` at any point to check which branch the user and the MCP session are +each on, and `discardDataModelChanges` to throw away an edit that isn't working out. ### Verify a pre-aggregation diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index b5c502d119441..475cdab77735d 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -182,9 +182,8 @@ total column covers them all, since each row already holds one measure. Like column totals, each total comes from a separate query grouped by the opposite zone, so it's correct for non-additive measures. With both switches -on, the cell where they meet holds a grand total across the whole result; a -corner total that can't be derived is left blank rather than restating a row -or column total. +on, the cell where they meet holds a grand total across the whole result, +from a third query with neither zone kept. Row totals are saved with the exploration and survive **Refresh**; with auto-run off, toggling the switch waits for **Run** like any other display diff --git a/docs-mintlify/embedding/iframe/feature-visibility.mdx b/docs-mintlify/embedding/iframe/feature-visibility.mdx index 2a75576108004..266dd72afdbeb 100644 --- a/docs-mintlify/embedding/iframe/feature-visibility.mdx +++ b/docs-mintlify/embedding/iframe/feature-visibility.mdx @@ -133,7 +133,7 @@ they are ignored outside `/embed/*`. | Parameter | Effect | Surface | | --- | --- | --- | -| `allowExport=true` | Offers per-widget **Download as CSV / PNG / PDF** on chart widgets, and **Download as CSV** in the Creator Mode report builder, where a workbook's queries are authored before publishing. Grants CSV in the report builder and all three formats on chart widgets. | Dashboards, Creator Mode | +| `allowExport=true` | Grants all three of **Download as CSV / PNG / PDF** per chart widget, and **Download as CSV** in the Creator Mode report builder, where a workbook's queries are authored before publishing. | Dashboards, Creator Mode | | `showDashboardExportMenu=false` | Hides the whole-dashboard download menu (in the Creator Mode dashboard header; floating over a published-dashboard embed). A hide switch, not the grant — `allowExport=true` is still what hands out export at all. | Dashboards | | `showDashboardHeader=false` | Hides the entire dashboard header bar. | Dashboards | | `showDashboardBackButton=false` | Hides the dashboard header's back button. | Dashboards | diff --git a/docs-mintlify/reference/embed-apis/generate-session.mdx b/docs-mintlify/reference/embed-apis/generate-session.mdx index e862f5eceb6e5..d3f3878023a0b 100644 --- a/docs-mintlify/reference/embed-apis/generate-session.mdx +++ b/docs-mintlify/reference/embed-apis/generate-session.mdx @@ -455,10 +455,9 @@ embedding isn't enabled for the account. Revocation only affects the embed session token, not a Cube API token obtained from -`POST /api/v1/deployments/{deploymentId}/token` — that's a separate credential. Cube -Cloud rolls this out continuously with no version number to check against; the only -tokens it doesn't cover are ones minted before your account received the update, and -those still expire on their own within 24 hours. +`POST /api/v1/deployments/{deploymentId}/token` — that's a separate credential. Embed +tokens minted before your account received this feature aren't revocable and expire on +their own within 24 hours. From 011240c70308885db07aa8cacb38de26e5e926e5 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:38:12 +0000 Subject: [PATCH 006/117] docs: reconcile agent/MCP folder deletion with the Workspace UI's MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Verified against the enterprise source: FoldersService.deleteFolder (the one method every surface calls, including the Workspace page's GraphQL mutation) only removes the folder row — workbooks/dashboards/ explorations have folder_id ON DELETE SET NULL, and it throws if subfolders exist. The Workspace page's own delete flow is a separate, more destructive bulk action that recursively deletes every descendant first. Both existing docs were individually accurate for their own surface; they just never said the two paths differ. Cross-referenced at all five sites instead of picking one as wrong. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/explore-analyze/analytics-chat.mdx | 2 +- docs-mintlify/docs/integrations/google-sheets.mdx | 5 +++-- docs-mintlify/docs/integrations/mcp-server.mdx | 7 ++++--- docs-mintlify/docs/integrations/microsoft-excel.mdx | 5 +++-- docs-mintlify/docs/organize-content/folders.mdx | 5 +++++ 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/docs-mintlify/docs/explore-analyze/analytics-chat.mdx b/docs-mintlify/docs/explore-analyze/analytics-chat.mdx index b3631bb6ccdb6..cd31b565e8c20 100644 --- a/docs-mintlify/docs/explore-analyze/analytics-chat.mdx +++ b/docs-mintlify/docs/explore-analyze/analytics-chat.mdx @@ -17,7 +17,7 @@ The AI agent interprets your questions, generates queries against your semantic - **Semantic model integration** – All queries run against your semantic model with proper access control and security, honoring the active [security context](/docs/explore-analyze/workbooks/querying-data#applying-a-security-context)—including an override applied by a developer or admin - **Queued messages** – Send follow-up messages while the agent is still processing - **Save your results** – Ask the agent to save a result as a [report](/docs/explore-analyze/workbooks) inside a workbook, or as a standalone [exploration](/docs/explore-analyze/explore#saving-explorations) when you don't want to create a workbook -- **Organize saved work** – Ask the agent to save an exploration into a specific [folder](/docs/organize-content/folders), or to list, create, rename, move, or delete folders in your workspace. Deleting a folder this way doesn't delete what's inside it — its contents move to the workspace root +- **Organize saved work** – Ask the agent to save an exploration into a specific [folder](/docs/organize-content/folders), or to list, create, rename, move, or delete folders in your workspace. Unlike deleting a folder from the Workspace page, asking the agent only removes the folder itself — its contents move to the workspace root instead of being deleted, and it won't delete a folder that still has sub-folders - **Link saved artifacts** – The agent can link an existing exploration, workbook, or dashboard to the conversation, on request or automatically when it creates or edits one, so you can reopen it from the thread later ## Discover available fields diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index ed82a2e161bd2..e4315c536d0f5 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -287,8 +287,9 @@ spreadsheet, not just answer questions about it. Ask it to run a query and place the results, or refresh or clear a placed exploration. It can also create, rename, or delete a sheet, and organize your saved explorations into [folders][ref-folders] — list, create, rename, move, or delete one on -request. Deleting a folder this way doesn't delete what's inside it; its -contents move to the workspace root. +request. Unlike deleting a folder from the Workspace page, this only removes +the folder itself: its contents move to the workspace root instead of being +deleted, and a folder that still has sub-folders can't be deleted this way. Drag a saved exploration or an unsaved draft from the spreadsheet's home onto the chat composer to attach it as context for your next question. diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 25d8d438c9388..24fcfb787f001 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -309,9 +309,10 @@ published dashboard keeps serving its previous version until you approve Call `manageFolders` with `action: "list"` first to get a folder's numeric id — that id, not its name, is what `folderId` takes on `createReport` and `updateReport` to place a -standalone exploration inside it. Deleting a folder does not delete what's inside it; -its contents move to the workspace root, and a folder that still holds sub-folders can't -be deleted. +standalone exploration inside it. This tool's delete is narrower than deleting a folder +from the [Workspace page][ref-folders]: it only removes the folder itself — contents +move to the workspace root instead of being deleted — and refuses when the folder still +has sub-folders, rather than deleting the whole subtree. **To change an existing report, use `updateReport` — never recreate it.** A dashboard's chart widget points at a specific `reportId`, so replacing a report with a new one orphans diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index 475cdab77735d..422437f4a837c 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -276,8 +276,9 @@ workbook, not just answer questions about it. Ask it to run a query and place the results, or refresh or clear a placed exploration. It can also create, rename, or delete a sheet, and organize your saved explorations into [folders][ref-folders] — list, create, rename, move, or delete one on -request. Deleting a folder this way doesn't delete what's inside it; its -contents move to the workspace root. +request. Unlike deleting a folder from the Workspace page, this only removes +the folder itself: its contents move to the workspace root instead of being +deleted, and a folder that still has sub-folders can't be deleted this way. Drag a saved exploration or an unsaved draft from the workbook's home onto the chat composer to attach it as context for your next question. diff --git a/docs-mintlify/docs/organize-content/folders.mdx b/docs-mintlify/docs/organize-content/folders.mdx index ee3226c0e3ff7..abe7bc5f094d2 100644 --- a/docs-mintlify/docs/organize-content/folders.mdx +++ b/docs-mintlify/docs/organize-content/folders.mdx @@ -134,6 +134,11 @@ dashboards, and explorations — along with it; this cannot be undone. If anything inside the folder has its own permissions and you don't have Full access there too, deletion is blocked entirely and nothing is deleted. +Asking [Analytics Chat](/docs/explore-analyze/analytics-chat) or an MCP client to delete +a folder is narrower than deleting it here: it only removes the folder itself — contents +move to the workspace root instead of being deleted — and it refuses a folder that still +has sub-folders, rather than deleting the whole subtree. + ## Folder permissions Folder access is controlled through three permission levels: From 413c44a2b0031a62acf3a346906ad7b107ed9fc0 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:39:39 +0000 Subject: [PATCH 007/117] =?UTF-8?q?docs:=20third=20round=20of=20review=20f?= =?UTF-8?q?eedback=20=E2=80=94=20scope,=20coverage,=20structure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MCP server: scope "edits never touch production" to the file-write tools; the two commit/merge tools that do reach the deploy branch are covered by the bullet and Warning right below it, so the opening bullet no longer contradicts its own section. - Row totals: carry over the three Column totals caveats it dropped (window-function exclusion, which filters apply, full-result vs. visible-rows) — verified against generateRowTotalsQuery, which shares the same filtering and custom-measure logic as its column twin. - Embed session revoke: state the 204 success response explicitly instead of leaving it implied by the idempotency clause, and add Request Body/Response subsections plus a cURL example matching the rest of the page's structure. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- .../docs/integrations/google-sheets.mdx | 5 ++- .../docs/integrations/mcp-server.mdx | 4 +-- .../docs/integrations/microsoft-excel.mdx | 5 ++- .../reference/embed-apis/generate-session.mdx | 34 +++++++++++++------ 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index e4315c536d0f5..a655469f38573 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -192,7 +192,10 @@ each measure gets its own total column; with measures on **Rows**, a single total column covers them all, since each row already holds one measure. Like column totals, each total comes from a separate query grouped by the -opposite zone, so it's correct for non-additive measures. With both switches +opposite zone, so the same rules apply: correct for non-additive measures, +window-function [calculations][ref-calculated-fields] excluded, measure +filters dropped and dimension filters kept, and totals taken over the +query's full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 24fcfb787f001..38497525720e4 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -357,8 +357,8 @@ Letting an AI client edit your semantic model is safe because of five constraint into the MCP server: - **Edits never touch production.** Every write goes to a personal dev branch named - `dev--`. The write tools reject any branch that isn't a dev branch, so - the deploy branch is never writable over MCP. + `dev--`. `writeDataModelFile` and `deleteDataModelFile` reject any branch + that isn't a dev branch, so no file edit can land on the deploy branch directly. - **`startDataModelEdit` is the only entry point.** It returns the dev `branchName`, and `writeDataModelFile` and `deleteDataModelFile` require it. There is no way to write without going through it first. diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index 422437f4a837c..35c439fcc07ac 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -181,7 +181,10 @@ each measure gets its own total column; with measures on **Rows**, a single total column covers them all, since each row already holds one measure. Like column totals, each total comes from a separate query grouped by the -opposite zone, so it's correct for non-additive measures. With both switches +opposite zone, so the same rules apply: correct for non-additive measures, +window-function [calculations][ref-calculated-fields] excluded, measure +filters dropped and dimension filters kept, and totals taken over the +query's full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. diff --git a/docs-mintlify/reference/embed-apis/generate-session.mdx b/docs-mintlify/reference/embed-apis/generate-session.mdx index d3f3878023a0b..a5549d3066f70 100644 --- a/docs-mintlify/reference/embed-apis/generate-session.mdx +++ b/docs-mintlify/reference/embed-apis/generate-session.mdx @@ -432,25 +432,39 @@ Use session ID in [signed embedding][ref-signed-embedding]. ## Revoke a session +Call this from your application's logout handler to end an embed session from the +server side, rather than relying on its token to expire on its own. Removing the +embedded iframe on logout is still required — revoking a session doesn't tear it down. + ```text POST https://{accountName}.cubecloud.dev/api/v1/embed/session/revoke ``` -Call this from your application's logout handler to end an embed session from the -server side, rather than relying on its token to expire on its own. Removing the -embedded iframe on logout is still required — revoking a session doesn't tear it down. +### Request Body ```json { "sessionId": "abc123def456..." } ``` -Pass the `sessionId` that Generate Session returned. It works on a session in either -state: an id that hasn't been exchanged for a token yet can no longer be redeemed, and -the token an already-exchanged id produced is rejected from that point on. The call is -idempotent — revoking an unknown, expired, or already-revoked id also returns `204`, so -the response alone doesn't tell you whether a token was actually revocable. It requires -the same admin `Api-Key` authentication as Generate Session, and returns `403` if -embedding isn't enabled for the account. +Pass the `sessionId` that Generate Session returned. It requires the same admin +`Api-Key` authentication as Generate Session. + +### Response + +Returns `204 No Content` on success, with no response body. It works on a session in +either state: an id that hasn't been exchanged for a token yet can no longer be +redeemed, and the token an already-exchanged id produced is rejected from that point on. + +The call is idempotent — revoking an unknown, expired, or already-revoked id also +returns `204`, so the response alone doesn't tell you whether a token was actually +revocable. Returns `403` if embedding isn't enabled for the account. + +```bash title="Bash" cURL +curl -X POST "https://your-account.cubecloud.dev/api/v1/embed/session/revoke" \ + -H "Content-Type: application/json" \ + -H "Authorization: Api-Key YOUR_API_KEY" \ + -d '{"sessionId": "abc123def456..."}' +``` From 219652a70eb1f53fd773f51aa79abf520e2ad344 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:43:03 +0000 Subject: [PATCH 008/117] docs(mcp): scope the bullet lead, not just its body "Edits never touch production" is still an absolute a skimmer reads past the body clause that scopes it. Renamed to "File writes never touch production" to match what's actually guaranteed. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 38497525720e4..fce4a52175411 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -356,7 +356,7 @@ variable is set without ever seeing what it is set to. Letting an AI client edit your semantic model is safe because of five constraints built into the MCP server: -- **Edits never touch production.** Every write goes to a personal dev branch named +- **File writes never touch production.** Every write goes to a personal dev branch named `dev--`. `writeDataModelFile` and `deleteDataModelFile` reject any branch that isn't a dev branch, so no file edit can land on the deploy branch directly. - **`startDataModelEdit` is the only entry point.** It returns the dev `branchName`, and From 562cce5f3c53b1721c3596ff4d1439cd2c498dc2 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:44:36 +0000 Subject: [PATCH 009/117] docs(mcp): fix a false visibility claim and finish the pronoun pass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - "the change exists nowhere a person can see it" was wrong — the author sees it via the Cube UI, the dev branch's own endpoints, getDataModelChanges, and runQuery. What commit actually buys is visibility to everyone else and durability. - The pronoun pass from the prior round only reached the walkthrough sections; "Committing and publishing changes" (its intro, table, and both surrounding paragraphs) still addressed a third-person "the user" on a page that otherwise addresses the reader as "you". Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- .../docs/integrations/mcp-server.mdx | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index fce4a52175411..283618b854613 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -391,27 +391,27 @@ Review pending work with `getDataModelChanges` before you commit. ### Committing and publishing changes Editing the model with the tools above only ever writes to a personal dev branch's -working copy — until it's committed, the change exists nowhere a person can see it. -These tools commit that work, publish it, or throw it away. They're registered under -the same semantic-model permission as the data model tools above, and a client can call -them without ever using the Cube UI. +working copy — visible to you in the Cube UI and on your dev branch's endpoints, but to +nobody else until it's committed. These tools commit that work, publish it, or throw it +away. They're registered under the same semantic-model permission as the data model +tools above, and a client can call them without ever using the Cube UI. | Tool | Description | Access | | --- | --- | --- | -| `getBranchState` | Reports the branch this session works on, the branch the user is looking at in the Cube UI, the deploy branch, and whether the session's branch has uncommitted edits. | Read-only | +| `getBranchState` | Reports the branch this session works on, the branch you're looking at in the Cube UI, the deploy branch, and whether the session's branch has uncommitted edits. | Read-only | | `commitDataModelChanges` | Commits the dev branch's edits onto the branch it was created from. | Write | | `commitToNewBranch` | Commits the dev branch's edits to a new branch instead, optionally opening a pull request. | Write | | `mergeToDefaultBranch` | Merges a committed branch into the deploy branch, making it live for everyone. | Destructive — prompts | | `discardDataModelChanges` | Resets the dev branch to its parent (or to a given commit hash), throwing away pending edits. | Destructive — prompts | -| `switchUserBranch` | Switches the user's own console over to a branch, the same action as the branch switcher in the UI, so they can see and test what was committed. | Write | +| `switchUserBranch` | Switches your own Cube UI over to a branch, the same action as the branch switcher in the console, so you can see and test what was committed. | Write | These mirror the "Commit & Sync", "Merge" / "Create a Pull Request", and branch-switching actions described in [Development mode][ref-dev-mode] — a client can now drive that same flow instead of asking you to click through it. -Call `getBranchState` before editing, so work doesn't land on a branch the user never -looks at, and again after committing, to see whether the user still needs -`switchUserBranch` to see it. `commitDataModelChanges` refuses to commit a dev branch +Call `getBranchState` before editing, so work doesn't land on a branch you never look +at, and again after committing, to see whether you still need `switchUserBranch` to see +it. `commitDataModelChanges` refuses to commit a dev branch whose parent is the deploy branch unless the call also sets `confirmPublishToDefaultBranch` — publishing that way should only happen once you've said so. `mergeToDefaultBranch` is separate from committing: it publishes an already @@ -509,11 +509,11 @@ the full changed-file list even when the patch itself is trimmed. Once `writeDataModelFile` edits compile and `runQuery` confirms they return the right data, call `commitDataModelChanges` to land them on the branch the dev branch forked from — or `commitToNewBranch` to put them on a new branch instead, optionally with a -pull request. Use `switchUserBranch` to point the user's console at the result so they -can see it. Publish only when the user has asked to: `mergeToDefaultBranch` makes the -branch live for everyone and can't be undone from the response it returns. Call -`getBranchState` at any point to check which branch the user and the MCP session are -each on, and `discardDataModelChanges` to throw away an edit that isn't working out. +pull request. Use `switchUserBranch` to point your own Cube UI at the result so you can +see it. Publish only when you've asked to: `mergeToDefaultBranch` makes the branch live +for everyone and can't be undone from the response it returns. Call `getBranchState` at +any point to check which branch you and the MCP session are each on, and +`discardDataModelChanges` to throw away an edit that isn't working out. ### Verify a pre-aggregation From 0c661bd5e5a35d4a6de433f9d661e52f44e1c832 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:46:25 +0000 Subject: [PATCH 010/117] docs: fix anchor collision, consolidate folder-deletion caveat, drop orphan line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Revoke session's "Request Body"/"Response" headings collided with Generate Session's own, so Mintlify gave them ambiguous #-1 anchors. Renamed to "Revoke Request Body"/"Revoke Response". - The agent-vs-Workspace-page folder-deletion divergence was spelled out in full at five sites. Kept the full explanation on folders.mdx (where a reader already goes to learn folder deletion) and reduced the other four to a clause plus link, with the correct #deleting-folders anchor. - Dropped a "review before you commit" line left orphaned between the new Warning and the next heading — it repeats guidance already given twice elsewhere on the page. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/explore-analyze/analytics-chat.mdx | 2 +- docs-mintlify/docs/integrations/google-sheets.mdx | 6 +++--- docs-mintlify/docs/integrations/mcp-server.mdx | 9 +++------ docs-mintlify/docs/integrations/microsoft-excel.mdx | 6 +++--- docs-mintlify/reference/embed-apis/generate-session.mdx | 4 ++-- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/docs-mintlify/docs/explore-analyze/analytics-chat.mdx b/docs-mintlify/docs/explore-analyze/analytics-chat.mdx index cd31b565e8c20..2cf69e36c7c9a 100644 --- a/docs-mintlify/docs/explore-analyze/analytics-chat.mdx +++ b/docs-mintlify/docs/explore-analyze/analytics-chat.mdx @@ -17,7 +17,7 @@ The AI agent interprets your questions, generates queries against your semantic - **Semantic model integration** – All queries run against your semantic model with proper access control and security, honoring the active [security context](/docs/explore-analyze/workbooks/querying-data#applying-a-security-context)—including an override applied by a developer or admin - **Queued messages** – Send follow-up messages while the agent is still processing - **Save your results** – Ask the agent to save a result as a [report](/docs/explore-analyze/workbooks) inside a workbook, or as a standalone [exploration](/docs/explore-analyze/explore#saving-explorations) when you don't want to create a workbook -- **Organize saved work** – Ask the agent to save an exploration into a specific [folder](/docs/organize-content/folders), or to list, create, rename, move, or delete folders in your workspace. Unlike deleting a folder from the Workspace page, asking the agent only removes the folder itself — its contents move to the workspace root instead of being deleted, and it won't delete a folder that still has sub-folders +- **Organize saved work** – Ask the agent to save an exploration into a specific [folder](/docs/organize-content/folders), or to list, create, rename, move, or delete folders in your workspace. Agent deletion is [narrower than deleting from the Workspace page](/docs/organize-content/folders#deleting-folders) - **Link saved artifacts** – The agent can link an existing exploration, workbook, or dashboard to the conversation, on request or automatically when it creates or edits one, so you can reopen it from the thread later ## Discover available fields diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index a655469f38573..ad57288ff505e 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -290,9 +290,8 @@ spreadsheet, not just answer questions about it. Ask it to run a query and place the results, or refresh or clear a placed exploration. It can also create, rename, or delete a sheet, and organize your saved explorations into [folders][ref-folders] — list, create, rename, move, or delete one on -request. Unlike deleting a folder from the Workspace page, this only removes -the folder itself: its contents move to the workspace root instead of being -deleted, and a folder that still has sub-folders can't be deleted this way. +request. Deleting one this way is [narrower than from the Workspace +page][ref-deleting-folders]. Drag a saved exploration or an unsaved draft from the spreadsheet's home onto the chat composer to attach it as context for your next question. @@ -319,3 +318,4 @@ pane and sync with your Cube account, so they're available from any device. [ref-explorations]: /docs/explore-analyze/explore#saving-explorations [ref-calculated-fields]: /docs/explore-analyze/workbooks/calculated-fields [ref-folders]: /docs/organize-content/folders +[ref-deleting-folders]: /docs/organize-content/folders#deleting-folders diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 283618b854613..38bab18e0e9ff 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -309,10 +309,8 @@ published dashboard keeps serving its previous version until you approve Call `manageFolders` with `action: "list"` first to get a folder's numeric id — that id, not its name, is what `folderId` takes on `createReport` and `updateReport` to place a -standalone exploration inside it. This tool's delete is narrower than deleting a folder -from the [Workspace page][ref-folders]: it only removes the folder itself — contents -move to the workspace root instead of being deleted — and refuses when the folder still -has sub-folders, rather than deleting the whole subtree. +standalone exploration inside it. Its delete is [narrower than deleting a folder from +the Workspace page][ref-deleting-folders]. **To change an existing report, use `updateReport` — never recreate it.** A dashboard's chart widget points at a specific `reportId`, so replacing a report with a new one orphans @@ -386,8 +384,6 @@ its own. -Review pending work with `getDataModelChanges` before you commit. - ### Committing and publishing changes Editing the model with the tools above only ever writes to a personal dev branch's @@ -539,3 +535,4 @@ and friends) are set. [ref-dashboards]: /docs/explore-analyze/dashboards [ref-dev-mode]: /docs/data-modeling/dev-mode [ref-folders]: /docs/organize-content/folders +[ref-deleting-folders]: /docs/organize-content/folders#deleting-folders diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index 35c439fcc07ac..b180ab80ebf43 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -279,9 +279,8 @@ workbook, not just answer questions about it. Ask it to run a query and place the results, or refresh or clear a placed exploration. It can also create, rename, or delete a sheet, and organize your saved explorations into [folders][ref-folders] — list, create, rename, move, or delete one on -request. Unlike deleting a folder from the Workspace page, this only removes -the folder itself: its contents move to the workspace root instead of being -deleted, and a folder that still has sub-folders can't be deleted this way. +request. Deleting one this way is [narrower than from the Workspace +page][ref-deleting-folders]. Drag a saved exploration or an unsaved draft from the workbook's home onto the chat composer to attach it as context for your next question. @@ -310,3 +309,4 @@ pane and sync with your Cube account, so they're available from any device. [ref-explorations]: /docs/explore-analyze/explore#saving-explorations [ref-calculated-fields]: /docs/explore-analyze/workbooks/calculated-fields [ref-folders]: /docs/organize-content/folders +[ref-deleting-folders]: /docs/organize-content/folders#deleting-folders diff --git a/docs-mintlify/reference/embed-apis/generate-session.mdx b/docs-mintlify/reference/embed-apis/generate-session.mdx index a5549d3066f70..307535ac6d43f 100644 --- a/docs-mintlify/reference/embed-apis/generate-session.mdx +++ b/docs-mintlify/reference/embed-apis/generate-session.mdx @@ -440,7 +440,7 @@ embedded iframe on logout is still required — revoking a session doesn't tear POST https://{accountName}.cubecloud.dev/api/v1/embed/session/revoke ``` -### Request Body +### Revoke Request Body ```json { "sessionId": "abc123def456..." } @@ -449,7 +449,7 @@ POST https://{accountName}.cubecloud.dev/api/v1/embed/session/revoke Pass the `sessionId` that Generate Session returned. It requires the same admin `Api-Key` authentication as Generate Session. -### Response +### Revoke Response Returns `204 No Content` on success, with no response body. It works on a session in either state: an id that hasn't been exchanged for a token yet can no longer be From 7a2b0c049b32450a642016d43ae980f4648ad4b6 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:50:40 +0000 Subject: [PATCH 011/117] docs(mcp): scope the merge bullet's lead too Same defect as the "Edits never touch production" lead: the bold text is what a skimmer keeps, and "publishing to production needs an explicit ask" is still an absolute the Warning below it refutes. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 38bab18e0e9ff..1725c2b0d4948 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -360,7 +360,7 @@ into the MCP server: - **`startDataModelEdit` is the only entry point.** It returns the dev `branchName`, and `writeDataModelFile` and `deleteDataModelFile` require it. There is no way to write without going through it first. -- **Publishing to production needs an explicit ask.** `mergeToDefaultBranch` — the tool +- **Merging a branch to production prompts for confirmation.** `mergeToDefaultBranch` — the tool that publishes an already-committed branch — is marked destructive, so a client always prompts for confirmation. See [Committing and publishing changes](#committing-and-publishing-changes). From c2db007464e2fb0182ac6042564bf65b0c9f9a32 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:51:53 +0000 Subject: [PATCH 012/117] =?UTF-8?q?docs:=20fourth=20round=20=E2=80=94=20ta?= =?UTF-8?q?ble-row=20visibility,=20terminology,=20fence=20meta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - commitDataModelChanges' table row read as an unremarkable Write tool, the one place a reader scans for risk before reaching the Warning above it. Named the confirmPublishToDefaultBranch path directly in the row and pointed the Access column at the warning. - switchUserBranch's row still said "console" after the page standardized on "Cube UI". - Revoke session's cURL block carried a CodeGroup tab-label fragment ('title="Bash" cURL') left over from copying the pattern outside a CodeGroup, where it renders as a stray meta token. - allowExport's feature-visibility row read as a closed enumeration that omitted the whole-dashboard download menu, contradicting the row right below it. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 4 ++-- docs-mintlify/embedding/iframe/feature-visibility.mdx | 2 +- docs-mintlify/reference/embed-apis/generate-session.mdx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 1725c2b0d4948..19447788f02cf 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -395,11 +395,11 @@ tools above, and a client can call them without ever using the Cube UI. | Tool | Description | Access | | --- | --- | --- | | `getBranchState` | Reports the branch this session works on, the branch you're looking at in the Cube UI, the deploy branch, and whether the session's branch has uncommitted edits. | Read-only | -| `commitDataModelChanges` | Commits the dev branch's edits onto the branch it was created from. | Write | +| `commitDataModelChanges` | Commits the dev branch's edits onto the branch it was created from — including the deploy branch, live, when the call sets `confirmPublishToDefaultBranch`. | Write — see warning above | | `commitToNewBranch` | Commits the dev branch's edits to a new branch instead, optionally opening a pull request. | Write | | `mergeToDefaultBranch` | Merges a committed branch into the deploy branch, making it live for everyone. | Destructive — prompts | | `discardDataModelChanges` | Resets the dev branch to its parent (or to a given commit hash), throwing away pending edits. | Destructive — prompts | -| `switchUserBranch` | Switches your own Cube UI over to a branch, the same action as the branch switcher in the console, so you can see and test what was committed. | Write | +| `switchUserBranch` | Switches your own Cube UI over to a branch, the same action as its branch switcher, so you can see and test what was committed. | Write | These mirror the "Commit & Sync", "Merge" / "Create a Pull Request", and branch-switching actions described in [Development mode][ref-dev-mode] — a client can now drive that same diff --git a/docs-mintlify/embedding/iframe/feature-visibility.mdx b/docs-mintlify/embedding/iframe/feature-visibility.mdx index 266dd72afdbeb..0760fc53d2b15 100644 --- a/docs-mintlify/embedding/iframe/feature-visibility.mdx +++ b/docs-mintlify/embedding/iframe/feature-visibility.mdx @@ -133,7 +133,7 @@ they are ignored outside `/embed/*`. | Parameter | Effect | Surface | | --- | --- | --- | -| `allowExport=true` | Grants all three of **Download as CSV / PNG / PDF** per chart widget, and **Download as CSV** in the Creator Mode report builder, where a workbook's queries are authored before publishing. | Dashboards, Creator Mode | +| `allowExport=true` | The grant for export everywhere in the embed: per chart widget **Download as CSV / PNG / PDF**, the whole-dashboard download menu, and **Download as CSV** in the Creator Mode report builder, where a workbook's queries are authored before publishing. | Dashboards, Creator Mode | | `showDashboardExportMenu=false` | Hides the whole-dashboard download menu (in the Creator Mode dashboard header; floating over a published-dashboard embed). A hide switch, not the grant — `allowExport=true` is still what hands out export at all. | Dashboards | | `showDashboardHeader=false` | Hides the entire dashboard header bar. | Dashboards | | `showDashboardBackButton=false` | Hides the dashboard header's back button. | Dashboards | diff --git a/docs-mintlify/reference/embed-apis/generate-session.mdx b/docs-mintlify/reference/embed-apis/generate-session.mdx index 307535ac6d43f..8fde55a80214f 100644 --- a/docs-mintlify/reference/embed-apis/generate-session.mdx +++ b/docs-mintlify/reference/embed-apis/generate-session.mdx @@ -459,7 +459,7 @@ The call is idempotent — revoking an unknown, expired, or already-revoked id a returns `204`, so the response alone doesn't tell you whether a token was actually revocable. Returns `403` if embedding isn't enabled for the account. -```bash title="Bash" cURL +```bash curl -X POST "https://your-account.cubecloud.dev/api/v1/embed/session/revoke" \ -H "Content-Type: application/json" \ -H "Authorization: Api-Key YOUR_API_KEY" \ From e9fc3db7bc6b4fed5c3897caca1581372bbe1fc2 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:56:23 +0000 Subject: [PATCH 013/117] =?UTF-8?q?docs:=20fifth=20round=20=E2=80=94=20can?= =?UTF-8?q?onical=20explanation=20coverage=20and=20a=20parsing=20slip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - folders.mdx's canonical folder-deletion explanation named Analytics Chat and MCP but not the add-in chat panes that also link to it; added it, and normalized "sub-folders" to "subfolders" to match the rest of the section. - "Agent deletion is narrower..." parsed as deleting an agent (a real object in this taxonomy) rather than a folder. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/explore-analyze/analytics-chat.mdx | 2 +- docs-mintlify/docs/organize-content/folders.mdx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs-mintlify/docs/explore-analyze/analytics-chat.mdx b/docs-mintlify/docs/explore-analyze/analytics-chat.mdx index 2cf69e36c7c9a..65f07ff96bcf7 100644 --- a/docs-mintlify/docs/explore-analyze/analytics-chat.mdx +++ b/docs-mintlify/docs/explore-analyze/analytics-chat.mdx @@ -17,7 +17,7 @@ The AI agent interprets your questions, generates queries against your semantic - **Semantic model integration** – All queries run against your semantic model with proper access control and security, honoring the active [security context](/docs/explore-analyze/workbooks/querying-data#applying-a-security-context)—including an override applied by a developer or admin - **Queued messages** – Send follow-up messages while the agent is still processing - **Save your results** – Ask the agent to save a result as a [report](/docs/explore-analyze/workbooks) inside a workbook, or as a standalone [exploration](/docs/explore-analyze/explore#saving-explorations) when you don't want to create a workbook -- **Organize saved work** – Ask the agent to save an exploration into a specific [folder](/docs/organize-content/folders), or to list, create, rename, move, or delete folders in your workspace. Agent deletion is [narrower than deleting from the Workspace page](/docs/organize-content/folders#deleting-folders) +- **Organize saved work** – Ask the agent to save an exploration into a specific [folder](/docs/organize-content/folders), or to list, create, rename, move, or delete folders in your workspace. Deleting a folder this way is [narrower than deleting it from the Workspace page](/docs/organize-content/folders#deleting-folders) - **Link saved artifacts** – The agent can link an existing exploration, workbook, or dashboard to the conversation, on request or automatically when it creates or edits one, so you can reopen it from the thread later ## Discover available fields diff --git a/docs-mintlify/docs/organize-content/folders.mdx b/docs-mintlify/docs/organize-content/folders.mdx index abe7bc5f094d2..77b0b2dccf5fd 100644 --- a/docs-mintlify/docs/organize-content/folders.mdx +++ b/docs-mintlify/docs/organize-content/folders.mdx @@ -134,10 +134,10 @@ dashboards, and explorations — along with it; this cannot be undone. If anything inside the folder has its own permissions and you don't have Full access there too, deletion is blocked entirely and nothing is deleted. -Asking [Analytics Chat](/docs/explore-analyze/analytics-chat) or an MCP client to delete -a folder is narrower than deleting it here: it only removes the folder itself — contents -move to the workspace root instead of being deleted — and it refuses a folder that still -has sub-folders, rather than deleting the whole subtree. +Asking [Analytics Chat](/docs/explore-analyze/analytics-chat), an add-in chat pane, or +an MCP client to delete a folder is narrower than deleting it here: it only removes the +folder itself — contents move to the workspace root instead of being deleted — and it +refuses a folder that still has subfolders, rather than deleting the whole subtree. ## Folder permissions From 53428921faa6da7470eb8238ceeca2dafd9e61d3 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:57:25 +0000 Subject: [PATCH 014/117] docs(mcp): garden-path fix, list-also-prompts note, dedupe a caveat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - manageFolders' table row read as a list of four deleted objects until "are filed in" forced a re-read; added the missing "that". - Noted that manageFolders' single tool-wide annotation means action: "list" prompts for confirmation same as delete, so a reader following "call it with list first" isn't surprised by a confirmation dialog on a read. - Cut the confirmPublishToDefaultBranch restatement from the post-table paragraph — a fourth copy on the page, and framed as the opposite of the Warning above it (refuses vs. commits straight through) in a way that made a reader reconcile two tellings of the same mechanic. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 19447788f02cf..078007656620e 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -299,7 +299,7 @@ programmatically. Creating and editing workbooks requires the Explorer role or h | `readReport` | Reads one workbook report or standalone exploration by id — its title, SQL, chart spec, placement, and a shareable URL. | Read-only | | `updateReport` | Edits an existing workbook report or exploration in place, keeping its `reportId`. Send only the fields you want to change. | Destructive — prompts | | `deleteReport` | Deletes a workbook report or exploration. | Destructive — prompts | -| `manageFolders` | Lists, creates, renames, moves, or deletes the [workspace folders][ref-folders] standalone explorations, workbooks, and dashboards are filed in. | Destructive — prompts | +| `manageFolders` | Lists, creates, renames, moves, or deletes the [workspace folders][ref-folders] that standalone explorations, workbooks, and dashboards are filed in. | Destructive — prompts | | `updateDashboard` | Saves the dashboard layout to the workbook **draft**. Replaces the full widget set and does not go live. | Destructive — prompts | | `publishDashboard` | Publishes the current draft to make it live. Idempotent — republishing an unchanged draft is a no-op. | Destructive — prompts | @@ -309,8 +309,9 @@ published dashboard keeps serving its previous version until you approve Call `manageFolders` with `action: "list"` first to get a folder's numeric id — that id, not its name, is what `folderId` takes on `createReport` and `updateReport` to place a -standalone exploration inside it. Its delete is [narrower than deleting a folder from -the Workspace page][ref-deleting-folders]. +standalone exploration inside it. The annotation covers the whole tool, so a client +prompts for `list` as it would for `delete`. Its delete is [narrower than deleting a +folder from the Workspace page][ref-deleting-folders]. **To change an existing report, use `updateReport` — never recreate it.** A dashboard's chart widget points at a specific `reportId`, so replacing a report with a new one orphans @@ -407,10 +408,7 @@ flow instead of asking you to click through it. Call `getBranchState` before editing, so work doesn't land on a branch you never look at, and again after committing, to see whether you still need `switchUserBranch` to see -it. `commitDataModelChanges` refuses to commit a dev branch -whose parent is the deploy branch unless the call also sets -`confirmPublishToDefaultBranch` — publishing that way should only happen once you've -said so. `mergeToDefaultBranch` is separate from committing: it publishes an already +it. `mergeToDefaultBranch` is separate from committing: it publishes an already committed branch, and its description tells the agent to call it only when you've explicitly asked to publish or merge to production. From ae9afd069c6e6d7b248436278790b4c88dae1a1c Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 00:59:16 +0000 Subject: [PATCH 015/117] docs: pin anchors instead of renaming headings; note folder actions aren't confirmed - Used Mintlify's explicit anchor syntax ({#revoke-request-body} / {#revoke-response}) instead of renaming the Revoke session headings, so the TOC reads "Request Body"/"Response" under both sections instead of singling one out with a self-naming heading. - The add-in chat's "before any destructive action" list enumerated sheet-level actions only; a reader could assume folder deletion (the most consequential capability on the same page) was covered by omission. Checked the actual tool wiring (workspaceFoldersTool carries no confirmation gating, unlike the sheet-write path) and stated plainly that folder actions run immediately. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/google-sheets.mdx | 10 ++++++---- docs-mintlify/docs/integrations/microsoft-excel.mdx | 10 ++++++---- .../reference/embed-apis/generate-session.mdx | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index ad57288ff505e..f7b936ebb0407 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -296,10 +296,12 @@ page][ref-deleting-folders]. Drag a saved exploration or an unsaved draft from the spreadsheet's home onto the chat composer to attach it as context for your next question. -Before any destructive or ambiguous action — writing over an occupied area, -clearing a placement, renaming or deleting a sheet — the pane asks you to -confirm first. A query the agent places lands as an **unsaved** exploration; -save it yourself if you want to keep it. +Before any destructive or ambiguous action on the sheet — writing over an +occupied area, clearing a placement, renaming or deleting a sheet — the pane +asks you to confirm first. A query the agent places lands as an **unsaved** +exploration; save it yourself if you want to keep it. Folder actions are the +exception: creating, renaming, moving, or deleting one runs immediately, +without a confirmation step. Answers are tables, not charts — the chat pane doesn't render visualizations. Past conversations are listed under **Chat History** in the diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index b180ab80ebf43..2e2e0ea4ca7e4 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -285,10 +285,12 @@ page][ref-deleting-folders]. Drag a saved exploration or an unsaved draft from the workbook's home onto the chat composer to attach it as context for your next question. -Before any destructive or ambiguous action — writing over an occupied area, -clearing a placement, renaming or deleting a sheet — the pane asks you to -confirm first. A query the agent places lands as an **unsaved** exploration; -save it yourself if you want to keep it. +Before any destructive or ambiguous action on the sheet — writing over an +occupied area, clearing a placement, renaming or deleting a sheet — the pane +asks you to confirm first. A query the agent places lands as an **unsaved** +exploration; save it yourself if you want to keep it. Folder actions are the +exception: creating, renaming, moving, or deleting one runs immediately, +without a confirmation step. Answers are tables, not charts — the chat pane doesn't render visualizations. Past conversations are listed under **Chat History** in the diff --git a/docs-mintlify/reference/embed-apis/generate-session.mdx b/docs-mintlify/reference/embed-apis/generate-session.mdx index 8fde55a80214f..79eec30c9e32f 100644 --- a/docs-mintlify/reference/embed-apis/generate-session.mdx +++ b/docs-mintlify/reference/embed-apis/generate-session.mdx @@ -440,7 +440,7 @@ embedded iframe on logout is still required — revoking a session doesn't tear POST https://{accountName}.cubecloud.dev/api/v1/embed/session/revoke ``` -### Revoke Request Body +### Request Body {#revoke-request-body} ```json { "sessionId": "abc123def456..." } @@ -449,7 +449,7 @@ POST https://{accountName}.cubecloud.dev/api/v1/embed/session/revoke Pass the `sessionId` that Generate Session returned. It requires the same admin `Api-Key` authentication as Generate Session. -### Revoke Response +### Response {#revoke-response} Returns `204 No Content` on success, with no response body. It works on a session in either state: an id that hasn't been exchanged for a token yet can no longer be From e4472347de64071484cd72f0d776ae674689ab02 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:04:26 +0000 Subject: [PATCH 016/117] docs: match showDashboardExportMenu's Surface column to its own description MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Its own cell already said the menu appears in the Creator Mode dashboard header, but Surface still read Dashboards only — a pre-existing gap that stood out once the row above it (allowExport) was corrected to list both surfaces. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/embedding/iframe/feature-visibility.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-mintlify/embedding/iframe/feature-visibility.mdx b/docs-mintlify/embedding/iframe/feature-visibility.mdx index 0760fc53d2b15..785180bf99fcb 100644 --- a/docs-mintlify/embedding/iframe/feature-visibility.mdx +++ b/docs-mintlify/embedding/iframe/feature-visibility.mdx @@ -134,7 +134,7 @@ they are ignored outside `/embed/*`. | Parameter | Effect | Surface | | --- | --- | --- | | `allowExport=true` | The grant for export everywhere in the embed: per chart widget **Download as CSV / PNG / PDF**, the whole-dashboard download menu, and **Download as CSV** in the Creator Mode report builder, where a workbook's queries are authored before publishing. | Dashboards, Creator Mode | -| `showDashboardExportMenu=false` | Hides the whole-dashboard download menu (in the Creator Mode dashboard header; floating over a published-dashboard embed). A hide switch, not the grant — `allowExport=true` is still what hands out export at all. | Dashboards | +| `showDashboardExportMenu=false` | Hides the whole-dashboard download menu (in the Creator Mode dashboard header; floating over a published-dashboard embed). A hide switch, not the grant — `allowExport=true` is still what hands out export at all. | Dashboards, Creator Mode | | `showDashboardHeader=false` | Hides the entire dashboard header bar. | Dashboards | | `showDashboardBackButton=false` | Hides the dashboard header's back button. | Dashboards | | `showDashboardTitle=false` | Hides the dashboard title. | Dashboards | From 3681ccde07138b1802826dfa3842a6f3681624b9 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:07:05 +0000 Subject: [PATCH 017/117] =?UTF-8?q?docs:=20sixth=20round=20=E2=80=94=20pri?= =?UTF-8?q?vacy=20clause,=20overclaim,=20asymmetry,=20heading=20labels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Chat history: the old device-local wording implicitly answered "who else can see this?" The corrected sync wording didn't, so added that it's visible to deployment admins under Chats History (same conclusion chats-history.mdx's own "every user's chat conversations" already implies). - allowExport: "everywhere in the embed" is the same shape of unbounded claim this PR exists to fix; scoped to "both surfaces" to match the Surface column instead of enumerating and risking going stale again. - folders.mdx's canonical explanation gave the reassuring half of the agent-vs-Workspace-page divergence without the other half: the Excel/Sheets chat panes are the one route with no confirmation at all. Named it there too, not just on the two add-in pages. - Revoke session's pinned anchors fixed the link collision but left two identically-labeled "Request Body"/"Response" entries in the page TOC. Renamed the visible headings and widened the frontmatter description to mention revocation. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/google-sheets.mdx | 4 +++- docs-mintlify/docs/integrations/microsoft-excel.mdx | 4 +++- docs-mintlify/docs/organize-content/folders.mdx | 4 +++- docs-mintlify/embedding/iframe/feature-visibility.mdx | 2 +- docs-mintlify/reference/embed-apis/generate-session.mdx | 6 +++--- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index f7b936ebb0407..0850a0500bb24 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -305,7 +305,9 @@ without a confirmation step. Answers are tables, not charts — the chat pane doesn't render visualizations. Past conversations are listed under **Chat History** in the -pane and sync with your Cube account, so they're available from any device. +pane and sync with your Cube account, so they're available from any device +— and, like other conversations, visible to deployment admins under +[Chats History](/admin/monitoring/chats-history). {/* TODO: screenshot — the chat pane open in the add-on sidebar */} diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index 2e2e0ea4ca7e4..6d86aeff55362 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -294,7 +294,9 @@ without a confirmation step. Answers are tables, not charts — the chat pane doesn't render visualizations. Past conversations are listed under **Chat History** in the -pane and sync with your Cube account, so they're available from any device. +pane and sync with your Cube account, so they're available from any device +— and, like other conversations, visible to deployment admins under +[Chats History](/admin/monitoring/chats-history). {/* TODO: screenshot — the chat pane open in the add-in sidebar */} diff --git a/docs-mintlify/docs/organize-content/folders.mdx b/docs-mintlify/docs/organize-content/folders.mdx index 77b0b2dccf5fd..39ebf4527524b 100644 --- a/docs-mintlify/docs/organize-content/folders.mdx +++ b/docs-mintlify/docs/organize-content/folders.mdx @@ -137,7 +137,9 @@ access there too, deletion is blocked entirely and nothing is deleted. Asking [Analytics Chat](/docs/explore-analyze/analytics-chat), an add-in chat pane, or an MCP client to delete a folder is narrower than deleting it here: it only removes the folder itself — contents move to the workspace root instead of being deleted — and it -refuses a folder that still has subfolders, rather than deleting the whole subtree. +refuses a folder that still has subfolders, rather than deleting the whole subtree. In +the Excel and Google Sheets chat panes, folder actions run immediately, without the +confirmation step those panes ask for before other destructive actions. ## Folder permissions diff --git a/docs-mintlify/embedding/iframe/feature-visibility.mdx b/docs-mintlify/embedding/iframe/feature-visibility.mdx index 785180bf99fcb..a9f96d959f890 100644 --- a/docs-mintlify/embedding/iframe/feature-visibility.mdx +++ b/docs-mintlify/embedding/iframe/feature-visibility.mdx @@ -133,7 +133,7 @@ they are ignored outside `/embed/*`. | Parameter | Effect | Surface | | --- | --- | --- | -| `allowExport=true` | The grant for export everywhere in the embed: per chart widget **Download as CSV / PNG / PDF**, the whole-dashboard download menu, and **Download as CSV** in the Creator Mode report builder, where a workbook's queries are authored before publishing. | Dashboards, Creator Mode | +| `allowExport=true` | The grant for export on both surfaces: per chart widget **Download as CSV / PNG / PDF**, the whole-dashboard download menu, and **Download as CSV** in the Creator Mode report builder, where a workbook's queries are authored before publishing. | Dashboards, Creator Mode | | `showDashboardExportMenu=false` | Hides the whole-dashboard download menu (in the Creator Mode dashboard header; floating over a published-dashboard embed). A hide switch, not the grant — `allowExport=true` is still what hands out export at all. | Dashboards, Creator Mode | | `showDashboardHeader=false` | Hides the entire dashboard header bar. | Dashboards | | `showDashboardBackButton=false` | Hides the dashboard header's back button. | Dashboards | diff --git a/docs-mintlify/reference/embed-apis/generate-session.mdx b/docs-mintlify/reference/embed-apis/generate-session.mdx index 79eec30c9e32f..4fb962158d322 100644 --- a/docs-mintlify/reference/embed-apis/generate-session.mdx +++ b/docs-mintlify/reference/embed-apis/generate-session.mdx @@ -1,6 +1,6 @@ --- title: Generate Session -description: HTTP reference for minting short-lived embed sessions that authorize external viewers under signed embedding without sharing API keys. +description: HTTP reference for minting and revoking short-lived embed sessions that authorize external viewers under signed embedding without sharing API keys. --- The Generate Session API provides secure, session-based authentication for [signed embedding][ref-signed-embedding]. This API creates temporary sessions that allow external users to access embedded dashboards and visualizations without exposing your API keys. @@ -440,7 +440,7 @@ embedded iframe on logout is still required — revoking a session doesn't tear POST https://{accountName}.cubecloud.dev/api/v1/embed/session/revoke ``` -### Request Body {#revoke-request-body} +### Revoke request body {#revoke-request-body} ```json { "sessionId": "abc123def456..." } @@ -449,7 +449,7 @@ POST https://{accountName}.cubecloud.dev/api/v1/embed/session/revoke Pass the `sessionId` that Generate Session returned. It requires the same admin `Api-Key` authentication as Generate Session. -### Response {#revoke-response} +### Revoke response {#revoke-response} Returns `204 No Content` on success, with no response body. It works on a session in either state: an id that hasn't been exchanged for a token yet can no longer be From b2aeaaece5bcda091adbd8c12cf7817cf75ee19e Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:12:37 +0000 Subject: [PATCH 018/117] docs(mcp): fix self-contradictory publish gate and an overclaimed getBranchState effect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - "Publish only when you've asked to" addressed the reader as both asker and actor, so the constraint canceled itself out — leftover from the third-person-to-"you" pass. Restated as the reader's own decision to publish. - getBranchState is Read-only; "so work doesn't land on a branch you never look at" credited it with a guard only startDataModelEdit provides. Restated as what the tool actually reports: whether the session's branch and your Cube UI's branch have diverged. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- .../docs/integrations/mcp-server.mdx | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 078007656620e..0ef3314361d15 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -406,11 +406,11 @@ These mirror the "Commit & Sync", "Merge" / "Create a Pull Request", and branch- actions described in [Development mode][ref-dev-mode] — a client can now drive that same flow instead of asking you to click through it. -Call `getBranchState` before editing, so work doesn't land on a branch you never look -at, and again after committing, to see whether you still need `switchUserBranch` to see -it. `mergeToDefaultBranch` is separate from committing: it publishes an already -committed branch, and its description tells the agent to call it only when you've -explicitly asked to publish or merge to production. +Call `getBranchState` before editing, to see whether the MCP session's branch and the +branch your Cube UI shows are the same, and again after committing, to see whether you +still need `switchUserBranch` to see the result. `mergeToDefaultBranch` is separate from +committing: it publishes an already committed branch, and its description tells the +agent to call it only when you've explicitly asked to publish or merge to production. ### Pre-aggregations @@ -504,10 +504,11 @@ Once `writeDataModelFile` edits compile and `runQuery` confirms they return the data, call `commitDataModelChanges` to land them on the branch the dev branch forked from — or `commitToNewBranch` to put them on a new branch instead, optionally with a pull request. Use `switchUserBranch` to point your own Cube UI at the result so you can -see it. Publish only when you've asked to: `mergeToDefaultBranch` makes the branch live -for everyone and can't be undone from the response it returns. Call `getBranchState` at -any point to check which branch you and the MCP session are each on, and -`discardDataModelChanges` to throw away an edit that isn't working out. +see it. `mergeToDefaultBranch` is the publish step: it makes the branch live for +everyone, so call it only when you want the change in production — it can't be undone +from the response it returns. Call `getBranchState` to see whether the MCP session's +branch and the branch your Cube UI shows are the same, and `discardDataModelChanges` to +throw away an edit that isn't working out. ### Verify a pre-aggregation From 3a605d7f4fd861ceb090c25a3e53245f582d7204 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:14:23 +0000 Subject: [PATCH 019/117] =?UTF-8?q?docs:=20seventh=20round=20=E2=80=94=20s?= =?UTF-8?q?urface-count=20clarity,=20Analytics=20Chat=20parity,=20dedupe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - allowExport: dropped "on both surfaces" (ambiguous against three enumerated items) without switching to "All", since that value already means something broader elsewhere on the same page (locale/timezone apply to every embed type, not just these two). - folders.mdx named only the add-in panes as running folder actions unconfirmed, leaving Analytics Chat's behavior to inference. Checked: it calls the same workspaceFoldersTool with no confirmation gating, and console-ui's chat has no generic tool-confirmation UI at all (unlike the add-in's sheet-write cards) — named it explicitly. - Row totals repeated Column totals' "saved with the exploration" paragraph verbatim on both add-in pages. Folded into the one Column totals paragraph already above it. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/google-sheets.mdx | 10 +++------- docs-mintlify/docs/integrations/microsoft-excel.mdx | 10 +++------- docs-mintlify/docs/organize-content/folders.mdx | 5 +++-- docs-mintlify/embedding/iframe/feature-visibility.mdx | 2 +- 4 files changed, 10 insertions(+), 17 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index 0850a0500bb24..5a121cd87155f 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -175,9 +175,9 @@ filters are dropped from the totals query; dimension filters are kept. With measures on **Rows** and no row dimension, no totals row is written, since each "total" would just restate its own data row. -Column totals are saved with the exploration and survive **Refresh**; with -auto-run off, toggling the switch waits for **Run** like any other display -change. +Column and row totals are saved with the exploration and survive **Refresh**; +with auto-run off, toggling either switch waits for **Run** like any other +display change. {/* TODO: screenshot — a pivoted exploration with the Total row on the sheet */} @@ -199,10 +199,6 @@ query's full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. -Row totals are saved with the exploration and survive **Refresh**; with -auto-run off, toggling the switch waits for **Run** like any other display -change. - {/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} When your exploration is ready, click **Save** to add it to your workspace. You diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index 6d86aeff55362..c37e2b0f77719 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -164,9 +164,9 @@ filters are dropped from the totals query; dimension filters are kept. With measures on **Rows** and no row dimension, no totals row is written, since each "total" would just restate its own data row. -Column totals are saved with the exploration and survive **Refresh**; with -auto-run off, toggling the switch waits for **Run** like any other display -change. +Column and row totals are saved with the exploration and survive **Refresh**; +with auto-run off, toggling either switch waits for **Run** like any other +display change. {/* TODO: screenshot — a pivoted exploration with the Total row on the sheet */} @@ -188,10 +188,6 @@ query's full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. -Row totals are saved with the exploration and survive **Refresh**; with -auto-run off, toggling the switch waits for **Run** like any other display -change. - {/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} When your exploration is ready, click **Save** to add it to your workspace. You diff --git a/docs-mintlify/docs/organize-content/folders.mdx b/docs-mintlify/docs/organize-content/folders.mdx index 39ebf4527524b..bc0bc25da157b 100644 --- a/docs-mintlify/docs/organize-content/folders.mdx +++ b/docs-mintlify/docs/organize-content/folders.mdx @@ -138,8 +138,9 @@ Asking [Analytics Chat](/docs/explore-analyze/analytics-chat), an add-in chat pa an MCP client to delete a folder is narrower than deleting it here: it only removes the folder itself — contents move to the workspace root instead of being deleted — and it refuses a folder that still has subfolders, rather than deleting the whole subtree. In -the Excel and Google Sheets chat panes, folder actions run immediately, without the -confirmation step those panes ask for before other destructive actions. +Analytics Chat and the Excel and Google Sheets chat panes, folder actions run +immediately, with no confirmation step; the Excel and Google Sheets panes do confirm +other destructive actions, such as clearing a placement or deleting a sheet. ## Folder permissions diff --git a/docs-mintlify/embedding/iframe/feature-visibility.mdx b/docs-mintlify/embedding/iframe/feature-visibility.mdx index a9f96d959f890..19c16977d3536 100644 --- a/docs-mintlify/embedding/iframe/feature-visibility.mdx +++ b/docs-mintlify/embedding/iframe/feature-visibility.mdx @@ -133,7 +133,7 @@ they are ignored outside `/embed/*`. | Parameter | Effect | Surface | | --- | --- | --- | -| `allowExport=true` | The grant for export on both surfaces: per chart widget **Download as CSV / PNG / PDF**, the whole-dashboard download menu, and **Download as CSV** in the Creator Mode report builder, where a workbook's queries are authored before publishing. | Dashboards, Creator Mode | +| `allowExport=true` | The grant for export: per chart widget **Download as CSV / PNG / PDF**, the whole-dashboard download menu, and **Download as CSV** in the Creator Mode report builder, where a workbook's queries are authored before publishing. | Dashboards, Creator Mode | | `showDashboardExportMenu=false` | Hides the whole-dashboard download menu (in the Creator Mode dashboard header; floating over a published-dashboard embed). A hide switch, not the grant — `allowExport=true` is still what hands out export at all. | Dashboards, Creator Mode | | `showDashboardHeader=false` | Hides the entire dashboard header bar. | Dashboards | | `showDashboardBackButton=false` | Hides the dashboard header's back button. | Dashboards | From 2666028ae4e6e6890c02c224eb3a2f50ac4e6da0 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:18:48 +0000 Subject: [PATCH 020/117] docs(mcp): surface the live-publish hazard in the walkthrough itself MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A reader following #commit-and-publish-a-model-edit step by step never saw the confirmPublishToDefaultBranch hazard — it only lived in the safety section a table link away. Named the case and linked to it inline. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 0ef3314361d15..7f133b3c199e6 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -502,8 +502,10 @@ the full changed-file list even when the patch itself is trimmed. Once `writeDataModelFile` edits compile and `runQuery` confirms they return the right data, call `commitDataModelChanges` to land them on the branch the dev branch forked -from — or `commitToNewBranch` to put them on a new branch instead, optionally with a -pull request. Use `switchUserBranch` to point your own Cube UI at the result so you can +from — the deploy branch itself, live, if that's where the dev branch came from, so see +[How model edits stay safe](#how-model-edits-stay-safe) before committing that way — or +`commitToNewBranch` to put them on a new branch instead, optionally with a pull request. +Use `switchUserBranch` to point your own Cube UI at the result so you can see it. `mergeToDefaultBranch` is the publish step: it makes the branch live for everyone, so call it only when you want the change in production — it can't be undone from the response it returns. Call `getBranchState` to see whether the MCP session's From 3ae7d2f52c2b0a8b3ef8c35e06811b006c8dd382 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:19:56 +0000 Subject: [PATCH 021/117] =?UTF-8?q?docs:=20eighth=20round=20=E2=80=94=20tr?= =?UTF-8?q?im=20walkthrough=20restatements=20and=20an=20off-topic=20clause?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dropped an unparseable "can't be undone from the response it returns" and the getBranchState/mergeToDefaultBranch sentences the walkthrough repeated near-verbatim from the reference section right above it. - folders.mdx's chat-pane clause pointed at sheet placements and sheet deletion — not folder operations, and already documented on the add-in pages. Trimmed to the one load-bearing fact. - Row totals restated all four Column totals caveats a second time; point back at them instead. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/google-sheets.mdx | 9 +++------ docs-mintlify/docs/integrations/mcp-server.mdx | 6 ++---- docs-mintlify/docs/integrations/microsoft-excel.mdx | 9 +++------ docs-mintlify/docs/organize-content/folders.mdx | 5 ++--- 4 files changed, 10 insertions(+), 19 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index 5a121cd87155f..99cdfe164c4b7 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -192,12 +192,9 @@ each measure gets its own total column; with measures on **Rows**, a single total column covers them all, since each row already holds one measure. Like column totals, each total comes from a separate query grouped by the -opposite zone, so the same rules apply: correct for non-additive measures, -window-function [calculations][ref-calculated-fields] excluded, measure -filters dropped and dimension filters kept, and totals taken over the -query's full result rather than the rows on the sheet. With both switches -on, the cell where they meet holds a grand total across the whole result, -from a third query with neither zone kept. +opposite zone, so the caveats above apply unchanged. With both switches on, +the cell where they meet holds a grand total across the whole result, from a +third query with neither zone kept. {/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 7f133b3c199e6..c72f6c66dc773 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -507,10 +507,8 @@ from — the deploy branch itself, live, if that's where the dev branch came fro `commitToNewBranch` to put them on a new branch instead, optionally with a pull request. Use `switchUserBranch` to point your own Cube UI at the result so you can see it. `mergeToDefaultBranch` is the publish step: it makes the branch live for -everyone, so call it only when you want the change in production — it can't be undone -from the response it returns. Call `getBranchState` to see whether the MCP session's -branch and the branch your Cube UI shows are the same, and `discardDataModelChanges` to -throw away an edit that isn't working out. +everyone, so call it only when you want the change in production — no tool reverts it +afterwards. Use `discardDataModelChanges` to throw away an edit that isn't working out. ### Verify a pre-aggregation diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index c37e2b0f77719..cb23f2cfb6302 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -181,12 +181,9 @@ each measure gets its own total column; with measures on **Rows**, a single total column covers them all, since each row already holds one measure. Like column totals, each total comes from a separate query grouped by the -opposite zone, so the same rules apply: correct for non-additive measures, -window-function [calculations][ref-calculated-fields] excluded, measure -filters dropped and dimension filters kept, and totals taken over the -query's full result rather than the rows on the sheet. With both switches -on, the cell where they meet holds a grand total across the whole result, -from a third query with neither zone kept. +opposite zone, so the caveats above apply unchanged. With both switches on, +the cell where they meet holds a grand total across the whole result, from a +third query with neither zone kept. {/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} diff --git a/docs-mintlify/docs/organize-content/folders.mdx b/docs-mintlify/docs/organize-content/folders.mdx index bc0bc25da157b..12895e7e836b5 100644 --- a/docs-mintlify/docs/organize-content/folders.mdx +++ b/docs-mintlify/docs/organize-content/folders.mdx @@ -138,9 +138,8 @@ Asking [Analytics Chat](/docs/explore-analyze/analytics-chat), an add-in chat pa an MCP client to delete a folder is narrower than deleting it here: it only removes the folder itself — contents move to the workspace root instead of being deleted — and it refuses a folder that still has subfolders, rather than deleting the whole subtree. In -Analytics Chat and the Excel and Google Sheets chat panes, folder actions run -immediately, with no confirmation step; the Excel and Google Sheets panes do confirm -other destructive actions, such as clearing a placement or deleting a sheet. +Analytics Chat and the Excel and Google Sheets chat panes, folder actions also run +immediately, with no confirmation step. ## Folder permissions From c048908af72067c86b04073263af132e1ae73e20 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:23:42 +0000 Subject: [PATCH 022/117] docs: restore the explicit row-totals caveat list, with a precise referent "The caveats above" was ambiguous about how far back it reached, and literally included the row-dimension caveat right above it, which is column-totals-only and has no row-totals analogue. Back to naming the four caveats that do carry over, as they were before the previous round's consolidation went too far. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/google-sheets.mdx | 5 ++++- docs-mintlify/docs/integrations/microsoft-excel.mdx | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index 99cdfe164c4b7..0977830bb6848 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -192,7 +192,10 @@ each measure gets its own total column; with measures on **Rows**, a single total column covers them all, since each row already holds one measure. Like column totals, each total comes from a separate query grouped by the -opposite zone, so the caveats above apply unchanged. With both switches on, +opposite zone, so the same caveats apply: correct for non-additive measures, +window-function [calculations][ref-calculated-fields] excluded, measure +filters dropped and dimension filters kept, and totals taken over the query's +full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index cb23f2cfb6302..3a6780fe8cb14 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -181,7 +181,10 @@ each measure gets its own total column; with measures on **Rows**, a single total column covers them all, since each row already holds one measure. Like column totals, each total comes from a separate query grouped by the -opposite zone, so the caveats above apply unchanged. With both switches on, +opposite zone, so the same caveats apply: correct for non-additive measures, +window-function [calculations][ref-calculated-fields] excluded, measure +filters dropped and dimension filters kept, and totals taken over the query's +full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. From f79fb16814810679c785d63d26c38f78a64de616 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:24:25 +0000 Subject: [PATCH 023/117] docs: fix a visibility overclaim and complete the confirmation contrast - "visible to you in the Cube UI" contradicted the section's own later point that the MCP session's branch and your Cube UI's branch can diverge, which is why getBranchState/switchUserBranch exist. Scoped the claim to once you've switched to that branch. - folders.mdx's confirmation sentence named three callers but only classified two of them, leaving MCP's contrasting behavior (manageFolders prompts, being destructive-annotated) to inference. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 9 +++++---- docs-mintlify/docs/organize-content/folders.mdx | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index c72f6c66dc773..7b6320b801586 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -388,10 +388,11 @@ its own. ### Committing and publishing changes Editing the model with the tools above only ever writes to a personal dev branch's -working copy — visible to you in the Cube UI and on your dev branch's endpoints, but to -nobody else until it's committed. These tools commit that work, publish it, or throw it -away. They're registered under the same semantic-model permission as the data model -tools above, and a client can call them without ever using the Cube UI. +working copy — reachable on that branch's endpoints, and in the Cube UI once you've +switched to it, but invisible to everyone else until it's committed. These tools commit +that work, publish it, or throw it away. They're registered under the same +semantic-model permission as the data model tools above, and a client can call them +without ever using the Cube UI. | Tool | Description | Access | | --- | --- | --- | diff --git a/docs-mintlify/docs/organize-content/folders.mdx b/docs-mintlify/docs/organize-content/folders.mdx index 12895e7e836b5..be977d03d3a96 100644 --- a/docs-mintlify/docs/organize-content/folders.mdx +++ b/docs-mintlify/docs/organize-content/folders.mdx @@ -139,7 +139,8 @@ an MCP client to delete a folder is narrower than deleting it here: it only remo folder itself — contents move to the workspace root instead of being deleted — and it refuses a folder that still has subfolders, rather than deleting the whole subtree. In Analytics Chat and the Excel and Google Sheets chat panes, folder actions also run -immediately, with no confirmation step. +immediately, with no confirmation step; over MCP, `manageFolders` is annotated +destructive, so a client prompts first. ## Folder permissions From 2333455089b7cb164e3c0f4948a604d2f2f229f3 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:29:26 +0000 Subject: [PATCH 024/117] docs: widen the Chats History audience to match the admin page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "Deployment admins" undersold who can read these conversations — chats-history.mdx also grants read access to non-admins holding the Access chat history custom-role permission, and this is the page's only privacy statement about a store that just changed from device-local to server-synced. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/google-sheets.mdx | 3 ++- docs-mintlify/docs/integrations/microsoft-excel.mdx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index 0977830bb6848..d7334112c5eb9 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -302,7 +302,8 @@ without a confirmation step. Answers are tables, not charts — the chat pane doesn't render visualizations. Past conversations are listed under **Chat History** in the pane and sync with your Cube account, so they're available from any device -— and, like other conversations, visible to deployment admins under +— and, like other conversations, readable by admins and anyone with the +**Access chat history** permission under [Chats History](/admin/monitoring/chats-history). {/* TODO: screenshot — the chat pane open in the add-on sidebar */} diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index 3a6780fe8cb14..0a7bbd729d9a5 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -291,7 +291,8 @@ without a confirmation step. Answers are tables, not charts — the chat pane doesn't render visualizations. Past conversations are listed under **Chat History** in the pane and sync with your Cube account, so they're available from any device -— and, like other conversations, visible to deployment admins under +— and, like other conversations, readable by admins and anyone with the +**Access chat history** permission under [Chats History](/admin/monitoring/chats-history). {/* TODO: screenshot — the chat pane open in the add-in sidebar */} From eb97b97c9d19460a7b992fe8c7e62243bb6a781d Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:30:40 +0000 Subject: [PATCH 025/117] docs: give Row totals its own persistence sentence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The shared "Column and row totals are saved..." sentence sat above the Row totals heading, in the Column totals section — invisible to a reader who jumps straight to Row totals from the sidebar TOC. Scoped the original back to Column totals and added an equivalent closing sentence to Row totals, on both add-in pages. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/google-sheets.mdx | 9 ++++++--- docs-mintlify/docs/integrations/microsoft-excel.mdx | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index d7334112c5eb9..ec58b52fde3ef 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -175,9 +175,9 @@ filters are dropped from the totals query; dimension filters are kept. With measures on **Rows** and no row dimension, no totals row is written, since each "total" would just restate its own data row. -Column and row totals are saved with the exploration and survive **Refresh**; -with auto-run off, toggling either switch waits for **Run** like any other -display change. +Column totals are saved with the exploration and survive **Refresh**; with +auto-run off, toggling the switch waits for **Run** like any other display +change. {/* TODO: screenshot — a pivoted exploration with the Total row on the sheet */} @@ -199,6 +199,9 @@ full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. +Row totals persist the same way: saved with the exploration, surviving +**Refresh**, and waiting for **Run** when auto-run is off. + {/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} When your exploration is ready, click **Save** to add it to your workspace. You diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index 0a7bbd729d9a5..13b216e85daa1 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -164,9 +164,9 @@ filters are dropped from the totals query; dimension filters are kept. With measures on **Rows** and no row dimension, no totals row is written, since each "total" would just restate its own data row. -Column and row totals are saved with the exploration and survive **Refresh**; -with auto-run off, toggling either switch waits for **Run** like any other -display change. +Column totals are saved with the exploration and survive **Refresh**; with +auto-run off, toggling the switch waits for **Run** like any other display +change. {/* TODO: screenshot — a pivoted exploration with the Total row on the sheet */} @@ -188,6 +188,9 @@ full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. +Row totals persist the same way: saved with the exploration, surviving +**Refresh**, and waiting for **Run** when auto-run is off. + {/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} When your exploration is ready, click **Save** to add it to your workspace. You From 6321bf5282b80f9a4b80936e1fc2045efbb0b7d5 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:34:37 +0000 Subject: [PATCH 026/117] docs(mcp): restore the confirmPublishToDefaultBranch condition in the walkthrough MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous round's fix for the missing hazard note dropped the actual gating condition, making a live publish read as unconditional whenever the dev branch forked from the deploy branch — contradicting the table row and Warning elsewhere on the page, which both state the flag as the trigger. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 7b6320b801586..18c4a5e8e3a7e 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -503,10 +503,11 @@ the full changed-file list even when the patch itself is trimmed. Once `writeDataModelFile` edits compile and `runQuery` confirms they return the right data, call `commitDataModelChanges` to land them on the branch the dev branch forked -from — the deploy branch itself, live, if that's where the dev branch came from, so see -[How model edits stay safe](#how-model-edits-stay-safe) before committing that way — or -`commitToNewBranch` to put them on a new branch instead, optionally with a pull request. -Use `switchUserBranch` to point your own Cube UI at the result so you can +from. If that branch is the deploy branch, the commit only goes through when the call +sets `confirmPublishToDefaultBranch` — and then it is live immediately, so see [How +model edits stay safe](#how-model-edits-stay-safe) before committing that way. Use +`commitToNewBranch` instead to put them on a new branch, optionally with a pull request. +Either way, use `switchUserBranch` to point your own Cube UI at the result so you can see it. `mergeToDefaultBranch` is the publish step: it makes the branch live for everyone, so call it only when you want the change in production — no tool reverts it afterwards. Use `discardDataModelChanges` to throw away an edit that isn't working out. From 005a1eeff578a4560d7bc6af7e8c7550796b7c24 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:38:35 +0000 Subject: [PATCH 027/117] docs: address review findings on MCP/sheets/embed session docs - folders.mdx: clarify that manageFolders' destructive annotation only causes a client to prompt if that client honors tool annotations - mcp-server.mdx: the "five constraints" safe-editing summary mixes server-enforced guarantees with a client-side one (mergeToDefaultBranch's confirmation depends on the client honoring the destructive annotation); reword the lead-in to distinguish the two - microsoft-excel.mdx, google-sheets.mdx: drop the Row totals persistence sentence, which duplicated the identical Column totals sentence above it - generate-session.mdx: title-case the Revoke section's Request Body/Response headings to match the rest of the page's heading convention Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/google-sheets.mdx | 3 --- docs-mintlify/docs/integrations/mcp-server.mdx | 4 ++-- docs-mintlify/docs/integrations/microsoft-excel.mdx | 3 --- docs-mintlify/docs/organize-content/folders.mdx | 2 +- docs-mintlify/reference/embed-apis/generate-session.mdx | 4 ++-- 5 files changed, 5 insertions(+), 11 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index ec58b52fde3ef..e81b191be938a 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -199,9 +199,6 @@ full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. -Row totals persist the same way: saved with the exploration, surviving -**Refresh**, and waiting for **Run** when auto-run is off. - {/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} When your exploration is ready, click **Save** to add it to your workspace. You diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 18c4a5e8e3a7e..0dffdf26cdae9 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -352,8 +352,8 @@ variable is set without ever seeing what it is set to. #### How model edits stay safe -Letting an AI client edit your semantic model is safe because of five constraints built -into the MCP server: +Letting an AI client edit your semantic model is safe because of five constraints — four +enforced by the MCP server, one by clients that honor tool annotations: - **File writes never touch production.** Every write goes to a personal dev branch named `dev--`. `writeDataModelFile` and `deleteDataModelFile` reject any branch diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index 13b216e85daa1..edd14b1e1af9e 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -188,9 +188,6 @@ full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. -Row totals persist the same way: saved with the exploration, surviving -**Refresh**, and waiting for **Run** when auto-run is off. - {/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} When your exploration is ready, click **Save** to add it to your workspace. You diff --git a/docs-mintlify/docs/organize-content/folders.mdx b/docs-mintlify/docs/organize-content/folders.mdx index be977d03d3a96..b7afd3db29f9e 100644 --- a/docs-mintlify/docs/organize-content/folders.mdx +++ b/docs-mintlify/docs/organize-content/folders.mdx @@ -140,7 +140,7 @@ folder itself — contents move to the workspace root instead of being deleted refuses a folder that still has subfolders, rather than deleting the whole subtree. In Analytics Chat and the Excel and Google Sheets chat panes, folder actions also run immediately, with no confirmation step; over MCP, `manageFolders` is annotated -destructive, so a client prompts first. +destructive, so clients that honor those annotations prompt first. ## Folder permissions diff --git a/docs-mintlify/reference/embed-apis/generate-session.mdx b/docs-mintlify/reference/embed-apis/generate-session.mdx index 4fb962158d322..f2c3f9295643d 100644 --- a/docs-mintlify/reference/embed-apis/generate-session.mdx +++ b/docs-mintlify/reference/embed-apis/generate-session.mdx @@ -440,7 +440,7 @@ embedded iframe on logout is still required — revoking a session doesn't tear POST https://{accountName}.cubecloud.dev/api/v1/embed/session/revoke ``` -### Revoke request body {#revoke-request-body} +### Revoke Request Body {#revoke-request-body} ```json { "sessionId": "abc123def456..." } @@ -449,7 +449,7 @@ POST https://{accountName}.cubecloud.dev/api/v1/embed/session/revoke Pass the `sessionId` that Generate Session returned. It requires the same admin `Api-Key` authentication as Generate Session. -### Revoke response {#revoke-response} +### Revoke Response {#revoke-response} Returns `204 No Content` on success, with no response body. It works on a session in either state: an id that hasn't been exchanged for a token yet can no longer be From 580788198ffce2999d64dd78228d332d4f0c3be0 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:43:07 +0000 Subject: [PATCH 028/117] docs(mcp-server): fix constraint-count attribution in safe-editing summary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three of the five constraints are server-enforced (dev-branch rejection, startDataModelEdit as sole entry point, permission-gated registration), one is client-side (mergeToDefaultBranch's destructive annotation), and the fifth (verification via runQuery before merging) isn't enforced by anyone — it's a practice the docs recommend, not a guarantee. The "four enforced by the MCP server" framing from the previous fix miscounted it as enforced. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 0dffdf26cdae9..56cd3f52b5252 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -352,8 +352,9 @@ variable is set without ever seeing what it is set to. #### How model edits stay safe -Letting an AI client edit your semantic model is safe because of five constraints — four -enforced by the MCP server, one by clients that honor tool annotations: +Letting an AI client edit your semantic model is safe because of five constraints — three +enforced by the MCP server, one by clients that honor tool annotations, and one that is +yours to apply: - **File writes never touch production.** Every write goes to a personal dev branch named `dev--`. `writeDataModelFile` and `deleteDataModelFile` reject any branch @@ -370,9 +371,9 @@ enforced by the MCP server, one by clients that honor tool annotations: `getDeploymentEnv`, the six commit and branch tools, and both pre-aggregation tools — is offered only to users whose role allows editing the semantic model. A Viewer never sees any of them. -- **Verification happens on the branch, before a merge, not after.** Pass the dev - `branchName` to `runQuery` to check that an edit returns the right data — `valid: true` - from `writeDataModelFile` only means the model compiles, not that it's correct. +- **Verify on the branch, before a merge, not after.** Pass the dev `branchName` to + `runQuery` to check that an edit returns the right data — `valid: true` from + `writeDataModelFile` only means the model compiles, not that it's correct. From 307af2097f3f1e1919459894d3cd05f2c6f081ae Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:44:12 +0000 Subject: [PATCH 029/117] docs: restore row-totals persistence answer, fix Sheets add-in wording - microsoft-excel.mdx, google-sheets.mdx: the Row totals section was left with no answer on whether the switch survives Refresh after the prior duplicate-sentence removal; restore a short, non-duplicative answer ("too") instead of leaving the question unanswered - folders.mdx: "an add-in chat pane" excludes Google Sheets, which the add-on's own docs page never calls an add-in; name both products Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/google-sheets.mdx | 4 ++++ docs-mintlify/docs/integrations/microsoft-excel.mdx | 4 ++++ docs-mintlify/docs/organize-content/folders.mdx | 5 +++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs-mintlify/docs/integrations/google-sheets.mdx b/docs-mintlify/docs/integrations/google-sheets.mdx index e81b191be938a..d9790a08ab18c 100644 --- a/docs-mintlify/docs/integrations/google-sheets.mdx +++ b/docs-mintlify/docs/integrations/google-sheets.mdx @@ -199,6 +199,10 @@ full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. +Row totals are saved with the exploration and survive **Refresh** too; with +auto-run off, toggling the switch waits for **Run** like any other display +change. + {/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} When your exploration is ready, click **Save** to add it to your workspace. You diff --git a/docs-mintlify/docs/integrations/microsoft-excel.mdx b/docs-mintlify/docs/integrations/microsoft-excel.mdx index edd14b1e1af9e..c91d56075c9bf 100644 --- a/docs-mintlify/docs/integrations/microsoft-excel.mdx +++ b/docs-mintlify/docs/integrations/microsoft-excel.mdx @@ -188,6 +188,10 @@ full result rather than the rows on the sheet. With both switches on, the cell where they meet holds a grand total across the whole result, from a third query with neither zone kept. +Row totals are saved with the exploration and survive **Refresh** too; with +auto-run off, toggling the switch waits for **Run** like any other display +change. + {/* TODO: screenshot — a pivoted exploration with the Total column on the sheet */} When your exploration is ready, click **Save** to add it to your workspace. You diff --git a/docs-mintlify/docs/organize-content/folders.mdx b/docs-mintlify/docs/organize-content/folders.mdx index b7afd3db29f9e..c0a85bcd41c37 100644 --- a/docs-mintlify/docs/organize-content/folders.mdx +++ b/docs-mintlify/docs/organize-content/folders.mdx @@ -134,8 +134,9 @@ dashboards, and explorations — along with it; this cannot be undone. If anything inside the folder has its own permissions and you don't have Full access there too, deletion is blocked entirely and nothing is deleted. -Asking [Analytics Chat](/docs/explore-analyze/analytics-chat), an add-in chat pane, or -an MCP client to delete a folder is narrower than deleting it here: it only removes the +Asking [Analytics Chat](/docs/explore-analyze/analytics-chat), the Excel or Google +Sheets chat pane, or an MCP client to delete a folder is narrower than deleting it here: +it only removes the folder itself — contents move to the workspace root instead of being deleted — and it refuses a folder that still has subfolders, rather than deleting the whole subtree. In Analytics Chat and the Excel and Google Sheets chat panes, folder actions also run From 816965055a2a57af261f82bb54238ef3ed738c51 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:49:15 +0000 Subject: [PATCH 030/117] docs(mcp-server): link the commitDataModelChanges warning reference "see warning above" pointed backward across a section boundary with no link; both paths that lead a reader to this table (the intro sentence and the registration bullet) land below the warning via the #committing-and-publishing-changes anchor, so the confirmPublishToDefaultBranch caveat was unreachable by following either. Link directly to #how-model-edits-stay-safe instead. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 56cd3f52b5252..adda7d2e21720 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -398,7 +398,7 @@ without ever using the Cube UI. | Tool | Description | Access | | --- | --- | --- | | `getBranchState` | Reports the branch this session works on, the branch you're looking at in the Cube UI, the deploy branch, and whether the session's branch has uncommitted edits. | Read-only | -| `commitDataModelChanges` | Commits the dev branch's edits onto the branch it was created from — including the deploy branch, live, when the call sets `confirmPublishToDefaultBranch`. | Write — see warning above | +| `commitDataModelChanges` | Commits the dev branch's edits onto the branch it was created from — including the deploy branch, live, when the call sets `confirmPublishToDefaultBranch`. | Write — see [How model edits stay safe](#how-model-edits-stay-safe) | | `commitToNewBranch` | Commits the dev branch's edits to a new branch instead, optionally opening a pull request. | Write | | `mergeToDefaultBranch` | Merges a committed branch into the deploy branch, making it live for everyone. | Destructive — prompts | | `discardDataModelChanges` | Resets the dev branch to its parent (or to a given commit hash), throwing away pending edits. | Destructive — prompts | From 3f34faa029df54c8096b49916296f65d4dcb718c Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:49:50 +0000 Subject: [PATCH 031/117] docs(mcp-server): scope the Merge-tool-mirrors-UI claim The UI's Merge button targets a dev branch's parent branch (dev-mode.mdx), which is only the deploy branch when the dev branch forked directly from it. mergeToDefaultBranch always targets the deploy branch specifically, so for a dev branch forked from a long-lived feature branch the two diverge: the UI button stays scoped to that feature branch while the tool still publishes to production. Called out the difference explicitly. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index adda7d2e21720..473dff359df95 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -406,7 +406,9 @@ without ever using the Cube UI. These mirror the "Commit & Sync", "Merge" / "Create a Pull Request", and branch-switching actions described in [Development mode][ref-dev-mode] — a client can now drive that same -flow instead of asking you to click through it. +flow instead of asking you to click through it. One difference: the UI's Merge button +targets the branch's parent, whichever branch that is, while `mergeToDefaultBranch` +always targets the deploy branch. Call `getBranchState` before editing, to see whether the MCP session's branch and the branch your Cube UI shows are the same, and again after committing, to see whether you From 8f06941800928aa335ff9b9f8c36f4fca6d6564d Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 01:57:13 +0000 Subject: [PATCH 032/117] docs: fix token TTL ambiguity, folders.mdx duplication, and folderId gap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - generate-session.mdx: the Revoke intro didn't say how long a token lives on its own, and the Note's 24-hour figure read as scoped to legacy (pre-revocation) tokens only. Verified against EmbedSessionsService.EMBED_TOKEN_TTL_SECONDS in cubejs-enterprise: the 24-hour TTL is the standard token lifetime for all tokens, not legacy- specific — only revocability differs. State the figure up front and drop it from the Note, which now only covers non-revocability. - folders.mdx: fix a broken line wrap left over from earlier edits, and drop the per-surface confirmation-step sentence — it's already stated on microsoft-excel.mdx, google-sheets.mdx, and via mcp-server.mdx's general annotation framing, so this canonical page only needs to cover what agent/MCP deletion does differently in scope, not repeat how each surface confirms. - mcp-server.mdx: createReport's row didn't mention `folderId`, even though it's a documented parameter (explained in prose below the table) for filing a standalone exploration into a workspace folder. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/integrations/mcp-server.mdx | 2 +- docs-mintlify/docs/organize-content/folders.mdx | 11 ++++------- .../reference/embed-apis/generate-session.mdx | 5 ++--- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 473dff359df95..5af11b2ff99ca 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -295,7 +295,7 @@ programmatically. Creating and editing workbooks requires the Explorer role or h | --- | --- | --- | | `readWorkbook` | Reads a workbook — its name and its current dashboard draft and published configs. | Read-only | | `createWorkbook` | Creates a new empty workbook, the container that holds reports and a dashboard. | Write | -| `createReport` | Saves a query plus its visualization. Pass `workbookId` to create a report inside a workbook and get the `reportId` a chart widget references; omit `workbookId` to save a standalone [exploration](/docs/explore-analyze/explore#saving-explorations) instead. | Write | +| `createReport` | Saves a query plus its visualization. Pass `workbookId` to create a report inside a workbook and get the `reportId` a chart widget references; omit `workbookId` to save a standalone [exploration](/docs/explore-analyze/explore#saving-explorations) instead. Pass `folderId` to file a standalone exploration in a [workspace folder][ref-folders]. | Write | | `readReport` | Reads one workbook report or standalone exploration by id — its title, SQL, chart spec, placement, and a shareable URL. | Read-only | | `updateReport` | Edits an existing workbook report or exploration in place, keeping its `reportId`. Send only the fields you want to change. | Destructive — prompts | | `deleteReport` | Deletes a workbook report or exploration. | Destructive — prompts | diff --git a/docs-mintlify/docs/organize-content/folders.mdx b/docs-mintlify/docs/organize-content/folders.mdx index c0a85bcd41c37..194ef9463bae7 100644 --- a/docs-mintlify/docs/organize-content/folders.mdx +++ b/docs-mintlify/docs/organize-content/folders.mdx @@ -135,13 +135,10 @@ If anything inside the folder has its own permissions and you don't have Full access there too, deletion is blocked entirely and nothing is deleted. Asking [Analytics Chat](/docs/explore-analyze/analytics-chat), the Excel or Google -Sheets chat pane, or an MCP client to delete a folder is narrower than deleting it here: -it only removes the -folder itself — contents move to the workspace root instead of being deleted — and it -refuses a folder that still has subfolders, rather than deleting the whole subtree. In -Analytics Chat and the Excel and Google Sheets chat panes, folder actions also run -immediately, with no confirmation step; over MCP, `manageFolders` is annotated -destructive, so clients that honor those annotations prompt first. +Sheets chat pane, or an MCP client to delete a folder is narrower than deleting it +here: it only removes the folder itself — contents move to the workspace root instead +of being deleted — and it refuses a folder that still has subfolders, rather than +deleting the whole subtree. ## Folder permissions diff --git a/docs-mintlify/reference/embed-apis/generate-session.mdx b/docs-mintlify/reference/embed-apis/generate-session.mdx index f2c3f9295643d..7762ecda621a0 100644 --- a/docs-mintlify/reference/embed-apis/generate-session.mdx +++ b/docs-mintlify/reference/embed-apis/generate-session.mdx @@ -433,7 +433,7 @@ Use session ID in [signed embedding][ref-signed-embedding]. ## Revoke a session Call this from your application's logout handler to end an embed session from the -server side, rather than relying on its token to expire on its own. Removing the +server side, rather than waiting out the token's own 24-hour expiry. Removing the embedded iframe on logout is still required — revoking a session doesn't tear it down. ```text @@ -470,8 +470,7 @@ curl -X POST "https://your-account.cubecloud.dev/api/v1/embed/session/revoke" \ Revocation only affects the embed session token, not a Cube API token obtained from `POST /api/v1/deployments/{deploymentId}/token` — that's a separate credential. Embed -tokens minted before your account received this feature aren't revocable and expire on -their own within 24 hours. +tokens minted before your account received this feature aren't revocable. From d0010fdbc59e393075c009e4149966166976437e Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 02:02:18 +0000 Subject: [PATCH 033/117] docs: add missing confirmation-step and folderId notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - analytics-chat.mdx: folder actions via the agent run without a confirmation step, same as the Excel/Sheets chat panes (both already say so) and the same underlying workspaceFoldersTool with no confirmation gating — this page was the one surface missing that fact after it was trimmed from folders.mdx as off-topic. - mcp-server.mdx: updateReport's row didn't mention folderId even though the prose two tools below states it's accepted on both createReport and updateReport; createReport's row already got this note, updateReport's didn't. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/docs/explore-analyze/analytics-chat.mdx | 2 +- docs-mintlify/docs/integrations/mcp-server.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs-mintlify/docs/explore-analyze/analytics-chat.mdx b/docs-mintlify/docs/explore-analyze/analytics-chat.mdx index 65f07ff96bcf7..2b77a43d79da4 100644 --- a/docs-mintlify/docs/explore-analyze/analytics-chat.mdx +++ b/docs-mintlify/docs/explore-analyze/analytics-chat.mdx @@ -17,7 +17,7 @@ The AI agent interprets your questions, generates queries against your semantic - **Semantic model integration** – All queries run against your semantic model with proper access control and security, honoring the active [security context](/docs/explore-analyze/workbooks/querying-data#applying-a-security-context)—including an override applied by a developer or admin - **Queued messages** – Send follow-up messages while the agent is still processing - **Save your results** – Ask the agent to save a result as a [report](/docs/explore-analyze/workbooks) inside a workbook, or as a standalone [exploration](/docs/explore-analyze/explore#saving-explorations) when you don't want to create a workbook -- **Organize saved work** – Ask the agent to save an exploration into a specific [folder](/docs/organize-content/folders), or to list, create, rename, move, or delete folders in your workspace. Deleting a folder this way is [narrower than deleting it from the Workspace page](/docs/organize-content/folders#deleting-folders) +- **Organize saved work** – Ask the agent to save an exploration into a specific [folder](/docs/organize-content/folders), or to list, create, rename, move, or delete folders in your workspace. Folder actions run immediately, with no confirmation step, and deleting a folder this way is [narrower than deleting it from the Workspace page](/docs/organize-content/folders#deleting-folders) - **Link saved artifacts** – The agent can link an existing exploration, workbook, or dashboard to the conversation, on request or automatically when it creates or edits one, so you can reopen it from the thread later ## Discover available fields diff --git a/docs-mintlify/docs/integrations/mcp-server.mdx b/docs-mintlify/docs/integrations/mcp-server.mdx index 5af11b2ff99ca..f2aede6059ac4 100644 --- a/docs-mintlify/docs/integrations/mcp-server.mdx +++ b/docs-mintlify/docs/integrations/mcp-server.mdx @@ -297,7 +297,7 @@ programmatically. Creating and editing workbooks requires the Explorer role or h | `createWorkbook` | Creates a new empty workbook, the container that holds reports and a dashboard. | Write | | `createReport` | Saves a query plus its visualization. Pass `workbookId` to create a report inside a workbook and get the `reportId` a chart widget references; omit `workbookId` to save a standalone [exploration](/docs/explore-analyze/explore#saving-explorations) instead. Pass `folderId` to file a standalone exploration in a [workspace folder][ref-folders]. | Write | | `readReport` | Reads one workbook report or standalone exploration by id — its title, SQL, chart spec, placement, and a shareable URL. | Read-only | -| `updateReport` | Edits an existing workbook report or exploration in place, keeping its `reportId`. Send only the fields you want to change. | Destructive — prompts | +| `updateReport` | Edits an existing workbook report or exploration in place, keeping its `reportId`. Send only the fields you want to change — including `folderId` to move a standalone exploration into a [workspace folder][ref-folders]. | Destructive — prompts | | `deleteReport` | Deletes a workbook report or exploration. | Destructive — prompts | | `manageFolders` | Lists, creates, renames, moves, or deletes the [workspace folders][ref-folders] that standalone explorations, workbooks, and dashboards are filed in. | Destructive — prompts | | `updateDashboard` | Saves the dashboard layout to the workbook **draft**. Replaces the full widget set and does not go live. | Destructive — prompts | From 0cdc5e3da9955383366f4ed9675e7aa3c25d0695 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 02:04:57 +0000 Subject: [PATCH 034/117] docs: fix Access chat history permission scope description MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit custom-roles.mdx scoped the "Access chat history" permission's description to "Analytics Chat conversations" only, contradicting the Excel/Google Sheets add-in pages this PR just documented as sharing the same Chat History feature. Verified against cubejs-enterprise: add-in chat threads go through the same ChatThreadController/ChatThreadService path into the same table, gated by the same ChatHistoryRead permission with no separate check — they're just bucketed under the "web" source since there's no Excel/Sheets source tag. Widened both custom-roles.mdx's row and chats-history.mdx's intro sentence to name the add-in panes explicitly. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/admin/monitoring/chats-history.mdx | 3 ++- docs-mintlify/admin/users-and-permissions/custom-roles.mdx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs-mintlify/admin/monitoring/chats-history.mdx b/docs-mintlify/admin/monitoring/chats-history.mdx index 35cdab6c83cdd..b2d11915706a5 100644 --- a/docs-mintlify/admin/monitoring/chats-history.mdx +++ b/docs-mintlify/admin/monitoring/chats-history.mdx @@ -4,7 +4,8 @@ description: Review users' chat conversations for a deployment under Admin → C --- Admins, and users with the [**Access chat history**][ref-custom-roles] custom -role permission, can view every user's chat conversations for a deployment. +role permission, can view every user's chat conversations for a deployment, +including from Analytics Chat and the Excel/Google Sheets add-in panes. It's possible to search specific chats by the first message content or chat UUID. You can also filter the list by user type, creation date, and source diff --git a/docs-mintlify/admin/users-and-permissions/custom-roles.mdx b/docs-mintlify/admin/users-and-permissions/custom-roles.mdx index e74564733343d..4bb0e8cb90d3b 100644 --- a/docs-mintlify/admin/users-and-permissions/custom-roles.mdx +++ b/docs-mintlify/admin/users-and-permissions/custom-roles.mdx @@ -119,7 +119,7 @@ Either grant **Full access** (a shortcut that enables every current and future d | Data Model | Edit data model | Edit the data model on any branch, including the main/deploy branch. Allows committing and merging to main, force-syncing main, and starting dev mode against main. | | Data Model | Edit data model on dev branches | Edit the data model only on non-default branches. Blocks any write that targets the main/deploy branch (including merging to main). | | Monitoring | Access query history | View deployment query history, performance, and traces. | -| Monitoring | Access chat history | View other users' Analytics Chat conversations for the deployment (**Admin → Chats History**). | +| Monitoring | Access chat history | View other users' chat conversations for the deployment, including Analytics Chat and the Excel/Google Sheets add-in panes (**Admin → Chats History**). | | Data Export | Download data | Download query results as CSV from workbooks, Analytics Chat, and published dashboards. Granted by default to the built-in Viewer, Explorer, and Developer roles. See [Data download controls][ref-data-download-controls]. | When **Full access** is checked, the granular checkboxes appear checked and disabled — granting Full access today also covers any deployment-scoped permissions added in the future. From cdde70e79d53d66d0c1170c34b5c22eb9105a7dd Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 02:09:49 +0000 Subject: [PATCH 035/117] docs: clarify dev-branch-role gating, chat source filter, and token TTL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - mcp-server.mdx: the permission-gating bullet collapsed two distinct roles into one grant. Per custom-roles.mdx, "Edit data model on dev branches" blocks any write targeting the deploy branch, so a role scoped to it still sees mergeToDefaultBranch/commitDataModelChanges registered but those calls still fail — note that explicitly instead of implying uniform access. - chats-history.mdx: the Analytics Chat / Excel / Sheets callout didn't connect to the source filter three lines below, so a reader had no way to tell which filter value surfaces add-in chats. Moved it into the filter sentence itself (they're bucketed under Web) rather than stating it as a disconnected fact. - generate-session.mdx: the 24-hour token TTL was only mentioned in the Revoke section: a reader following the mint path (Generate Session's own Response section) never saw it. Added a pointer there. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SgxTVc54fPAf83scMmKHk7 --- docs-mintlify/admin/monitoring/chats-history.mdx | 8 ++++---- docs-mintlify/docs/integrations/mcp-server.mdx | 5 ++++- docs-mintlify/reference/embed-apis/generate-session.mdx | 2 ++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs-mintlify/admin/monitoring/chats-history.mdx b/docs-mintlify/admin/monitoring/chats-history.mdx index b2d11915706a5..ffe398de0587e 100644 --- a/docs-mintlify/admin/monitoring/chats-history.mdx +++ b/docs-mintlify/admin/monitoring/chats-history.mdx @@ -4,12 +4,12 @@ description: Review users' chat conversations for a deployment under Admin → C --- Admins, and users with the [**Access chat history**][ref-custom-roles] custom -role permission, can view every user's chat conversations for a deployment, -including from Analytics Chat and the Excel/Google Sheets add-in panes. +role permission, can view every user's chat conversations for a deployment. It's possible to search specific chats by the first message content or chat UUID. -You can also filter the list by user type, creation date, and source -(**Web**, **MCP**, **Slack**, **Scheduled**, or **API**). +You can also filter the list by user type, creation date, and source — **Web** +(including Analytics Chat and the Excel/Google Sheets add-in panes), **MCP**, +**Slack**, **Scheduled**, or **API**.