{
  "id": "list_advertisers_low_traffic_concentration",
  "mcp_tool": "list_advertisers_low_traffic_concentration",
  "status": "approved",
  "source_system": "cake",
  "environment": ["staging", "prod"],
  "sharded": false,
  "connections": {
    "admin": "cake_admin_ro"
  },
  "objects": [
    "Admin.lucos_ro_affiliate_cpc_summary_daily",
    "Admin.lucos_ro_campaign_directory"
  ],
  "parameters": {
    "min_active_campaigns": { "type": "int", "required": false, "default": 5 },
    "date_from": { "type": "date", "required": false },
    "date_to": { "type": "date", "required": false },
    "limit": { "type": "int", "required": false, "default": 50 }
  },
  "constraints": {
    "max_window_days": 92,
    "default_window_days": 31,
    "max_rows": 50,
    "timeout_ms": 60000
  },
  "allow_fields": [
    "adv_id",
    "adv_name",
    "active_campaign_count",
    "clicks",
    "top_campaign_share"
  ],
  "deny_fields": ["rev_share", "net_cpc", "cpc", "click_table_id"],
  "post_processing": [
    "Per advertiser: roll CPC clicks to (adv_id, camp_id) in the date window, INNER JOIN lucos_ro_campaign_directory WHERE status = 'A'.",
    "top_campaign_share = max(campaign_clicks) / sum(campaign_clicks) among those active campaigns with traffic. Lower = clicks more evenly spread (low concentration).",
    "HAVING active_campaign_count >= min_active_campaigns (default 5, cannot be below 2). Ranked low share first, then many campaigns.",
    "status = 'A' is current Admin.campaign.status (same field as MNGT lucos_ro_campaign_budget.status). Not historical status. Requires lucos_ro_campaign_directory.status. Row-capped at 50."
  ],
  "notes": "Answers 'advertisers with many active campaigns but low traffic concentration'. Traffic = Cake CPC clicks. Concentration proxy = top campaign click share (not HHI). Unscoped advertiser dump prevented by min_active_campaigns + ranking + row cap. rev_share stays denied."
}
