logly/mureo

๐ŸŽฏ Marketing
0 Views
0 Installs

๐Ÿ โ˜๏ธ ๐Ÿ  - 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.

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "logly-mureo": {
      "command": "npx",
      "args": [
        "-y",
        "logly-mureo"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

mureo

Website ยท Commercial edition ยท ๆ—ฅๆœฌ่ชž

PyPI Python versions License CI

mureo โ€” your local-first AI ad ops crew. Find waste, audit changes, run ad accounts safely.

Local-first. Strategy-grounded. Safety-gated.

Works with Claude Code, Cursor, Codex & Gemini. mureo sits on top of the official ad-platform MCPs and gives your AI a strategy to follow, an outcome to be measured against, and an audit trail you can show to anyone โ€” credentials never leave your machine.

Commercial editions are also available โ€” including a cloud-hosted service and a local Agency edition for teams and agencies. See mureo.jp.

mureo /search-term-cleanup output: brand self-cannibalization detected โ€” same brand term converts at ยฅ4,550 CPA in one campaign vs ยฅ31,800 wasted in another, ~ยฅ250,000/30d redirectable

Real output: brand cannibalization auto-detected on a 30-day BYOD bundle (anonymized B2B SaaS account). More samples โ†“

What is mureo?

mureo is a local-first control plane for AI ad ops. Once installed, AI agents (Claude Code, Cursor, Codex, Gemini, etc.) operate Google Ads, Meta Ads, Search Console, and GA4 through mureo โ€” which keeps every action grounded in your business strategy, tied to real outcomes, and recorded in an audit log you can replay.

When official ad-platform MCPs ship (Meta Ads MCP, Google Ads MCP, etc.), mureo uses them as drivers. mureo's value is not the API connection โ€” it is what happens around it:

  • Strategy-grounded โ€” every decision reads STRATEGY.md (persona, USP, brand voice, goals)
  • Safety-gated โ€” rollback allow-list, GAQL guards, BYOD read-only by default, credential guard, per-platform throttle
  • Cross-platform โ€” Google Ads / Meta Ads / Search Console / GA4 in one workflow
  • Auditable โ€” append-only action log with rollback
  • Local-first โ€” credentials never leave your machine
  • Learnable โ€” /learn builds account-specific knowledge over time

Choose your setup

The easy way: pip install + mureo configure

For most people, two commands set up mureo for Claude โ€” no terminal secret-pasting, no JSON editing:

pip install mureo
mureo configure

mureo configure opens a local browser UI (bound to 127.0.0.1, ephemeral port โ€” no remote access) that walks you through everything:

  • Pick your Claude app โ€” Claude Code (CLI / Desktop app) or Claude Desktop app (Chat, Cowork); mureo writes the right config file for that host.
  • Basic setup โ€” registers the mureo MCP server, the credential-guard hook (Claude Code), and the workflow skills, in one click.
  • Connect platforms โ€” interactive Google / Meta OAuth in the browser (deep links to each console), or paste a GA4 service-account path / project id; values are written to ~/.mureo/credentials.json for you.
  • Official MCP providers โ€” register Google Ads / GA4 official MCPs into ~/.claude.json. (Meta is a hosted MCP with no OAuth dynamic client registration, so it can't be wired as a Claude Code user-scope server; the UI shows how to add it as a Claude.ai account connector instead โ€” it then works in Claude Code and Claude Desktop alike.)
  • Per-platform tool source โ€” a dashboard toggle to switch each platform between mureo-native tools and the official MCP.
  • Demo / BYOD โ€” scaffold a demo scenario or import your XLSX bundle from the same UI.

The terminal flow below still works (and is scriptable); mureo configure is just the friendlier front door to the same operations.

Manual / scriptable (3 modes ร— 3 hosts)

mureo has 3 modes (where the data comes from) and runs across 3 hosts (where the agent operates). Pick the cell, run the command โ€” or just use mureo configure above:

Claude CodeClaude Desktop chatCowork (Desktop)
Demo (synthetic)mureo setup claude-code --skip-auth + mureo demo init --scenario seasonality-trapmureo install-desktop --with-demo seasonality-trapSame as chat + connect the workspace folder
BYOD (your XLSX)mureo setup claude-code --skip-auth + mureo byod import bundle.xlsxmureo install-desktop + mureo byod import bundle.xlsxSame as chat + connect the workspace folder
Auth (Live API)mureo setup claude-code (interactive OAuth)mureo install-desktop + mureo configureSame as chat + connect the workspace folder

Full per-row walkthroughs (including how to obtain your XLSX, where to put it, and how to import it): Getting Started โ†’.

Not familiar with Google Cloud Console or Meta for Developers? OAuth flows, developer-token registration, and Business-app sign-ups can feel intimidating if you have never used those consoles before. Start with BYOD โ€” you will see what mureo can do for your account in a few minutes, then decide whether the Live API path is worth setting up.

BYOD vs Live API at a glance

Mode A: BYOD โ€” 5 minutes to first diagnosis, no OAuth

Drop a Sheet-bundle XLSX into mureo and get a strategy-grounded multi-platform diagnosis. No OAuth flow, no developer-token approval, no SaaS sign-up.

pip install mureo
mureo setup claude-code --skip-auth
mureo byod import ~/Downloads/mureo-google-ads.xlsx
mureo byod import ~/Downloads/mureo-meta-ads.xlsx     # add Meta later โ€” they're independent
# Open Claude Code and ask: "Run /daily-check"

Producing the XLSX is a one-time setup per platform:

  • Google Ads โ€” Apps Script template populates a Google Sheet you own; download as XLSX (~5 min). See guide โ†’
  • Meta Ads โ€” Saved Report in Ads Manager โ†’ 2-click export. Recognized in 9 languages (English / ๆ—ฅๆœฌ่ชž / ็ฎ€ไฝ“ไธญๆ–‡ / ็น้ซ”ไธญๆ–‡ / ํ•œ๊ตญ์–ด / Espaรฑol / Portuguรชs / Deutsch / Franรงais), so you do not need to switch Ads Manager UI to English. See guide โ†’

Read-only by construction. Every mutation tool (/rescue, /budget-rebalance, /creative-refresh) returns {"status": "skipped_in_byod_readonly"} โ€” the agent analyzes and recommends but never writes to your real account. Upgrade a platform to the Live API later with mureo byod remove --google-ads (one platform) or mureo byod clear (all).

Mode B: Live API OAuth โ€” full functionality

Connect mureo directly to Google Ads / Meta Ads APIs. Required to actually execute changes (/rescue, /budget-rebalance, /creative-refresh, mureo rollback apply) and for GA4 / Search Console support.

pip install mureo
mureo configure            # browser UI: pick host, basic setup, OAuth, providers
# โ€ฆor the terminal equivalent:
#   mureo auth setup        # interactive OAuth in the terminal
#   mureo setup claude-code # MCP server + workflow skills
# Open Claude Code and ask: "Run /daily-check"

Prerequisites: Google Ads Developer Token + OAuth Client; Meta App ID + Secret. Both mureo configure (browser) and mureo auth setup (terminal) walk you through them โ€” see Authentication below.

Which mode fits?

CapabilityMode A: BYODMode B: Live API
First-time setup time5โ€“10 min per platform30โ€“60 min
Approval / waiting riskNone1โ€“3 weeks Google review, sometimes rejected
/daily-check, /weekly-reportโœ… (campaign / ad-set / ad drill-down + placement / platform / device breakdown)โœ…
/goal-review, /sync-stateโœ…โœ…
/rescue / /budget-rebalance (proposals)โœ…โœ…
/search-term-cleanup (analysis)โœ… Google Ads onlyโœ…
/search-term-cleanup (execute)๐Ÿ›ก๏ธ Preview onlyโœ… Live
/rescue / /budget-rebalance (execute)๐Ÿ›ก๏ธ Preview onlyโœ… Live
/creative-refresh (execute)๐Ÿ›ก๏ธ Preview onlyโœ… Live
/competitive-scanโš ๏ธ Google Ads BYOD has no auction insights (Ads Scripts limitation)โœ…
GA4 / Search ConsoleโŒ (not in BYOD bundle)โœ…

Recommended starting path: Try Mode A on one platform first โ†’ run /daily-check โ†’ decide whether to add the second platform via BYOD or graduate to Mode B. The presence of ~/.mureo/byod/manifest.json is the switch โ€” no config flags, no global toggle.

See docs/byod.md for the full walkthrough, Saved Report config, and per-platform export instructions.

Features

Strategy-driven decisions

Every operation starts from STRATEGY.md -- your persona, USP, brand voice, goals, and operation mode. The agent doesn't just optimize metrics; it optimizes toward your business objectives.

/creative-refresh reads your Persona and USP before drafting a single headline.
/budget-rebalance checks your Operation Mode before shifting a single dollar.
/rescue cross-references your Goals before recommending what to fix first.

Cross-platform analysis

mureo orchestrates across Google Ads, Meta Ads, Search Console, and GA4 in a single workflow:

  • /daily-check -- pulls delivery status, ad performance, organic search trends, and site behavior across all platforms, then correlates them into one health report.
  • /search-term-cleanup -- compares paid keywords against organic rankings to eliminate wasteful overlap.
  • /competitive-scan -- combines auction insights with organic position data for a complete competitive picture.

The agent auto-discovers your configured platforms. Add Meta Ads later? Every command adapts automatically.

Built-in marketing expertise

Campaign diagnostics that pinpoint why ads aren't delivering -- budget constraints, bidding misconfiguration, policy disapprovals, and more. Search term intent classification. Budget efficiency scoring. RSA ad validation and asset auditing. Landing page analysis. Device-level CPA gap detection. The kind of knowledge experienced ad operators carry in their heads -- built into every workflow.

Creator-quality creative generation

/creative-generate produces creator-quality ad creatives โ€” text-free key visuals from a bring-your-own-key image provider, then pixel-perfect Japanese typography composited via HTML/CSS + headless Chromium โ€” and the agent scores every candidate before anything ships. See docs/creative-studio.md.

Learnable operational know-how

When you correct the agent or share an operational insight, /learn saves it to a persistent knowledge base. That knowledge is loaded at the start of every future session, so the agent doesn't repeat the same mistakes and applies what it learned to similar situations across your account.

You: "That's not a real CPA spike -- this industry always dips in Golden Week."
Agent: Saved. I'll flag this as seasonal next time.

โ†’ Written to the diagnostic knowledge base.
โ†’ Every future /daily-check and /rescue will factor this in.

Beyond your own /learn history, mureo can also consult external advisor MCP servers โ€” consulting firms, industry trade groups, OSS communities, or internal team wikis can stand up a vector-search MCP server that holds practitioner know-how (platform quirks, industry CPA / CTR benchmarks, post-cutoff platform updates) the LLM does not carry. Configure them in ~/.mureo/insight_sources.json and the agent calls mureo_consult_advisor from any diagnostic skill to pull the matching fragments. The advisor keeps the corpus; mureo passes a context-rich query and receives only the top-k snippets. See docs/insight-federation.md for the operator setup and the server-author spec.

Security by design

Marketing accounts are a high-value target. mureo is built with defense-in-depth for AI-driven operations:

  • Credential guard โ€” mureo setup claude-code installs a PreToolUse hook that blocks AI agents from reading ~/.mureo/credentials.json, .env, and similar secrets, so a prompt-injection payload cannot exfiltrate tokens via the file-system tools.
  • GAQL input validation โ€” every ID, date, date-range constant, and string literal that enters a Google Ads query flows through one whitelist-based surface (mureo/google_ads/_gaql_validator.py), and BETWEEN clauses pattern-match and revalidate their dates instead of passing raw caller input into GAQL.
  • Anomaly detection โ€” mureo/analysis/anomaly_detector.py compares current campaign metrics against a median-based baseline from the action log and emits prioritized alerts for zero spend, CPA spikes, and CTR drops, with sample-size gates that suppress single-day noise. Exposed to agents via the analysis_anomalies_check MCP tool; state_file is sandboxed inside the MCP server's CWD so a prompt-injected agent cannot redirect it at an attacker-crafted STATE.json.
  • Rollback with allow-list gating โ€” mureo/rollback/ turns agent-authored reversible_params hints into concrete RollbackPlan records. Only operations on an explicit allow-list are planned; destructive verbs (.delete, .remove, .transfer) and unexpected parameter keys are refused, so a compromised agent cannot smuggle a privileged call through the rollback path. mureo rollback list / show let operators preview plans, and the rollback_apply MCP tool executes them by re-dispatching through the same handler used for forward actions so the reversal re-enters the full policy gate (auth, rate limit, validation). Apply requires confirm=true (literal boolean), refuses rollback.* self-recursion, records the reversal as an append-only action_log entry tagged with rollback_of=<index>, and refuses a second apply of the same index.
  • Immutable data models โ€” every state object (StateDocument, ActionLogEntry, CampaignSnapshot, Anomaly, RollbackPlan) is a frozen=True dataclass; an agent cannot silently mutate its own record of what happened.
  • Local-only credentials โ€” tokens are loaded from ~/.mureo/credentials.json or environment variables and transmitted only to the official ad-platform APIs. mureo itself has no telemetry.

See SECURITY.md for the full threat model and vulnerability reporting process.

Full capability list
AreaCapabilities
DiagnosticsAutomatic root cause identification for delivery issues (budget, bidding, policy, structure), learning period detection, smart bidding classification, zero-conversion analysis
PerformancePeriod-over-period comparison, cost spike investigation, cross-campaign health checks, CPA/CV goal tracking
Search termsN-gram distribution, intent pattern detection, add/exclude candidate scoring, paid vs organic overlap analysis
CreativeRSA validation (prohibited expressions, character width, ad strength prediction), asset-level performance audit, LP analysis, message match scoring
BudgetCross-campaign allocation analysis, reallocation recommendations, efficiency scoring
CompetitiveAuction insights, impression share trends, organic position correlation
Meta AdsPlacement analysis (Facebook/Instagram/Audience Network), cost investigation, A/B comparison, creative suggestions
MonitoringDelivery goal evaluation, CPA/CV goal tracking, device analysis, B2B-specific checks

Workflow Commands

CommandWhat it does
/onboardDiscover your platforms, generate STRATEGY.md, initialize STATE.json
/daily-checkCross-platform health monitoring + organic pulse + site behavior correlation
/tracking-healthPreventive conversion-tracking audit (Meta pixels + CAPI, Google Ads conversion actions) with GA4 cross-check โ€” scorecard + fix list ranked by revenue risk
/rescueEmergency performance fix: platform-side vs site-side root cause diagnosis
/incident-postmortemPost-incident retrospective: timeline reconstruction, root-cause analysis, reusable insights via /learn, and preventive guardrails (no ad-platform writes)
/search-term-cleanupKeyword hygiene with paid/organic overlap elimination
/creative-refreshMulti-platform ad copy refresh using your Persona, USP, and organic keyword data
/creative-generateGenerate creator-quality ad creatives (key visuals + composed banners) from a strategy brief, with an art-direction scoring loop (Creative Studio)
/ad-fatigue-checkDetect creative fatigue (frequency, week-over-week CTR decline, CPM drift), score ads FATIGUED/WATCH/FRESH, and route refreshes to /creative-generate or /creative-refresh
/experimentDesign, run, and evaluate a controlled A/B split test โ€” one variable, a falsifiable hypothesis, a fixed window, and a per-variant winner/no-difference/inconclusive verdict
/lead-form-createOne-question-at-a-time interview that builds a Meta Instant Form (Lead Ad form) and surfaces the cover-image step explicitly
/budget-rebalanceCross-platform budget optimization informed by organic coverage
/budget-pacingMonth-to-date spend vs monthly target, landing forecast, and pace alerts (total-spend trajectory; pairs with /budget-rebalance)
/competitive-scanPaid + organic competitive landscape analysis
/audience-reviewTargeting & placement audit against your Persona โ€” exclusions, bid adjustments, lookalikes, and placement pruning
/goal-reviewMulti-source goal progress evaluation with operation mode recommendations
/weekly-reportCross-platform weekly operations summary
/monthly-reportClient-facing monthly digest: month-over-month comparison, goal attainment, action recap, budget utilization
/sync-stateRefresh STATE.json from live platform data
/learnSave a diagnostic insight to the knowledge base for future sessions

Getting started

pip install mureo
mureo setup claude-code

# Then in Claude Code:
/onboard          # First time: set up strategy + state
/daily-check      # Daily: check all campaigns
/rescue           # When performance drops

Example: /creative-refresh in action

You: /creative-refresh

Agent reads STRATEGY.md:
  Persona: "Budget-constrained SaaS marketer"
  USP: "AI reduces ad ops workload by 10h/week"
  Brand Voice: "Data-driven, no hype"

Agent discovers platforms from STATE.json:
  โ†’ Google Ads + Meta Ads configured

Agent pulls data across platforms and data sources:
  โ†’ Creative audit         โ†’ 3 underperforming Google Ads assets
  โ†’ Landing page analysis  โ†’ LP highlights: free trial, ROI improvement
  โ†’ Search Console         โ†’ "ad automation" has strong organic clicks
  โ†’ GA4                    โ†’ high bounce rate on pricing page

Agent generates platform-appropriate copy from your strategy:
  Google Ads: "Cut Ad Ops Time by 60% with AI"  โ† Persona pain point
  Google Ads: "Free Trial | Ad Automation"       โ† LP + organic keyword
  Meta Ads:   "Stop drowning in ad reports..."   โ† Brand Voice + social format

Agent validates, then asks for approval:
  "I suggest replacing 3 Google Ads headlines and 2 Meta ads. Here's why..."

You approve โ†’ Agent updates each platform.

What the output actually looks like (anonymized B2B SaaS account)

Real diagnostic excerpts from a 30-day BYOD bundle on a Japanese B2B SaaS account. Campaign / ad-group names are anonymized and brand search terms replaced with <brand>. Numbers are unchanged so the math holds.

/search-term-cleanup โ€” brand cannibalization detected automatically

/search-term-cleanup output: brand self-cannibalization detected โ€” same brand term converts at ยฅ4,550 CPA in one campaign vs ยฅ31,800 wasted in another, ~ยฅ250,000/30d redirectable

Why this matters: numbers-only tools dedupe by recency. mureo reads STRATEGY.md, notices the two campaigns have different intents (brand vs generic lead-gen), and routes the term to where it converts โ€” a 7ร— CPA gap that nobody was acting on.

/daily-check โ€” Meta CV-definition mismatch caught at the source

/daily-check output: Meta CV definition mismatch โ€” dashboard shows 45 results but only 3 are real leads (pixel_lead); other 42 are link_click, would over-fund by 14ร—

Why this matters: link_click vs pixel_lead optimization is a tracking distinction that doesn't show on a numbers-only dashboard. mureo surfaces result_indicator per campaign so the agent compares apples to apples before recommending a budget move.

Analysis & domain knowledge (built-in)

Click to expand full capability list

Campaign Diagnostics & Performance

CapabilityDescription
Campaign diagnosticsAutomatic root cause identification for delivery issues, learning period detection, smart bidding classification
Performance analysisPeriod-over-period comparison, cost increase investigation, cross-campaign health checks
Search term analysisN-gram distribution, intent pattern detection, automated add/exclude candidate scoring
Budget efficiencyCross-campaign budget allocation analysis, reallocation recommendations
Device analysisCPA gap detection, zero-conversion device identification
Auction insightsCompetitive landscape analysis, impression share trends
B2B optimizationIndustry-specific campaign checks and recommendations

Creative & Landing Page

CapabilityDescription
RSA ad validationProhibited expression detection, character width calculation, auto-correction, ad strength prediction
RSA asset auditAsset-level performance analysis, replacement/addition recommendations
Landing page analysisHTML parsing with SSRF protection, CTA/feature/price detection, industry estimation
Creative researchAggregates LP + existing ads + search terms + keyword suggestions into a unified research package
Message match evaluationAd copy <-> landing page alignment scoring (screenshot capture via Playwright)

Monitoring & Goals

CapabilityDescription
Delivery goal evaluationCampaign status + diagnostics + performance -> critical/warning/healthy classification
CPA goal trackingActual vs target CPA with trend analysis
CV goal trackingDaily conversion volume monitoring against targets
Zero-conversion diagnosisRoot cause analysis for campaigns with no conversions

Meta Ads Analysis

CapabilityDescription
Placement analysisPerformance breakdown by Facebook, Instagram, Audience Network
Cost investigationCPA degradation root cause analysis
Ad comparisonA/B performance comparison within ad sets
Creative suggestionsData-driven creative improvement recommendations

Quick Start

Prerequisites

  • Google Ads -- Developer Token and OAuth Client ID / Client Secret
  • Meta Ads -- Create an app on Meta for Developers to obtain an App ID / App Secret (development mode is fine)

Both mureo configure (browser) and mureo auth setup (terminal) walk you through both.

Browser configuration UI (mureo configure)

mureo auth setup --web was removed โ€” its browser flow is now part of the unified mureo configure UI.

Pasting long secrets into a terminal prompt is error-prone. mureo configure starts a short-lived local UI on http://127.0.0.1:<random-port>/ and opens your browser. Beyond credential entry it covers the whole Claude setup:

  • choose the Claude host (Claude Code / Claude Desktop) โ€” mureo writes that host's config file;
  • one-click basic setup (mureo MCP server + credential-guard hook + workflow skills);
  • connect platforms โ€” interactive Google / Meta OAuth in the same window (each field deep-links to Google Cloud Console / Google Ads API Center / Meta for Developers), or a GA4 service-account path / project id; written to ~/.mureo/credentials.json;
  • register the official MCP providers (Google Ads / GA4) into ~/.claude.json; Meta is a hosted MCP with no OAuth dynamic client registration, so the UI shows how to add it as a Claude.ai account connector (works in Claude Code and Claude Desktop) instead of registering it locally;
  • a dashboard to review status, switch each platform between mureo-native and the official MCP, and scaffold Demo / BYOD.

Flags: --no-browser (don't auto-open a tab), --timeout-seconds N (idle shutdown, default 600).

Why the UI is safe to run locally

The wizard binds only to 127.0.0.1 on a random OS-assigned port. The form is CSRF-protected (token rotates after every successful submit); the OAuth state parameter is validated with secrets.compare_digest on callback; a Host-header allow-list blocks DNS-rebinding attacks; redirect URLs are pinned to https://accounts.google.com/ and https://www.facebook.com/ so the wizard cannot be tricked into an open-redirect; session secrets are zeroed in memory after credentials are persisted. POST bodies are capped at 16 KiB and the process shuts the server down once the /done page is served. All dependencies are stdlib โ€” no external web framework to supply-chain-compromise.

Claude Code (recommended)

pip install mureo
mureo setup claude-code

This single command handles everything:

  1. Google Ads / Meta Ads authentication (OAuth)
  2. MCP server configuration for Claude Code
  3. Credential guard (blocks AI agents from reading secrets)
  4. Workflow commands (/daily-check, /rescue, /learn, etc.)
  5. Skills (tool references, strategy guide, evidence-based decisions, diagnostic knowledge)

After setup, run /onboard in Claude Code to get started.

Cursor

pip install mureo
mureo setup cursor

Cursor supports MCP tools but does not support workflow commands or skills.

Codex CLI

pip install mureo
mureo setup codex

Full parity with Claude Code: MCP server, credential guard (PreToolUse hook), workflow commands, and skills are all installed under ~/.codex/. Workflow commands are installed as Codex skills at ~/.codex/skills/<command>/SKILL.md (Codex CLI 0.117.0+ no longer surfaces ~/.codex/prompts/, see openai/codex#15941); invoke them with $daily-check or the /skills picker.

Gemini CLI

pip install mureo
mureo setup gemini

Registers mureo as a Gemini CLI extension at ~/.gemini/extensions/mureo/ with MCP server config and CONTEXT.md as the context file. Gemini CLI does not support PreToolUse hooks or the .md command format mureo bundles, so those layers are not installed.

CLI only (authentication management)

pip install mureo
mureo auth setup
mureo auth status

Docker

Run the mureo MCP server in an isolated container. Useful for:

  • Nonโ€“Claude Code MCP clients: Cursor, Codex CLI, Gemini CLI, Continue, Cline, Zed, or any custom MCP client.
  • CI/CD pipelines: scheduled anomaly checks, rollback dry-runs, weekly reports.
  • Multi-tenant / agency ops: isolated credentials per client via separate containers.
  • MCP registry health checks (Glama, etc.).

Slash commands (/daily-check, /rescue) and the credential-guard hook are Claude Codeโ€“specific UX. For those, use pip install mureo with mureo setup claude-code instead.

Build and run

docker build -t mureo .
docker run --rm -v ~/.mureo:/home/mureo/.mureo mureo

Connect your MCP client by pointing its config at this docker run command.

Authentication

Credentials are loaded from /home/mureo/.mureo/credentials.json inside the container (via bind mount) or from environment variables. Three common patterns:

1. Mounted credentials file โ€” if ~/.mureo/credentials.json already exists on the host (from a prior mureo auth setup, a team-shared vault, or hand-crafted), the bind mount above is enough.

Schema for hand-crafting:

{
  "google_ads": {
    "developer_token": "...",
    "client_id": "...apps.googleusercontent.com",
    "client_secret": "...",
    "refresh_token": "...",
    "login_customer_id": "1234567890"
  },
  "meta_ads": { "access_token": "..." }
}

Required: Google needs developer_token / client_id / client_secret / refresh_token. Meta needs access_token. Search Console reuses the Google OAuth credentials (OAuth app must include the https://www.googleapis.com/auth/webmasters scope).

2. Environment variables โ€” useful for CI/CD where secrets come from a secret manager:

docker run --rm \
  -e GOOGLE_ADS_DEVELOPER_TOKEN=... \
  -e GOOGLE_ADS_CLIENT_ID=... \
  -e GOOGLE_ADS_CLIENT_SECRET=... \
  -e GOOGLE_ADS_REFRESH_TOKEN=... \
  -e GOOGLE_ADS_LOGIN_CUSTOMER_ID=... \
  -e META_ADS_ACCESS_TOKEN=... \
  mureo

Supported: GOOGLE_ADS_{DEVELOPER_TOKEN, CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN, LOGIN_CUSTOMER_ID, CUSTOMER_ID}, META_ADS_{ACCESS_TOKEN, APP_ID, APP_SECRET, TOKEN_OBTAINED_AT, ACCOUNT_ID}.

3. Interactive wizard inside Docker โ€” if you don't have OAuth tokens yet and don't want to install mureo on the host:

docker run -it --rm -v ~/.mureo:/home/mureo/.mureo mureo mureo auth setup

Walks you through the OAuth flow in the terminal and writes credentials.json to the mounted volume. Subsequent runs pick it up automatically (pattern 1).

To obtain OAuth tokens outside mureo:

What gets installed

Componentmureo setup claude-codemureo setup cursormureo setup codexmureo setup geminimureo auth setup
Authentication (~/.mureo/credentials.json)YesYesYesYesYes
MCP configurationYesYesYesYesYes
Credential guard (PreToolUse hook)YesN/AYesN/AYes
Workflow commandsYes (~/.claude/commands/)N/AYes (~/.codex/skills/ โ€” invoke with $cmd or /skills)N/ANo
SkillsYes (~/.claude/skills/)N/AYes (~/.codex/skills/)N/ANo
Extension manifest (contextFileName)N/AN/AN/AYes (~/.gemini/extensions/mureo/)No

Skills reference

SkillPurpose
_mureo-google-adsGoogle Ads tool reference (parameters, examples)
_mureo-meta-adsMeta Ads tool reference (parameters, examples)
_mureo-sharedAuthentication, security rules, output formatting
_mureo-strategySTRATEGY.md / STATE.json format and usage guide
_mureo-learningEvidence-based marketing decision framework (observation windows, sample sizes, noise guards)
_mureo-pro-diagnosisLearnable diagnostic knowledge base (grows with use via /learn)

Connecting GA4 (Google Analytics 4)

mureo's workflow commands can leverage GA4 data (conversion rates, user behavior, landing page performance) when a GA4 MCP server is configured alongside mureo. GA4 data is optional โ€” all commands work without it.

Setup using Google Analytics MCP:

  1. Enable the required APIs in your GCP project:

  2. Install and authenticate:

    pipx install analytics-mcp
    
    gcloud auth application-default login \
      --scopes https://www.googleapis.com/auth/analytics.readonly,https://www.googleapis.com/auth/cloud-platform
    
  3. Add to ~/.claude/settings.json alongside mureo:

    {
      "mcpServers": {
        "mureo": {
          "command": "python",
          "args": ["-m", "mureo.mcp"]
        },
        "analytics-mcp": {
          "command": "pipx",
          "args": ["run", "analytics-mcp"],
          "env": {
            "GOOGLE_APPLICATION_CREDENTIALS": "/path/to/application_default_credentials.json",
            "GOOGLE_PROJECT_ID": "your-gcp-project-id"
          }
        }
      }
    }
    

Connecting Other MCP Servers

mureo works alongside any MCP server in the same client session. Add them to your settings and workflow commands will incorporate their data when available. See docs/integrations.md for details.

Writing your own provider plugin

mureo's provider abstraction lets any pip-installable package add a new ad-platform provider (Microsoft/Bing Ads, Apple Search Ads, TikTok, LinkedIn, X, in-house platforms, ...) without touching mureo's source tree. A plugin is a Python package that implements one or more of the Phase 1 Protocols (CampaignProvider, KeywordProvider, AudienceProvider, ExtensionProvider), declares which Capability members it supports, and registers its class under the mureo.providers entry-points group in pyproject.toml. Plugins can also ship their own SKILL.md files via two entry-point groups: mureo.skills registers runtime context skills that mureo discovers and matches during a workflow, while mureo.native_skills (#439) registers native slash skills that mureo deploys into ~/.claude/skills / ~/.codex/skills so they are directly invocable as /<name>.

  • docs/plugin-authoring.md โ€” full plugin authoring guide (quick start, Protocols, capabilities, models, skill matching, distribution patterns, security)
  • docs/ABI-stability.md โ€” ABI stability promise (what is breaking, what is not, deprecation policy)

Authentication

Interactive Setup (Recommended)

mureo auth setup

The setup wizard walks you through:

  1. Google Ads -- Enter Developer Token + Client ID/Secret, open browser for OAuth, select a Google Ads customer account
  2. Meta Ads -- Enter App ID/Secret, open browser for OAuth, obtain a Long-Lived Token, select an ad account. Your Meta App can stay in Development Mode -- no App Review is needed since mureo operates your own ad account. You may see a permission warning for business_management during OAuth; this is safe to accept and required for accessing pages managed through Business Portfolio.
  3. MCP config -- Automatically writes .mcp.json (project-level) or ~/.claude/settings.json (global) so Claude Code / Cursor can discover the server

Credentials are saved to ~/.mureo/credentials.json. Search Console reuses the same Google OAuth2 credentials as Google Ads -- no additional authentication is required.

credentials.json

{
  "google_ads": {
    "developer_token": "YOUR_DEVELOPER_TOKEN",
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_CLIENT_SECRET",
    "refresh_token": "YOUR_REFRESH_TOKEN",
    "login_customer_id": "1234567890"
  },
  "meta_ads": {
    "access_token": "YOUR_ACCESS_TOKEN",
    "app_id": "YOUR_APP_ID",
    "app_secret": "YOUR_APP_SECRET"
  }
}

Environment variables (fallback)

PlatformVariableRequired
Google AdsGOOGLE_ADS_DEVELOPER_TOKENYes
Google AdsGOOGLE_ADS_CLIENT_IDYes
Google AdsGOOGLE_ADS_CLIENT_SECRETYes
Google AdsGOOGLE_ADS_REFRESH_TOKENYes
Google AdsGOOGLE_ADS_LOGIN_CUSTOMER_IDNo
Meta AdsMETA_ADS_ACCESS_TOKENYes
Meta AdsMETA_ADS_APP_IDNo
Meta AdsMETA_ADS_APP_SECRETNo

Verify your setup:

mureo auth status
mureo auth check-google
mureo auth check-meta

MCP Server

Setup with Claude Code

Project-level (recommended) -- add to .mcp.json in your project root:

{
  "mcpServers": {
    "mureo": {
      "command": "python",
      "args": ["-m", "mureo.mcp"]
    }
  }
}

Global -- add to ~/.claude/settings.json:

{
  "mcpServers": {
    "mureo": {
      "command": "python",
      "args": ["-m", "mureo.mcp"]
    }
  }
}

Tip: mureo auth setup can write this configuration automatically.

Setup with Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "mureo": {
      "command": "python",
      "args": ["-m", "mureo.mcp"]
    }
  }
}

Tool list

Google Ads

Click to expand Google Ads tools

Campaigns

ToolDescription
google_ads_campaigns_listList campaigns
google_ads_campaigns_getGet campaign details
google_ads_campaigns_createCreate a campaign (search or display, via channel_type)
google_ads_campaigns_updateUpdate campaign settings
google_ads_campaigns_update_statusChange campaign status (ENABLED/PAUSED/REMOVED)
google_ads_campaigns_diagnoseDiagnose campaign delivery status

Ad Groups

ToolDescription
google_ads_ad_groups_listList ad groups
google_ads_ad_groups_createCreate an ad group
google_ads_ad_groups_updateUpdate an ad group

Ads

ToolDescription
google_ads_ads_listList ads
google_ads_ads_createCreate a responsive search ad (RSA)
google_ads_ads_create_displayCreate a responsive display ad (RDA); image files are uploaded automatically
google_ads_ads_updateUpdate an ad
google_ads_ads_update_statusChange ad status
google_ads_ads_policy_detailsGet ad policy approval details

Keywords (8)

ToolDescription
google_ads_keywords_listList keywords
google_ads_keywords_addAdd keywords
google_ads_keywords_removeRemove a keyword
google_ads_keywords_suggestGet keyword suggestions (Keyword Planner)
google_ads_keywords_diagnoseDiagnose keyword quality scores
google_ads_keywords_pausePause a keyword
google_ads_keywords_auditAudit keyword performance and quality
google_ads_keywords_cross_adgroup_duplicatesFind duplicate keywords across ad groups

Negative Keywords (5)

ToolDescription
google_ads_negative_keywords_listList negative keywords
google_ads_negative_keywords_addAdd negative keywords to a campaign
google_ads_negative_keywords_removeRemove a negative keyword
google_ads_negative_keywords_add_to_ad_groupAdd negative keywords to an ad group
google_ads_negative_keywords_suggestSuggest negative keywords based on search terms

Budget (3)

ToolDescription
google_ads_budget_getGet campaign budget
google_ads_budget_updateUpdate budget
google_ads_budget_createCreate a new campaign budget

Accounts (1)

ToolDescription
google_ads_accounts_listList accessible Google Ads accounts

Search Terms (2)

ToolDescription
google_ads_search_terms_reportGet search terms report
google_ads_search_terms_analyzeAnalyze search terms with intent classification

Sitelinks (3)

ToolDescription
google_ads_sitelinks_listList sitelink extensions
google_ads_sitelinks_createCreate a sitelink extension
google_ads_sitelinks_removeRemove a sitelink extension

Callouts (3)

ToolDescription
google_ads_callouts_listList callout extensions
google_ads_callouts_createCreate a callout extension
google_ads_callouts_removeRemove a callout extension

Conversions (7)

ToolDescription
google_ads_conversions_listList conversion actions
google_ads_conversions_getGet conversion action details
google_ads_conversions_performanceGet conversion performance metrics
google_ads_conversions_createCreate a conversion action
google_ads_conversions_updateUpdate a conversion action
google_ads_conversions_removeRemove a conversion action
google_ads_conversions_tagGet conversion tracking tag snippet

Targeting (11)

ToolDescription
google_ads_recommendations_listList optimization recommendations
google_ads_recommendations_applyApply an optimization recommendation
google_ads_device_targeting_getGet device targeting settings
google_ads_device_targeting_setSet device targeting bid adjustments
google_ads_bid_adjustments_getGet bid adjustment settings
google_ads_bid_adjustments_updateUpdate bid adjustments
google_ads_location_targeting_listList location targeting criteria
google_ads_location_targeting_updateUpdate location targeting
google_ads_schedule_targeting_listList ad schedule targeting
google_ads_schedule_targeting_updateUpdate ad schedule targeting
google_ads_change_history_listList account change history

Analysis (13)

ToolDescription
google_ads_performance_reportGet performance report
google_ads_performance_analyzeAnalyze performance trends and anomalies
google_ads_cost_increase_investigateInvestigate sudden cost increases
google_ads_health_check_allRun a comprehensive account health check
google_ads_ad_performance_compareCompare ad performance across variants
google_ads_ad_performance_reportGet detailed ad-level performance report
google_ads_network_performance_reportGet network-level performance breakdown
google_ads_budget_efficiencyAnalyze budget utilization efficiency
google_ads_budget_reallocationSuggest budget reallocation across campaigns
google_ads_auction_insights_getGet auction insights (competitor analysis)
google_ads_rsa_assets_analyzeAnalyze RSA asset performance
google_ads_rsa_assets_auditAudit RSA assets for best practices
google_ads_search_terms_reviewReview search terms and suggest additions/exclusions

B2B (1)

ToolDescription
google_ads_btob_optimizationsGet B2B-specific optimization suggestions

Creative (2)

ToolDescription
google_ads_landing_page_analyzeAnalyze landing page relevance and quality
google_ads_creative_researchResearch competitive creative strategies

Monitoring (4)

ToolDescription
google_ads_monitoring_delivery_goalMonitor campaign delivery against goals
google_ads_monitoring_cpa_goalMonitor CPA against target goals
google_ads_monitoring_cv_goalMonitor conversion volume against goals
google_ads_monitoring_zero_conversionsDetect campaigns with zero conversions

Capture (1)

ToolDescription
google_ads_capture_screenshotCapture a screenshot of a URL

Device (1)

ToolDescription
google_ads_device_analyzeAnalyze device-level performance

CPC (1)

ToolDescription
google_ads_cpc_detect_trendDetect CPC trend (rising/stable/falling)

Assets (1)

ToolDescription
google_ads_assets_upload_imageUpload an image asset

Meta Ads

Click to expand Meta Ads tools

Campaigns (6)

ToolDescription
meta_ads_campaigns_listList campaigns
meta_ads_campaigns_getGet campaign details
meta_ads_campaigns_createCreate a campaign
meta_ads_campaigns_updateUpdate a campaign
meta_ads_campaigns_pausePause a campaign
meta_ads_campaigns_enableEnable a paused campaign

Ad Sets (6)

ToolDescription
meta_ads_ad_sets_listList ad sets
meta_ads_ad_sets_createCreate an ad set
meta_ads_ad_sets_updateUpdate an ad set
meta_ads_ad_sets_getGet ad set details
meta_ads_ad_sets_pausePause an ad set
meta_ads_ad_sets_enableEnable a paused ad set

Ads (6)

ToolDescription
meta_ads_ads_listList ads
meta_ads_ads_createCreate an ad
meta_ads_ads_updateUpdate an ad
meta_ads_ads_getGet ad details
meta_ads_ads_pausePause an ad
meta_ads_ads_enableEnable a paused ad

Creatives (6)

ToolDescription
meta_ads_creatives_create_carouselCreate a carousel creative (2-10 cards)
meta_ads_creatives_create_collectionCreate a collection creative
meta_ads_creatives_listList ad creatives
meta_ads_creatives_createCreate a standard ad creative
meta_ads_creatives_create_dynamicCreate a dynamic product ad creative
meta_ads_creatives_upload_imageUpload an image for use in creatives

Images (1)

ToolDescription
meta_ads_images_upload_fileUpload an image from local file

Insights (2)

ToolDescription
meta_ads_insights_reportGet performance report
meta_ads_insights_breakdownGet breakdown report (age, gender, placement, etc.)

Audiences (5)

ToolDescription
meta_ads_audiences_listList custom audiences
meta_ads_audiences_createCreate a custom audience
meta_ads_audiences_getGet audience details
meta_ads_audiences_deleteDelete a custom audience
meta_ads_audiences_create_lookalikeCreate a lookalike audience

Conversions API (3)

ToolDescription
meta_ads_conversions_sendSend a conversion event (generic)
meta_ads_conversions_send_purchaseSend a purchase event
meta_ads_conversions_send_leadSend a lead event

Pixels (4)

ToolDescription
meta_ads_pixels_listList pixels
meta_ads_pixels_getGet pixel details
meta_ads_pixels_statsGet pixel firing statistics
meta_ads_pixels_eventsList pixel events

Analysis (6)

ToolDescription
meta_ads_analysis_performanceAnalyze overall performance trends
meta_ads_analysis_audienceAnalyze audience performance and overlap
meta_ads_analysis_placementsAnalyze placement performance breakdown
meta_ads_analysis_costAnalyze cost trends and efficiency
meta_ads_analysis_compare_adsCompare performance across ads
meta_ads_analysis_suggest_creativeSuggest creative improvements based on data

Product Catalog (11)

ToolDescription
meta_ads_catalogs_listList product catalogs
meta_ads_catalogs_createCreate a product catalog
meta_ads_catalogs_getGet catalog details
meta_ads_catalogs_deleteDelete a catalog
meta_ads_products_listList products in a catalog
meta_ads_products_addAdd a product to a catalog
meta_ads_products_getGet product details
meta_ads_products_updateUpdate a product
meta_ads_products_deleteDelete a product
meta_ads_feeds_listList catalog feeds
meta_ads_feeds_createCreate a catalog feed (URL + scheduled import)

Lead Ads (5)

ToolDescription
meta_ads_lead_forms_listList lead forms (per Page)
meta_ads_lead_forms_getGet lead form details
meta_ads_lead_forms_createCreate a lead form
meta_ads_leads_getGet leads (per form)
meta_ads_leads_get_by_adGet leads (per ad)

Videos (4)

ToolDescription
meta_ads_videos_uploadUpload a video from URL
meta_ads_videos_upload_fileUpload a video from local file
meta_ads_videos_getGet video processing status / metadata
meta_ads_videos_thumbnailsList auto-generated video thumbnails

Split Tests (4)

ToolDescription
meta_ads_split_tests_listList A/B tests
meta_ads_split_tests_getGet A/B test details and results
meta_ads_split_tests_createCreate an A/B test
meta_ads_split_tests_endEnd an A/B test

Ad Rules (5)

ToolDescription
meta_ads_ad_rules_listList automated rules
meta_ads_ad_rules_getGet automated rule details
meta_ads_ad_rules_createCreate an automated rule (CPA alerts, auto-pause, etc.)
meta_ads_ad_rules_updateUpdate an automated rule
meta_ads_ad_rules_deleteDelete an automated rule

Page Posts (2)

ToolDescription
meta_ads_page_posts_listList Facebook Page posts
meta_ads_page_posts_boostBoost a Page post

Instagram (3)

ToolDescription
meta_ads_instagram_accountsList connected Instagram accounts
meta_ads_instagram_mediaList Instagram posts
meta_ads_instagram_boostBoost an Instagram post

Search Console

Click to expand Search Console tools

Sites (2)

ToolDescription
search_console_sites_listList verified sites
search_console_sites_getGet site details

Analytics (4)

ToolDescription
search_console_analytics_queryQuery search analytics data
search_console_analytics_top_queriesGet top search queries
search_console_analytics_top_pagesGet top pages by clicks/impressions
search_console_analytics_device_breakdownGet performance breakdown by device
search_console_analytics_compare_periodsCompare search performance across time periods

Sitemaps (2)

ToolDescription
search_console_sitemaps_listList sitemaps for a site
search_console_sitemaps_submitSubmit a sitemap

URL Inspection (1)

ToolDescription
search_console_url_inspection_inspectInspect a URL for indexing status

Rollback

Click to expand rollback tools

Cross-platform tools that inspect and apply the reversal plan for a previously-recorded action_log entry. Apply re-dispatches through the same MCP handler used for forward actions, so the reversal re-enters the full policy gate (auth, rate limit, input validation, allow-list).

ToolDescription
rollback_plan_getInspect the reversal plan for an action_log entry (supported / partial / not_supported), its operation + params, and any caveats. Read-only; does not execute.
rollback_applyExecute the reversal plan for action_log[index]. Requires confirm=true as a literal boolean. Appends a new log entry tagged rollback_of=<index>; a second apply of the same index is refused. state_file is resolved strictly inside the MCP server's CWD โ€” path traversal, symlink escape, and rollback.* self-recursion are all refused.

Analysis

Click to expand analysis tools

Cross-platform detection tools that operate on STATE.json's action_log history rather than on platform APIs directly.

ToolDescription
analysis_anomalies_checkCompare a campaign's current metrics against a median-based baseline built from action_log history. Returns severity-ordered anomalies โ€” zero spend (CRITICAL), CPA spike (HIGH/CRITICAL, gated by 30+ conversions), CTR drop (HIGH/CRITICAL, gated by 1000+ impressions). Sample-size gates follow the _mureo-learning skill's statistical-thinking rules. Returns baseline=null when history is shorter than min_baseline_entries (default 7); baseline_warning surfaces a parseable-but-corrupt STATE.json without silencing live zero-spend detection.

Mureo Context

Click to expand Mureo Context tools

Read and write mureo's strategy / state context layer (STRATEGY.md / STATE.json) over MCP, so hosts without direct filesystem access (Claude Desktop chat, claude.ai web, Codex/Cursor) can still drive strategy-aware workflows. Paths are resolved strictly inside the MCP server's CWD; paths outside it are refused.

ToolDescription
mureo_strategy_getRead STRATEGY.md and return its raw markdown plus an exists flag (empty markdown when the file is absent).
mureo_strategy_setAtomically replace STRATEGY.md; the content is parsed before writing, so a malformed input raises rather than corrupts the file.
mureo_state_getRead STATE.json and return the parsed v2 document (version, last_synced_at, per-platform campaigns, legacy campaigns, action_log).
mureo_state_upsert_campaignAtomically upsert a CampaignSnapshot โ€” optionally with a performance metrics object โ€” into STATE.json for the reporting dashboard.
mureo_state_platform_metrics_setAtomically set a platform-level metric rollup (totals plus per-window periods for the dashboard's YESTERDAY / LAST_30_DAYS toggle); campaigns and other platforms are preserved.
mureo_state_set_conversion_eventsDeclare which Meta action_type rows count as this account's conversions, overriding the built-in generic set (e.g. a custom pixel event); an empty list clears the override.
mureo_state_action_log_appendAtomically append a single action_log entry so an action (budget change, pause, negative-keyword add) can be evaluated later.
mureo_state_report_setPersist a structured daily / weekly / goal report summary into STATE.json's reports section so the read-only dashboard can render it without re-running the agent.
mureo_outcome_evaluateDeterministically score whether a logged action's outcome improved, regressed, or is inconclusive โ€” direction-aware (lower-is-better CPA vs higher-is-better CVR) with a ยฑnoise band.

Analytics Registry

Click to expand analytics registry tools

Discover and invoke the analytics module registered for each platform. Read-only diagnostics โ€” built-in (google_ads, meta_ads) and plugin-supplied modules appear in the same shape.

ToolDescription
mureo_analytics_modules_listList analytics modules per platform and the capabilities each advertises (detect_anomalies, diagnose_performance, audit_creative, analyze_budget_efficiency).
mureo_analytics_runRun one capability of a platform's analytics module and return its structured result; degrades to a structured status (no_analytics_module / capability_not_available / error) instead of failing the workflow.

Learning

Click to expand learning tools

Surface accumulated practitioner know-how โ€” locally saved /learn insights and external advisor MCP servers โ€” for diagnostic workflows to consult before drawing conclusions.

ToolDescription
mureo_consult_advisorConsult external advisor MCP servers (vector search) for operational expertise the LLM lacks, enriched with local campaign state; advisor responses are untrusted external content.
mureo_learning_insights_getLoad every insight previously saved via /learn from the operator-tier knowledge base as raw Markdown; returns a guidance string when nothing has been saved yet.

Creative Studio

Click to expand Creative Studio tools

Generate creator-quality ad creatives: text-free key visuals plus copy / brand composited into per-format banners. Composition requires the creative extra (pip install 'mureo[creative]').

ToolDescription
creative_studio_providers_listList the configured image-generation providers, whether each has an API key, its capabilities (edit support + max size), and its model ids.
creative_studio_generate_visualGenerate text-free key-visual PNGs (a no-text constraint is appended automatically) into a new run directory with a provenance manifest.
creative_studio_brand_kit_getReturn the loaded brand kit (colours, fonts, logo) from ./BRAND_KIT/kit.yml, or tasteful neutral defaults when none exists.
creative_studio_edit_visualRefine an existing key visual through a provider's edit path (the art-direction loop), writing the edited PNG next to the input.
creative_studio_composeComposite headline / body / CTA / badge / logo over a key visual into per-format banner PNGs via headless-Chromium HTML/CSS rendering (pixel-perfect Japanese text).

CLI

mureo setup claude-code    # One-command setup for Claude Code
mureo setup cursor         # Setup for Cursor
mureo auth status          # Check authentication status
mureo auth check-google    # Verify Google Ads credentials
mureo auth check-meta      # Verify Meta Ads credentials

Strategy Context

Two local files drive strategy-aware operations. Run /onboard to generate them interactively.

  • STRATEGY.md -- Persona, USP, Brand Voice, Goals, Operation Mode. See docs/strategy-context.md.
  • STATE.json -- Campaign snapshots, action log. Updated automatically by workflow commands.

Architecture

mureo/
โ”œโ”€โ”€ __init__.py              # Package root
โ”œโ”€โ”€ auth.py                  # Credential loading (~/.mureo/credentials.json + env vars + Meta token auto-refresh)
โ”œโ”€โ”€ auth_setup.py            # Interactive setup wizard (OAuth + MCP config)
โ”œโ”€โ”€ throttle.py              # Rate limiting (token bucket + rolling hourly cap)
โ”œโ”€โ”€ _image_validation.py     # Image file validation utilities
โ”œโ”€โ”€ google_ads/              # Google Ads API client (google-ads SDK wrapper)
โ”‚   โ”œโ”€โ”€ client.py            # GoogleAdsApiClient (8 Mixin: Ads, Keywords, Analysis, Creative, Diagnostics, Extensions, Media, Monitoring)
โ”‚   โ”œโ”€โ”€ mappers.py           # Response mapping to structured dicts
โ”‚   โ””โ”€โ”€ _*.py                # 8 Mixin modules (ads, keywords, analysis, extensions, diagnostics,
โ”‚                            #   creative, monitoring, media) + validators + classifiers
โ”œโ”€โ”€ meta_ads/                # Meta Ads API client (15 Mixins, httpx-based)
โ”‚   โ”œโ”€โ”€ client.py            # MetaAdsApiClient (Campaigns, AdSets, Ads, Creatives, Audiences, Pixels,
โ”‚   โ”‚                        #   Insights, Analysis, Catalog, Conversions, Leads, PagePosts, Instagram,
โ”‚   โ”‚                        #   SplitTest, AdRules)
โ”‚   โ”œโ”€โ”€ mappers.py           # Response mapping to structured dicts
โ”‚   โ””โ”€โ”€ _*.py                # 15 Mixin modules (campaigns, ads, creatives, audiences, etc.)
โ”œโ”€โ”€ search_console/          # Google Search Console API client (reuses Google OAuth2 credentials)
โ”‚   โ””โ”€โ”€ client.py            # SearchConsoleApiClient
โ”œโ”€โ”€ analytics/               # Per-platform analytics-module Protocol + registry (#120, v0.9.9+)
โ”‚   โ”œโ”€โ”€ protocol.py          # AnalyticsModule Protocol + AnalyticsCapability
โ”‚   โ”œโ”€โ”€ registry.py          # Entry-point discovery (`mureo.analytics` group) + fault isolation
โ”‚   โ”œโ”€โ”€ models.py            # Anomaly / PerformanceDiagnosis / CreativeAudit / BudgetEfficiency
โ”‚   โ””โ”€โ”€ builtin/             # Built-in adapters for google_ads / meta_ads
โ”œโ”€โ”€ analysis/                # Cross-platform analysis utilities
โ”‚   โ”œโ”€โ”€ anomaly_detector.py  # Sample-size-gated anomaly detection (pure function)
โ”‚   โ””โ”€โ”€ lp_analyzer.py       # Landing page analysis engine
โ”œโ”€โ”€ context/                 # File-based context (STRATEGY.md, STATE.json)
โ”‚   โ”œโ”€โ”€ models.py            # Immutable dataclasses (StrategyEntry, StateDocument, ActionLogEntry)
โ”‚   โ”œโ”€โ”€ strategy.py          # STRATEGY.md parser / renderer
โ”‚   โ”œโ”€โ”€ state.py             # STATE.json parser / renderer
โ”‚   โ””โ”€โ”€ errors.py            # Context-related errors
โ”œโ”€โ”€ rollback/                # Allow-list-gated rollback with append-only audit trail
โ”œโ”€โ”€ byod/                    # BYOD bundle importer + CSV-backed clients
โ”œโ”€โ”€ cli/                     # Typer CLI (setup + auth only)
โ”‚   โ”œโ”€โ”€ main.py              # Entry point (mureo command)
โ”‚   โ”œโ”€โ”€ setup_cmd.py         # mureo setup claude-code / cursor / codex / gemini
โ”‚   โ””โ”€โ”€ auth_cmd.py          # mureo auth setup / status / check-*
โ””โ”€โ”€ mcp/                     # MCP server
    โ”œโ”€โ”€ __main__.py                        # python -m mureo.mcp entry point
    โ”œโ”€โ”€ server.py                          # MCP server setup (stdio transport)
    โ”œโ”€โ”€ _helpers.py                        # Shared handler utilities
    โ”œโ”€โ”€ tools_google_ads.py                # Google Ads tool definitions (aggregator)
    โ”œโ”€โ”€ _tools_google_ads_*.py             # Tool definition sub-modules
    โ”œโ”€โ”€ _handlers_google_ads.py            # Google Ads base handlers
    โ”œโ”€โ”€ _handlers_google_ads_extensions.py # Extensions handlers
    โ”œโ”€โ”€ _handlers_google_ads_analysis.py   # Analysis handlers
    โ”œโ”€โ”€ tools_meta_ads.py                  # Meta Ads tool definitions (aggregator)
    โ”œโ”€โ”€ _tools_meta_ads_*.py               # Tool definition sub-modules
    โ”œโ”€โ”€ _handlers_meta_ads.py              # Meta Ads base handlers
    โ”œโ”€โ”€ _handlers_meta_ads_extended.py     # Extended handlers
    โ”œโ”€โ”€ _handlers_meta_ads_other.py        # Other handlers
    โ”œโ”€โ”€ tools_search_console.py            # Search Console tool definitions
    โ””โ”€โ”€ _handlers_search_console.py        # Search Console handlers

Design principles:

  • No database -- all state is either in the ad platform APIs or in local files (STRATEGY.md, STATE.json).
  • No LLM dependency -- mureo does not embed an LLM. Inference, planning, and decision-making are the agent's responsibility.
  • Immutable data models -- all dataclasses use frozen=True to prevent accidental mutation.
  • Credentials stay local -- loaded from ~/.mureo/credentials.json or environment variables. Never sent anywhere except the official ad platform APIs.

Development

git clone https://github.com/logly/mureo.git && cd mureo
pip install -e ".[dev]"
pytest tests/ -v                              # run tests
pytest --cov=mureo --cov-report=term-missing  # with coverage
ruff check mureo/ && black mureo/ && mypy mureo/  # lint & format

Python 3.10+ required. See CONTRIBUTING.md for full development guidelines.

License

Apache License 2.0

Related MCP Servers

acamolese/google-search-console-mcp

๐Ÿ โ˜๏ธ - Google Search Console MCP server: query performance data, inspect URLs, check indexing, and generate brandable HTML SEO audit reports with a 30/60/90-day roadmap. Read-only OAuth scope, installable via uvx mcp-google-search-console.

๐ŸŽฏ Marketing0 views
AdsMCP/tiktok-ads-mcp-server

๐Ÿ โ˜๏ธ - A Model Context Protocol server for TikTok Ads API integration, enabling AI assistants to manage campaigns, analyze performance metrics, handle audiences and creatives with OAuth authentication flow.

๐ŸŽฏ Marketing0 views
Agent-Prod/muze-mcp

๐ŸŽ–๏ธ ๐Ÿ โ˜๏ธ - Run your ecommerce ads from Claude & ChatGPT. Meta, Google, Amazon and Shopify: 150+ tools to read performance, inspect campaigns, research competitor ads, and take confirm-gated writes (pause, budgets, launches) that always stage paused. Hosted; connect via OAuth or an API key at https://backend.muzecmo.com/mcp

๐ŸŽฏ Marketing0 views
AIOProductOS/studio-mcp

๐ŸŽ–๏ธ ๐Ÿ“‡ ๐Ÿ  ๐ŸŽ ๐ŸชŸ ๐Ÿง - Turns your AI host into a product videographer: scripted screen recordings of your own web app with a visible gliding cursor, camera zooms, highlight callouts, captions, and designed scene transitions, plus marketing-grade screenshots; deterministic dark-frame cleanup and MP4/GIF export. Free and fully local. npx -y @aioproductoscom/mcp-studio

๐ŸŽฏ Marketing0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Not checked yet

We have not completed a health check for this listing yet.

No check timestamp yet.

Unclaimed listing (imported or pending owner verification). Claim it โ†’
โ˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.