mcp-reddit-ads
Provides tools for managing Reddit Ads campaigns, ad groups, ads, performance reporting, and audience targeting via the Reddit Ads API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-reddit-adsshow me my active campaigns"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-reddit-ads
MCP server for Reddit Ads API v3 -- campaign management, ad creation, performance reporting, and audience targeting via Claude.
Features
18 tools covering full CRUD for campaigns, ad groups, and ads
Performance reports with daily breakdowns
Subreddit, interest, and geographic targeting
Bulk pause/enable operations
Safe by default: all new entities created in PAUSED status
Budget inputs in dollars (auto-converts to Reddit's microcurrency format)
Related MCP server: meta-ads-mcp
Installation
npm install mcp-reddit-adsOr clone the repository:
git clone https://github.com/mharnett/mcp-reddit-ads.git
cd mcp-reddit-ads
npm install
npm run buildConfiguration
Security: Never share your .mcp.json file or commit it to git -- it may contain API credentials. Add .mcp.json to your .gitignore.
1. Reddit OAuth App
Create a Reddit OAuth app at reddit.com/prefs/apps:
Select "script" type
Note the client ID and client secret
Obtain a refresh token with
adsread adsedit readscopes
2. Environment Variables
Set credentials via environment variables:
Variable | Description |
| OAuth app client ID |
| OAuth app client secret |
| OAuth refresh token with ads scopes |
| Set to |
Read-only by default
As of v1.1.0 the MCP starts in read-only mode. The 10 read/report/targeting tools are always exposed, but the 8 mutating tools (create/update campaigns, ad groups, ads, and bulk pause/enable) are hidden from the tool list and refused at call time unless REDDIT_ADS_MCP_WRITE=true is set in the server's environment. This guards against a casual chat message accidentally mutating live ad spend. Enable writes deliberately, for the sessions where you actually intend to ship changes.
3. Config File
Copy config.example.json to config.json and fill in defaults:
{
"reddit_api": {
"base_url": "https://ads-api.reddit.com/api/v3",
"auth": {
"client_id": "",
"client_secret": "",
"refresh_token": "",
"user_agent": "reddit-ad-mcp/1.0"
}
},
"defaults": {
"account_id": "",
"business_id": "",
"report_metrics": ["impressions", "clicks", "spend", "ctr", "cpc", "ecpm"],
"date_range_days": 7
}
}Environment variables take precedence over config file values.
Usage
Claude Code (.mcp.json)
{
"mcpServers": {
"reddit-ads": {
"command": "node",
"args": ["/path/to/mcp-reddit-ads/dist/index.js"],
"env": {
"REDDIT_CLIENT_ID": "$(security find-generic-password -a reddit-ads-mcp -s REDDIT_CLIENT_ID -w)",
"REDDIT_CLIENT_SECRET": "$(security find-generic-password -a reddit-ads-mcp -s REDDIT_CLIENT_SECRET -w)",
"REDDIT_REFRESH_TOKEN": "$(security find-generic-password -a reddit-ads-mcp -s REDDIT_REFRESH_TOKEN -w)"
}
}
}
}Claude Desktop: Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows).
Tools
Context
Tool | Description |
| Get account info and verify API connectivity |
| List all ad accounts accessible to the authenticated user |
Read
Tool | Description |
| List campaigns with optional status filter |
| List ad groups for a campaign |
| List ads for an ad group |
| Aggregated performance metrics for campaigns/ad groups/ads |
| Day-by-day performance breakdown |
Write: Campaigns
Tool | Description |
| Create a new campaign (PAUSED by default) |
| Update campaign name, budget, objective, or status |
Write: Ad Groups
Tool | Description |
| Create a new ad group with targeting (PAUSED by default) |
| Update ad group bid, targeting, or status |
Write: Ads
Tool | Description |
| Create a new ad with headline, body, URL, and media (PAUSED by default) |
| Update ad creative or status |
Bulk Operations
Tool | Description |
| Pause multiple campaigns, ad groups, or ads at once |
| Enable multiple campaigns, ad groups, or ads at once |
Targeting
Tool | Description |
| Search for subreddits by keyword for targeting |
| List available interest categories for targeting |
| Search for geographic targeting options (countries, regions, metros) |
Key Conventions
Spend values are returned from the API in microcurrency (1 dollar = 1,000,000 microcurrency units). Divide by 1,000,000 to get dollar amounts. Budget inputs accept dollars and auto-convert.
Dates and times use ISO 8601 format (
YYYY-MM-DDTHH:MM:SSZ).New entities default to PAUSED status. Explicitly set status to
ACTIVEto go live.Report metrics default to the set configured in
config.jsonbut can be overridden per request.
Architecture
Resilience: Uses cockatiel for retry policies and circuit breaking on API calls
Logging: Structured logging via pino
Response truncation: Large API responses are truncated at 200KB to stay within MCP message limits
Auth: OAuth 2.0 refresh token flow with automatic access token renewal
License
MIT -- see LICENSE.
Author
Built by Mark Harnett / drak-marketing.
Available Tools
10 toolsreddit_ads_get_accountsA
List all Reddit ad accounts accessible to this user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description indicates a read operation (listing), which is accurate. However, it does not disclose any potential behavioral details like authentication requirements, rate limits, or what 'accessible' entails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words, achieving maximum conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema, the description adequately communicates the tool's purpose. It could mention the format or structure of the returned list, but the current statement is sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description adds no parameter info. According to the rubric, 0 parameters results in a baseline of 4, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('Reddit ad accounts'), clearly distinguishing it from sibling tools that list different entities like ad groups or campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only states what the tool does without providing explicit guidance on when to use it versus alternatives. Usage is implied via the resource name, but no when-not-to-use or comparison is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_ads_get_ad_groupsB
List ad groups for a Reddit ad account, optionally filtered by campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Ad account ID. Uses default if not provided. | |
| campaign_id | No | Optional numeric string campaign ID - filter to a specific campaign. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavioral traits. It only states 'list', indicating a read operation, but omits details like data freshness, error behavior, or any side effects. Minimal behavioral info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that is front-loaded and contains no fluff. Every word is necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero annotations and no output schema, the description is adequate for a simple listing tool but lacks details on return format, pagination, or error handling. Could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds 'optionally filtered by campaign', mirroring the schema. No additional meaning is provided beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists ad groups for a Reddit ad account, with optional campaign filtering. This distinguishes it from sibling tools like 'reddit_ads_get_ads' and 'reddit_ads_get_campaigns' by specifying the exact resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It mentions optional filtering but does not provide context such as prerequisites, limitations, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_ads_get_adsB
List ads for a Reddit ad account, optionally filtered by ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Ad account ID. Uses default if not provided. | |
| ad_group_id | No | Optional - filter to a specific ad group. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist; description only states basic behavior (list, optional filter) without disclosing mutability, side effects, or response details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is efficient and front-loaded with purpose; no wasted words but lacks structured detail for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations; description fails to explain return values, pagination, or other critical context for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds that account_id uses default if not provided, which adds minor context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes specific action (list) and resource (ads for a Reddit ad account), clearly distinguishing from sibling tools like reddit_ads_get_ad_groups which list ad groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool over alternatives, no preconditions or exclusion criteria provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_ads_get_campaignsB
List all campaigns for a Reddit ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Ad account ID. Uses default if not provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavioral traits, but it only states 'List' with no mention of pagination, rate limits, or whether results are filtered. The read-only nature is implied but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, clear sentence with no redundant information. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is too minimal. It does not explain return format, pagination, or filtering, leaving the agent underinformed for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the parameter 'account_id' is described as 'Ad account ID. Uses default if not provided.' The description adds no further meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all campaigns for a Reddit ad account' uses a specific verb ('List') and resource ('campaigns'), clearly distinguishing it from sibling tools like 'reddit_ads_get_ads' and 'reddit_ads_get_ad_groups'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor are there any prerequisites or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_ads_get_client_contextA
Get a quick overview and health status of the Reddit Ads account. Returns account info and active campaign count.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Ad account ID. Uses default if not provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It indicates read-like operation and return info, but does not mention auth requirements, rate limits, side effects, or whether it is costly. This leaves gaps for an AI agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the purpose and return value with no fluff. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple overview tool with one optional parameter and no output schema, the description covers the basics but leaves the definition of 'health status' unclear. It is adequate but could be more informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter (account_id) already has a schema description, but the tool description adds that it defaults to a default account if not provided, providing meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a quick overview and health status of the Reddit Ads account, specifying return of account info and active campaign count. This distinguishes it from sibling tools that focus on specific entities like ad groups or campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'quick overview' implies it is for high-level checks rather than detailed data, but no explicit guidance on when to use versus alternatives (e.g., reddit_ads_get_accounts for account list) or when not to use is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_ads_get_daily_performanceB
Get daily performance breakdown for the last N days. Convenience tool with date breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to look back. Defaults to 7. | |
| account_id | No | Ad account ID. Uses default if not provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It adds 'convenience tool with date breakdown' but fails to disclose behavior such as data freshness, limits, or what happens with out-of-range days. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, directly front-loaded with the main purpose. Every word earns its place; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 optional params, no output schema), the description is marginally adequate. It explains the temporal scope but omits what metrics are returned, date format, or pagination behavior, leaving agents needing to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds the context of 'last N days' and 'date breakdown', which aligns with the days parameter but adds little beyond the schema's description. No additional meaning for account_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets a daily performance breakdown for the last N days, specifying the verb and resource. However, it does not differentiate from the sibling tool 'reddit_ads_get_performance_report', leaving ambiguity about when to use this convenience version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_performance_report). The description only implies usage for daily breakdowns but lacks exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_ads_get_interest_categoriesB
Get available interest categories for ad group targeting.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, rate limits, authentication requirements, or the format of the return value. The minimal description leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately conveys the tool's purpose. It is front-loaded and contains no superfluous words, achieving maximum efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (no parameters, no output schema), the description still lacks context about the return value or expected behavior. It does not hint at what 'interest categories' look like or how they are structured, making it incomplete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is fully covered (100%). The baseline for zero parameters is 4, and the description does not need to add parameter information. It accurately implies no inputs are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the resource ('available interest categories') with a specific context ('for ad group targeting'). It distinctly differentiates from sibling tools, which focus on accounts, ad groups, ads, campaigns, and search features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any preconditions or contexts where this tool is preferred, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_ads_get_performance_reportA
Get a performance report for Reddit ads. Spend values are in microcurrency (divide by 1,000,000 for dollars).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Metric fields. Defaults to impressions, clicks, spend, ctr, cpc, ecpm. Available: impressions, reach, clicks, spend, ecpm, ctr, cpc, video_watched_25/50/75/100_percent, conversion_purchase_clicks, etc. | |
| end_date | No | End date YYYY-MM-DD. Defaults to today. | |
| account_id | No | Ad account ID. Uses default if not provided. | |
| breakdowns | No | Breakdown dimensions: ad_id, campaign_id, ad_group_id, date, country, region, community, placement, device_os. | |
| start_date | No | Start date YYYY-MM-DD. Defaults to 7 days ago. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries full burden. It adds value by noting microcurrency conversion required, but does not disclose other behaviors like read-only nature, idempotency, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no extraneous words. First sentence states purpose, second adds critical microcurrency detail. Well-front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and no output schema, the description is incomplete. It does not describe the return format (e.g., rows per account/date), behavior when parameters are empty, or how breakdowns interact with fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% parameter description coverage, so baseline is 3. The description adds no parameter-specific information beyond what schema provides, though it does clarify result format for spend values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a performance report for Reddit ads', which is specific verb+resource. It distinguishes from siblings like get_daily_performance by focusing on a broad report rather than daily breakdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as get_daily_performance. No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_ads_search_geo_targetsA
Search geographic targeting options (countries, regions).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search query (e.g. "United States", "California"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states 'Search geographic targeting options' without disclosing whether the operation is read-only, requires authentication, or has rate limits. While 'Search' implies non-destructive behavior, the description lacks explicit behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately conveys the tool's purpose. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description is largely complete. It specifies the domain (countries, regions) but does not describe the output format or possible return values, though the lack of an output schema reduces the need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes the 'query' parameter with examples. The description adds value by clarifying that the search is for countries and regions, which is not in the schema's parameter description. With 100% schema coverage, this extra context elevates the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches geographic targeting options, specifically countries and regions. It uses a specific verb 'Search' and resource 'geographic targeting options', and distinguishes itself from sibling tools like reddit_ads_search_subreddits which search subreddits instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to find geographic targets for Reddit ads, but does not provide explicit guidance on when to use it versus alternatives, nor does it mention when not to use it or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_ads_search_subredditsA
Search for subreddits to use as targeting in ad groups.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (e.g. "ecommerce", "fulfillment", "shopify"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It correctly describes a search operation but omits details like authentication needs, rate limits, pagination, or result handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that efficiently conveys the tool's purpose without extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (1 parameter, no output schema), the description is largely complete. It could mention the expected return type or format, but is adequate for a straightforward search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter already well-described ('Search query (e.g. "ecommerce", "fulfillment", "shopify")'). The description adds no additional meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Search for subreddits' and the purpose 'to use as targeting in ad groups'. It distinguishes from sibling search tools like search_geo_targets and search_interest_categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no context about limitations or best practices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v1.1.2- First observed
reddit_ads_get_accounts - First observed
reddit_ads_get_ad_groups - First observed
reddit_ads_get_ads - First observed
reddit_ads_get_campaigns - First observed
reddit_ads_get_client_context - First observed
reddit_ads_get_daily_performance - First observed
reddit_ads_get_interest_categories - First observed
reddit_ads_get_performance_report - First observed
reddit_ads_search_geo_targets - First observed
reddit_ads_search_subreddits
TDQS
Scored across 10 tools
Each tool targets a distinct resource or action, such as accounts, ad groups, ads, campaigns, performance, and targeting options. There is no overlap in functionality, and descriptions clearly differentiate them.
All tools share the 'reddit_ads_' prefix, and most use 'get_' followed by the resource name. Two tools use 'search_' instead, and there is a slight inconsistency between 'get_daily_performance' and 'get_performance_report', but the overall pattern is clear and predictable.
With 10 tools, the server covers the main areas of Reddit Ads: account info, campaign/ad group/ad listing, performance reports, and targeting options. The number feels appropriate for the scope without being overwhelming or too sparse.
The tool set is entirely read-only, offering only retrieval operations. Missing capabilities for creating, updating, or deleting campaigns, ad groups, or ads, which are essential for full ads management. This is a significant gap for a tool advertised as a Reddit Ads server.
Maintenance
Related MCP Connectors
Google Ads MCP server — manage campaigns, keywords, and metrics.
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
Hosted MCP server for Google Ads and LinkedIn Ads analysis.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that connects Claude to the LinkedIn Ads API for natural-language control over campaign management, audience targeting, creative uploads, analytics, and account auditing.377 npmMIT
- AlicenseAqualityDmaintenanceMCP server to manage Meta Ads (Facebook/Instagram) campaigns, ad sets, insights, and audiences from Claude Code using natural language.93 npmMIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Google Ads campaign reporting and management via Claude, enabling GAQL queries, performance metrics, and campaign modifications.20 npmMIT
- AlicenseBqualityDmaintenanceA self-hosted MCP server for the Reddit Ads API v3, enabling reading ad accounts, campaigns, ad groups, ads, and performance reports, with optional write support for pausing/activating, budgeting, patching, and creating entities.6MIT