This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+11 more
Affected surfaces
ReleasePort's take
Light signalMeta 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 summaryMeta 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
| Type | Severity | Summary | CVE |
|---|---|---|---|
| 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 raiseValueError— there is no silent fallback. ISO date validation, ordering, and..separator counting all surface clear errors at the boundary. get_performance_reportandget_breakdown_reportnow build their request params via the resolver, so aYYYY-MM-DD..YYYY-MM-DDperiodis forwarded as Meta'stime_range, andlast_14d/last_90dare forwarded asdate_preset(instead of being silently downgraded).previous_period(period, *, today=…)returns a same-length window that sits immediately before the current window. Forlast_7dthe previous block is the 7 days before that — never thelast_30dsuperset.this_monthround-trips tolast_month;last_monthreturns an explicit calendar-month range so callers don't need to do calendar arithmetic themselves.AnalysisMixin.investigate_costandInsightsMixin.analyze_performanceboth use the new helper, so their current/previous comparison is correct for every acceptedperiodshape (including custom date ranges)._PERIOD_PARAMtool description lists every preset the resolver accepts (this_month/last_monthadded) 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
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.
Related context
Related tools
Beta — feedback welcome: [email protected]