add_widget
Add a DATA widget (table, chart, KPI…) to a report using plain language, e.g. "add a monthly Google Ads performance table", "add a KPI card of GA4 conversions", or BLENDED across every paid channel: "leads by month across all channels", "blended cost per lead by calendar week", "a table comparing all paid channels with a total" (needs two or more paid ad accounts; rates are recomputed from pooled totals, never averaged). It maps the request to the report's connected data and adds the widget — or, if the data isn't connected or we don't support that metric yet, tells you why. Granularity words (daily, weekly, monthly, by month, per week; täglich, wöchentlich, monatlich, pro Monat) set a chart's time scale deterministically; a period ("last 12 months") is never read as one. GA4 visits by channel PER MONTH ("sessions by channel per month for the last 12 months") is the GA4 table "Channel × Month": one row per channel, one column per calendar month, one metric, optional totals and shading. PLACEMENT: goes at the end of the report unless position says otherwise — start, end, before or after a widget, or section_start / section_end of a section (anchorId = that widget's or section's id, from get_report; after a section = after everything in it) — or the instruction states it by naming an existing widget or section ("in the Google Ads section, right after the Top campaigns table"). A stated placement that names no widget, or a title two widgets share, keeps the end and the preview says so. The preview shows where the widget will go. The instruction is read by AI: the preview's aiCost says who pays for it (the workspace's own AI key, billed by its provider, or CrunchJunkie's at no charge). Requires MCP write actions; without confirm:true it returns a preview. For a free-text block you write yourself, call add_text_widget.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Set true to add it. Omit for a preview of what will be interpreted and added. With confirm:true, also pass the preview's previewToken. | |
| anchorId | No | With position before, after, section_start or section_end: the id of the widget or section (from get_report). After a section = after everything in it. | |
| position | No | Where the widget goes (default end, or what the instruction states): start, end, before / after a widget, section_start / section_end of a section. All but start and end need anchorId. Wins over a placement in the instruction. | |
| reportId | Yes | Report id (from list_reports). | |
| instruction | Yes | What widget to add, in plain language. It may say where ("right after the Top campaigns table", "at the end of the SEO section") when it names an existing widget or section. | |
| previewToken | No | With confirm:true: the previewToken from this tool's preview (valid 15 minutes, once, for exactly the previewed arguments). |