{"name":"io.github.enzoemir1/adops-mcp","slug":"enzoemir1-adops-mcp","title":null,"description":"CSV-first analytics for Google Ads + Meta Ads: reporting, anomaly detection, budget optimization.","url":"https://mcp.market/server/enzoemir1-adops-mcp","rating":null,"grade":"A","score":94,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":25,"stars":0,"forks":0,"downloads_week":84,"last_push_at":"2026-09-13T14:41:15.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/enzoemir1/adops-mcp","website":null,"version":"1.3.0","remotes":[],"packages":[{"registryType":"npm","identifier":"adops-mcp-server","version":"1.3.0","transport":{"type":"stdio"}}],"tools":[{"name":"ab_test_analyze","description":"Compare two campaigns as A/B test variants and determine statistical significance. Input: campaign_id_a, campaign_id_b, primary_metric (\"ctr\"|\"conversion_rate\"|\"roas\"|\"cpc\"|\"cpa\"). Runs a two-proportion z-test (or means comparison for continuous metrics), computes p-value and 95% confidence interval, identifies the winner, and returns {winner, confidence_level, p_value, lift_percent, sample_size_a","write_action":false,"price_micros":0,"input_schema":null},{"name":"ad_csv_import","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"ad_demo_seed","description":"Create a realistic cross-platform ad portfolio for trying AdOps without real data. Seeds 2 connections (Google + Meta), 8 campaigns across performance tiers, 30 days of daily metrics (240 rows), and pre-computed anomaly alerts. Use this to explore what AdOps can do, then switch to `ad_csv_import` with your real Google/Meta exports for production use. Safe to call multiple times — appends a new por","write_action":true,"price_micros":0,"input_schema":null},{"name":"ads_export_recommendations","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"ads_report","description":"Aggregate performance metrics across Google Ads and Meta Ads into a single unified view. Input: date_range ({start, end} as YYYY-MM-DD, defaults to the last 7 days), optional platform filter, optional campaign_ids filter, optional sort_by (\"spend\"|\"roas\"|\"conversions\"|\"ctr\"|\"cpc\"), and limit. Returns {period, totals (spend, impressions, clicks, conversions, revenue, ROAS, CPC, CTR), by_platform, c","write_action":false,"price_micros":0,"input_schema":null},{"name":"anomaly_detect","description":"Scan campaigns for statistical anomalies vs. a rolling baseline. Flags CPC spikes, CTR drops, sudden spend surges, and conversion cliffs. Input: sensitivity (\"low\"|\"medium\"|\"high\" — controls the z-score threshold), lookback_days (baseline window, default 14), optional platform filter. Returns {anomalies_found, severity_breakdown (critical|high|medium|low counts), alerts[] (each with campaign_id, m","write_action":false,"price_micros":0,"input_schema":null},{"name":"audience_insights","description":"Demographic and behavioural breakdown of the audiences served by your ads. Input: platform (optional — omit for all platforms) and optional campaign_id to scope to a single campaign. Returns {age_distribution, gender_distribution, top_geos, top_interests, device_breakdown, total_impressions, engagement_rate}. Use when refining targeting or reporting audience coverage.","write_action":false,"price_micros":0,"input_schema":null},{"name":"budget_analyze","description":"Analyze how the current ad budget is distributed and produce actionable reallocation recommendations. Input: optimization_goal (\"maximize_roas\"|\"maximize_conversions\"|\"minimize_cpa\") and optional platform filter. Returns {goal, current_allocation (by platform + campaign), recommendations[] (each with campaign_id, current_budget, suggested_budget, rationale, expected_impact), projected_lift}. Pair ","write_action":false,"price_micros":0,"input_schema":null},{"name":"budget_reallocate","description":"Transfer a dollar amount from one campaign's daily budget to another. Works across platforms (e.g. shift $50/day from a Google Ads search campaign to a Meta Ads retargeting campaign). Input: from_campaign_id, to_campaign_id (UUIDs, must differ), amount (positive number in campaign currency). Rejects the call if from_campaign_id === to_campaign_id or if the source campaign would go below zero. Retu","write_action":true,"price_micros":0,"input_schema":null},{"name":"campaign_create","description":"Create a new ad campaign in the AdOps workspace. Accepts unified parameters (platform, name, objective, bidding_strategy, daily_budget, currency, start_date, end_date, targeting) and stores a canonical UnifiedCampaign record with status=\"draft\". Returns the created campaign summary plus next_steps guidance. Requires an active platform connection (see platform_connect) — will auto-associate the fir","write_action":true,"price_micros":0,"input_schema":null},{"name":"campaign_list","description":"Unified listing of campaigns across Google Ads and Meta Ads in a single view. Optional filters: platform (\"google_ads\"|\"meta_ads\"), status (\"draft\"|\"active\"|\"paused\"|\"ended\"|\"archived\"), query (free-text over campaign name). Pagination via limit (default 20, max 100) and offset. Returns {total, showing, offset, campaigns[]} where each campaign summary includes id, name, platform, status, objective","write_action":false,"price_micros":0,"input_schema":null},{"name":"campaign_pause_resume","description":"Batch-change the status of up to 50 campaigns in one call. action=\"pause\" sets status to \"paused\"; action=\"resume\" sets status to \"active\". Missing campaign_ids are reported in the errors array but do not fail the whole batch. Returns {action, updated, failed, campaigns[], errors?}. Use this for emergency pause during an incident or weekend shutoff.","write_action":false,"price_micros":0,"input_schema":null},{"name":"campaign_update","description":"Patch-update an existing campaign. Pass campaign_id (UUID from campaign_list or campaign_create) plus any subset of: name, status, daily_budget, bidding_strategy, end_date. Fields you omit are left unchanged. Returns {message, updated_fields[], campaign} or an error if campaign_id is not found. Prefer campaign_pause_resume for batch status changes.","write_action":true,"price_micros":0,"input_schema":null},{"name":"competitor_benchmark","description":"Compare your ad performance against industry averages for a chosen vertical. Input: industry (e.g. \"ecommerce\", \"saas\", \"finance\", \"healthcare\", \"education\", \"travel\", \"real_estate\", \"legal\"), optional platform filter. Returns {industry, your_metrics, benchmarks (CTR, CPC, CPM, conversion_rate, CPA, ROAS industry averages), comparison (percent above/below benchmark per metric), recommendations[]}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"creative_specs","description":"Platform-specific creative requirements for ad formats. Returns the exact image dimensions, aspect ratios, video duration and codec, headline/primary-text character limits, supported CTA buttons, and file size ceilings for each ad format. Input: platform (\"google_ads\"|\"meta_ads\") and optional format filter (e.g. \"responsive_display\", \"video\", \"carousel\", \"single_image\"). Use this before building c","write_action":false,"price_micros":0,"input_schema":null},{"name":"forecast_spend","description":"Project future ad spend and performance based on recent historical trends. Input: period_days (\"7\"|\"14\"|\"30\") and optional platform filter. Uses moving-average extrapolation of spend, impressions, clicks, conversions, and revenue across the last 14 days. Returns {period_days, platform, projected (spend, impressions, clicks, conversions, revenue, ROAS, CPC, CTR), confidence_level, warnings[]}. Conf","write_action":false,"price_micros":0,"input_schema":null},{"name":"platform_connect","description":"Register a Google Ads or Meta Ads account in the AdOps workspace so subsequent tools (campaign_list, campaign_create, ads_report) can target it. Input: platform (\"google_ads\"|\"meta_ads\"), name (display label), account_id (the external ad account id). Returns the stored connection object with a generated UUID and status=\"active\". Safe to call with the same platform+account_id — returns the existing","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":94,"grade":"A","scanned_at":"2026-09-27T22:32:09.879Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T22:32:09.850Z","components":{"code":{"score":25,"max":25,"notes":["50 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 14 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"adops-mcp-server","version":"1.3.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-04-22T09:40:32.405Z","repositoryUrl":"git+https://github.com/enzoemir1/adops-mcp.git","weeklyDownloads":84}],"repo":{"found":true,"owner":"enzoemir1","repo":"adops-mcp","archived":false,"pushedAt":"2026-09-13T14:41:15Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/283154525?v=4","ownerCreatedAt":"2024-09-13T14:15:24Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/283154525?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":84,"license":"MIT","lastPushAt":"2026-09-13T14:41:15.000Z","score":25}}}},"grade_history":[],"reviews":[]}