Fetch a V2 dashboard, budget, cost alert, report, or virtual dimension by ID. Response includes a `type` discriminator (`dashboard` | `budget` | `costAlert` | `report` | `virtualDimension`) — branch on it.
Budgets: pass the parent budget id (from search) or a budget version id; response includes budgetVersionId for query, plus costMetricId, currency, virtualDimension (id, name, bqName, values), excludedValues, lines, includedVirtualDimensionValues, filterCelRestrictToIncludedLines, and filterCelExcludeExcludedVirtualDimensionValues for aligning query cost with budget. howToQueryAlignedCost gives concrete example payloads.
Cost alerts: pass the alert id (from search or list_alerts); response includes alert configuration plus firingHistory (every stored firing day and group values that fired).
Reports: config in words plus run-health (status, nextRunDate, lastRunHealth, `widgets` array, recent per-destination delivery with executionIds). Read-only. To inspect a specific delivery's content, call get_report_execution (then get_report_execution_widget for drill-down).
Virtual dimensions: `id` / `virtualDimensionId` (same), `hasPendingDraft`, immutable `bqName` (BigQuery/CEL field for groupBy/filterCel — never derive from display `name`); `published` and optional `draft` (name, description, tags, computeStatus, values, rules, leftoverRule; draft may include draftValidation); `dependencies`. `values` is derived — output only. `leftoverRule` is separate from `rules` — do not put it in the `rules` array or pass it to update. For updates, copy rules from draft if pending else published, project each rule to `{ id, name, conditionCel, allocation }` (omit `position`, `isLeftovers`, and any leftover/catch-all rule), and pass that full `rules` array to update_virtual_dimension_draft. Call get_skill with skillId: "virtual-dimensions" for allocation shapes and workflow.
Dashboards: call get_skill with skillId: "dashboards" before create/update. Chart widgets include `x`/`y`/`w`/`h` and resolved `queryConfig`; text widgets have `type: "text"` and `textContent`. After fetch, use get_dashboard_widget_data / get_dashboard_widget_image, or update_dashboard to mutate.
Use "search" (or list tools) first to discover IDs.
EXAMPLE: "Open the Kubernetes dashboard" (after search returned its ID) → { id: "clx9abc123" }
ConnectorOAuth