Skip to content

logly/mureo

v0.9.8 Breaking

This release includes 1 breaking change for platform teams planning a safe upgrade.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

advertising agentic-ai ai-agents claude-code cli codex
+11 more
cursor facebook-ads gemini-cli google-ads marketing marketing-automation mcp meta-ads model-context-protocol python search-console

Affected surfaces

breaking_upgrade

ReleasePort's take

Light signal
editorial:auto 12d

Meta Ads now validates the `period` argument and throws an error for unknown values instead of silently defaulting to `last_7d`.

Why it matters: Validate your code handling period arguments before upgrading; unhandled inputs will cause failures. Plan a test in dev prior to production rollout.

Summary

AI summary

Meta Ads period argument now validates inputs, throws on unknown values, and correctly computes previous periods instead of silently falling back to last_7d.

Changes in this release

Feature Low

Added `_period.py` with `resolve_period(period)` for clear error handling.

Added `_period.py` with `resolve_period(period)` for clear error handling.

Source: granite4.1:30b@2026-05-22-audit

Confidence: low

Feature Low

`get_performance_report` and `get_breakdown_report` forward custom date ranges as Meta's `time_range`.

`get_performance_report` and `get_breakdown_report` forward custom date ranges as Meta's `time_range`.

Source: granite4.1:30b@2026-05-22-audit

Confidence: low

Feature Low

`previous_period(period)` returns correct preceding window, fixing delta calculations.

`previous_period(period)` returns correct preceding window, fixing delta calculations.

Source: granite4.1:30b@2026-05-22-audit

Confidence: low

Feature Low

Analysis mixins now use updated period helper for accurate comparisons.

Analysis mixins now use updated period helper for accurate comparisons.

Source: granite4.1:30b@2026-05-22-audit

Confidence: low

Bugfix Medium

Meta Ads period argument no longer silently falls back to last_7d.

Meta Ads period argument no longer silently falls back to last_7d.

Source: llm_adapter@2026-05-22

Confidence: high

Refactor Low

Tool descriptions updated to list all supported presets and clarify inclusive date ranges.

Tool descriptions updated to list all supported presets and clarify inclusive date ranges.

Source: granite4.1:30b@2026-05-22-audit

Confidence: low

Full changelog

Fixed — Meta Ads period argument no longer silently falls back to last_7d (#134, #135)

The Meta Ads MCP tools' period argument advertised last_14d, last_90d, and explicit YYYY-MM-DD..YYYY-MM-DD ranges, but the implementation accepted only six hard-coded preset names and silently returned last_7d data for anything else. Period-over-period analyses (meta_ads_analysis_performance, meta_ads_analysis_cost) doubled the bug: the "previous" window was likewise mapped via a tiny dict that, for last_7d, returned last_30d — a superset that overlaps the current window, making every delta meaningless.

This release wires the full advertised surface through to the Meta Graph API:

  • New mureo/meta_ads/_period.py: resolve_period(period) returns either ("date_preset", str) or ("time_range", (since, until)). Unknown values raise ValueError — there is no silent fallback. ISO date validation, ordering, and .. separator counting all surface clear errors at the boundary.
  • get_performance_report and get_breakdown_report now build their request params via the resolver, so a YYYY-MM-DD..YYYY-MM-DD period is forwarded as Meta's time_range, and last_14d / last_90d are forwarded as date_preset (instead of being silently downgraded).
  • previous_period(period, *, today=…) returns a same-length window that sits immediately before the current window. For last_7d the previous block is the 7 days before that — never the last_30d superset. this_month round-trips to last_month; last_month returns an explicit calendar-month range so callers don't need to do calendar arithmetic themselves.
  • AnalysisMixin.investigate_cost and InsightsMixin.analyze_performance both use the new helper, so their current/previous comparison is correct for every accepted period shape (including custom date ranges).
  • _PERIOD_PARAM tool description lists every preset the resolver accepts (this_month / last_month added) and clarifies that custom ranges are inclusive at both endpoints.

Backwards compatibility: callers relying on the silent last_7d fallback now see a ValueError. This is the bug being fixed — they were always getting the wrong window. Every previously-working preset continues to work, plus the previously-advertised-but-broken last_14d, last_90d, and YYYY-MM-DD..YYYY-MM-DD shapes.

Install

pip install --upgrade mureo

Breaking Changes

  • `period` argument no longer silently falls back to `last_7d`; unknown values raise `ValueError`.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track logly/mureo

Get notified when new releases ship.

Sign up free

About logly/mureo

Framework for AI agents (Claude Code, Cursor, Codex, Gemini) to operate Google Ads, Meta Ads, and Search Console. Grounded in a local STRATEGY.md — not metric-chasing. Defense-in-depth security, local-first. Apache 2.0.

All releases →

Beta — feedback welcome: [email protected]