Dynamic Dashboards
Present tool outputs as read-only dashboards with charts, metrics, comparisons, and tables.
Dynamic Dashboards
weavz-dynamic-dashboard is an experimental built-in workspace integration for turning data gathered by other tools into a read-only dashboard. Agents can collect rows from Slack, Sheets, databases, HTTP APIs, storage, browser extraction, or custom code, normalize those outputs into named datasets, then call a dashboard action to profile, suggest, validate, or render a visual result.
The dashboard tool is a presentation primitive. It does not call other tools, fetch data, persist dashboards, create public share URLs, or grant new permissions.
When to use it
Use Dynamic Dashboards when an agent should show:
- Metrics and comparisons from one or more datasets
- Trends over time from date and numeric fields
- Category breakdowns as bars, grouped bars, pie, or donut charts
- Tables for high-cardinality or mixed data
- A final report-style visual result after a multi-tool Code Mode run
If chart confidence is low, the tool falls back to a safe summary plus table or JSON view instead of inventing a misleading chart.
Add the integration
Use a stable alias such as dashboard:
{
"integrationName": "weavz-dynamic-dashboard",
"alias": "dashboard",
"displayName": "Dynamic Dashboard"
}Dataset shape
Pass data as an array of named datasets:
[
{
"id": "current_pipeline",
"label": "Current Pipeline",
"role": "primary",
"source": {
"alias": "crm",
"action": "list_deals",
"description": "Open opportunities"
},
"data": [
{ "stage": "Qualified", "amount": 42000, "createdAt": "2026-06-01" },
{ "stage": "Proposal", "amount": 78000, "createdAt": "2026-06-03" }
]
}
]Do not include credentials, raw request headers, tokens, cookies, or secrets in source or data. Sensitive field names such as password, token, secret, authorization, cookie, credential, and private_key are redacted by default.
Actions
| Action | Use it for |
|---|---|
profile_data | Inspect data shape, field types, quality warnings, candidate dimensions, candidate metrics, and chart suggestions |
suggest_dashboard | Generate a deterministic dashboard spec from datasets and intent hints |
validate_dashboard | Check a custom dashboard spec and get blocking issues plus repair hints |
render_dashboard | Return the final dynamic dashboard envelope and MCP UI metadata |
Common rendering hints include title, description, intent, timeField, primaryMetric, primaryDimension, groupBy, compareBy, baselineDatasetId, maxRows, theme, and redactionMode.
Agent workflow
In Code Mode, the intended flow is:
- Use other aliases to collect data.
- Normalize each output into
{ id, label, data, source, role }. - Call
weavz.dashboard.profile_dataorweavz.dashboard.suggest_dashboardwhen the data shape is uncertain. - Optionally edit and validate the suggested spec.
- Call
weavz.dashboard.render_dashboardas the final visual result.
const current = await weavz.crm.list_deals({ status: 'open' })
const baseline = await weavz.storage.read_file({ path: 'reports/last-week-pipeline.json' })
return await weavz.dashboard.render_dashboard({
title: 'Pipeline Movement',
intent: 'comparison',
primaryMetric: 'amount',
primaryDimension: 'stage',
datasets: [
{
id: 'current',
label: 'Current',
role: 'primary',
source: { alias: 'crm', action: 'list_deals' },
data: current.deals,
},
{
id: 'baseline',
label: 'Last Week',
role: 'baseline',
source: { alias: 'storage', action: 'read_file' },
data: JSON.parse(baseline.content || '[]'),
},
],
})Safety and limits
Dynamic Dashboards are ephemeral in v1:
- No persisted dashboards
- No public share URLs
- No arbitrary HTML, CSS, JavaScript, iframe URLs, or remote chart definitions
- No raw dashboard data in activity logs or spans
- Maximum 10 datasets, 1,000 display rows per dataset, 20,000 display cells, 12 widgets, and a bounded dashboard envelope