update_dashboard
Update an existing dashboard's shared dashboardContext, widgets, tags, and/or team. Call get_skill with skillId: "dashboards" first — see skill for inheritance rules. Look up the dashboard id via search. Pass dashboardContext as a partial patch to edit the global filter (conditionsCel), period, groupBy, metricId, currency, or scopeId without recreating the dashboard — omit fields you want to keep; empty conditionsCel clears the filter. The legacy context alias is temporarily accepted but deprecated; never send both. Pass operations to add/replace/remove widgets. Pass tags to replace the full tag list (existing IDs from list_tags and/or { name, color? } for new tags; [] clears). Pass teamId (from list_teams) to assign a team, or teamId: null to detach. At least one of dashboardContext, operations, tags, or teamId is required. Response includes inheritedContext so new chart widgets can omit fields matching the dashboard. Chart widgets inherit metricId, groupBy, currency, period, and conditionsCel by default — only pass per-widget overrides. Text widgets: { type: "text", title, textContent }. Do not repeat from/to, datePreset, or groupBy when they match the dashboard context. Set extendDashboardConditions: false only when a chart widget must ignore the dashboard filter. Optional grid fields on add: x/y/w/h (from get). Returns a URL — you MUST include it in your response.
EXAMPLES: see skill dashboards Workflow B (widgets) and Workflow D (context / global filter).
• "Tag the AWS dashboard as infrastructure" (after list_tags returned tag id "tag_abc") → { dashboardId: "clx9aws", tags: ["tag_abc"] }
• "Move the K8s dashboard to the infra team" (after list_teams returned id "team_xyz") → { dashboardId: "clx9k8s", teamId: "team_xyz" }
• "Remove the dashboard from its team" → { dashboardId: "clx9k8s", teamId: null }
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Organization slug. Omit to auto-detect from your account (fails if you belong to multiple orgs). | |
| tags | No | Complete tag list to set on the dashboard (replaces current tags). Pass existing tag IDs from `list_tags`, and/or new tag objects `{ name, color? }` (created in the org if missing; color defaults to #6366F1). Pass [] to clear all tags. Use `get` to read current tags before removing one. Optional; omit to leave tags unchanged. | |
| teamId | No | Team to assign the dashboard to (from `list_teams`), or null to detach from any team. Optional; omit to leave team unchanged. | |
| context | No | Deprecated alias for `dashboardContext`; supported temporarily for backward compatibility. Do not send both fields. | |
| operations | No | List of operations to apply atomically. Each op is "add" (append a new widget), "replace" (overwrite an existing widget in place), or "remove" (delete a widget). For add/replace, widgets inherit dashboard context by default; only pass per-widget overrides. Optional when `dashboardContext`, `tags`, or `teamId` is provided. Example: [{"op":"add","widget":{"title":"Monthly cost","queries":[{"type":"cost","name":"a","chartType":"BAR"}],"aggBy":"Month"}}]. | |
| dashboardId | Yes | ID of the DashboardV2 to mutate. Get it from `search` (V2 surface). | |
| dashboardContext | No | Partial patch for dashboard-level shared context (global filter, period, groupBy, metricId, currency, scopeId). Omitted fields keep their current values. Set `conditionsCel` to update/clear the global filter (empty string clears it). When changing period mode, null the unused side (`datePreset` vs `startDate`/`endDate`). Can be used alone or together with `operations`, `tags`, or `teamId`. |