mureo_state_report_set
Persist structured analysis reports into STATE.json so the dashboard can render the latest summary without re-running the agent.
Instructions
Atomically persist a structured analysis report summary into STATE.json's reports section so the read-only configure dashboard can render the latest report without re-running the agent. report selects the kind — one per skill, listed below; summary carries generated_at (ISO 8601), period, totals (headline figures), flags (one entry per finding) and narrative (the judgement and the proposal). Each part is rendered as what it is — figures as figures, flags as chips, narrative as prose — so a summary that folds all of it into the narrative renders as one unreadable paragraph, and the narrative bound below is enforced. Other report kinds are preserved. Best-effort: a skill should skip this silently where the context MCP is unavailable. Returns the updated state document.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional path to the file. Defaults to STRATEGY.md / STATE.json in the MCP server's current working directory. Paths outside cwd are refused. | |
| report | Yes | Report kind: ``daily`` (daily-check), ``weekly`` (weekly-report), ``monthly`` (monthly-report), ``goal`` (goal-review), ``audience`` (audience-review), ``experiment`` (experiment), ``fatigue`` (ad-fatigue-check), ``pacing`` (budget-pacing), ``tracking`` (tracking-health). | |
| summary | Yes | Write the structure, not one paragraph. Headline figures go in ``totals`` (spend, conversions, cpa, ctr, clicks, impressions) as raw numbers — 773957, not "¥773,957"; 0.0466, not "4.66%". Each finding goes in ``flags`` as its own entry, with the detail in its ``params``. ``narrative`` keeps only the judgement and the proposal, at most 400 characters: a longer one is refused, never truncated, because a sentence cut in half is worse than a long one. Fields: generated_at (ISO 8601), period, totals (the headline figures above), kpis (the OPTIONAL per-platform split — the breakdown, not the headline row), flags, narrative. Each flag is either a legacy snake_case string OR a structured object {code, severity, params}: code is a canonical vocabulary key (e.g. goals_met, invalid_traffic_suspected, budget_drift, zero_cv_adspots, spend_spike, anomaly_baseline_insufficient), severity is action|watch|info|positive (defaulted from code if omitted), and params holds the detail (adspot ids, yen, ctr) — keep detail in params, NOT in the code and NOT in the narrative. For a finding outside the vocabulary use {code:'custom', severity, label} where label is a string or {locale: text} map. Unknown non-custom codes are rejected. |