mcp-server-reddit-ads
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REDDIT_CLIENT_ID | Yes | Client ID from Reddit app registration. | |
| REDDIT_CLIENT_SECRET | Yes | Client secret from Reddit app registration. | |
| REDDIT_REFRESH_TOKEN | Yes | Refresh token obtained via auth command. | |
| REDDIT_ADS_ACCOUNT_ID | No | Optional default account ID (a2_...). | |
| REDDIT_ADS_WRITE_TIER | No | Write access tier: read, safe, or spend. | read |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_accountsA | List every Reddit ad account these credentials can reach, across all businesses. Use this first to get an account id for the other tools, or set REDDIT_ADS_ACCOUNT_ID to default it. One row per account, so the result is small. |
| get_account_overviewA | One-glance health of an account: campaign/ad-group/ad counts by effective status, and this-week vs last-week spend (two comparable 7-day windows). One entity sweep plus one report call. |
| get_campaignsA | List all campaigns in a Reddit ad account, with budget fields converted to USD (*_usd siblings). Use get_campaign for a single known id, or find_entity to resolve a name to an id. Returns every campaign in the account, so narrow with status on large accounts. |
| get_campaignA | Get one campaign by id, with budget fields converted to USD. Use get_campaigns to browse or filter, or find_entity when you only know the name. |
| get_ad_groupsA | List ad groups in an account, optionally filtered to one campaign, with budget and bid fields in USD. Ad groups hold the budget, bid, and targeting that update_budget, update_bid, and update_targeting change. Use get_ad_group for a single known id. |
| get_ad_groupA | Get one ad group by id, with budget and bid fields in USD. This is where budget, bid, and targeting live, so read it before and after update_budget, update_bid, or update_targeting to confirm a change landed. |
| get_adsA | List ads in an account, optionally filtered to one ad group. Returns ad records only, not creative copy: use get_ad_creative for headline and body text, or compare_ads to rank one ad group's ads by spend. |
| get_adA | Get one ad by id: status, ad group, and click-through URL, but not the creative copy. Use get_ad_creative for the headline, body, and media, and get_ads to browse an account or ad group. |
| get_ad_creativeA | Read the creative behind an ad: headline, body text, media, thumbnail, and post URL. The creative lives on the ad's promoted post and is immutable via the API - changing copy means creating a new ad. Use get_ad for the ad's status and click-through URL instead. |
| find_entityA | Find campaigns, ad groups, or ads by name (case-insensitive substring match). Use this to turn a human-readable name into an id before calling other tools. Prefer get_campaign, get_ad_group, or get_ad when you already have the id. |
| get_performance_reportA | Performance totals for an ad account over a date window. Accepts friendly lowercase metric names (e.g. impressions, clicks, spend, ctr, cpc, conversion_page_visit_clicks) validated locally before the call. Money metrics come back in USD. Defaults to the last 7 days. Use get_daily_performance for a per-day breakdown, compare_periods for change against the prior window, or compare_ads to rank the ads inside one ad group. |
| get_daily_performanceA | Day-by-day performance for the trailing N days, broken down by date, with money metrics in USD. Use this to see a trend or spot a spike. For window totals use get_performance_report, or compare_periods for a like-for-like change against the previous N days. |
| compare_periodsA | Compare account performance over the trailing N days against the N days immediately before (same-length back-to-back windows). Returns totals for both windows plus absolute and percent change per metric. Money metrics in USD. Two totals per metric only: use get_daily_performance to see the day-level shape within a window. |
| compare_adsA | Per-ad performance within one ad group, joined with each ad's name and creative headline and sorted by spend - answers 'which creative is winning?' in one call. Money metrics in USD. Scoped to a single ad group: use get_performance_report for account-level totals. |
| search_subredditsA | Search targetable subreddits (communities) by name or keyword. Returns the ids to pass as communities to update_targeting, which needs Reddit ids rather than display names. Read-only lookup: it does not change any targeting by itself. |
| get_interest_categoriesA | List Reddit's interest targeting categories. Returns the ids to pass as interests to update_targeting. Takes no arguments and returns the whole catalogue, so call it once and reuse the result rather than per ad group. |
| search_geo_targetsA | Search geographic targets (countries, regions, and metros) by name. Returns the ids to pass as geolocations to update_targeting, which needs Reddit geo ids rather than plain place names. Read-only lookup: it does not change any targeting by itself. |
| create_campaignA | Create a campaign. Always created PAUSED. If campaign budget optimization is on, a conversion pixel id is required (Reddit mandate since 2026-07-13). Find the conversion pixel id in the Reddit Ads dashboard under Events Manager; in practice it equals the ad account id. |
| create_ad_groupA | Create an ad group. Always created PAUSED. A conversion pixel id is required (Reddit mandate since 2026-07-13). Find the conversion pixel id in the Reddit Ads dashboard under Events Manager; in practice it equals the ad account id. |
| create_adA | Create an ad. Always created PAUSED. Either promote an existing post (post_url) or build a link ad (headline + click_url, optionally creative_type/thumbnail_url). |
| pause_itemsA | Pause one or more entities of a single type (campaigns, ad groups, or ads), stopping their spend. Reversible with enable_items. One bad id does not abort the rest; each result reports success and the read-back configured_status, which is the field to trust after a write (effective_status lags by minutes). |
| update_nameA | Rename one entity (campaign, ad group, or ad). Cosmetic only: delivery, budget, and targeting are untouched. The previous name is overwritten and cannot be recovered through this API. |
| update_ad_commentsA | Turn commenting on an ad's promoted post on or off. This is the only property of a post the Reddit API allows changing. Echoes old -> new. |
| copy_adsA | Duplicate a set of ads into another ad group. Each copy is created PAUSED. Reddit creates a new duplicate promoted post per copy. Optionally rewrite click_url query params (e.g. utm_campaign) for the destination. One bad source id does not abort the rest. |
| enable_itemsA | Resume delivery on one or more entities of a single type (set configured_status ACTIVE). This restarts spend. One bad id does not abort the rest; each result reports the read-back configured_status. |
| update_budgetA | Set an ad group's daily spend budget in USD, echoing the previous and new value. Overwrites the prior budget and applies to the live ad group immediately. Budgets live on ad groups, not campaigns; read the current value with get_ad_group first. |
| update_bidA | Set an ad group's bid in USD, echoing the previous and new value. Overwrites the prior bid and applies to the live ad group immediately. The bid governs what you pay per auction; use update_budget to cap total daily spend. |
| update_targetingA | Update an ad group's targeting. Only the fields you pass are changed; every other targeting key (including exclusions) is preserved. Echoes a from/to diff of the changed keys. |
| update_ad_urlA | Change an existing ad's click-through URL. Pass a full replacement click_url, or set_query_params to rewrite individual query params (e.g. UTMs) while preserving the rest. Echoes old -> new. On a live ad, paid traffic goes to the new URL immediately. |
| get_server_statusA | Diagnose the server: Reddit Ads API connectivity, configured write tier, how many tools that tier hides, and the default account. Start here when something is not working. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/camlowe/mcp-server-reddit-ads'
If you have feedback or need assistance with the MCP directory API, please join our Discord server