Skip to main content
Glama
mharnett

mcp-reddit-ads

by mharnett

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-ads

Or clone the repository:

git clone https://github.com/mharnett/mcp-reddit-ads.git
cd mcp-reddit-ads
npm install
npm run build

Configuration

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 read scopes

2. Environment Variables

Set credentials via environment variables:

Variable

Description

REDDIT_CLIENT_ID

OAuth app client ID

REDDIT_CLIENT_SECRET

OAuth app client secret

REDDIT_REFRESH_TOKEN

OAuth refresh token with ads scopes

REDDIT_ADS_MCP_WRITE

Set to true to enable mutating tools (create/update/pause/enable). Unset = read-only (default).

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

reddit_ads_get_client_context

Get account info and verify API connectivity

reddit_ads_get_accounts

List all ad accounts accessible to the authenticated user

Read

Tool

Description

reddit_ads_get_campaigns

List campaigns with optional status filter

reddit_ads_get_ad_groups

List ad groups for a campaign

reddit_ads_get_ads

List ads for an ad group

reddit_ads_get_performance_report

Aggregated performance metrics for campaigns/ad groups/ads

reddit_ads_get_daily_performance

Day-by-day performance breakdown

Write: Campaigns

Tool

Description

reddit_ads_create_campaign

Create a new campaign (PAUSED by default)

reddit_ads_update_campaign

Update campaign name, budget, objective, or status

Write: Ad Groups

Tool

Description

reddit_ads_create_ad_group

Create a new ad group with targeting (PAUSED by default)

reddit_ads_update_ad_group

Update ad group bid, targeting, or status

Write: Ads

Tool

Description

reddit_ads_create_ad

Create a new ad with headline, body, URL, and media (PAUSED by default)

reddit_ads_update_ad

Update ad creative or status

Bulk Operations

Tool

Description

reddit_ads_pause_items

Pause multiple campaigns, ad groups, or ads at once

reddit_ads_enable_items

Enable multiple campaigns, ad groups, or ads at once

Targeting

Tool

Description

reddit_ads_search_subreddits

Search for subreddits by keyword for targeting

reddit_ads_get_interest_categories

List available interest categories for targeting

reddit_ads_search_geo_targets

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 ACTIVE to go live.

  • Report metrics default to the set configured in config.json but 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 tools
reddit_ads_get_accountsA

List all Reddit ad accounts accessible to this user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idNoAd account ID. Uses default if not provided.
campaign_idNoOptional numeric string campaign ID - filter to a specific campaign.

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idNoAd account ID. Uses default if not provided.
ad_group_idNoOptional - filter to a specific ad group.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idNoAd account ID. Uses default if not provided.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idNoAd account ID. Uses default if not provided.

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days to look back. Defaults to 7.
account_idNoAd account ID. Uses default if not provided.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoMetric 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_dateNoEnd date YYYY-MM-DD. Defaults to today.
account_idNoAd account ID. Uses default if not provided.
breakdownsNoBreakdown dimensions: ad_id, campaign_id, ad_group_id, date, country, region, community, placement, device_os.
start_dateNoStart date YYYY-MM-DD. Defaults to 7 days ago.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSearch query (e.g. "United States", "California").

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (e.g. "ecommerce", "fulfillment", "shopify").

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 10 tool updatesv1.1.2
    • First observedreddit_ads_get_accounts
    • First observedreddit_ads_get_ad_groups
    • First observedreddit_ads_get_ads
    • First observedreddit_ads_get_campaigns
    • First observedreddit_ads_get_client_context
    • First observedreddit_ads_get_daily_performance
    • First observedreddit_ads_get_interest_categories
    • First observedreddit_ads_get_performance_report
    • First observedreddit_ads_search_geo_targets
    • First observedreddit_ads_search_subreddits

TDQS

A3.5/5.0

Scored across 10 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness2/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server to manage Meta Ads (Facebook/Instagram) campaigns, ad sets, insights, and audiences from Claude Code using natural language.
    9
    3 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for Google Ads campaign reporting and management via Claude, enabling GAQL queries, performance metrics, and campaign modifications.
    20 npm
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A 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.
    6
    MIT