Server data from the Official MCP Registry
Reddit Ads API v3: campaigns, ad groups, ads, reports, plus working writes with safety tiers.
Reddit Ads API v3: campaigns, ad groups, ads, reports, plus working writes with safety tiers.
This is a well-structured MCP server for Reddit Ads with proper authentication, tiered write access controls, and clean code quality. The server uses OAuth2 with credential persistence to environment variables, implements sensible permission boundaries through write tiers, and has no evidence of malicious patterns or data exfiltration. Minor observations around error handling and logging do not materially affect security. Supply chain analysis found 3 known vulnerabilities in dependencies (0 critical, 3 high severity). Package verification found 1 issue.
6 files analyzed · 8 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: REDDIT_CLIENT_ID
Environment variable: REDDIT_CLIENT_SECRET
Environment variable: REDDIT_REFRESH_TOKEN
Environment variable: REDDIT_ADS_WRITE_TIER
Environment variable: REDDIT_ADS_ACCOUNT_ID
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-camlowe-mcp-server-reddit-ads": {
"env": {
"REDDIT_CLIENT_ID": "your-reddit-client-id-here",
"REDDIT_CLIENT_SECRET": "your-reddit-client-secret-here",
"REDDIT_REFRESH_TOKEN": "your-reddit-refresh-token-here",
"REDDIT_ADS_ACCOUNT_ID": "your-reddit-ads-account-id-here",
"REDDIT_ADS_WRITE_TIER": "your-reddit-ads-write-tier-here"
},
"args": [
"-y",
"mcp-server-reddit-ads"
],
"command": "npx"
}
}
}From the project's GitHub README.
A Reddit Ads API v3 MCP server with working write operations and tiered safety controls, built and dogfooded by an actual Reddit advertiser. It gives an MCP client read access to campaigns, ad groups, ads, and performance reports, plus gated write tools for pausing, creating, budget and bid changes, targeting edits, and copying ads between ad groups.
Pick the path that matches your setup: a paste-one-prompt route for Claude Code or Claude Desktop, or the manual steps for any other client. Every path installs read-only and cannot change anything in your account until you deliberately turn on writes (the last step).
If you use Claude Code, let it do the mechanical work. Copy this whole prompt and paste it into Claude Code:
Set up the mcp-server-reddit-ads MCP server for me so I can manage my Reddit Ads
account from here. Install it read-only for now - no write access. Please:
1. Read the setup instructions at https://github.com/camlowe/mcp-server-reddit-ads
2. Check I'm on Node.js 20 or newer.
3. Walk me through registering a Reddit app, since only I can do that part. Tell me
exactly where to click and which two values (client ID and client secret) to copy.
4. Run `npx mcp-server-reddit-ads auth` and guide me through the browser login.
5. Add the server to my .mcp.json using the credentials from the auth step, with the
write tier set to read-only.
6. Confirm the server loads and list my Reddit ad accounts to prove it works.
Do not enable any write access yet. I'll ask for that later when I'm ready.
Claude reads this README, tells you exactly what to do for the parts only you can do, runs npx mcp-server-reddit-ads auth, writes your .mcp.json, and confirms the server loads. Later, when you want to make changes, just ask it to raise the write tier.
Claude Desktop can't run terminal commands for you, so this prompt has it act as a patient guide while you run one command and edit one config file. Paste it into a new Claude Desktop chat:
I want to set up the mcp-server-reddit-ads MCP server so I can manage my Reddit Ads
account with you. I'm not a developer, so please guide me one step at a time with
simple, copy-pasteable instructions, and wait for me to confirm each step before
moving to the next.
Look up the setup details at https://github.com/camlowe/mcp-server-reddit-ads. The
main steps are: register a Reddit app to get a client ID and secret, run a one-time
`npx mcp-server-reddit-ads auth` command in my terminal to log in, and add the server
to my Claude Desktop config file. Set it up read-only so nothing in my account can
change until I decide to turn writes on.
Either way, you still register the Reddit app (step 1 below) and approve the browser login yourself - those cannot be automated.
The full process, for other MCP clients or if you prefer to do it by hand. It takes about five minutes.
http://localhost:8080, and choose a primary contact (a business admin). Save it.Reddit then shows the two values you need in step 2:
Ab3xK9zQ1rStUvWxYzAbCd) displayed directly under the app's name. Reddit often shows it without a "client ID" label, so it is easy to miss; it is the code beneath the app title, not the app name itself.Do not use reddit.com/prefs/apps: it silently rejects new apps under the Responsible Builder Policy, so the Ads developer portal is the only working path for advertisers.
Run the built-in setup helper:
npx mcp-server-reddit-ads auth
It asks for the client ID and secret from step 1 (or reads them from REDDIT_CLIENT_ID and REDDIT_CLIENT_SECRET if you have set them), opens the Reddit authorization page in your browser, and waits on http://localhost:8080 for you to approve.
Once you approve, it offers to save the configuration for you:
Where should I save this? (I'll patch the file, keeping anything already there.)
[1] Claude Code ./.mcp.json
[2] Claude Desktop <your platform's claude_desktop_config.json>
[3] Just print it (don't write any file)
Pick [1] or [2] and it writes the credentials straight to disk (backing up any existing file to <file>.bak and leaving other servers untouched), so nothing sensitive has to pass through your MCP client. If you prefer to place it yourself, pick [3] and it prints a ready-to-paste block instead. When it can't detect a TTY (for example, piped output), it skips the menu and prints the block.
If it fails, it tells you how to fix the two common causes: port 8080 already in use, and a redirect-URI mismatch (the app's redirect URI must be exactly http://localhost:8080).
If you picked [1] or [2] in step 2, this is already done - skip to step 4. Otherwise, paste the printed block into your client's config. It has this shape, with the three credential values already populated by the auth command:
{
"mcpServers": {
"reddit-ads": {
"command": "npx",
"args": ["-y", "mcp-server-reddit-ads"],
"env": {
"REDDIT_CLIENT_ID": "your-client-id",
"REDDIT_CLIENT_SECRET": "your-client-secret",
"REDDIT_REFRESH_TOKEN": "your-refresh-token",
"REDDIT_ADS_WRITE_TIER": "read"
}
}
}
}
Claude Code users can register it from the command line instead:
claude mcp add reddit-ads \
-e REDDIT_CLIENT_ID=your-client-id \
-e REDDIT_CLIENT_SECRET=your-client-secret \
-e REDDIT_REFRESH_TOKEN=your-refresh-token \
-e REDDIT_ADS_WRITE_TIER=read \
-- npx -y mcp-server-reddit-ads
Restart your client so it picks up the server (in Claude Code, approve the server when prompted, and confirm it loaded with /mcp). Then ask it to list your Reddit ad accounts. You should see your account id (a2_...). If you manage a single account, set REDDIT_ADS_ACCOUNT_ID to that id in the config and restart, so you never have to name the account in a request again.
You are connected and read-only. Good first questions:
Most people stay here day to day. When you want to make changes, turn on writes.
A fresh install cannot pause, create, or edit anything. To allow changes, raise REDDIT_ADS_WRITE_TIER in your config and restart. Start with safe (nothing at that level can start or grow spend) and move to spend only when you intend to resume delivery or change budgets, bids, or targeting. See Write tiers for exactly what each level unlocks.
Writes are off by default. REDDIT_ADS_WRITE_TIER opens them in two steps, so an accident at the read or safe tier cannot start spending money.
Tools above the configured tier are not just refused - they are hidden from the client's tool list entirely. A read-only session exposes 18 tools; the model cannot even attempt update_budget because it does not know the tool exists. If a hidden tool is somehow called anyway, the server refuses it with an error naming the tier that would unlock it.
| Tier | What it allows | Rule |
|---|---|---|
read (default) | No writes. | Reads only. |
safe | Pause, create (born paused), rename, copy ads. | Cannot start or expand delivery. |
spend | Everything in safe, plus enable, budget, bid, and targeting changes. | Can start, resume, or reshape delivery. |
| Variable | Meaning |
|---|---|
REDDIT_CLIENT_ID, REDDIT_CLIENT_SECRET, REDDIT_REFRESH_TOKEN | Required. Startup fails with a pointer to the auth command if any is missing. |
REDDIT_ADS_WRITE_TIER | read (default), safe, or spend. |
REDDIT_ADS_ACCOUNT_ID | Optional default account (a2_...) so single-account users never pass account_id. |
| Group | Tools | Tier |
|---|---|---|
| Diagnostics | get_server_status | read |
| Accounts | get_accounts, get_account_overview | read |
| Entities | get_campaigns, get_campaign, get_ad_groups, get_ad_group, get_ads, get_ad | read |
| Creative | get_ad_creative | read |
| Search | find_entity | read |
| Reporting | get_performance_report, get_daily_performance, compare_periods, compare_ads | read |
| Targeting data | search_subreddits, get_interest_categories, search_geo_targets | read |
| Create | create_campaign, create_ad_group, create_ad | safe |
| Pause / rename | pause_items, update_name | safe |
| Comments | update_ad_comments | safe |
| Workflows | copy_ads | safe |
| Resume | enable_items | spend |
| Money | update_budget, update_bid | spend |
| Delivery shape | update_targeting | spend |
| Ad URL | update_ad_url | spend |
Notes:
get_campaigns, get_ad_groups, and get_ads take an optional status filter (ACTIVE, PAUSED, or ARCHIVED), applied client-side on configured_status.get_performance_report takes friendly lowercase metric names (impressions, clicks, spend, cpc, conversion_page_visit_clicks, and so on) and validates them locally before the call, suggesting the closest match on a typo.create_ad_group requires a conversion_pixel_id, and create_campaign requires one when campaign budget optimization is on (a Reddit mandate since 2026-07-13). The pixel id is in the Reddit Ads dashboard under Events Manager; in observed data it equals the ad account id.copy_ads duplicates ads into another ad group (Reddit creates a duplicate promoted post per copy) with an option to rewrite utm_campaign and other click-URL query params.allow_comments. To change what an ad says, create a new ad with the new copy, enable it, and pause the old one.The client encodes behaviors verified against the live API. The ones that cause the most confusion:
PATCH, never PUT, and Reddit returns 404 (not 405) for the wrong verb. A verb bug looks exactly like a missing resource. This is the bug that breaks every write in the upstream package./ads/{id}); collections and creates use account-scoped paths (/ad_accounts/{id}/ads). Mixing them returns 404.CONVERSION_SIGN_UP_CLICKS vs CONVERSION_SIGNUP_TOTAL_VALUE). Use the friendly lowercase names; the server validates and maps them.configured_status, not effective_status. The configured value updates immediately; the effective value can lag by minutes.PATCH /posts/{id} permits exactly one field: allow_comments. Headline and body are rejected outright. Changing copy means shipping a new ad (create_ad, born paused) and pausing the old one - which also keeps performance history per message, so it is the right workflow anyway.npm install
npm test # unit and contract tests (no live API calls)
npm run typecheck
npm run lint
npm run build
npm run smoke # manual, hits the live API; needs real credentials in env
This software is provided "as is" and "as available", without warranty of any kind, as set out in the LICENSE. It may contain bugs or errors, and any safeguards or controls it provides may fail or behave unexpectedly. Use it at your own risk.
This tool can create, rename, pause, resume, and reconfigure live Reddit advertising entities, and can change budgets, bids, and targeting. These actions can start, increase, or otherwise affect real ad spend. You are solely responsible for:
The author accepts no liability for lost or unintended ad spend, misconfigured or paused campaigns, unintended changes, or any other damages arising from use of this software, including any failure of its safety controls to prevent an action.
This project is an independent, unofficial client. It is not affiliated with, endorsed by, or sponsored by Reddit, Inc.
MIT
Be the first to review this server!
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption