reddit-ads-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REDDIT_ADS_SCOPES | No | OAuth scopes | adsread adsedit adsconversions adsdatadeletion |
| REDDIT_ADS_CLIENT_ID | Yes | App client ID (required) | |
| REDDIT_ADS_ACCOUNT_ID | No | Default ad account for tools taking ad_account_id | |
| REDDIT_ADS_TOKEN_PATH | No | Token storage path | ~/.config/reddit-ads-mcp/tokens.json |
| REDDIT_ADS_USER_AGENT | No | Reddit asks for <platform>:<app id>:<version> (by /u/<username>) | node:reddit-ads-mcp:1.0.0 |
| REDDIT_ADS_REDIRECT_URI | No | Must exactly match the app's redirect URL | http://localhost:<port>/callback |
| REDDIT_ADS_CLIENT_SECRET | Yes | App client secret (required) | |
| REDDIT_ADS_REDIRECT_PORT | No | Port of the local OAuth callback server | 8765 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| reddit_ads_loginA | Open the Reddit OAuth consent page in the browser and wait for the callback. Returns the authorization URL if the login is not completed in time. |
| reddit_ads_auth_statusA | Show whether the server holds valid Reddit Ads credentials. |
| reddit_ads_logoutA | Revoke the stored refresh token and delete it from disk. |
| reddit_ads_api_requestA | Call any Reddit Ads API v3 endpoint directly. Use for endpoints without a dedicated tool. Path is relative to https://ads-api.reddit.com/api/v3 (e.g. 'me' or 'ad_accounts/{id}/campaigns'). Bodies for POST/PATCH/PUT are usually wrapped as {"data": {...}}. |
| reddit_ads_list_ad_accountsA | List every ad account the authenticated user can access, grouped by business. Start here to find ad_account_id values. |
| reddit_ads_get_meA | Get the authenticated Reddit Ads member or system user. |
| reddit_ads_list_businessesB | List businesses the authenticated user belongs to. |
| reddit_ads_get_businessC | Get a business by ID. |
| reddit_ads_update_businessC | Update a business. |
| reddit_ads_list_industriesB | List valid business industries. |
| reddit_ads_list_business_ad_accountsA | List ad accounts owned by a business (not those shared into it). |
| reddit_ads_query_ad_accountsB | Search the ad accounts a business can access, including shared ones, by name, ID, actor, role or asset. |
| reddit_ads_get_ad_accountA | Get an ad account: currency, time zone, attribution settings, approval status and account-level exclusions. |
| reddit_ads_update_ad_accountC | Update ad account settings. |
| reddit_ads_get_ad_account_historyB | Get the change log of an ad account (who changed what and when). |
| reddit_ads_list_account_profilesA | List Reddit profiles (t2_ user IDs) an ad account can post ads as. Profile IDs are needed for posts, creative assets and ads. |
| reddit_ads_list_business_profilesB | List Reddit profiles owned by a business. |
| reddit_ads_get_profileC | Get a Reddit profile by ID. |
| reddit_ads_list_funding_instrumentsC | List the funding instruments (payment methods, credit lines) of an ad account. |
| reddit_ads_query_business_funding_instrumentsC | Query funding instruments available to a business. |
| reddit_ads_list_funding_instrument_allocationsB | List child funding instruments allocated from a funding instrument. |
| reddit_ads_list_time_zonesC | List supported time zones. |
| reddit_ads_get_third_party_trackersB | List approved click and impression tracker domains for ad event_trackers. |
| reddit_ads_list_appsB | List mobile apps used in the ad account's past campaigns. |
| reddit_ads_get_app_last_firedC | Get when each mobile conversion event last fired for an app. |
| reddit_ads_get_skan_availabilityC | Get SKAdNetwork campaign, ad group and ad quota for an iOS app. |
| reddit_ads_list_campaignsC | List campaigns in an ad account. |
| reddit_ads_get_campaignB | Get a campaign including effective_status and delivery_status. |
| reddit_ads_create_campaignA | Create a campaign. All money values are micro-currency (1 USD = 1000000). Create it PAUSED unless the user asks otherwise. |
| reddit_ads_update_campaignA | Update a campaign. Pass only the fields to change. To delete set configured_status to DELETED, to archive set ARCHIVED. Deleting follows Reddit's rules: a campaign must be ARCHIVED first, and campaigns and ad groups can only be DELETED three hours after their last change (archive now, delete later). All money values are micro-currency (1 USD = 1000000). |
| reddit_ads_list_ad_groupsC | List ad groups in an ad account. |
| reddit_ads_get_ad_groupB | Get an ad group including targeting, bidding and status. |
| reddit_ads_create_ad_groupA | Create an ad group inside a campaign. All money values are micro-currency (1 USD = 1000000). Create it PAUSED unless the user asks otherwise. Under campaign budget optimization the bid_strategy, bid_type, goal_type, optimization_goal and view_through_conversion_type must match the campaign and goal_value must be null. |
| reddit_ads_update_ad_groupA | Update an ad group. Pass only the fields to change. To delete set configured_status to DELETED. Deleting follows Reddit's rules: a campaign must be ARCHIVED first, and campaigns and ad groups can only be DELETED three hours after their last change (archive now, delete later). Targeting is replaced as a whole object. All money values are micro-currency (1 USD = 1000000). |
| reddit_ads_list_adsA | List ads in an ad account. Filters are OR within a parameter and AND across parameters. |
| reddit_ads_get_adB | Get an ad including effective_status, rejection_reason, post_url and preview_url. |
| reddit_ads_create_adA | Create an ad in an ad group. Standard ads promote a post: first create one with reddit_ads_create_post_job (or reddit_ads_create_post) and pass its post_id (t3_...). Create it PAUSED unless the user asks otherwise. |
| reddit_ads_update_adA | Update an ad. Pass only the fields to change. To delete set configured_status to DELETED. The ad group cannot be changed. |
| reddit_ads_set_statusA | Activate, pause, archive or delete several campaigns, ad groups or ads at once. Reddit has no hard delete for these entities; DELETED is the delete operation. Deleting follows Reddit's rules: a campaign must be ARCHIVED first, and campaigns and ad groups can only be DELETED three hours after their last change (archive now, delete later). |
| reddit_ads_create_post_jobA | Create an ad post on a profile asynchronously. Poll reddit_ads_get_post_job until status is SUCCESS to get the post_id for reddit_ads_create_ad. Media is fetched by Reddit from public URLs. |
| reddit_ads_get_post_jobA | Get the status of a structured post creation job (QUEUED|PROCESSING|SUCCESS|CLIENT_ERROR|SERVER_ERROR) and the resulting post_id. |
| reddit_ads_list_structured_postsC | List structured posts on a profile. |
| reddit_ads_get_structured_postD | Get a structured post. |
| reddit_ads_update_structured_postB | Update a structured post. Only allow_comments can be changed. |
| reddit_ads_list_postsC | List posts on a profile (legacy posts API). |
| reddit_ads_create_postA | Create a post on a profile synchronously (legacy posts API). Prefer reddit_ads_create_post_job. |
| reddit_ads_get_postB | Get a post by ID (t3_...). |
| reddit_ads_update_postB | Update a post. Only allow_comments can be changed. |
| reddit_ads_upload_creative_assetsA | Add up to 50 assets to a profile's creative library (used by Reddit Max ads). Media is fetched by Reddit from public URLs. Poll reddit_ads_get_creative_asset_upload for the resulting asset. |
| reddit_ads_list_creative_asset_uploadsB | Get the status of several creative asset uploads. |
| reddit_ads_get_creative_asset_uploadB | Get a creative asset upload: status (PROCESSING_MEDIA|ACTIVE|INVALID_MEDIA) and resulting asset. |
| reddit_ads_list_creative_assetsB | List creative assets in a profile's library. |
| reddit_ads_get_creative_assetD | Get a creative asset. |
| reddit_ads_update_creative_assetC | Rename a creative asset. |
| reddit_ads_delete_creative_assetC | Permanently delete a creative asset from the library. |
| reddit_ads_create_poster_jobA | Generate poster (thumbnail) images from a public video URL. Poll reddit_ads_get_poster_job for the result. |
| reddit_ads_get_poster_jobB | Get the status and generated posters of a poster generation job. |
| reddit_ads_get_reportA | Get performance metrics for an ad account. Metric keys come back lowercase. spend, cpc, cpv, ecpm, conversion_*ecpa, app_installecpa, app_install_skan and app_install_*revenue are micro-currency (divide by 1000000); conversion*_total_value is in cents. Data can take up to 6 hours to settle. |
| reddit_ads_suggest_bidA | Get minimum and suggested bid values (micro-currency) for a planned ad group. |
| reddit_ads_estimate_audienceA | Estimate audience size and delivery (impressions, clicks, conversions, reach) for a planned ad group. Limited to 10 requests per minute. |
| reddit_ads_get_channel_reachB | Get a Reddit-wide reach curve (impressions vs reach) for media planning. |
| reddit_ads_search_communitiesA | Search subreddits for targeting by name or topic. |
| reddit_ads_get_communitiesA | Look up subreddits by exact name, with subscriber counts and categories. |
| reddit_ads_suggest_communitiesC | Suggest related subreddits from seed subreddits and/or a website URL. |
| reddit_ads_list_interestsB | List interest categories for targeting. |
| reddit_ads_list_geolocationsA | List geolocation targets. Without filters returns countries; filter by country for regions/metros, or search cities / postal codes. |
| reddit_ads_validate_geolocationsA | Validate geolocation IDs or city names before using them in targeting. |
| reddit_ads_list_devicesA | List device makes and models for targeting. |
| reddit_ads_list_carriersB | List mobile carriers for targeting. |
| reddit_ads_list_languagesC | List languages for targeting. |
| reddit_ads_list_third_party_audiencesB | List third-party data audiences (LiveRamp, Bombora) with sizes and costs. |
| reddit_ads_suggest_keywordsB | Get keyword suggestions with monthly views from seed keywords. |
| reddit_ads_validate_keywordsC | Check whether keywords are brand safe. |
| reddit_ads_list_custom_audiencesB | List custom audiences (customer lists, retargeting, lookalikes) in an ad account. |
| reddit_ads_get_custom_audienceB | Get a custom audience including its status and size. |
| reddit_ads_create_custom_audienceA | Create a custom audience. For customer lists, add users afterwards with reddit_ads_update_custom_audience_users. |
| reddit_ads_update_custom_audience_usersA | Add or remove users in a customer list audience. Values must be SHA-256 hashes of normalized (lowercased, trimmed) emails or mobile ad IDs. Max 2500 rows per call. |
| reddit_ads_delete_custom_audienceC | Permanently delete a custom audience. |
| reddit_ads_list_saved_audiencesB | List saved (reusable) targeting audiences. |
| reddit_ads_get_saved_audienceC | Get a saved audience. |
| reddit_ads_create_saved_audienceB | Save a targeting configuration to reuse on ad groups via saved_audience_id. |
| reddit_ads_update_saved_audienceB | Update a saved audience. Set status to DELETED to delete it. |
| reddit_ads_list_lead_gen_formsC | List lead generation forms in an ad account. |
| reddit_ads_get_lead_gen_formC | Get a lead generation form. |
| reddit_ads_create_lead_gen_formC | Create a lead generation form. |
| reddit_ads_list_pixelsB | List Reddit pixels of an ad account. |
| reddit_ads_list_business_pixelsC | List Reddit pixels of a business. |
| reddit_ads_get_pixel_last_firedA | Get when each conversion event last fired for a pixel, to check tracking health. |
| reddit_ads_send_conversion_eventsA | Send server-side conversion events through the Conversions API (requires the adsconversions scope). Use test_id to send test events visible in Events Manager. |
| reddit_ads_create_data_deletion_jobC | Request deletion of a person's data from an ad account (requires the adsdatadeletion scope). |
| reddit_ads_create_pixel_data_deletion_jobA | Request deletion of a person's data collected by a pixel (requires the adsdatadeletion scope and business admin). |
| reddit_ads_get_data_deletion_jobB | Get the status of a data deletion job (QUEUED|COMPLETED|FAILED). |
| reddit_ads_list_catalogsC | List product catalogs of a business. |
| reddit_ads_get_catalogD | Get a product catalog. |
| reddit_ads_create_catalogC | Create a product catalog for dynamic product ads. |
| reddit_ads_update_catalogD | Update a product catalog. |
| reddit_ads_delete_catalogA | Permanently delete a product catalog with its feeds, sets and products. |
| reddit_ads_list_product_feedsC | List feeds of a product catalog. |
| reddit_ads_get_product_feedC | Get a product feed. |
| reddit_ads_create_product_feedA | Create a scheduled product feed (max 2 per catalog, of different modes). |
| reddit_ads_update_product_feedD | Update a product feed. |
| reddit_ads_delete_product_feedB | Permanently delete a product feed. |
| reddit_ads_list_catalog_importsC | List feed import runs of a catalog. |
| reddit_ads_list_catalog_import_issuesC | List issues found while importing a feed. |
| reddit_ads_get_catalog_import_reportB | Get a download URL for a feed import report. |
| reddit_ads_list_product_setsC | List product sets of a catalog. |
| reddit_ads_get_product_setC | Get a product set. |
| reddit_ads_create_product_setB | Create a filtered product set for catalog ad groups (product_set_id). |
| reddit_ads_update_product_setC | Update a product set. |
| reddit_ads_delete_product_setB | Permanently delete a product set. |
| reddit_ads_list_catalog_productsC | List products in a catalog. |
| reddit_ads_list_product_set_productsC | List products in a product set. |
| reddit_ads_upsert_productsB | Create or update up to 1000 products in a catalog. |
| reddit_ads_delete_productsA | Delete up to 1000 products from a catalog by product ID. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 114 tools
Most tools map to a distinct resource and action, but there is notable overlap between legacy posts tools (list/get/update/create_post) and structured posts tools (list/get/update/create_post_job), and between set_status and the various update_* status changes. These overlaps are mostly clarified by descriptions, so an agent can usually choose correctly.
Nearly all tools follow the reddit_ads_ prefix and snake_case with a verb_noun pattern (e.g., list_campaigns, create_ad). A few exceptions like auth_status, api_request, logout, and login break the verb_noun convention, but the overall naming is highly consistent.
114 tools is far beyond the typical 3-15 range for an MCP server and exceeds the 50-tool threshold for extreme mismatch. While the Reddit Ads API is large, this volume is overwhelming for an agent and likely degrades tool selection.
The tool set covers an extensive surface: CRUD for campaigns, ad groups, ads, posts, creative assets, audiences, catalogs, feeds, product sets, pixels, conversions, lead gen, and targeting options. With reddit_ads_api_request as a fallback, the surface is effectively complete for the Reddit Ads API.