Skip to main content
Glama

Draft Reddit campaign changes

update_reddit_campaign

Draft changes to a Reddit campaign — name, run dates, spend cap, and (CBO only) budget/bid/schedule.

daily_budget / lifetime_budget / bid_* / schedule apply only when the campaign uses campaign budget optimization; otherwise the budget lives on its ad groups (changed via update_reddit_ad_group). Budgets are in account currency and checked against max_daily_budget; bid_value against max_bid_increase_pct. Returns a preview with a plan_id showing old → new per field; nothing changes until confirm_and_apply applies it.

Reddit Ads API: https://ads-api.reddit.com/docs/v3/

Input Schema

NameRequiredDescriptionDefault
nameNoNew campaign name; empty keeps the current one.
bid_typeNoCPC, CPM, CPV, CPV6 or CPV15 (CBO only).
end_timeNoNew end, same formats as start_time.
scheduleNoWeekly delivery windows ("time of day" in Ads Manager; CBO only), a list of blocks like {"days": "MON-FRI", "start_hour": 13, "end_hour": 23} (day names, hours 0-23, end_hour inclusive) or the native {"start_day": "FRI", "start_hour": 22, "end_day": "SAT", "end_hour": 3}. [] clears it (deliver at any time). Hours apply in each viewer's local time, not the account time zone. A campaign schedule replaces every ad group's.
bid_valueNoNew bid in account currency (CBO only).
spend_capNoCampaign spend cap in account currency; 0 removes it.
start_timeNoNew start, ISO 8601 (e.g. 2026-10-01T00:00:00Z); a bare YYYY-MM-DD means 00:00 UTC that day.
campaign_idYesReddit campaign id (from get_reddit_campaigns).
bid_strategyNoBIDLESS, MAXIMIZE_VOLUME or TARGET_CPX (CBO only).
daily_budgetNoNew daily budget in account currency (positive; CBO only). Mutually exclusive with lifetime_budget; the budget type (daily vs lifetime) cannot change after publishing.
ad_account_idNoReddit ad account id (from list_reddit_accounts). Empty uses reddit.ad_account_id from the config.
lifetime_budgetNoNew lifetime budget in account currency (positive; CBO only). Needs an end_time (passed or already set); compared to max_daily_budget by its per-day share.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • addedInput schema / properties / ad_account_id / description
      Added value: +"Reddit ad account id (from list_reddit_accounts).\nEmpty uses reddit.ad_account_id from the config."
    • addedInput schema / properties / bid_strategy / description
      Added value: +"BIDLESS, MAXIMIZE_VOLUME or TARGET_CPX (CBO only)."
    • addedInput schema / properties / bid_type / description
      Added value: +"CPC, CPM, CPV, CPV6 or CPV15 (CBO only)."
    • addedInput schema / properties / bid_value / description
      Added value: +"New bid in account currency (CBO only)."
    • addedInput schema / properties / campaign_id / description
      Added value: +"Reddit campaign id (from get_reddit_campaigns)."
    • addedInput schema / properties / daily_budget / description
      Added value: +"New daily budget in account currency (positive; CBO\nonly). Mutually exclusive with lifetime_budget; the budget type\n(daily vs lifetime) cannot change after publishing."
    • addedInput schema / properties / end_time / description
      Added value: +"New end, same formats as start_time."
    • addedInput schema / properties / lifetime_budget / description
      Added value: +"New lifetime budget in account currency (positive;\nCBO only). Needs an end_time (passed or already set); compared to\nmax_daily_budget by its per-day share."
    • addedInput schema / properties / name / description
      Added value: +"New campaign name; empty keeps the current one."
    • addedInput schema / properties / schedule / description
      Added value: +"Weekly delivery windows (\"time of day\" in Ads Manager; CBO\nonly), a list of blocks like {\"days\": \"MON-FRI\", \"start_hour\": 13,\n\"end_hour\": 23} (day names, hours 0-23, end_hour inclusive) or the\nnative {\"start_day\": \"FRI\", \"start_hour\": 22, \"end_day\": \"SAT\",\n\"end_hour\": 3}. [] clears it (deliver at any time). Hours apply in\neach viewer's local time, not the account time zone. A campaign\nschedule replaces every ad group's."
    • addedInput schema / properties / spend_cap / description
      Added value: +"Campaign spend cap in account currency; 0 removes it."
    • addedInput schema / properties / start_time / description
      Added value: +"New start, ISO 8601 (e.g. 2026-10-01T00:00:00Z); a bare\nYYYY-MM-DD means 00:00 UTC that day."
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that this is a staged/draft operation returning a plan_id preview with old → new per field, that nothing commits until confirm_and_apply, that budgets are in account currency and validated against max_daily_budget, and that bid_value is checked against max_bid_increase_pct. It also warns that a campaign schedule replaces every ad group's schedule. This reconciles nicely with readOnlyHint=false / destructiveHint=false by clarifying the two-step draft-then-apply flow.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line summary followed by two tight paragraphs covering conditionality, validation, and the confirm flow. Every sentence carries signal, with only the API docs link being mild filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation tool with an output schema, the description supplies the CBO conditionality, currency/unit semantics, validation limits, and the draft-to-apply lifecycle. Combined with the existing output schema and annotations, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning on top: it flags which parameters are CBO-only, the account-currency unit, and the validation limits each value is checked against. It does not restate every field, which is appropriate given the detailed schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Draft changes to a Reddit campaign') and enumerates the mutable field families (name, run dates, spend cap, CBO budget/bid/schedule). It also positions itself against the sibling update_reddit_ad_group by noting where budget lives when CBO is not used, so an agent can distinguish it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states the condition that gates the CBO-only fields and redirects non-CBO budget edits to update_reddit_ad_group, plus that confirm_and_apply is the step that actually commits. It lacks an explicit contrast against the similarly named draft_reddit_campaign sibling, so routing isn't fully unambiguous, but the usage context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.