{
  "serverInfo": {
    "name": "PaidSync",
    "version": "1.0.0"
  },
  "description": "AI-powered ad management MCP server. 309 tools across 8 platforms (Google Ads, Meta Ads, LinkedIn Ads, TikTok Ads, GTM, GA4, Google Search Console, Merchant Center). Full read+write access on every ad platform plus tracking infrastructure setup and Shopping feed control. Operator-confirmation gate on every write action.",
  "homepage": "https://paidsync.ai",
  "documentation": "https://paidsync.ai/docs",
  "logo": "https://paidsync.ai/logo.svg",
  "author": {
    "name": "Ahmed Ashraf",
    "url": "https://paidsync.ai"
  },
  "organization": {
    "name": "PaidSync.ai",
    "url": "https://paidsync.ai"
  },
  "categories": [
    "advertising",
    "marketing",
    "analytics",
    "google-ads",
    "meta-ads",
    "linkedin-ads",
    "gtm",
    "ga4",
    "google-analytics",
    "google-search-console"
  ],
  "authentication": {
    "required": true,
    "schemes": [
      "apiKey"
    ]
  },
  "transport": {
    "type": "streamable-http",
    "url": "https://mcp.paidsync.ai/mcp"
  },
  "configSchema": {
    "type": "object",
    "required": [
      "apiKey"
    ],
    "properties": {
      "apiKey": {
        "type": "string",
        "title": "PaidSync API Key",
        "description": "Get your free API key from the PaidSync dashboard at https://paidsync.ai/signup. Format: ps_xxxx.",
        "format": "password"
      }
    }
  },
  "connectionUrlTemplate": "https://mcp.paidsync.ai/mcp?key={{apiKey}}",
  "tools": [
    {
      "name": "connect_facebook_ads",
      "description": "Connect your Facebook Ads account. Returns an OAuth URL \u2014 open it in your browser to authorize access. Required before using any other Facebook tools."
    },
    {
      "name": "connect_facebook_ads_agency",
      "description": "Connect Facebook Ads using a permanent System User token \u2014 for agencies and power users. No OAuth browser flow needed. Generate the token in Meta Business Manager \u2192 Settings \u2192 Users \u2192 System Users \u2192 Generate Token. System User tokens never expire and are immune to Meta"
    },
    {
      "name": "connect_ga4",
      "description": "Connect your Google Analytics 4 account. Returns an OAuth URL. This uses the same Google OAuth client but requests analytics-specific scopes."
    },
    {
      "name": "connect_google_ads",
      "description": "Initiate OAuth flow to connect your Google Ads account. Opens a browser window for authentication."
    },
    {
      "name": "connect_google_search_console",
      "description": "Connect your Google Search Console account via OAuth. Returns a URL to open in your browser. After connecting, use list_gsc_properties to see your verified properties."
    },
    {
      "name": "connect_gtm",
      "description": "Connect your Google Tag Manager account. Returns an OAuth URL \u2014 open it in your browser to authorize access. This uses a separate OAuth client from Google Ads, so your Ads connection is unaffected."
    },
    {
      "name": "connect_linkedin_ads",
      "description": "Connect your LinkedIn Ads account. Returns an OAuth URL \u2014 open it in your browser to authorize access. Required before using any other LinkedIn tools."
    },
    {
      "name": "connect_merchant_center",
      "description": "Connect your Google Merchant Center account via OAuth. Opens a URL for the user to authorize. After connecting, use list_merchant_accounts to see available merchant IDs (including MCA sub-accounts)."
    },
    {
      "name": "connect_tiktok_ads",
      "description": "Connect your TikTok Ads account via OAuth. Opens a URL for the user to authorize. At consent the user selects which advertiser accounts PaidSync can manage. After connecting, use list_tiktok_advertisers to see the granted IDs."
    },
    {
      "name": "list_accounts",
      "description": "List all Google Ads accounts across every connected Google identity. Walks identities + their MCCs recursively (including nested MCCs). Returns a flat list with connected_via (which Google account surfaced each account), access_path (direct or under_mcc), via_mcc (parent MCC if applicable), and is_manager. When summarizing for the user, group accounts by connected_via so they can see which Google account has access to what."
    },
    {
      "name": "set_active_account",
      "description": "Set which Google Ads account to operate on. Provide mcc_id to set a specific MCC, or omit it to keep the current MCC. To switch to direct access (no MCC), set direct_access=true."
    },
    {
      "name": "add_account_negative_keywords",
      "description": "Add account-level negative keywords. Creates a shared negative keyword list named "
    },
    {
      "name": "add_asset_group_asset",
      "description": "Link an existing asset (text, image, video) to an asset group. The asset must already exist \u2014 use run_mutate to create assets first if needed. Field types: HEADLINE, DESCRIPTION, LONG_HEADLINE, BUSINESS_NAME, MARKETING_IMAGE, SQUARE_MARKETING_IMAGE, LOGO, LANDSCAPE_LOGO, YOUTUBE_VIDEO, CALL_TO_ACTION_SELECTION."
    },
    {
      "name": "add_asset_group_signal",
      "description": "Add an audience signal to a PMax asset group. Signals hint to Google which audiences are most likely to convert, but PMax can still serve beyond these signals."
    },
    {
      "name": "add_audience_targeting",
      "description": "Add an audience (remarketing list, custom audience, etc.) to a campaign for targeting or observation"
    },
    {
      "name": "add_call_extension",
      "description": "Add a phone call extension to a campaign"
    },
    {
      "name": "add_callout_extensions",
      "description": "Add callout extensions to a campaign. Callouts are short text snippets (e.g. "
    },
    {
      "name": "add_keywords",
      "description": "Add keywords to an ad group with match types (EXACT, PHRASE, BROAD)"
    },
    {
      "name": "add_negative_keywords",
      "description": "Add negative keywords at campaign or ad group level to exclude irrelevant search terms"
    },
    {
      "name": "add_price_extensions",
      "description": "Add price extensions to a campaign. Price extensions show product/service prices directly in your ad (e.g. "
    },
    {
      "name": "add_sitelinks",
      "description": "Add sitelink extensions to a campaign. Sitelinks appear as additional links below your ad."
    },
    {
      "name": "add_structured_snippets",
      "description": "Add structured snippet extensions to a campaign. Shows specific aspects of products/services under a header (e.g. "
    },
    {
      "name": "add_to_negative_keyword_list",
      "description": "Add keywords to an existing shared negative keyword list"
    },
    {
      "name": "analyze_paid_organic_overlap",
      "description": "Cross-reference your active Google Ads keywords against GSC organic search queries to find cannibalization. Identifies keywords where you"
    },
    {
      "name": "analyze_search_term_ngrams",
      "description": "Analyze search terms for wasteful word patterns using N-gram analysis. Breaks all search terms into 1, 2, and 3-word chunks, aggregates cost and conversions per chunk, and identifies patterns that cost money but never convert. Returns negative keyword suggestions with estimated savings."
    },
    {
      "name": "apply_label_to_ad",
      "description": "Apply a label to an ad"
    },
    {
      "name": "apply_label_to_ad_group",
      "description": "Apply a label to an ad group"
    },
    {
      "name": "apply_label_to_campaign",
      "description": "Apply a label to a campaign"
    },
    {
      "name": "apply_label_to_keyword",
      "description": "Apply a label to a keyword criterion"
    },
    {
      "name": "apply_negative_keyword_list",
      "description": "Apply a shared negative keyword list to a campaign"
    },
    {
      "name": "apply_recommendation",
      "description": "Apply a specific Google Ads recommendation by its resource name. "
    },
    {
      "name": "audit_gtm_container",
      "description": "AI-powered audit of a GTM container. Checks for: tags without triggers, triggers not used by any tag, missing Google Ads conversion linker, missing GA4 config tag, paused tags, and more. Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "create_account",
      "description": "Create a new standalone Google Ads account. The user gets full admin access via email invitation."
    },
    {
      "name": "create_account_under_mcc",
      "description": "Create a new Google Ads account under a specific MCC (manager account). "
    },
    {
      "name": "create_ad_group",
      "description": "Create a new ad group within a campaign. For Search campaigns use SEARCH_STANDARD, for Display use DISPLAY_STANDARD, for Video use VIDEO_BUMPER/VIDEO_TRUE_VIEW_IN_STREAM/etc."
    },
    {
      "name": "create_asset_group",
      "description": "Create a new asset group in a Performance Max campaign with all required assets in a single request. Requires: 3-15 headlines (max 30 chars), 1 long headline (max 90 chars), 2-5 descriptions (max 90 chars), 1 business name, and at least 1 marketing image + 1 square marketing image + 1 logo (as existing asset resource names). Optionally provide YouTube video asset resource names."
    },
    {
      "name": "create_bidding_data_exclusion",
      "description": "Create a data exclusion to tell Smart Bidding to ignore performance data during a specific period (e.g. site outage, tracking issues). Affects all campaigns using the specified advertising channel type."
    },
    {
      "name": "create_bidding_strategy",
      "description": "Create a portfolio (shared) bidding strategy that can be used across multiple campaigns. Types: TARGET_CPA, TARGET_ROAS, MAXIMIZE_CONVERSIONS, MAXIMIZE_CONVERSION_VALUE, TARGET_IMPRESSION_SHARE."
    },
    {
      "name": "create_call_asset",
      "description": "Create a call asset with a phone number that can be linked to campaigns"
    },
    {
      "name": "create_conversion_action",
      "description": "Create a new conversion action for tracking. Enums match current Google Ads API values."
    },
    {
      "name": "create_conversion_value_rule",
      "description": "Create a conversion value rule to adjust conversion values by condition. E.g. add $10 to conversions from mobile, or multiply by 1.5 for high-value audiences."
    },
    {
      "name": "create_custom_audience",
      "description": "Create a custom audience based on interests/keywords, URLs, or apps that your ideal customers use"
    },
    {
      "name": "create_demand_gen_campaign",
      "description": "Create a Demand Gen campaign (formerly Discovery). Serves ads on YouTube, Discover feed, Gmail. "
    },
    {
      "name": "create_display_campaign",
      "description": "Create a Display Network campaign for image/responsive display ads across websites, apps, and YouTube. "
    },
    {
      "name": "create_experiment",
      "description": "Create an A/B experiment to test changes to a campaign. Specify a control campaign and the experiment will create a variant. You can test different bidding strategies, ad copy, targeting, etc."
    },
    {
      "name": "create_fb_ad",
      "description": "Create a Facebook Ad end-to-end. Supports single image, single video, and carousel formats. Validates assets and page access before creating. Provide page_id + image_url + link + message to build the creative automatically, or pass an existing creative_id. For video ads, use ad_format="
    },
    {
      "name": "create_fb_adset",
      "description": "Create a Facebook Ad Set with audience targeting. Use dry_run=true (default) to preview. OBJECTIVE/GOAL COMBOS: OUTCOME_SALES + OFFSITE_CONVERSIONS + pixel_id + PURCHASE event (most reliable). OUTCOME_LEADS + LEAD_GENERATION + page_id (for lead forms). OUTCOME_TRAFFIC + LINK_CLICKS or LANDING_PAGE_VIEWS. OUTCOME_AWARENESS + REACH or IMPRESSIONS. OUTCOME_ENGAGEMENT + POST_ENGAGEMENT. NOTE: OUTCOME_LEADS may not work with all optimization_goals on all accounts. If you pass parent_objective the tool will VALIDATE the optimization_goal against it and throw on mismatch (e.g. OUTCOME_SALES + REACH is rejected). PLACEMENTS: Always ask the user. "
    },
    {
      "name": "create_fb_automated_rule",
      "description": "Create an automated rule to pause campaigns, adjust budgets, or send alerts based on performance conditions. Use dry_run=true to preview. WARNING: rules execute automatically once created."
    },
    {
      "name": "create_fb_campaign",
      "description": "Create a new Facebook campaign. Use dry_run=true (default) to preview before creating."
    },
    {
      "name": "create_fb_custom_audience",
      "description": "Create a custom audience. WEBSITE = pixel-based retargeting (requires pixel_id). CUSTOM = customer list upload (requires customer_file_source). Use dry_run=true (default) to preview."
    },
    {
      "name": "create_fb_engagement_audience",
      "description": "Create an engagement-based custom audience from people who interacted with your Page, videos, Instagram account, or lead forms. Use dry_run=true (default) to preview."
    },
    {
      "name": "create_fb_lookalike_audience",
      "description": "Create a lookalike audience from an existing custom audience. Use dry_run=true (default) to preview."
    },
    {
      "name": "create_ga4_audience",
      "description": "Create an audience in GA4. Audiences can be used for remarketing in Google Ads when linked."
    },
    {
      "name": "create_ga4_conversion_event",
      "description": "Mark an event as a conversion (key event) in GA4. The event must already be firing in your data stream (e.g. via GTM)."
    },
    {
      "name": "create_ga4_custom_dimension",
      "description": "Create a custom dimension in GA4. Use this to track custom event parameters as dimensions in reports."
    },
    {
      "name": "create_ga4_custom_metric",
      "description": "Create a custom metric in GA4."
    },
    {
      "name": "create_ga4_data_stream",
      "description": "Create a new web data stream for a GA4 property. This generates the Measurement ID (G-XXXXXXXX)."
    },
    {
      "name": "create_ga4_google_ads_link",
      "description": "Link a Google Ads account to a GA4 property. This enables conversion import and audience sharing between GA4 and Google Ads."
    },
    {
      "name": "create_ga4_property",
      "description": "Create a new GA4 property under an account."
    },
    {
      "name": "create_gtm_tag",
      "description": "Create a tag in a GTM workspace. Common types: "
    },
    {
      "name": "create_gtm_trigger",
      "description": "Create a trigger in a GTM workspace. Common types: "
    },
    {
      "name": "create_gtm_variable",
      "description": "Create a user-defined variable. Common types: "
    },
    {
      "name": "create_gtm_version",
      "description": "Create a version from a workspace (snapshot of all changes). This prepares the changes for publishing but does NOT publish them yet. Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "create_gtm_workspace",
      "description": "Create a new workspace in a GTM container. Best practice: create a workspace for your changes instead of editing the Default Workspace directly. Pass either container_path OR (account_id + container_id)."
    },
    {
      "name": "create_image_asset",
      "description": "Create an image asset from a URL. The image will be downloaded by Google. Use for logos, marketing images, etc."
    },
    {
      "name": "create_label",
      "description": "Create a new label for organizing campaigns, ad groups, or keywords"
    },
    {
      "name": "create_lead_form_asset",
      "description": "Create a lead form asset for collecting leads directly from ads. Can be linked to Search, Video, Display, or PMax campaigns."
    },
    {
      "name": "create_linkedin_ad",
      "description": "Create a full LinkedIn ad with image, video, or text-only copy. Uploads the media asset, creates a Direct Sponsored Content post, and attaches it as a creative to a campaign. The campaign status controls whether the ad serves. Provide either image_url OR video_url, not both. Set dry_run=false to execute."
    },
    {
      "name": "create_linkedin_campaign",
      "description": "Create a new LinkedIn campaign in the active ad account. Starts PAUSED by default. Set dry_run=false to execute."
    },
    {
      "name": "create_linkedin_campaign_group",
      "description": "Create a new campaign group in the active LinkedIn ad account. Set dry_run=false to execute."
    },
    {
      "name": "create_linkedin_conversion",
      "description": "Create a conversion tracking rule in the active LinkedIn ad account. Set dry_run=false to execute."
    },
    {
      "name": "create_linkedin_creative",
      "description": "Create a new creative/ad for a LinkedIn campaign. Set dry_run=false to execute."
    },
    {
      "name": "create_negative_keyword_list",
      "description": "Create a shared negative keyword list that can be applied to multiple campaigns"
    },
    {
      "name": "create_performance_max_campaign",
      "description": "Create a Performance Max campaign. PMax uses AI to serve ads across Search, Display, YouTube, Gmail, Discover, and Maps. Creates in PAUSED state. After creation, create an asset group with text/image/video assets. Set brand_guidelines_enabled=false to skip brand guidelines (avoids REQUIRED_BUSINESS_NAME_ASSET_NOT_LINKED / REQUIRED_LOGO_ASSET_NOT_LINKED errors)."
    },
    {
      "name": "create_responsive_display_ad",
      "description": "Create a Responsive Display Ad (RDA) for Display campaigns. Provide headlines, descriptions, business name, and optionally image/logo asset resource names. Google assembles the best combinations automatically."
    },
    {
      "name": "create_responsive_search_ad",
      "description": "Create a Responsive Search Ad (RSA) in an ad group. Provide 3-15 headlines and 2-4 descriptions. Google will mix and match the best combinations."
    },
    {
      "name": "create_search_campaign",
      "description": "Create a new Search-only Google Ads campaign. Created in PAUSED state. "
    },
    {
      "name": "create_seasonality_adjustment",
      "description": "Create a seasonality adjustment to inform Smart Bidding of expected changes in conversion rates (e.g. sales events, holidays). This helps Smart Bidding react faster to expected changes."
    },
    {
      "name": "create_shopping_campaign",
      "description": "Create a standard Shopping campaign. Requires a Google Merchant Center account linked to this Google Ads account. Creates in PAUSED state. Uses feed_label instead of the deprecated salesCountry parameter."
    },
    {
      "name": "create_text_asset",
      "description": "Create a text asset (headline, description, business name, etc.) that can be linked to campaigns or asset groups."
    },
    {
      "name": "create_user_list",
      "description": "Create a new remarketing user list. Types: REMARKETING (rule-based website visitors), CRM_BASED (customer match), LOGICAL (combine existing lists)."
    },
    {
      "name": "create_video_campaign",
      "description": "Create a Video/YouTube campaign. Creates in PAUSED state. IMPORTANT: Requires a linked YouTube channel on the account \u2014 the tool checks this before creating. Sub-types: VIDEO_NON_SKIPPABLE (15s non-skippable ads), VIDEO_REACH_TARGET_FREQUENCY (maximize reach at target frequency \u2014 requires target_frequency_goal), VIDEO_SEQUENCE (sequential video ads). Note: VIDEO_ACTION was deprecated in Google Ads API \u2014 use Demand Gen campaigns for conversion-focused video ads instead."
    },
    {
      "name": "create_youtube_video_asset",
      "description": "Create a video asset from a YouTube video ID. Used for video ads and PMax campaigns."
    },
    {
      "name": "delete_fb_ad",
      "description": "Delete a Facebook Ad. Use dry_run=true (default) to preview."
    },
    {
      "name": "delete_fb_adset",
      "description": "Delete a Facebook Ad Set. Use dry_run=true (default) to preview."
    },
    {
      "name": "delete_fb_audience",
      "description": "PERMANENTLY delete a custom audience. This cannot be undone. Use dry_run=true (default) to preview."
    },
    {
      "name": "delete_fb_campaign",
      "description": "PERMANENTLY delete a Facebook Campaign. This cannot be undone \u2014 the campaign and all its ad sets and ads will be deleted. Use dry_run=true (default) to preview."
    },
    {
      "name": "delete_ga4_conversion_event",
      "description": "Remove an event from the conversion events list. The event will still be collected, just not counted as a conversion."
    },
    {
      "name": "delete_ga4_google_ads_link",
      "description": "Remove a Google Ads link from a GA4 property."
    },
    {
      "name": "delete_gtm_tag",
      "description": "Delete a tag from a GTM workspace. Requires confirm_destructive=true. The tag is removed from the workspace but not yet from the live site, you must publish a new version for the deletion to take effect. Pass either tag_path OR (account_id + container_id + workspace_id + tag_id)."
    },
    {
      "name": "delete_gtm_trigger",
      "description": "Delete a trigger from a GTM workspace. Will fail if the trigger is still used by a tag. Pass either trigger_path OR (account_id + container_id + workspace_id + trigger_id)."
    },
    {
      "name": "delete_gtm_variable",
      "description": "Delete a variable from a GTM workspace. Will fail if the variable is referenced by a tag or trigger. Pass either variable_path OR (account_id + container_id + workspace_id + variable_id)."
    },
    {
      "name": "delete_gtm_workspace",
      "description": "Delete a GTM workspace. Cannot delete the Default Workspace. Unsaved changes in this workspace will be lost. Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "detect_anomalies",
      "description": "Compare last 7 days vs prior 7 days and flag significant changes (>20% delta) in spend, CTR, conversions"
    },
    {
      "name": "disconnect_facebook_ads",
      "description": "Disconnect your Facebook Ads account and remove stored tokens."
    },
    {
      "name": "duplicate_campaign",
      "description": "Duplicate a campaign"
    },
    {
      "name": "duplicate_fb_campaign",
      "description": "Duplicate (copy) a Facebook Campaign including its ad sets and ads. Use dry_run=true (default) to preview."
    },
    {
      "name": "enable_ad",
      "description": "Enable (unpause) an ad by ad group ID and ad ID"
    },
    {
      "name": "enable_ad_group",
      "description": "Enable (unpause) an ad group by ID"
    },
    {
      "name": "enable_campaign",
      "description": "Enable (unpause) a campaign by ID (works with both Google Ads and Facebook accounts)"
    },
    {
      "name": "enable_fb_ad",
      "description": "Enable a paused Facebook Ad. Use dry_run=true (default) to preview."
    },
    {
      "name": "enable_fb_adset",
      "description": "Enable a paused Facebook Ad Set. Use dry_run=true (default) to preview."
    },
    {
      "name": "enable_fb_campaign",
      "description": "Enable (activate) a paused Facebook Campaign. Use dry_run=true (default) to preview."
    },
    {
      "name": "enable_gtm_builtin_variables",
      "description": "Enable built-in variables that are needed for triggers and tags. Common types: "
    },
    {
      "name": "enable_linkedin_campaign",
      "description": "Enable (activate) a LinkedIn campaign. Set dry_run=false to execute."
    },
    {
      "name": "enable_tiktok_campaign",
      "description": "Enable (un-pause) a TikTok campaign (set operation_status to ENABLE). Opposite of pause_tiktok_campaign."
    },
    {
      "name": "facebook_auth_status",
      "description": "Check whether Facebook Ads is connected and return the connected account identity and token expiry."
    },
    {
      "name": "ga4_auth_status",
      "description": "Check whether Google Analytics 4 is connected and show token expiry."
    },
    {
      "name": "generate_image",
      "description": "Generate an image from a text prompt using Gemini. Returns the generated image AND a public hosted URL that can be passed directly to create_fb_ad"
    },
    {
      "name": "generate_reach_forecast",
      "description": "Generate a reach/frequency forecast for a planned campaign. Shows estimated reach, impressions, and cost for given targeting and budget."
    },
    {
      "name": "get_account_summary",
      "description": "Get account name, currency, timezone, and status for the active Google Ads account"
    },
    {
      "name": "get_ad_performance",
      "description": "Get ad-level performance breakdown \u2014 see which individual ads are performing best with impressions, clicks, CTR, CPC, conversions"
    },
    {
      "name": "get_auction_insights",
      "description": "Get auction insights (competitor overlap data) for a campaign \u2014 see impression share, overlap rate, position above rate, and outranking share vs competitors"
    },
    {
      "name": "get_audience_insights",
      "description": "Get audience composition insights \u2014 understand the demographics, interests, and affinities of a given audience or customer base. Requires a baseline audience (e.g. country) and optionally a target audience (e.g. your remarketing list)."
    },
    {
      "name": "get_budget_pacing",
      "description": "Show how much of the monthly budget has been spent and project end-of-month spend based on current pacing"
    },
    {
      "name": "get_campaign_details",
      "description": "Get detailed information about a specific campaign"
    },
    {
      "name": "get_campaign_performance",
      "description": "Get performance breakdown by campaign for a date range"
    },
    {
      "name": "get_change_history",
      "description": "Get recent change history for the account \u2014 who changed what and when"
    },
    {
      "name": "get_fb_account_info",
      "description": "Get Facebook Ad Account details: timezone, currency, status, spend limits, and balance."
    },
    {
      "name": "get_fb_ad_performance",
      "description": "Get Facebook individual ad level performance: impressions, clicks, spend, reach, CTR, CPC. Use date_preset OR start_date + end_date."
    },
    {
      "name": "get_fb_adset_performance",
      "description": "Get Facebook Ad Set level performance: impressions, clicks, spend, reach, CTR, CPC, conversions. Use date_preset OR start_date + end_date."
    },
    {
      "name": "get_fb_audience_insights",
      "description": "Estimate the monthly audience size for a Facebook targeting configuration. Returns lower and upper bound of monthly active users matching the targeting. At least one country is required."
    },
    {
      "name": "get_fb_billing_transactions",
      "description": "Get billing info (amount spent, balance, spend cap) for the Facebook ad account."
    },
    {
      "name": "get_fb_budget_pacing",
      "description": "Show Facebook Ads budget pacing: how much has been spent this month vs expected, and project end-of-month spend based on current daily run rate."
    },
    {
      "name": "get_fb_leads",
      "description": "Download leads from a Facebook lead gen form. WARNING: Response contains PII (names, emails, phone numbers). Handle with care."
    },
    {
      "name": "get_fb_performance",
      "description": "Get Facebook campaign performance: impressions, clicks, spend, CTR, CPC, ROAS, and conversions."
    },
    {
      "name": "get_fb_performance_by_age_gender",
      "description": "Get Facebook performance broken down by age and gender demographics. Use date_preset OR start_date + end_date for custom ranges."
    },
    {
      "name": "get_fb_performance_by_country",
      "description": "Get Facebook performance broken down by country. Use date_preset OR start_date + end_date."
    },
    {
      "name": "get_fb_performance_by_device",
      "description": "Get Facebook performance broken down by device (mobile vs desktop). Use date_preset OR start_date + end_date for custom ranges."
    },
    {
      "name": "get_fb_performance_by_placement",
      "description": "Get Facebook performance broken down by placement (Feed, Reels, Stories, etc.). Use date_preset OR start_date + end_date for custom ranges."
    },
    {
      "name": "get_fb_performance_by_time",
      "description": "Get Facebook performance as a time series (daily or monthly). Use date_preset OR start_date + end_date."
    },
    {
      "name": "get_fb_pixel_events",
      "description": "Get event stats for a Facebook Pixel. Returns event names, counts, and timestamps."
    },
    {
      "name": "get_ga4_enhanced_measurement",
      "description": "Check which enhanced measurement events are enabled for a web data stream (page views, scrolls, outbound clicks, site search, form interactions, video engagement, file downloads)."
    },
    {
      "name": "get_ga4_metadata",
      "description": "List all available dimensions and metrics for a GA4 property. Useful to discover what you can query in reports."
    },
    {
      "name": "get_ga4_property",
      "description": "Get details of a specific GA4 property."
    },
    {
      "name": "get_gsc_index_coverage",
      "description": "Check indexing status for a Search Console property. Shows submitted vs indexed page counts per sitemap, plus any sitemap errors or warnings. Use this to spot indexing gaps."
    },
    {
      "name": "get_gsc_search_analytics",
      "description": "Get search performance data (queries, pages, devices, countries) from Google Search Console. Returns clicks, impressions, CTR, and average position. Filterable by query text, page URL, device, or country."
    },
    {
      "name": "get_gtm_container",
      "description": "Get details of a specific GTM container including its public ID and domain. Pass either container_path OR (account_id + container_id)."
    },
    {
      "name": "get_gtm_container_snippet",
      "description": "Get the GTM installation code snippet (the <script> tags to add to a website). Pass either container_path OR (account_id + container_id)."
    },
    {
      "name": "get_gtm_tag",
      "description": "Get full details of a specific tag including its parameters, triggers, and configuration. Pass either tag_path OR (account_id + container_id + workspace_id + tag_id)."
    },
    {
      "name": "get_gtm_trigger",
      "description": "Get full details of a specific trigger. Pass either trigger_path OR (account_id + container_id + workspace_id + trigger_id)."
    },
    {
      "name": "get_gtm_version_live",
      "description": "Get the currently published (live) version of a GTM container, including all its tags, triggers, and variables. Pass either container_path OR (account_id + container_id)."
    },
    {
      "name": "get_gtm_workspace_status",
      "description": "Check what changes are pending in a GTM workspace (added, changed, deleted entities). Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "get_impression_share_analysis",
      "description": "Analyze impression share gaps \u2014 how much traffic you are missing and why (budget vs. rank). Shows the revenue opportunity from closing the gap."
    },
    {
      "name": "get_keyword_performance",
      "description": "Get keyword-level performance, ranked by cost or conversions"
    },
    {
      "name": "get_linkedin_campaign_targeting",
      "description": "Get targeting criteria for a LinkedIn campaign (audience, demographics, locations, etc)."
    },
    {
      "name": "get_linkedin_performance",
      "description": "Get LinkedIn campaign performance: impressions, clicks, spend, CTR, CPC, and conversions. Accepts either an explicit start_date/end_date pair OR a date_range shorthand ("
    },
    {
      "name": "get_linkedin_performance_by_dimension",
      "description": "Get LinkedIn performance broken down by a specific dimension: CREATIVE, CAMPAIGN, COMPANY, MEMBER_JOB_TITLE, MEMBER_INDUSTRY, MEMBER_SENIORITY, MEMBER_COUNTRY, MEMBER_REGION. Accepts either `dimension` or `pivot` (alias)."
    },
    {
      "name": "get_merchant_account_status",
      "description": "Get account-level health for a Merchant Center account: open issues (suspension risk, policy violations, verification gaps), severity, country-specific impact, and whether the account is linked to Google Ads (required for Shopping / PMax feed campaigns)."
    },
    {
      "name": "get_performance_summary",
      "description": "Get account-level performance metrics: impressions, clicks, CTR, CPC, conversions, cost, ROAS for a date range"
    },
    {
      "name": "get_pmax_insights",
      "description": "Decode Performance Max campaign performance \u2014 see channel-level breakdowns (Search, Display, YouTube, Discover, Gmail, Maps), asset performance ratings, search term themes, and actionable optimization suggestions. PMax is a black box \u2014 this tool opens it."
    },
    {
      "name": "get_product_performance",
      "description": "Get product-level Shopping performance (clicks, impressions, CTR, conversions) from Merchant Center Reports. Use to find top / bottom performing SKUs. Data has ~1-2 day delay."
    },
    {
      "name": "get_quality_score_report",
      "description": "Get a detailed Quality Score report showing the distribution of QS across all keywords, with subfactor breakdown (expected CTR, ad relevance, landing page) and the cost impact of low scores."
    },
    {
      "name": "get_search_terms_report",
      "description": "Show actual search queries that triggered your ads"
    },
    {
      "name": "get_tiktok_performance",
      "description": "Get TikTok Ads performance (impressions, clicks, CTR, CPC, CPM, spend, conversions) from the reporting API. Choose the level of grain (advertiser / campaign / adgroup / ad) and a date range. Data has ~1-2h delay."
    },
    {
      "name": "get_wasted_spend_report",
      "description": "Get a consolidated wasted spend report showing all sources of waste: zero-conversion keywords, costly search terms with no results, low Quality Score keywords draining budget, and ads with zero clicks. Returns total recoverable spend with specific items to fix."
    },
    {
      "name": "gsc_auth_status",
      "description": "Check whether Google Search Console is connected and show token expiry."
    },
    {
      "name": "gtm_auth_status",
      "description": "Check whether Google Tag Manager is connected and show token expiry."
    },
    {
      "name": "link_asset_to_campaign",
      "description": "Link an existing asset to a campaign (e.g. link a business name or logo to a PMax campaign for brand guidelines, or link sitelinks/callouts)."
    },
    {
      "name": "linkedin_auth_status",
      "description": "Check whether LinkedIn Ads is connected and return the connected account identity and token expiry."
    },
    {
      "name": "list_account_negative_keywords",
      "description": "List all account-level negative keywords that apply across all campaigns"
    },
    {
      "name": "list_ad_groups",
      "description": "List all ad groups for a specific campaign"
    },
    {
      "name": "list_ads",
      "description": "List ads in an ad group or campaign with performance metrics"
    },
    {
      "name": "list_all_assets",
      "description": "List all assets in the account (text, image, video, etc.) with their resource names and types. Useful for finding asset resource names to link to campaigns or asset groups."
    },
    {
      "name": "list_asset_group_listing_filters",
      "description": "List listing group filters for a PMax asset group (used for Shopping/feed-based PMax to control which products are included)"
    },
    {
      "name": "list_asset_groups",
      "description": "List all asset groups for a Performance Max campaign. Asset groups contain the creative assets (text, images, videos) that PMax uses to generate ads."
    },
    {
      "name": "list_assets",
      "description": "List all extension assets (sitelinks, callouts, calls, snippets) for the account or a specific campaign"
    },
    {
      "name": "list_audiences",
      "description": "List audience targeting criteria attached to campaigns"
    },
    {
      "name": "list_bidding_strategies",
      "description": "List all portfolio (shared) bidding strategies in the account"
    },
    {
      "name": "list_campaign_drafts",
      "description": "List campaign drafts \u2014 drafts let you prepare changes to a campaign before applying them"
    },
    {
      "name": "list_campaigns",
      "description": "List all campaigns with status, budget, type, impressions, clicks, and cost"
    },
    {
      "name": "list_conversion_actions",
      "description": "List all conversion actions configured in the account"
    },
    {
      "name": "list_conversion_goals",
      "description": "List conversion goals at campaign and customer level \u2014 shows which conversions each campaign optimizes for"
    },
    {
      "name": "list_conversion_value_rules",
      "description": "List conversion value rules that adjust conversion values based on conditions (audience, device, geo)"
    },
    {
      "name": "list_custom_audiences",
      "description": "List custom audiences (defined by interests, URLs, apps, or places)"
    },
    {
      "name": "list_experiments",
      "description": "List all A/B experiments in the account with their status, start/end dates, and traffic split"
    },
    {
      "name": "list_fb_ad_accounts",
      "description": "List all Meta (Facebook) Ad Accounts across every connected Facebook identity. Each account carries connected_via (which Meta account has access) and token_type (oauth vs system_user). When summarizing for the user, group by connected_via so they can see which identity sees which account."
    },
    {
      "name": "list_fb_ads",
      "description": "List Facebook Ads in the active ad account, optionally filtered by ad set."
    },
    {
      "name": "list_fb_adsets",
      "description": "List Facebook Ad Sets in the active ad account, optionally filtered by campaign."
    },
    {
      "name": "list_fb_audiences",
      "description": "List custom audiences on the active Facebook Ad Account."
    },
    {
      "name": "list_fb_automated_rules",
      "description": "List all automated rules on the active Facebook Ad Account."
    },
    {
      "name": "list_fb_campaigns",
      "description": "List all Facebook campaigns in the active ad account with status, objective, and budget."
    },
    {
      "name": "list_fb_creatives",
      "description": "List ad creatives in the active Facebook Ad Account with id, name, status, image URL, title, and body. Returns up to 50 by default \u2014 use limit and after for pagination."
    },
    {
      "name": "list_fb_custom_conversions",
      "description": "List custom conversion rules in the active Facebook Ad Account with id, name, rule, and default value."
    },
    {
      "name": "list_fb_instagram_accounts",
      "description": "List Instagram accounts connected to a Facebook Page with id, username, profile pic, and follower count."
    },
    {
      "name": "list_fb_lead_forms",
      "description": "List lead generation forms for a Facebook Page with id, name, status, and leads count."
    },
    {
      "name": "list_fb_pages",
      "description": "List Facebook Pages managed by the connected user. Use this to find the Page ID needed for create_fb_adset (promoted_object.page_id) and create_fb_ad."
    },
    {
      "name": "list_fb_pixels",
      "description": "List Facebook Pixels on the active ad account."
    },
    {
      "name": "list_ga4_accounts",
      "description": "List all Google Analytics 4 accounts across every connected Google identity. Each account carries connected_via (which Google account has access). When summarizing for the user, group by connected_via so they can see which identity sees which account."
    },
    {
      "name": "list_ga4_audiences",
      "description": "List all audiences defined in a GA4 property."
    },
    {
      "name": "list_ga4_conversion_events",
      "description": "List all conversion events (key events) for a GA4 property."
    },
    {
      "name": "list_ga4_custom_dimensions",
      "description": "List all custom dimensions for a GA4 property."
    },
    {
      "name": "list_ga4_custom_metrics",
      "description": "List all custom metrics for a GA4 property."
    },
    {
      "name": "list_ga4_data_streams",
      "description": "List all data streams (web, iOS, Android) in a GA4 property."
    },
    {
      "name": "list_ga4_google_ads_links",
      "description": "List all Google Ads links for a GA4 property."
    },
    {
      "name": "list_ga4_properties",
      "description": "List GA4 properties. If account_id is omitted, walks every connected GA4 account and returns all properties across them."
    },
    {
      "name": "list_google_ads_accounts",
      "description": "List Google Ads accounts accessible across every connected Google identity (alias of list_accounts). Walks MCC tree recursively. Returns each account with connected_via, access_path (direct or under_mcc), via_mcc (parent MCC if any), and is_manager flag. Use this when the user asks "
    },
    {
      "name": "list_gsc_properties",
      "description": "List all verified Google Search Console properties across every connected Google identity. Each property carries connected_via (which Google account has access). When summarizing for the user, group by connected_via. Use the siteUrl from this list in other GSC tools."
    },
    {
      "name": "list_gtm_accounts",
      "description": "List all Google Tag Manager accounts across every connected Google identity. Each account carries connected_via (which Google account has access). When summarizing for the user, group by connected_via so they can see which identity sees which account."
    },
    {
      "name": "list_gtm_builtin_variables",
      "description": "List all enabled built-in variables in a GTM workspace (Click URL, Form ID, Page Path, etc.). Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "list_gtm_containers",
      "description": "List all containers in a GTM account."
    },
    {
      "name": "list_gtm_environments",
      "description": "List environments for a GTM container (Live, Latest, and any custom environments). Pass either container_path OR (account_id + container_id)."
    },
    {
      "name": "list_gtm_tags",
      "description": "List all tags in a GTM workspace. Tags are the tracking codes (GA4, Google Ads conversion, custom HTML, etc.). Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "list_gtm_triggers",
      "description": "List all triggers in a GTM workspace. Triggers define when tags fire (page view, click, form submit, custom event, etc.). Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "list_gtm_variables",
      "description": "List all user-defined variables in a GTM workspace. Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "list_gtm_versions",
      "description": "List version history of a GTM container. Pass either container_path OR (account_id + container_id)."
    },
    {
      "name": "list_gtm_workspaces",
      "description": "List all workspaces in a GTM container. The "
    },
    {
      "name": "list_invoices",
      "description": "List account invoices/billing documents for a given date range (read-only)"
    },
    {
      "name": "list_keywords",
      "description": "List keywords for a campaign or ad group, with match type, bids, and quality score"
    },
    {
      "name": "list_labels",
      "description": "List all labels in the account"
    },
    {
      "name": "list_linkedin_ad_accounts",
      "description": "List all LinkedIn Ad Accounts across every connected LinkedIn identity. Each account carries connected_via (which LinkedIn account has access). When summarizing for the user, group by connected_via."
    },
    {
      "name": "list_linkedin_campaign_groups",
      "description": "List all campaign groups in the active LinkedIn ad account."
    },
    {
      "name": "list_linkedin_campaigns",
      "description": "List all LinkedIn campaigns in the active ad account with status, objective, budget, and cost type."
    },
    {
      "name": "list_linkedin_conversions",
      "description": "List conversion tracking rules in the active LinkedIn ad account. By default returns campaign counts + first 5 IDs per conversion to keep payload small. Set include_campaigns=true if you need the full campaign list per conversion."
    },
    {
      "name": "list_linkedin_creatives",
      "description": "List all creatives/ads in the active LinkedIn ad account."
    },
    {
      "name": "list_merchant_accounts",
      "description": "List all Google Merchant Center accounts across every connected Google identity. Walks identities + MCA sub-accounts. Each account carries connected_via (which Google identity surfaced it), access_path (direct or sub_account), and via_mca (parent MCA id if sub-account). When summarizing for the user, group by connected_via."
    },
    {
      "name": "list_my_mccs",
      "description": "Use when you want a clean list of just your manager accounts (MCCs) across every connected Google identity. Each MCC carries connected_via so you can see which Google account surfaced it. For full inventory including sub-accounts, use list_accounts instead."
    },
    {
      "name": "list_negative_keywords",
      "description": "List negative keywords at campaign and/or ad group level"
    },
    {
      "name": "list_plannable_locations",
      "description": "List locations available for reach/frequency planning"
    },
    {
      "name": "list_plannable_products",
      "description": "List ad products available for reach planning in a specific location"
    },
    {
      "name": "list_product_issues",
      "description": "List product-level disapprovals and warnings across the Merchant Center account. Returns issue code, severity, destination (free_listings vs shopping_ads), country, resolution instructions, and documentation link. Use this to find what"
    },
    {
      "name": "list_products",
      "description": "List products in the Merchant Center account, paginated. Returns title, brand, price, availability, condition, image, and feed label for each product. Use pagination via page_token."
    },
    {
      "name": "list_recommendations",
      "description": "Fetch Google Ads automated optimization recommendations"
    },
    {
      "name": "list_shared_sets",
      "description": "List all shared sets (negative keyword lists) in the account"
    },
    {
      "name": "list_tiktok_adgroups",
      "description": "List TikTok ad groups (the layer between campaigns and ads). Filter by campaign_id, or list all for the advertiser."
    },
    {
      "name": "list_tiktok_ads",
      "description": "List TikTok ads (creatives). Filter by adgroup_id, or list all for the advertiser."
    },
    {
      "name": "list_tiktok_advertisers",
      "description": "List all TikTok advertiser accounts accessible across connected TikTok identities. Walks every connected token, flags Business Center (BC) memberships via bc_id, dedupes by advertiser_id, and tags each with connected_via (which TikTok identity surfaced it). When summarizing for the user, group by connected_via."
    },
    {
      "name": "list_tiktok_campaigns",
      "description": "List TikTok campaigns for the active (or provided) advertiser. Paginated; returns campaign_id, name, objective, budget mode, and status."
    },
    {
      "name": "list_user_lists",
      "description": "List all user/remarketing lists in the account (website visitors, app users, customer match lists, similar audiences)"
    },
    {
      "name": "merchant_auth_status",
      "description": "Check whether Google Merchant Center is connected and show token expiry."
    },
    {
      "name": "merchant_create_link",
      "description": "Link a Google Ads account to a Merchant Center account. Required before Google Ads can run Shopping or Performance Max campaigns against the merchant feed. The linked Google Ads admin must approve the link in Google Ads UI for shopping ads to run."
    },
    {
      "name": "merchant_create_supplemental_feed",
      "description": "Create a supplemental data source for price/title/custom_label overrides. Supplemental feeds layer on top of a primary feed without replacing it \u2014 used for promotions, margin labels, A/B test titles, etc."
    },
    {
      "name": "merchant_delete_link",
      "description": "Delete an account-level service link from a Merchant Center account. Use merchant_list_links to find the service name first."
    },
    {
      "name": "merchant_delete_product",
      "description": "Delete a product from Merchant Center via productInputs. Reads stop within minutes; existing Shopping ads referencing the product stop showing."
    },
    {
      "name": "merchant_insert_product",
      "description": "Insert or update (upsert) a product in Merchant Center. Existing product with same offerId+contentLanguage+feedLabel is replaced. The product immediately enters review/disapproval pipeline. Required fields: offer_id, title, description, link, image_link, availability, price, content_language, feed_label."
    },
    {
      "name": "merchant_list_data_sources",
      "description": "List Merchant Center data sources for an account. If merchant_id is omitted, uses the active Merchant account (set via set_active_merchant_account). Use to find a primary data source ID for merchant_insert_product."
    },
    {
      "name": "merchant_list_links",
      "description": "List all account-level service links (Google Ads, etc.) attached to a Merchant Center account. If merchant_id is omitted, uses the active Merchant account. Use to find an existing link"
    },
    {
      "name": "pause_ad",
      "description": "Pause an ad by ad group ID and ad ID"
    },
    {
      "name": "pause_ad_group",
      "description": "Pause an ad group by ID"
    },
    {
      "name": "pause_campaign",
      "description": "Pause a campaign by ID (works with both Google Ads and Facebook accounts)"
    },
    {
      "name": "pause_fb_ad",
      "description": "Pause a Facebook Ad. Use dry_run=true (default) to preview."
    },
    {
      "name": "pause_fb_adset",
      "description": "Pause a Facebook Ad Set. Use dry_run=true (default) to preview."
    },
    {
      "name": "pause_fb_campaign",
      "description": "Pause a Facebook Campaign. Use dry_run=true (default) to preview."
    },
    {
      "name": "pause_keyword",
      "description": "Pause a keyword by its resource name"
    },
    {
      "name": "pause_linkedin_campaign",
      "description": "Pause a LinkedIn campaign. Set dry_run=false to execute."
    },
    {
      "name": "pause_tiktok_campaign",
      "description": "Pause a TikTok campaign (set operation_status to DISABLE). Writes to TikTok Marketing API. Reversible via enable_tiktok_campaign."
    },
    {
      "name": "preview_gtm_workspace",
      "description": "Generate a quick preview link for a GTM workspace. Opens the GTM preview/debug mode. Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "publish_gtm_version",
      "description": "WARNING: Publish a GTM version to make it LIVE on the website immediately. This affects real users and real tracking. Always test with preview_gtm_workspace first. Requires confirm=true. Pass either version_path OR (account_id + container_id + version_id)."
    },
    {
      "name": "register_gcp_developer",
      "description": "Manual one-time registration of PaidSync"
    },
    {
      "name": "remove_ad",
      "description": "Permanently remove an ad by ad group ID and ad ID"
    },
    {
      "name": "remove_asset",
      "description": "Remove (delete) an asset by its resource name"
    },
    {
      "name": "remove_asset_group_asset",
      "description": "Remove an asset from an asset group by its resource name"
    },
    {
      "name": "remove_audience",
      "description": "Remove an audience targeting criterion from a campaign"
    },
    {
      "name": "remove_bidding_strategy",
      "description": "Remove a portfolio bidding strategy. Campaigns using it will revert to standard bidding."
    },
    {
      "name": "remove_keyword",
      "description": "Remove a keyword by its resource name"
    },
    {
      "name": "remove_label_from_campaign",
      "description": "Remove a label from a campaign"
    },
    {
      "name": "research_keywords",
      "description": "Research keywords using Google Ads Keyword Planner \u2014 get search volume, competition, and bid estimates. Requires an account with active billing and spend history; new or unfunded accounts will return 0 results."
    },
    {
      "name": "revert_gtm_tag",
      "description": "Revert a tag to its state in the latest published version. Pass either tag_path OR (account_id + container_id + workspace_id + tag_id)."
    },
    {
      "name": "run_account_audit",
      "description": "Run a comprehensive audit of your Google Ads account. Checks wasted spend, Quality Score, extensions, negative keywords, impression share, ad testing, budget pacing, and conversion tracking. Returns an overall health score with prioritized actions."
    },
    {
      "name": "run_ga4_realtime_report",
      "description": "Get real-time data from GA4 (last 30 minutes). Useful for checking if tracking is working."
    },
    {
      "name": "run_ga4_report",
      "description": "Run a custom GA4 report. Specify dimensions, metrics, date range, and optional filters. Common dimensions: "
    },
    {
      "name": "run_gaql_query",
      "description": "Execute any Google Ads Query Language (GAQL) query. This is a read-only tool that can query ANY Google Ads resource: campaigns, ad_groups, ads, keywords, assets, audiences, bidding_strategies, experiments, invoices, change_events, and 100+ more. Use standard GAQL syntax: SELECT fields FROM resource WHERE conditions ORDER BY field LIMIT n. Examples: "
    },
    {
      "name": "run_mutate",
      "description": "Execute any Google Ads mutate operation via the REST API. Supports create, update, and remove operations on ANY resource type. Operations use the GoogleAdsService.mutate format. Each operation should be an object like { campaignOperation: { create: {...} } } or { adGroupOperation: { update: {...}, updateMask: "
    },
    {
      "name": "search_fb_interests",
      "description": "Search for Facebook interest targeting options by keyword. Returns valid interest IDs and names that can be passed directly to create_fb_adset"
    },
    {
      "name": "search_geo_targets",
      "description": "Search for geographic targeting locations by name. Returns geo target constant IDs needed for set_geo_targeting and set_location_bid_adjustment. E.g. search "
    },
    {
      "name": "select_mcc",
      "description": "[Legacy] Pin an MCC as a fallback login-customer-id for the rare case set_active_account resolution doesn"
    },
    {
      "name": "set_active_merchant_account",
      "description": "Select which Merchant Center account subsequent read/write tools should target. Required before any write operation. Get valid IDs from list_merchant_accounts. Accepts either `merchant_id` or `account_id` for compat with other set_active_* tools."
    },
    {
      "name": "set_active_tiktok_advertiser",
      "description": "Select which TikTok advertiser account subsequent read/write tools should target. Required before any write. Get valid IDs from list_tiktok_advertisers."
    },
    {
      "name": "set_ad_schedule",
      "description": "Set ad schedule (dayparting) for a campaign. Define which days/hours ads should run."
    },
    {
      "name": "set_device_bid_adjustment",
      "description": "Set device bid adjustments for a campaign. Modifier of 1.0 = no change, 1.5 = +50%, 0.5 = -50%, "
    },
    {
      "name": "set_fb_ad_account",
      "description": "Set the active Facebook Ad Account for all subsequent Facebook operations. The ID is validated against your list of accessible accounts before being persisted."
    },
    {
      "name": "set_fb_adset_schedule",
      "description": "Set hour/day schedule (dayparting) for a Facebook Ad Set. Ad set must use lifetime budget for scheduling to work."
    },
    {
      "name": "set_geo_targeting",
      "description": "Set geographic targeting for a campaign. Use Google Ads geo target constant IDs (e.g. 2840=US, 2826=UK, 2250=France)."
    },
    {
      "name": "set_linkedin_ad_account",
      "description": "Set the active LinkedIn Ad Account for all subsequent LinkedIn operations."
    },
    {
      "name": "set_location_bid_adjustment",
      "description": "Set a bid adjustment for a specific geographic location on a campaign. "
    },
    {
      "name": "setup_form_tracking",
      "description": "One-click form submission tracking. Creates a form submit trigger + enables required built-in variables. Optionally creates a GA4 event or Google Ads conversion tag for it. Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "setup_ga4_conversion_tracking",
      "description": "One-click full conversion tracking setup. Links Google Ads to GA4, marks an event as a conversion, and verifies the data stream exists. This is the fastest way to get conversion data flowing from your website to Google Ads."
    },
    {
      "name": "setup_ga4_event",
      "description": "One-click GA4 event tag setup. Creates a GA4 event tag with the specified event name and parameters, attached to a trigger of your choice. Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "setup_google_ads_conversion",
      "description": "One-click Google Ads conversion tracking setup. Creates a Conversion Linker tag (if missing) + a Google Ads Conversion Tracking tag + the appropriate trigger \u2014 all in a new workspace. This is the easiest way to set up conversion tracking. Pass either container_path OR (account_id + container_id)."
    },
    {
      "name": "setup_gtm",
      "description": "GTM onboarding helper. Checks your full GTM setup status: connected? has accounts? has containers? has tags? Tells you exactly what to do next. Run this first if you"
    },
    {
      "name": "subscribe_to_recommendations",
      "description": "Subscribe to auto-apply specific recommendation types. Google will automatically apply these recommendations as they appear."
    },
    {
      "name": "sync_gtm_workspace",
      "description": "Sync a workspace with the latest container version. Use this if someone else published changes while you were working. Pass either workspace_path OR (account_id + container_id + workspace_id)."
    },
    {
      "name": "tiktok_auth_status",
      "description": "Check whether TikTok Ads is connected and show token expiry."
    },
    {
      "name": "update_ad_group",
      "description": "Update ad group settings: name, status, CPC bid"
    },
    {
      "name": "update_asset_group",
      "description": "Update an asset group"
    },
    {
      "name": "update_bidding_strategy",
      "description": "Update a portfolio bidding strategy"
    },
    {
      "name": "update_campaign",
      "description": "Update campaign settings: name, status, bidding strategy, target CPA/ROAS, start/end dates. "
    },
    {
      "name": "update_campaign_budget",
      "description": "Update the daily budget for a campaign. If the new budget changes spend by more than 50% from "
    },
    {
      "name": "update_campaign_conversion_goal",
      "description": "Configure which conversion goals a campaign should optimize for. Set biddable=true for primary goals, false for secondary (observation-only) goals."
    },
    {
      "name": "update_experiment",
      "description": "Update an experiment: change status (SETUP -> INITIATED to start, GRADUATED to apply winner, REMOVED to delete), dates, or name"
    },
    {
      "name": "update_fb_ad",
      "description": "Update a Facebook Ad: name, status, or creative. To change an ad"
    },
    {
      "name": "update_fb_adset",
      "description": "Update a Facebook Ad Set: name, budget, status, targeting, bidding, placements, and more. Use dry_run=true (default) to preview. TARGETING: Only fields you provide will be sent \u2014 omitted fields are not overwritten. ADVANTAGE+ AUDIENCE: When enabled, age_max must be 65 \u2014 lower values are auto-corrected. INTERESTS: Use search_fb_interests to look up valid interest IDs \u2014 never guess. PLACEMENTS: "
    },
    {
      "name": "update_fb_audience",
      "description": "Rename or update the description of a custom audience. Use dry_run=true (default) to preview."
    },
    {
      "name": "update_fb_campaign",
      "description": "Update a Facebook campaign: name, status, or budget. Use dry_run=true (default) to preview. "
    },
    {
      "name": "update_ga4_enhanced_measurement",
      "description": "Enable or disable enhanced measurement events (scrolls, outbound clicks, site search, form interactions, video engagement, file downloads)."
    },
    {
      "name": "update_gtm_tag",
      "description": "Update an existing tag. Provide only the fields you want to change. Pass either tag_path OR (account_id + container_id + workspace_id + tag_id)."
    },
    {
      "name": "update_gtm_trigger",
      "description": "Update an existing trigger. Pass either trigger_path OR (account_id + container_id + workspace_id + trigger_id)."
    },
    {
      "name": "update_gtm_variable",
      "description": "Update an existing variable. Pass either variable_path OR (account_id + container_id + workspace_id + variable_id)."
    },
    {
      "name": "update_linkedin_campaign",
      "description": "Update a LinkedIn campaign"
    },
    {
      "name": "update_linkedin_campaign_group",
      "description": "Update a LinkedIn campaign group"
    },
    {
      "name": "update_linkedin_campaign_targeting",
      "description": "Update targeting criteria for a LinkedIn campaign. Set dry_run=false to execute."
    },
    {
      "name": "update_linkedin_creative",
      "description": "Update a LinkedIn creative"
    },
    {
      "name": "upload_conversion_adjustments",
      "description": "Adjust or retract previously uploaded conversions. Use RETRACTION to remove a conversion, RESTATEMENT to change its value."
    },
    {
      "name": "upload_customer_list_to_fb_audience",
      "description": "Upload customer data (emails, phones, names) to an existing custom audience. All PII values are automatically hashed with SHA-256 before being sent to Meta for privacy. Use dry_run=true (default) to preview."
    },
    {
      "name": "upload_customer_match_list",
      "description": "Upload customer data (emails, phones) to a CRM-based user list for Customer Match targeting. Data is hashed before upload for privacy."
    },
    {
      "name": "upload_linkedin_image",
      "description": "Upload an image from a public URL to LinkedIn for use in ad creatives. Returns the image URN to use when creating ads."
    },
    {
      "name": "upload_linkedin_video",
      "description": "Upload a video from a public URL to LinkedIn for use in video ad creatives. Max 200MB. Returns the video URN to use when creating ads."
    },
    {
      "name": "upload_offline_conversions",
      "description": "Upload offline conversion data (e.g. CRM leads that converted). Requires a conversion action to already exist. Each conversion needs a gclid (Google Click ID) or gbraid/wbraid identifier."
    },
    {
      "name": "validate_fb_ad_assets",
      "description": "Pre-publish check for a Facebook Ad. Validates image URL accessibility, page access, Instagram account connection, and placement compatibility \u2014 without creating anything. Run this before create_fb_ad to catch issues early."
    }
  ],
  "resources": [],
  "prompts": [],
  "platforms": [
    "Claude",
    "ChatGPT",
    "Gemini",
    "Perplexity",
    "Cursor",
    "Windsurf",
    "Claude Code"
  ],
  "pricing": {
    "free_tier": true,
    "plans": [
      {
        "name": "Free",
        "price": 0,
        "calls_per_month": 15
      },
      {
        "name": "Plus",
        "price": 49,
        "calls_per_month": 150
      },
      {
        "name": "Pro",
        "price": 99,
        "calls_per_month": 600
      },
      {
        "name": "Max",
        "price": 199,
        "calls_per_month": 4000
      }
    ]
  },
  "license": "Proprietary",
  "repository": {
    "type": "git",
    "url": "https://github.com/PaidSync/paidsync-mcp"
  }
}