{
  "id": "list_publishers_traffic_to_inactive_campaigns",
  "mcp_tool": "list_publishers_traffic_to_inactive_campaigns",
  "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": {
    "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": [
    "affiliate_id",
    "affiliate_name",
    "camp_id",
    "campaign_name",
    "campaign_status",
    "clicks",
    "affiliate_earning"
  ],
  "deny_fields": ["rev_share", "net_cpc", "cpc", "click_table_id"],
  "post_processing": [
    "Publisher × campaign rows with CPC clicks in the date window whose current Admin.campaign.status is not 'A'. Same status field as MNGT lucos_ro_campaign_budget.status.",
    "Not a status-change timestamp. 'Recently inactive' is approximated as currently inactive + clicks in the window.",
    "Requires lucos_ro_campaign_directory.status (TW-333 additive). Row-capped at 50."
  ],
  "notes": "Answers 'publishers still sending traffic to recently inactive campaigns' as Cake clicks on campaigns that are inactive now. rev_share stays denied."
}
