Skip to main content
Glama

mureo_history_query

Retrieve historical campaign changes, every report version, journaled tool calls, archived daily spend, and decision outcomes that STATE.json no longer holds. Filter six past-data sources by date, platform, campaign, and outcome.

Instructions

Read the PAST — the one tool for any question that reaches beyond what STATE.json currently holds: what was changed on a campaign in July, every version a report has had, what a session tried and was refused, daily spend from before the 35-day retention window, how an earlier decision turned out. Six sources, one set of filters: action_log (the curated record of changes, each entry with its index in the full log — the index related_actions and evaluation_of name), journal (EVERY tool call and its outcome, including the denied and the failed, which action_log correctly never holds), daily (the day-grain series, the archived days and the ones still in the document merged into one), reports (every version ever written of one report kind), decisions (each decision with the changes that carried it out, their before-values, reason and evaluation, and a derived state: proposed / adopted / executed / observing / evaluated / skipped / rejected / deferred, plus a rolled_back flag and possible_duplicate_of: the decision a later call opened that probably records it again, or null) and ops_history (the same, plus the changes no decision covers). limit applies PER source and each section says whether more matched than came back. Use mureo_state_get for the CURRENT state of the document; use this for what it no longer holds.

Input Schema

NameRequiredDescriptionDefault
kindNoWhich report kind's history to read. Required when `sources` includes 'reports', and refused without it.
pathNoOptional path to STATE.json. Defaults to STATE.json in the MCP server's current working directory. Paths outside it are refused.
toolNoOnly calls of this tool, by exact name. Journal only — the other sources record no such field, and a filter they cannot answer is ignored by them rather than applied.
limitNoEntries PER SOURCE, newest kept (default 50, max 200). A source that had more says `truncated: true` — narrow the window rather than assuming you saw everything. The journal is additionally read only to its last 20000 lines, reported as `scanned_lines`.
sinceNoOnly what happened on or after this UTC date (YYYY-MM-DD, inclusive). A record whose own date cannot be read is excluded by a dated query rather than guessed into the window. Omitting it reads the 'daily' archive back only 12 months from `until` (or today); that section's `window` reports the dates it answered from and `defaulted: true`. Say `since` to reach further back.
untilNoOnly what happened on or before this UTC date (YYYY-MM-DD, inclusive). Earlier than `since` is refused.
outcomeNoOnly calls that ended this way: 'ok', 'platform_error' (the platform refused), 'exception', 'denied' (a policy gate), 'refused' (the exclusion preflight) or 'invalid_args'. Journal only — the other sources record no such field, and a filter they cannot answer is ignored by them rather than applied.
sourcesNoWhich trails to read. Default ['action_log', 'journal']. 'daily' requires `platform` and 'reports' requires `kind`; both are refused without them rather than returned empty.
batch_idNoOnly what belongs to this declared change set — the `action_log` entries stamped with it and the journal records made while it was open.
platformNoPlatform key (google_ads / meta_ads / plugin:<dist>:<provider> / ...). Required by the 'daily' source. On `action_log` it matches the entry's platform exactly; on the journal it matches the call's family, and for a plugin key the distribution that served the tool — the journal records which distribution answered, not which of its providers, so two providers of one bridge cannot be told apart there.
entity_idNoThe entity's id. Must be given together with `entity_type`. On the journal it is matched best-effort against the call's `<entity_type>_id`, `entity_id` or `id` argument.
campaign_idNoCampaign to filter on. Exact on `action_log`; on the journal a best-effort match against the call's `campaign_id` argument, since the journal records arguments rather than resolved entities.
entity_typeNoSub-campaign entity kind (ad_group / ad_set / placement / ...). Must be given together with `entity_id`.
failures_onlyNoOnly calls whose outcome is not 'ok' — what was tried and did not happen. Journal only — the other sources record no such field, and a filter they cannot answer is ignored by them rather than applied.
mutations_onlyNoOnly calls classified as mutations. Journal only — the other sources record no such field, and a filter they cannot answer is ignored by them rather than applied.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.26.0
    • changedInput schema / properties / sources / items / enum
      Previous value: -[
      -  "action_log",
      -  "journal",
      -  "daily",
      -  "reports"
      -]New value: +[
      +  "action_log",
      +  "journal",
      +  "daily",
      +  "reports",
      +  "decisions",
      +  "ops_history"
      +]
  2. Addedv0.20.0

TDQS

A4.5/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden and does so: it discloses per-source limit/truncation semantics, the 20000-line journal scan cap, the 12-month default daily archive window with a `window`/`defaulted` marker, and several refusal conditions. This is well beyond what the schema's own field names convey.

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

Conciseness4/5

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

The key routing statement is front-loaded and the closing contrast with mureo_state_get is well placed. The middle catalog of six sources is a dense run-on with heavy parentheticals, which costs readability but every clause carries substantive information.

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

Completeness4/5

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

For a 15-parameter, no-annotation, no-output-schema tool, the description covers source selection, windowing defaults, truncation reporting, and refusal behavior. It stops short of describing the overall response envelope, which matters given there is no output schema, but the per-section hints (`truncated`, `window`, `scanned_lines`) largely compensate.

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

Parameters3/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. The description reinforces cross-cutting semantics (limit is PER source, each section reports truncation) and explains the `sources` values, but most parameter-level detail already lives in the schema descriptions, adding little net value.

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 action (read historical records beyond current STATE.json) and enumerates the six sources it covers with concrete example questions. It explicitly contrasts itself with mureo_state_get, so an agent can select it 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?

Gives an explicit routing rule: 'Use mureo_state_get for the CURRENT state of the document; use this for what it no longer holds.' It also specifies per-source prerequisites (daily requires platform, reports requires kind) and warns that filters a source cannot answer are ignored rather than applied.

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

Deploy Server

Other Tools