[
  {
    "name": "reddit_ads_get_account_summary",
    "title": "Get Reddit Ads Account Summary",
    "description": "Get a high-level performance summary for a Reddit ad account over a date range.",
    "cli_command": "hopkin reddit account-summary get",
    "cli_flags": [
      {
        "flag": "--account",
        "description": "Reddit ad account ID.",
        "type": "string",
        "required": true
      },
      {
        "flag": "--date-start",
        "description": "Start date in YYYY-MM-DD format.",
        "type": "string",
        "required": true
      },
      {
        "flag": "--date-end",
        "description": "End date in YYYY-MM-DD format.",
        "type": "string",
        "required": true
      }
    ],
    "category": "account-summary",
    "annotations": {
      "readOnly": true,
      "destructive": false,
      "idempotent": true,
      "openWorld": true
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string",
          "minLength": 1,
          "description": "Reddit ad account ID."
        },
        "date_start": {
          "type": "string",
          "description": "Start date in YYYY-MM-DD format."
        },
        "date_end": {
          "type": "string",
          "description": "End date in YYYY-MM-DD format."
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "account_id",
        "date_start",
        "date_end",
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "account_id",
        "type": "string",
        "required": true,
        "description": "Reddit ad account ID.",
        "constraints": {
          "min_length": 1
        }
      },
      {
        "name": "date_start",
        "type": "string",
        "required": true,
        "description": "Start date in YYYY-MM-DD format."
      },
      {
        "name": "date_end",
        "type": "string",
        "required": true,
        "description": "End date in YYYY-MM-DD format."
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "meta_ads_get_account_summary",
        "relationship": "cross-platform"
      },
      {
        "name": "google_ads_get_account_summary",
        "relationship": "cross-platform"
      },
      {
        "name": "linkedin_ads_get_account_summary",
        "relationship": "cross-platform"
      }
    ]
  },
  {
    "name": "reddit_ads_list_ad_accounts",
    "title": "List Reddit Ad Accounts",
    "description": "List Reddit ad accounts accessible to the authenticated user.",
    "cli_command": "hopkin reddit ad-accounts list",
    "cli_flags": [
      {
        "flag": "--account",
        "description": "Fetch a single ad account by ID.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--account-ids",
        "description": "Fetch specific accounts by IDs.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--limit",
        "description": "",
        "type": "integer",
        "required": false
      },
      {
        "flag": "--cursor",
        "description": "Opaque pagination cursor.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--refresh",
        "description": "",
        "type": "boolean",
        "required": false
      }
    ],
    "category": "ad-accounts",
    "annotations": {
      "readOnly": true,
      "destructive": false,
      "idempotent": true,
      "openWorld": true
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string",
          "description": "Fetch a single ad account by ID."
        },
        "account_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "maxItems": 50,
          "description": "Fetch specific accounts by IDs."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 20
        },
        "cursor": {
          "type": "string",
          "description": "Opaque pagination cursor."
        },
        "refresh": {
          "type": "boolean",
          "default": false
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "account_id",
        "type": "string",
        "required": false,
        "description": "Fetch a single ad account by ID."
      },
      {
        "name": "account_ids",
        "type": "array",
        "required": false,
        "description": "Fetch specific accounts by IDs."
      },
      {
        "name": "limit",
        "type": "integer",
        "required": false,
        "description": "",
        "default": 20,
        "constraints": {
          "min": 1,
          "max": 100
        }
      },
      {
        "name": "cursor",
        "type": "string",
        "required": false,
        "description": "Opaque pagination cursor."
      },
      {
        "name": "refresh",
        "type": "boolean",
        "required": false,
        "description": "",
        "default": false
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "meta_ads_list_ad_accounts",
        "relationship": "cross-platform"
      },
      {
        "name": "linkedin_ads_list_ad_accounts",
        "relationship": "cross-platform"
      },
      {
        "name": "reddit_ads_list_campaigns",
        "relationship": "hierarchy"
      }
    ]
  },
  {
    "name": "reddit_ads_list_ad_groups",
    "title": "List Reddit Ad Groups",
    "description": "List Reddit ad groups for an ad account. Shows targeting, bid strategy, and campaign association.",
    "cli_command": "hopkin reddit ad-groups list",
    "cli_flags": [
      {
        "flag": "--account",
        "description": "Reddit ad account ID.",
        "type": "string",
        "required": true
      },
      {
        "flag": "--ad-group-id",
        "description": "Fetch a single ad group by ID.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--ad-group-ids",
        "description": "Fetch specific ad groups by IDs.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--campaign",
        "description": "Filter by parent campaign ID.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--status",
        "description": "Filter by status.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--limit",
        "description": "",
        "type": "integer",
        "required": false
      },
      {
        "flag": "--cursor",
        "description": "Opaque pagination cursor.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--refresh",
        "description": "",
        "type": "boolean",
        "required": false
      }
    ],
    "category": "ad-groups",
    "annotations": {
      "readOnly": true,
      "destructive": false,
      "idempotent": true,
      "openWorld": true
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string",
          "minLength": 1,
          "description": "Reddit ad account ID."
        },
        "ad_group_id": {
          "type": "string",
          "description": "Fetch a single ad group by ID."
        },
        "ad_group_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "maxItems": 50,
          "description": "Fetch specific ad groups by IDs."
        },
        "campaign_id": {
          "type": "string",
          "description": "Filter by parent campaign ID."
        },
        "status": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "PAUSED",
              "ARCHIVED"
            ]
          },
          "description": "Filter by status."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 20
        },
        "cursor": {
          "type": "string",
          "description": "Opaque pagination cursor."
        },
        "refresh": {
          "type": "boolean",
          "default": false
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "account_id",
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "account_id",
        "type": "string",
        "required": true,
        "description": "Reddit ad account ID.",
        "constraints": {
          "min_length": 1
        }
      },
      {
        "name": "ad_group_id",
        "type": "string",
        "required": false,
        "description": "Fetch a single ad group by ID."
      },
      {
        "name": "ad_group_ids",
        "type": "array",
        "required": false,
        "description": "Fetch specific ad groups by IDs."
      },
      {
        "name": "campaign_id",
        "type": "string",
        "required": false,
        "description": "Filter by parent campaign ID."
      },
      {
        "name": "status",
        "type": "array",
        "required": false,
        "description": "Filter by status."
      },
      {
        "name": "limit",
        "type": "integer",
        "required": false,
        "description": "",
        "default": 20,
        "constraints": {
          "min": 1,
          "max": 100
        }
      },
      {
        "name": "cursor",
        "type": "string",
        "required": false,
        "description": "Opaque pagination cursor."
      },
      {
        "name": "refresh",
        "type": "boolean",
        "required": false,
        "description": "",
        "default": false
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "google_ads_list_ad_groups",
        "relationship": "cross-platform"
      },
      {
        "name": "reddit_ads_list_ads",
        "relationship": "hierarchy"
      },
      {
        "name": "reddit_ads_list_campaigns",
        "relationship": "hierarchy"
      },
      {
        "name": "tiktok_ads_list_ad_groups",
        "relationship": "cross-platform"
      }
    ]
  },
  {
    "name": "reddit_ads_list_ads",
    "title": "List Reddit Ads",
    "description": "List Reddit ads for an ad account. Shows creative type, headline, click URL, and status.",
    "cli_command": "hopkin reddit ads list",
    "cli_flags": [
      {
        "flag": "--account",
        "description": "Reddit ad account ID.",
        "type": "string",
        "required": true
      },
      {
        "flag": "--ad",
        "description": "Fetch a single ad by ID.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--ad-ids",
        "description": "Fetch specific ads by IDs.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--ad-group-id",
        "description": "Filter by parent ad group ID.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--status",
        "description": "Filter by status.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--limit",
        "description": "",
        "type": "integer",
        "required": false
      },
      {
        "flag": "--cursor",
        "description": "Opaque pagination cursor.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--refresh",
        "description": "",
        "type": "boolean",
        "required": false
      }
    ],
    "category": "ads",
    "annotations": {
      "readOnly": true,
      "destructive": false,
      "idempotent": true,
      "openWorld": true
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string",
          "minLength": 1,
          "description": "Reddit ad account ID."
        },
        "ad_id": {
          "type": "string",
          "description": "Fetch a single ad by ID."
        },
        "ad_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "maxItems": 50,
          "description": "Fetch specific ads by IDs."
        },
        "ad_group_id": {
          "type": "string",
          "description": "Filter by parent ad group ID."
        },
        "status": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "PAUSED",
              "ARCHIVED"
            ]
          },
          "description": "Filter by status."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 20
        },
        "cursor": {
          "type": "string",
          "description": "Opaque pagination cursor."
        },
        "refresh": {
          "type": "boolean",
          "default": false
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "account_id",
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "account_id",
        "type": "string",
        "required": true,
        "description": "Reddit ad account ID.",
        "constraints": {
          "min_length": 1
        }
      },
      {
        "name": "ad_id",
        "type": "string",
        "required": false,
        "description": "Fetch a single ad by ID."
      },
      {
        "name": "ad_ids",
        "type": "array",
        "required": false,
        "description": "Fetch specific ads by IDs."
      },
      {
        "name": "ad_group_id",
        "type": "string",
        "required": false,
        "description": "Filter by parent ad group ID."
      },
      {
        "name": "status",
        "type": "array",
        "required": false,
        "description": "Filter by status."
      },
      {
        "name": "limit",
        "type": "integer",
        "required": false,
        "description": "",
        "default": 20,
        "constraints": {
          "min": 1,
          "max": 100
        }
      },
      {
        "name": "cursor",
        "type": "string",
        "required": false,
        "description": "Opaque pagination cursor."
      },
      {
        "name": "refresh",
        "type": "boolean",
        "required": false,
        "description": "",
        "default": false
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "meta_ads_list_ads",
        "relationship": "cross-platform"
      },
      {
        "name": "google_ads_list_ads",
        "relationship": "cross-platform"
      },
      {
        "name": "reddit_ads_list_ad_groups",
        "relationship": "hierarchy"
      },
      {
        "name": "tiktok_ads_list_ads",
        "relationship": "cross-platform"
      }
    ]
  },
  {
    "name": "reddit_ads_check_auth_status",
    "title": "Check Reddit Ads Authentication Status",
    "description": "Troubleshoot authentication issues and get user profile info. Only use when another tool fails with a permission or authentication error — do NOT call proactively.",
    "cli_command": "hopkin reddit auth check",
    "cli_flags": [],
    "category": "auth",
    "annotations": {
      "readOnly": true,
      "destructive": false,
      "idempotent": true,
      "openWorld": true
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "meta_ads_check_auth_status",
        "relationship": "cross-platform"
      },
      {
        "name": "google_ads_check_auth_status",
        "relationship": "cross-platform"
      },
      {
        "name": "linkedin_ads_check_auth_status",
        "relationship": "cross-platform"
      },
      {
        "name": "reddit_ads_ping",
        "relationship": "sibling"
      },
      {
        "name": "tiktok_ads_check_auth_status",
        "relationship": "cross-platform"
      }
    ]
  },
  {
    "name": "reddit_ads_list_campaigns",
    "title": "List Reddit Campaigns",
    "description": "List Reddit ad campaigns for an ad account. Shows name, status, objective, and budget information.",
    "cli_command": "hopkin reddit campaigns list",
    "cli_flags": [
      {
        "flag": "--account",
        "description": "Reddit ad account ID.",
        "type": "string",
        "required": true
      },
      {
        "flag": "--campaign",
        "description": "Fetch a single campaign by ID.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--campaign-ids",
        "description": "Fetch specific campaigns by IDs.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--status",
        "description": "Filter by status.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--search",
        "description": "Search by campaign name (case-insensitive).",
        "type": "string",
        "required": false
      },
      {
        "flag": "--limit",
        "description": "",
        "type": "integer",
        "required": false
      },
      {
        "flag": "--cursor",
        "description": "Opaque pagination cursor.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--refresh",
        "description": "",
        "type": "boolean",
        "required": false
      }
    ],
    "category": "campaigns",
    "annotations": {
      "readOnly": true,
      "destructive": false,
      "idempotent": true,
      "openWorld": true
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string",
          "minLength": 1,
          "description": "Reddit ad account ID."
        },
        "campaign_id": {
          "type": "string",
          "description": "Fetch a single campaign by ID."
        },
        "campaign_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "maxItems": 50,
          "description": "Fetch specific campaigns by IDs."
        },
        "status": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "PAUSED",
              "ARCHIVED"
            ]
          },
          "description": "Filter by status."
        },
        "search": {
          "type": "string",
          "description": "Search by campaign name (case-insensitive)."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 20
        },
        "cursor": {
          "type": "string",
          "description": "Opaque pagination cursor."
        },
        "refresh": {
          "type": "boolean",
          "default": false
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "account_id",
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "account_id",
        "type": "string",
        "required": true,
        "description": "Reddit ad account ID.",
        "constraints": {
          "min_length": 1
        }
      },
      {
        "name": "campaign_id",
        "type": "string",
        "required": false,
        "description": "Fetch a single campaign by ID."
      },
      {
        "name": "campaign_ids",
        "type": "array",
        "required": false,
        "description": "Fetch specific campaigns by IDs."
      },
      {
        "name": "status",
        "type": "array",
        "required": false,
        "description": "Filter by status."
      },
      {
        "name": "search",
        "type": "string",
        "required": false,
        "description": "Search by campaign name (case-insensitive)."
      },
      {
        "name": "limit",
        "type": "integer",
        "required": false,
        "description": "",
        "default": 20,
        "constraints": {
          "min": 1,
          "max": 100
        }
      },
      {
        "name": "cursor",
        "type": "string",
        "required": false,
        "description": "Opaque pagination cursor."
      },
      {
        "name": "refresh",
        "type": "boolean",
        "required": false,
        "description": "",
        "default": false
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "meta_ads_list_campaigns",
        "relationship": "cross-platform"
      },
      {
        "name": "google_ads_list_campaigns",
        "relationship": "cross-platform"
      },
      {
        "name": "linkedin_ads_list_campaigns",
        "relationship": "cross-platform"
      },
      {
        "name": "reddit_ads_list_ad_accounts",
        "relationship": "hierarchy"
      },
      {
        "name": "reddit_ads_list_ad_groups",
        "relationship": "hierarchy"
      },
      {
        "name": "tiktok_ads_list_campaigns",
        "relationship": "cross-platform"
      }
    ]
  },
  {
    "name": "reddit_ads_list_custom_audiences",
    "title": "List Reddit Custom Audiences",
    "description": "List Reddit custom audiences for an ad account. Shows name, type, size, and status.",
    "cli_command": "hopkin reddit custom-audiences list",
    "cli_flags": [
      {
        "flag": "--account",
        "description": "Reddit ad account ID.",
        "type": "string",
        "required": true
      },
      {
        "flag": "--audience-id",
        "description": "Fetch a single custom audience by ID.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--audience-ids",
        "description": "Fetch specific audiences by IDs.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--limit",
        "description": "",
        "type": "integer",
        "required": false
      },
      {
        "flag": "--cursor",
        "description": "Opaque pagination cursor.",
        "type": "string",
        "required": false
      },
      {
        "flag": "--refresh",
        "description": "",
        "type": "boolean",
        "required": false
      }
    ],
    "category": "custom-audiences",
    "annotations": {
      "readOnly": true,
      "destructive": false,
      "idempotent": true,
      "openWorld": true
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string",
          "minLength": 1,
          "description": "Reddit ad account ID."
        },
        "audience_id": {
          "type": "string",
          "description": "Fetch a single custom audience by ID."
        },
        "audience_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "maxItems": 50,
          "description": "Fetch specific audiences by IDs."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 20
        },
        "cursor": {
          "type": "string",
          "description": "Opaque pagination cursor."
        },
        "refresh": {
          "type": "boolean",
          "default": false
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "account_id",
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "account_id",
        "type": "string",
        "required": true,
        "description": "Reddit ad account ID.",
        "constraints": {
          "min_length": 1
        }
      },
      {
        "name": "audience_id",
        "type": "string",
        "required": false,
        "description": "Fetch a single custom audience by ID."
      },
      {
        "name": "audience_ids",
        "type": "array",
        "required": false,
        "description": "Fetch specific audiences by IDs."
      },
      {
        "name": "limit",
        "type": "integer",
        "required": false,
        "description": "",
        "default": 20,
        "constraints": {
          "min": 1,
          "max": 100
        }
      },
      {
        "name": "cursor",
        "type": "string",
        "required": false,
        "description": "Opaque pagination cursor."
      },
      {
        "name": "refresh",
        "type": "boolean",
        "required": false,
        "description": "",
        "default": false
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [],
    "response_format": "markdown",
    "related_tools": []
  },
  {
    "name": "reddit_ads_developer_feedback",
    "title": "Submit Developer Feedback",
    "description": "Submit feedback about missing tools, improvements, bugs, or workflow gaps in the Reddit Ads MCP toolset. Not for user-facing issues like auth or API errors.",
    "cli_command": "hopkin reddit developer-feedback send",
    "cli_flags": [
      {
        "flag": "--feedback-type",
        "description": "Feedback category: new_tool (request new capability), improvement (enhance existing tool), bug (report issue), workflow_gap (missing workflow)",
        "type": "string",
        "required": true
      },
      {
        "flag": "--title",
        "description": "Concise title summarizing the feedback",
        "type": "string",
        "required": true
      },
      {
        "flag": "--description",
        "description": "What is needed and why",
        "type": "string",
        "required": true
      },
      {
        "flag": "--current-workaround",
        "description": "Current workaround, if any",
        "type": "string",
        "required": false
      },
      {
        "flag": "--priority",
        "description": "Impact level: low (nice-to-have), medium (improves workflow), high (blocking issue)",
        "type": "string",
        "required": false
      },
      {
        "flag": "--interface",
        "description": "Interface the feedback originated from: MCP (default) or CLI",
        "type": "string",
        "required": false
      }
    ],
    "category": "feedback",
    "annotations": {
      "readOnly": false,
      "destructive": false,
      "idempotent": true,
      "openWorld": true
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "feedback_type": {
          "type": "string",
          "enum": [
            "new_tool",
            "improvement",
            "bug",
            "workflow_gap"
          ],
          "description": "Feedback category: new_tool (request new capability), improvement (enhance existing tool), bug (report issue), workflow_gap (missing workflow)"
        },
        "title": {
          "type": "string",
          "minLength": 5,
          "maxLength": 200,
          "description": "Concise title summarizing the feedback"
        },
        "description": {
          "type": "string",
          "minLength": 20,
          "maxLength": 2000,
          "description": "What is needed and why"
        },
        "current_workaround": {
          "type": "string",
          "maxLength": 1000,
          "description": "Current workaround, if any"
        },
        "priority": {
          "type": "string",
          "enum": [
            "low",
            "medium",
            "high"
          ],
          "default": "medium",
          "description": "Impact level: low (nice-to-have), medium (improves workflow), high (blocking issue)"
        },
        "interface": {
          "type": "string",
          "enum": [
            "MCP",
            "CLI"
          ],
          "default": "MCP",
          "description": "Interface the feedback originated from: MCP (default) or CLI"
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "feedback_type",
        "title",
        "description",
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "feedback_type",
        "type": "string",
        "required": true,
        "description": "Feedback category: new_tool (request new capability), improvement (enhance existing tool), bug (report issue), workflow_gap (missing workflow)",
        "enum_values": [
          "new_tool",
          "improvement",
          "bug",
          "workflow_gap"
        ]
      },
      {
        "name": "title",
        "type": "string",
        "required": true,
        "description": "Concise title summarizing the feedback",
        "constraints": {
          "min_length": 5,
          "max_length": 200
        }
      },
      {
        "name": "description",
        "type": "string",
        "required": true,
        "description": "What is needed and why",
        "constraints": {
          "min_length": 20,
          "max_length": 2000
        }
      },
      {
        "name": "current_workaround",
        "type": "string",
        "required": false,
        "description": "Current workaround, if any",
        "constraints": {
          "max_length": 1000
        }
      },
      {
        "name": "priority",
        "type": "string",
        "required": false,
        "description": "Impact level: low (nice-to-have), medium (improves workflow), high (blocking issue)",
        "enum_values": [
          "low",
          "medium",
          "high"
        ],
        "default": "medium"
      },
      {
        "name": "interface",
        "type": "string",
        "required": false,
        "description": "Interface the feedback originated from: MCP (default) or CLI",
        "enum_values": [
          "MCP",
          "CLI"
        ],
        "default": "MCP"
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [
      {
        "label": "Missing tool",
        "mcp_params": {
          "feedback_type": "new_tool",
          "title": "Bulk ad group status toggle",
          "description": "Need to pause/enable multiple ad groups at once rather than one by one",
          "priority": "high",
          "reason": "User asked to pause 10 ad groups individually"
        },
        "cli_command": "hopkin reddit developer-feedback send --feedback-type new_tool --title Bulk ad group status toggle --description Need to pause/enable multiple ad groups at once rather than one by one --priority high",
        "natural_language": "Missing tool"
      },
      {
        "label": "Workflow gap",
        "mcp_params": {
          "feedback_type": "workflow_gap",
          "title": "Campaign cloning with ad groups",
          "description": "No way to duplicate a campaign including all ad groups and ads",
          "current_workaround": "Read and recreate each level one by one",
          "reason": "User wanted to duplicate campaign structure"
        },
        "cli_command": "hopkin reddit developer-feedback send --feedback-type workflow_gap --title Campaign cloning with ad groups --description No way to duplicate a campaign including all ad groups and ads --current-workaround Read and recreate each level one by one",
        "natural_language": "Workflow gap"
      }
    ],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "meta_ads_developer_feedback",
        "relationship": "cross-platform"
      },
      {
        "name": "google_ads_developer_feedback",
        "relationship": "cross-platform"
      },
      {
        "name": "linkedin_ads_developer_feedback",
        "relationship": "cross-platform"
      },
      {
        "name": "tiktok_ads_developer_feedback",
        "relationship": "cross-platform"
      }
    ]
  },
  {
    "name": "reddit_ads_ping",
    "title": "Ping Reddit Ads MCP Server",
    "description": "Health check for the Reddit Ads MCP server.",
    "cli_command": "hopkin reddit ping",
    "cli_flags": [
      {
        "flag": "--message",
        "description": "Optional message to echo back",
        "type": "string",
        "required": false
      }
    ],
    "category": "auth",
    "annotations": {
      "readOnly": true,
      "destructive": false,
      "idempotent": true,
      "openWorld": false
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "message": {
          "type": "string",
          "maxLength": 100,
          "description": "Optional message to echo back"
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "message",
        "type": "string",
        "required": false,
        "description": "Optional message to echo back",
        "constraints": {
          "max_length": 100
        }
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [
      {
        "label": "Health check",
        "mcp_params": {
          "reason": "Verify server is running"
        },
        "cli_command": "hopkin reddit ping",
        "natural_language": "Health check"
      },
      {
        "label": "With message",
        "mcp_params": {
          "message": "hello",
          "reason": "Test connectivity"
        },
        "cli_command": "hopkin reddit ping --message hello",
        "natural_language": "With message"
      }
    ],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "meta_ads_ping",
        "relationship": "cross-platform"
      },
      {
        "name": "google_ads_ping",
        "relationship": "cross-platform"
      },
      {
        "name": "linkedin_ads_ping",
        "relationship": "cross-platform"
      },
      {
        "name": "reddit_ads_check_auth_status",
        "relationship": "sibling"
      },
      {
        "name": "tiktok_ads_ping",
        "relationship": "cross-platform"
      }
    ]
  },
  {
    "name": "reddit_ads_store_preference",
    "title": "Store Reddit Ads Preference",
    "description": "Store a persistent preference for a Reddit ad entity. Use when you infer a recurring preference about analysis, reporting, or management. Updates existing keys.",
    "cli_command": "hopkin reddit preferences store",
    "cli_flags": [
      {
        "flag": "--entity-type",
        "description": "Type of ad entity: ad_account, campaign, ad_set (Meta ad sets / Google ad groups), or ad",
        "type": "string",
        "required": true
      },
      {
        "flag": "--entity-id",
        "description": "The platform entity ID (e.g. act_123456, 23842453456789)",
        "type": "string",
        "required": true
      },
      {
        "flag": "--key",
        "description": "Preference key (e.g. preferred_conversion_metric, budget_alert_threshold)",
        "type": "string",
        "required": true
      },
      {
        "flag": "--value",
        "description": "Preference value — string, number, boolean, or JSON object",
        "type": "unknown",
        "required": false
      },
      {
        "flag": "--source",
        "description": "Who set this preference: agent (default), user, or system",
        "type": "string",
        "required": false
      },
      {
        "flag": "--note",
        "description": "Optional context about why this preference was set",
        "type": "string",
        "required": false
      }
    ],
    "category": "preferences",
    "annotations": {
      "readOnly": false,
      "destructive": false,
      "idempotent": true,
      "openWorld": false
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "enum": [
            "ad_account",
            "campaign",
            "ad_set",
            "ad"
          ],
          "description": "Type of ad entity: ad_account, campaign, ad_set (Meta ad sets / Google ad groups), or ad"
        },
        "entity_id": {
          "type": "string",
          "minLength": 1,
          "description": "The platform entity ID (e.g. act_123456, 23842453456789)"
        },
        "key": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "description": "Preference key (e.g. preferred_conversion_metric, budget_alert_threshold)"
        },
        "value": {
          "description": "Preference value — string, number, boolean, or JSON object"
        },
        "source": {
          "type": "string",
          "enum": [
            "agent",
            "user",
            "system"
          ],
          "default": "agent",
          "description": "Who set this preference: agent (default), user, or system"
        },
        "note": {
          "type": "string",
          "maxLength": 500,
          "description": "Optional context about why this preference was set"
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "entity_type",
        "entity_id",
        "key",
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "entity_type",
        "type": "string",
        "required": true,
        "description": "Type of ad entity: ad_account, campaign, ad_set (Meta ad sets / Google ad groups), or ad",
        "enum_values": [
          "ad_account",
          "campaign",
          "ad_set",
          "ad"
        ]
      },
      {
        "name": "entity_id",
        "type": "string",
        "required": true,
        "description": "The platform entity ID (e.g. act_123456, 23842453456789)",
        "constraints": {
          "min_length": 1
        }
      },
      {
        "name": "key",
        "type": "string",
        "required": true,
        "description": "Preference key (e.g. preferred_conversion_metric, budget_alert_threshold)",
        "constraints": {
          "min_length": 1,
          "max_length": 100
        }
      },
      {
        "name": "value",
        "type": "unknown",
        "required": false,
        "description": "Preference value — string, number, boolean, or JSON object"
      },
      {
        "name": "source",
        "type": "string",
        "required": false,
        "description": "Who set this preference: agent (default), user, or system",
        "enum_values": [
          "agent",
          "user",
          "system"
        ],
        "default": "agent"
      },
      {
        "name": "note",
        "type": "string",
        "required": false,
        "description": "Optional context about why this preference was set",
        "constraints": {
          "max_length": 500
        }
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [
      {
        "label": "Set metric",
        "mcp_params": {
          "entity_type": "ad_account",
          "entity_id": "t2_123",
          "key": "preferred_conversion_metric",
          "value": "ROAS",
          "reason": "User wants ROAS as default metric"
        },
        "cli_command": "hopkin reddit preferences store --entity-type ad_account --entity-id t2_123 --key preferred_conversion_metric --value ROAS",
        "natural_language": "Set metric"
      },
      {
        "label": "Set threshold",
        "mcp_params": {
          "entity_type": "campaign",
          "entity_id": "456",
          "key": "budget_alert_threshold",
          "value": 0.8,
          "reason": "Alert at 80% budget"
        },
        "cli_command": "hopkin reddit preferences store --entity-type campaign --entity-id 456 --key budget_alert_threshold --value 0.8",
        "natural_language": "Set threshold"
      }
    ],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "meta_ads_store_preference",
        "relationship": "cross-platform"
      },
      {
        "name": "google_ads_store_preference",
        "relationship": "cross-platform"
      },
      {
        "name": "linkedin_ads_store_preference",
        "relationship": "cross-platform"
      },
      {
        "name": "reddit_ads_get_preferences",
        "relationship": "sibling"
      },
      {
        "name": "reddit_ads_delete_preference",
        "relationship": "sibling"
      }
    ]
  },
  {
    "name": "reddit_ads_get_preferences",
    "title": "Get Reddit Ads Preferences",
    "description": "Get all stored preferences for a Reddit ad entity. Preferences are also auto-attached to list tool responses as _stored_preferences.",
    "cli_command": "hopkin reddit preferences get",
    "cli_flags": [
      {
        "flag": "--entity-type",
        "description": "Type of ad entity: ad_account, campaign, ad_set, or ad",
        "type": "string",
        "required": true
      },
      {
        "flag": "--entity-id",
        "description": "The platform entity ID",
        "type": "string",
        "required": true
      }
    ],
    "category": "preferences",
    "annotations": {
      "readOnly": true,
      "destructive": false,
      "idempotent": true,
      "openWorld": false
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "enum": [
            "ad_account",
            "campaign",
            "ad_set",
            "ad"
          ],
          "description": "Type of ad entity: ad_account, campaign, ad_set, or ad"
        },
        "entity_id": {
          "type": "string",
          "minLength": 1,
          "description": "The platform entity ID"
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "entity_type",
        "entity_id",
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "entity_type",
        "type": "string",
        "required": true,
        "description": "Type of ad entity: ad_account, campaign, ad_set, or ad",
        "enum_values": [
          "ad_account",
          "campaign",
          "ad_set",
          "ad"
        ]
      },
      {
        "name": "entity_id",
        "type": "string",
        "required": true,
        "description": "The platform entity ID",
        "constraints": {
          "min_length": 1
        }
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [
      {
        "label": "Get prefs",
        "mcp_params": {
          "entity_type": "ad_account",
          "entity_id": "t2_123",
          "reason": "Check stored preferences"
        },
        "cli_command": "hopkin reddit preferences get --entity-type ad_account --entity-id t2_123",
        "natural_language": "Get prefs"
      }
    ],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "meta_ads_get_preferences",
        "relationship": "cross-platform"
      },
      {
        "name": "google_ads_get_preferences",
        "relationship": "cross-platform"
      },
      {
        "name": "linkedin_ads_get_preferences",
        "relationship": "cross-platform"
      },
      {
        "name": "reddit_ads_store_preference",
        "relationship": "sibling"
      },
      {
        "name": "reddit_ads_delete_preference",
        "relationship": "sibling"
      }
    ]
  },
  {
    "name": "reddit_ads_delete_preference",
    "title": "Delete Reddit Ads Preference",
    "description": "Delete a stored preference by key. No-op if it doesn't exist.",
    "cli_command": "hopkin reddit preference delete",
    "cli_flags": [
      {
        "flag": "--entity-type",
        "description": "Type of ad entity: ad_account, campaign, ad_set, or ad",
        "type": "string",
        "required": true
      },
      {
        "flag": "--entity-id",
        "description": "The platform entity ID",
        "type": "string",
        "required": true
      },
      {
        "flag": "--key",
        "description": "The preference key to delete",
        "type": "string",
        "required": true
      }
    ],
    "category": "preferences",
    "annotations": {
      "readOnly": false,
      "destructive": true,
      "idempotent": true,
      "openWorld": false
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "enum": [
            "ad_account",
            "campaign",
            "ad_set",
            "ad"
          ],
          "description": "Type of ad entity: ad_account, campaign, ad_set, or ad"
        },
        "entity_id": {
          "type": "string",
          "minLength": 1,
          "description": "The platform entity ID"
        },
        "key": {
          "type": "string",
          "minLength": 1,
          "description": "The preference key to delete"
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "entity_type",
        "entity_id",
        "key",
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "entity_type",
        "type": "string",
        "required": true,
        "description": "Type of ad entity: ad_account, campaign, ad_set, or ad",
        "enum_values": [
          "ad_account",
          "campaign",
          "ad_set",
          "ad"
        ]
      },
      {
        "name": "entity_id",
        "type": "string",
        "required": true,
        "description": "The platform entity ID",
        "constraints": {
          "min_length": 1
        }
      },
      {
        "name": "key",
        "type": "string",
        "required": true,
        "description": "The preference key to delete",
        "constraints": {
          "min_length": 1
        }
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [
      {
        "label": "Delete pref",
        "mcp_params": {
          "entity_type": "campaign",
          "entity_id": "456",
          "key": "budget_alert_threshold",
          "reason": "User no longer wants budget alerts"
        },
        "cli_command": "hopkin reddit preference delete --entity-type campaign --entity-id 456 --key budget_alert_threshold",
        "natural_language": "Delete pref"
      }
    ],
    "response_format": "markdown",
    "related_tools": [
      {
        "name": "meta_ads_delete_preference",
        "relationship": "cross-platform"
      },
      {
        "name": "google_ads_delete_preference",
        "relationship": "cross-platform"
      },
      {
        "name": "linkedin_ads_delete_preference",
        "relationship": "cross-platform"
      },
      {
        "name": "reddit_ads_store_preference",
        "relationship": "sibling"
      },
      {
        "name": "reddit_ads_get_preferences",
        "relationship": "sibling"
      }
    ]
  },
  {
    "name": "reddit_ads_get_performance_report",
    "title": "Get Reddit Ads Performance Report",
    "description": "Get a performance report for a Reddit ad account over a date range, with optional breakdowns and entity filters.",
    "cli_command": "hopkin reddit performance-report get",
    "cli_flags": [
      {
        "flag": "--account",
        "description": "Reddit ad account ID.",
        "type": "string",
        "required": true
      },
      {
        "flag": "--campaign-ids",
        "description": "Filter to specific campaign IDs.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--ad-group-ids",
        "description": "Filter to specific ad group IDs.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--ad-ids",
        "description": "Filter to specific ad IDs.",
        "type": "array",
        "required": false
      },
      {
        "flag": "--date-start",
        "description": "Start date in YYYY-MM-DD format.",
        "type": "string",
        "required": true
      },
      {
        "flag": "--date-end",
        "description": "End date in YYYY-MM-DD format.",
        "type": "string",
        "required": true
      },
      {
        "flag": "--breakdown",
        "description": "Up to 3 breakdown dimensions. \"community\" shows subreddit-level data.",
        "type": "array",
        "required": false
      }
    ],
    "category": "reporting",
    "annotations": {
      "readOnly": true,
      "destructive": false,
      "idempotent": true,
      "openWorld": true
    },
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string",
          "minLength": 1,
          "description": "Reddit ad account ID."
        },
        "campaign_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Filter to specific campaign IDs."
        },
        "ad_group_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Filter to specific ad group IDs."
        },
        "ad_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Filter to specific ad IDs."
        },
        "date_start": {
          "type": "string",
          "description": "Start date in YYYY-MM-DD format."
        },
        "date_end": {
          "type": "string",
          "description": "End date in YYYY-MM-DD format."
        },
        "breakdown": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "campaign",
              "ad_group",
              "ad",
              "community",
              "date",
              "country",
              "region",
              "placement",
              "device_os"
            ]
          },
          "maxItems": 3,
          "description": "Up to 3 breakdown dimensions. \"community\" shows subreddit-level data."
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Why this tool call is needed"
        }
      },
      "required": [
        "account_id",
        "date_start",
        "date_end",
        "reason"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    },
    "parameters": [
      {
        "name": "account_id",
        "type": "string",
        "required": true,
        "description": "Reddit ad account ID.",
        "constraints": {
          "min_length": 1
        }
      },
      {
        "name": "campaign_ids",
        "type": "array",
        "required": false,
        "description": "Filter to specific campaign IDs."
      },
      {
        "name": "ad_group_ids",
        "type": "array",
        "required": false,
        "description": "Filter to specific ad group IDs."
      },
      {
        "name": "ad_ids",
        "type": "array",
        "required": false,
        "description": "Filter to specific ad IDs."
      },
      {
        "name": "date_start",
        "type": "string",
        "required": true,
        "description": "Start date in YYYY-MM-DD format."
      },
      {
        "name": "date_end",
        "type": "string",
        "required": true,
        "description": "End date in YYYY-MM-DD format."
      },
      {
        "name": "breakdown",
        "type": "array",
        "required": false,
        "description": "Up to 3 breakdown dimensions. \"community\" shows subreddit-level data."
      },
      {
        "name": "reason",
        "type": "string",
        "required": true,
        "description": "Why this tool call is needed",
        "constraints": {
          "min_length": 1,
          "max_length": 500
        }
      }
    ],
    "examples": [],
    "response_format": "json",
    "related_tools": [
      {
        "name": "meta_ads_get_performance_report",
        "relationship": "cross-platform"
      },
      {
        "name": "google_ads_get_performance_report",
        "relationship": "cross-platform"
      },
      {
        "name": "linkedin_ads_get_performance_report",
        "relationship": "cross-platform"
      },
      {
        "name": "tiktok_ads_get_performance_report",
        "relationship": "cross-platform"
      }
    ]
  }
]