Skip to main content
Glama

mureo_state_platform_daily_set

Merges daily platform metrics into your state file by calendar date, preserving all other stored days to show trend lines and day-over-day deltas that window rollups miss.

Instructions

Add DAY-GRAIN history to a platform in STATE.json's v2 platforms section, keyed by calendar date — the trend line and day-over-day delta the reporting dashboard cannot show from the window rollups alone. Distinct from mureo_state_platform_metrics_set, which holds ONE rollup per window (YESTERDAY / LAST_7_DAYS / LAST_30_DAYS) and overwrites it on every collection, so the value it replaces is gone; this map accumulates instead, merged PER DATE KEY. Re-writing a day replaces that day only, and every other stored day survives. Write the daily rows you already fetched (the delivery report a health check pulls) — never fire an extra platform API call to fill this in. A day you did not collect is OMITTED, never written as zeros: a zero-filled day is indistinguishable from an account that stopped spending, and the readers render a gap as a gap. Only complete PAST days are accepted — today is still being spent into, and half a day filed as a day is a false low forever, because nothing revisits a day already in the map. Whose today that is, is yours to state: pass as_of_date (today in the AD ACCOUNT's timezone) when the server and the account may not share a day — without it the check uses the server's own today. Each bucket you pass without a usable fetched_at is stamped with the write time; a day this call merely preserves is never re-stamped. mureo keeps the most recent 35 days and drops older ones on write. Campaigns, the window rollups, the conversion override, any not_collected note and every other platform are preserved. Returns the updated state document.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
daysYesDay-grain rollups keyed by calendar date in **YYYY-MM-DD** (zero-padded — ``2026-08-05``, not ``2026-8-5``), one key per day, each value a totals-shaped object. Any other key shape is refused. Every key must be a day that has ENDED: today and any later date are refused, because a part-spent day stored as a whole one is a false low nothing ever corrects. Pass only the days you actually collected — omit a day you have no figures for rather than sending zeros for it. Merged per date key into the stored history.
pathNoOptional path to the file. Defaults to STRATEGY.md / STATE.json in the MCP server's current working directory. Paths outside cwd are refused.
platformYesPlatform key: a built-in (``google_ads`` / ``meta_ads`` / …), a platform an installed plugin registered, or ``plugin:<dist>:<provider>``. Use the SAME key the account is already stored under.
account_idYesThe platform account id (Google customer_id / Meta act_*). Always written onto the platform entry, and used to detect a second entry for the same account.
as_of_dateNoOptional. TODAY in the AD ACCOUNT's timezone, as **YYYY-MM-DD** — the day the completeness check is measured against. Omit it and the check uses the server's own today, which is correct whenever the host and the account share a day. Pass it when they may not: an account closes its day in its own timezone, so on a UTC host at 02:00 Asia/Tokyo, yesterday-in-Tokyo is still today in UTC and a genuinely complete day would be refused. The rule does not move — a day at or after this date is still refused — you are only stating whose today it is, and mureo checks that claim: an ``as_of_date`` more than 2 days ahead of the server's own date is refused outright (no timezone is further ahead than that), so a mis-inferred year cannot turn dates nobody has reached into complete history.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema field changedv0.17.1
    • addedInput schema / properties / as_of_date
      Added value: +{
      +  "description": "Optional. TODAY in the AD ACCOUNT's timezone, as **YYYY-MM-DD** — the day the completeness check is measured against. Omit it and the check uses the server's own today, which is correct whenever the host and the account share a day. Pass it when they may not: an account closes its day in its own timezone, so on a UTC host at 02:00 Asia/Tokyo, yesterday-in-Tokyo is still today in UTC and a genuinely complete day would be refused. The rule does not move — a day at or after this date is still refused — you are only stating whose today it is, and mureo checks that claim: an ``as_of_date`` more than 2 days ahead of the server's own date is refused outright (no timezone is further ahead than that), so a mis-inferred year cannot turn dates nobody has reached into complete history.",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
  2. Addedv0.13.1

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden, and it delivers richly: merge-per-date-key behavior, replace-one-day-only semantics, omission-of-missing-days, retention of 35 days with older drops, fetched_at stamping for new buckets and re-stamp protection for preserved days, as_of_date validation limit, and preservation of campaigns, rollups, conversion override, notes, and other platforms. It even discloses return of the updated state document. This is exemplary behavioral disclosure for a state-mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but every sentence carries operational weight: merge behavior, omission rule, completeness rule, timezone rule, fetched_at rule, retention, preservation guarantees. It is front-loaded with the core function and essential constraints, and the bolded key phrases ('Write the daily rows you already fetched', 'never written as zeros', 'Only complete PAST days') make scanable. It earns its length rather than padding it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, nested object parameters, and a state-mutating side-effect, this description is unusually complete: it states the merge contract, the single-day replacement semantics, the retention window, the data-origin rule, the completeness rule, the timezone mechanism, and what is preserved. It also discloses the return value. There is no critical behavioral fact an agent would need to discover by trial and error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, and the schema already documents each paramter well. The description adds meaningful supplement: platform key must be the SAME key already used for the account, as_of_date is about whose today it is and includes the 2-day-ahead refusal rule, and days.days keys must be zero-padded YYYY-MM-DD. This exceeds the schema's own descriptions in practical invocation terms.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Add DAY-GRAIN history to a platform in STATE.json's v2 platforms section'. It also names the sibling it is not (mureo_state_platform_metrics_set) and explains the difference: one rollup per window overwritten vs per-date map merged. An agent can distinguish this tool from its sibling without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is everywhere: use it for day-grain delivery history the dashboard trend line needs; do NOT call platform APIs, write already-fetched rows; only complete past days; omit uncollected days; pass as_of_date when timezones differ. It also tells the agent to use the same platform key the account is stored under and contrasts with mureo_state_platform_metrics_set. This leaves no ambiguity about when to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/logly/mureo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server