{
  "id": "openclaw-adspirer",
  "kind": "tool",
  "skills": [
    "skills"
  ],
  "uiHints": {
    "serverUrl": {
      "label": "Server URL",
      "placeholder": "https://mcp.adspirer.com",
      "help": "Adspirer MCP server URL. Defaults to production. Set to http://localhost:<port> for local development.",
      "advanced": true
    },
    "testMode": {
      "label": "Test Mode",
      "help": "Enable for local development. Bypasses OAuth and sends test headers instead. Never enable in production.",
      "advanced": true
    },
    "testUserEmail": {
      "label": "Test User Email",
      "placeholder": "tj@adspirer.com",
      "help": "Email used for X-Test-User-Email header when Test Mode is enabled.",
      "advanced": true
    },
    "oauthClientId": {
      "label": "OAuth Client ID",
      "help": "Set automatically by dynamic client registration during login. Do not edit manually.",
      "advanced": true
    },
    "accessToken": {
      "label": "Access Token",
      "sensitive": true,
      "help": "Set automatically by `openclaw adspirer login`. Do not edit manually."
    },
    "refreshToken": {
      "label": "Refresh Token",
      "sensitive": true,
      "help": "Set automatically by `openclaw adspirer login`. Do not edit manually."
    },
    "apiKey": {
      "label": "API Key",
      "sensitive": true,
      "help": "Personal access token for headless/remote server auth. Set via `openclaw adspirer login --token`. Do not edit manually.",
      "advanced": true
    },
    "tokenExpiresAt": {
      "label": "Token Expiry",
      "help": "Unix timestamp. Set automatically.",
      "advanced": true
    },
    "defaultAccountId": {
      "label": "Default Account ID",
      "placeholder": "123-456-7890",
      "help": "Optional. Set a default ad account ID for all tool calls.",
      "advanced": true
    },
    "enabledGroups": {
      "label": "Enabled Tool Groups",
      "help": "Which ad platforms to enable. Default: all platforms."
    },
    "enabledTools": {
      "label": "Enabled Tools (Advanced)",
      "help": "Cherry-pick individual tools by name. Overrides group settings if set.",
      "advanced": true
    },
    "requestTimeoutMs": {
      "label": "Request Timeout (ms)",
      "placeholder": "60000",
      "help": "HTTP timeout for tool calls. Increase for long-running operations.",
      "advanced": true
    }
  },
  "permissions": {
    "filesystem": {
      "paths": [
        "~/.openclaw/openclaw.json"
      ],
      "operations": [
        "read",
        "write"
      ],
      "justification": "Read and write OAuth tokens so users stay logged in across restarts. No other files are accessed."
    },
    "network": {
      "hosts": [
        "mcp.adspirer.com"
      ],
      "justification": "All tool calls are sent to the Adspirer MCP server via HTTPS. HTTP is rejected in production mode."
    },
    "localhost": {
      "ports": [
        "dynamic"
      ],
      "justification": "Ephemeral HTTP server on 127.0.0.1 to receive OAuth callback during login. Auto-closes after 120 seconds."
    },
    "child_process": {
      "commands": [
        "open",
        "xdg-open",
        "start"
      ],
      "justification": "Opens the user's default browser for OAuth login and ad platform connection pages. Uses execFile (not exec) to prevent command injection."
    }
  },
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "serverUrl": {
        "type": "string",
        "default": "https://mcp.adspirer.com"
      },
      "testMode": {
        "type": "boolean",
        "default": false
      },
      "testUserEmail": {
        "type": "string",
        "default": "tj@adspirer.com"
      },
      "oauthClientId": {
        "type": "string"
      },
      "accessToken": {
        "type": "string"
      },
      "refreshToken": {
        "type": "string"
      },
      "apiKey": {
        "type": "string"
      },
      "tokenExpiresAt": {
        "type": "number"
      },
      "defaultAccountId": {
        "type": "string"
      },
      "enabledGroups": {
        "type": "array",
        "items": {
          "type": "string",
          "enum": [
            "google_ads",
            "meta_ads",
            "tiktok_ads",
            "linkedin_ads",
            "manus",
            "audit",
            "system"
          ]
        },
        "default": [
          "google_ads",
          "meta_ads",
          "tiktok_ads",
          "linkedin_ads",
          "manus",
          "audit",
          "system"
        ]
      },
      "enabledTools": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "default": []
      },
      "requestTimeoutMs": {
        "type": "number",
        "default": 60000,
        "minimum": 5000,
        "maximum": 300000
      }
    },
    "required": []
  },
  "contracts": {
    "tools": [
      "add_ad_group_audiences",
      "add_asset_group_listing_filter",
      "add_business_name_asset",
      "add_call_asset",
      "add_callout_extensions",
      "add_campaign_label",
      "add_campaign_proximity",
      "add_demandgen_ad",
      "add_demandgen_ad_group",
      "add_display_ad",
      "add_display_ad_group",
      "add_display_audiences",
      "add_display_keywords",
      "add_display_placements",
      "add_display_topics",
      "add_keywords",
      "add_meta_ad",
      "add_meta_ad_set",
      "add_meta_catalog_ad",
      "add_meta_catalog_ad_set",
      "add_negative_keywords",
      "add_pmax_asset_group",
      "add_pmax_asset_group_asset",
      "add_pmax_asset_group_image",
      "add_pmax_audience_signal",
      "add_pmax_search_themes",
      "add_product_group",
      "add_search_ad_group",
      "add_search_campaign_image",
      "add_shopping_ad_group",
      "add_shopping_product_ad",
      "add_sitelinks",
      "add_structured_snippets",
      "amazon_ads",
      "analyze_meta_ad_performance",
      "analyze_meta_audiences",
      "analyze_meta_catalog_performance",
      "analyze_meta_wasted_spend",
      "analyze_search_terms",
      "analyze_wasted_spend",
      "audit_conversion_tracking",
      "browse_meta_targeting",
      "chatgpt_ads",
      "compare_meta_catalog_product_sets",
      "create_ad",
      "create_conversion_action",
      "create_demandgen_campaign",
      "create_display_campaign",
      "create_label",
      "create_meta_carousel_campaign",
      "create_meta_catalog_campaign",
      "create_meta_dco_ad",
      "create_meta_image_campaign",
      "create_meta_product_set",
      "create_meta_video_campaign",
      "create_pmax_campaign",
      "create_search_campaign",
      "create_shopping_campaign",
      "create_youtube_campaign",
      "detect_meta_catalog_waste",
      "detect_meta_creative_fatigue",
      "diagnose_meta_catalog_funnel",
      "diagnostic_and_helper_tools",
      "discover_existing_assets",
      "discover_meta_assets",
      "duplicate_meta_campaign",
      "echo_test",
      "explain_meta_anomaly",
      "explain_performance_anomaly",
      "get_ad_creative",
      "get_ad_group_audiences",
      "get_ad_group_demographics",
      "get_ad_group_device_bid_modifiers",
      "get_ad_group_settings",
      "get_ad_performance",
      "get_ad_policy_violations",
      "get_asset_group_listing_filters",
      "get_benchmark_context",
      "get_business_profile",
      "get_campaign_dates",
      "get_campaign_frequency_caps",
      "get_campaign_labels",
      "get_campaign_performance",
      "get_campaign_structure",
      "get_campaign_targeting",
      "get_campaign_tracking",
      "get_connections_status",
      "get_conversion_action_performance",
      "get_demandgen_audiences",
      "get_demandgen_channel_controls",
      "get_display_ad_group_settings",
      "get_display_audiences",
      "get_display_demographics",
      "get_display_frequency_caps",
      "get_display_keywords",
      "get_display_placements",
      "get_display_topics",
      "get_merchant_center_links",
      "get_meta_ad_creatives",
      "get_meta_adset_performance",
      "get_meta_audience_insights",
      "get_meta_campaign_details",
      "get_meta_campaign_performance",
      "get_meta_lead_form_submissions",
      "get_meta_pixel_stats",
      "get_meta_product_performance",
      "get_pmax_asset_groups",
      "get_pmax_asset_performance",
      "get_pmax_audience_signals",
      "get_pmax_search_themes",
      "get_product_groups",
      "get_shopping_settings",
      "get_usage_status",
      "google_analytics",
      "help_user_upload",
      "infer_business_profile",
      "klaviyo",
      "link_merchant_center",
      "linkedin_ads",
      "list_campaign_extensions",
      "list_campaigns",
      "list_connected_accounts",
      "list_conversion_actions",
      "list_google_languages",
      "list_labels",
      "list_meta_ad_sets",
      "list_meta_ads",
      "list_meta_campaigns",
      "list_meta_catalogs",
      "list_meta_custom_audiences",
      "list_meta_instagram_accounts",
      "list_meta_lead_forms",
      "list_meta_pixels",
      "list_meta_product_sets",
      "list_meta_products",
      "list_pmax_asset_group_assets",
      "list_pmax_asset_group_images",
      "monitoring_and_reporting",
      "optimize_budget_allocation",
      "optimize_meta_budget",
      "optimize_meta_placements",
      "pause_ad",
      "pause_ad_group",
      "pause_campaign",
      "pause_meta_campaign",
      "remove_ad",
      "remove_ad_group",
      "remove_asset_group_listing_filter",
      "remove_callouts",
      "remove_campaign",
      "remove_campaign_label",
      "remove_display_ad",
      "remove_display_ad_group",
      "remove_display_criteria",
      "remove_keywords",
      "remove_negative_keywords",
      "remove_pmax_asset_group",
      "remove_pmax_asset_group_asset",
      "remove_pmax_asset_group_image",
      "remove_pmax_audience_signal",
      "remove_pmax_search_themes",
      "remove_product_group",
      "remove_sitelinks",
      "remove_structured_snippets",
      "replace_demandgen_audiences",
      "research_keywords",
      "resolve_google_locations",
      "resume_ad",
      "resume_ad_group",
      "resume_campaign",
      "resume_meta_campaign",
      "save_business_profile",
      "search_audiences",
      "search_meta_targeting",
      "select_google_campaign_type",
      "select_meta_campaign_type",
      "set_ad_group_device_bid_modifiers",
      "set_campaign_ad_schedule",
      "set_campaign_device_bid_modifiers",
      "suggest_ad_content",
      "switch_primary_account",
      "tiktok_ads",
      "unlink_merchant_center",
      "update_ad_content",
      "update_ad_descriptions",
      "update_ad_group_demographics",
      "update_ad_group_settings",
      "update_ad_headlines",
      "update_bid_strategy",
      "update_campaign",
      "update_campaign_dates",
      "update_campaign_frequency_caps",
      "update_demandgen_channel_controls",
      "update_display_ad_creative",
      "update_display_ad_group",
      "update_display_campaign_schedule",
      "update_display_demographics",
      "update_display_frequency_caps",
      "update_keyword",
      "update_location_targeting",
      "update_meta_ad",
      "update_meta_ad_set",
      "update_meta_campaign",
      "update_meta_catalog_ad",
      "update_meta_catalog_ad_set",
      "update_meta_catalog_campaign",
      "update_pmax_asset_group",
      "update_pmax_audience_signal",
      "update_product_group",
      "validate_and_prepare_assets",
      "validate_and_prepare_meta_assets",
      "validate_catalog_readiness",
      "validate_video"
    ]
  }
}
