Skip to main content
Glama
iammalego

mlg-meta-mcp

by iammalego

mlg-meta-mcp

CI License: MIT TypeScript MCP

Open-source MCP server for Meta Ads — 30 tools covering account discovery, campaign/ad set/ad management, targeting research, creative inspection, insights, and LLM-friendly workflows.

mlg-meta-mcp is designed for developers and operators who want more than a thin proxy over the Meta Marketing API. It adds account discovery, business-oriented outputs, productivity tools, comparison flows, and targeting/creative tooling that are easier for LLMs and agents to use in real workflows.

Why this project exists

Many Meta Ads MCP servers stop at exposing raw API calls. That is useful, but not always enough for real agent workflows.

This project aims to be more practical in day-to-day usage:

  • Automatic account discovery instead of hard-wiring a single account

  • Business-oriented insights instead of raw metric dumps

  • Safer productivity operations like clone and bulk status changes

  • LLM-friendly responses that summarize what happened and why it matters

  • Structured comparison logic for period-over-period analysis

Related MCP server: AdWeave Meta Ads

Contract design principle

Core MCP tools should return maximal useful signal for the broadest set of consumers.

  • consumers (LLMs, apps, prompts, UI layers) own filtering and interpretation

  • formatting and ergonomic summaries are good

  • destructive filtering of useful signal in the base tool contract is not

  • project-specific business rules should live in higher-level workflows, not in neutral core tool outputs

What it includes today

Account discovery

  • Discover all ad accounts accessible by the configured System User token

  • Resolve accounts by ID or by account name

  • Get full account info (name, currency, timezone, business, status)

Campaign operations

  • Get campaigns

  • Get full campaign details (bid strategy, buying type, special ad categories, issues)

  • Create campaigns

  • Update campaigns

  • Pause campaigns

  • Activate campaigns

Ad set operations

  • Get ad sets from an account or campaign

  • Get full ad set details (targeting, optimization goal, bid amount, effective status)

  • Create ad sets

  • Update ad sets

  • Pause ad sets

  • Activate ad sets

Ad operations

  • Get ads

  • Get full ad details (effective status, creative ID, issues)

  • Update ads (status and bid amount)

Creative inspection

  • Get creatives attached to an ad (object_story_spec, image hash, call to action)

Targeting research

  • Search interests by keyword

  • Get interest suggestions from a seed list

  • Validate interests by name or Meta ID

  • Browse behaviors

  • Browse demographic categories

  • Search geo locations by keyword

Budget scheduling

  • Create time-bounded budget increases or multipliers for a campaign

Insights and analysis

  • Get insights for account, campaign, ad set, or ad

  • Compare two explicit periods with business-aware fallback logic

Productivity tools

  • Clone campaigns (with ad sets)

  • Clone ad sets

  • Bulk pause campaigns

  • Bulk activate campaigns

  • Check alerts with configurable thresholds

Highlighted workflows

This MCP is especially useful for these workflows:

  1. Discover accessible ad accounts automatically

  2. Inspect campaign, ad set, ad, or account performance

  3. Compare campaign performance across two periods

  4. Duplicate winning structures quickly

  5. Pause or activate many campaigns in one action

  6. Generate alert-oriented summaries from Meta Ads data

  7. Research and validate targeting audiences

  8. Diagnose delivery issues via effective status and issues_info

How compareTwoPeriods works

compareTwoPeriods compares performance between two explicit periods for one of four levels:

  • account

  • campaign

  • adset

  • ad

Each side now accepts either:

  • datePreset (today, yesterday, last_7d, last_30d, this_month, last_month)

  • timeRange with { since, until } in YYYY-MM-DD format

The tool also supports explicit result selection:

  • primary_from_insights (default) — resolve one action type from the insights and apply it to both periods

  • specific_action — compare one explicit Meta action_type like lead or purchase

  • all_actions — sum all action types

It also supports optional metric selection:

  • spend

  • results

  • cpr

  • impressions

  • clicks

  • ctr

If metrics is omitted, the tool keeps the backward-compatible default set: spend, results, and cpr.

The response now makes the resolved result definition explicit so consumers can see what results means.

For account, adset, and ad

The comparison is direct:

  • current period for the same object

  • previous period for the same object

For campaign

Campaign comparisons use a smarter fallback chain:

  1. Same campaign in the previous period

  2. Most similar campaign in the same account

  3. Account campaign average for the previous period

  4. No reference available

The tool response explicitly tells the user which reference was used.

Similar campaign logic

The similar-campaign fallback is not based only on naming.

It requires:

  • same campaign objective

  • same dominant ad set optimizationGoal

Then it ranks valid candidates using:

  • budget similarity

  • bid strategy match

  • billing event match

  • name similarity as a tie-breaker

Installation

git clone https://github.com/iammalego/mlg-meta-mcp.git
cd mlg-meta-mcp
npm install
cp .env.example .env

Then edit .env with your Meta credentials.

Configuration

Required environment variables

META_SYSTEM_USER_TOKEN=your_system_user_token_here
META_API_VERSION=v22.0
LOG_LEVEL=info

Required Meta permissions

Your token should have permissions appropriate for the operations you want to run. In most setups, that includes:

  • ads_management

  • ads_read

  • business_management

Local development

npm run dev

Production build

npm run build
npm start

MCP client setup

Claude Desktop

Add this to claude_desktop_config.json:

{
  "mcpServers": {
    "mlg-meta-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/mlg-meta-mcp/dist/index.js"],
      "env": {
        "META_SYSTEM_USER_TOKEN": "your_token_here",
        "META_API_VERSION": "v22.0",
        "LOG_LEVEL": "info"
      }
    }
  }
}

Generic stdio usage

Any MCP client that supports stdio transport can run this server by starting the compiled dist/index.js entrypoint.

Available tools

30 tools total.

Account tools

  • discoverAdAccounts

  • getAccountInfo

Campaign tools

  • getCampaigns

  • getCampaignDetails

  • updateCampaign

  • pauseCampaign

  • activateCampaign

  • cloneCampaign

  • bulkPauseCampaigns

  • bulkActivateCampaigns

Ad set tools

  • getAdSets

  • getAdSetDetails

  • updateAdSet

  • pauseAdSet

  • activateAdSet

  • cloneAdSet

Ad tools

  • getAds

  • getAdDetails

  • updateAd

Creative tools

  • getAdCreatives

Targeting tools

  • searchInterests

  • getInterestSuggestions

  • validateInterests

  • searchBehaviors

  • searchDemographics

  • searchGeoLocations

Budget tools

  • createBudgetSchedule

Insights tools

  • getInsights

  • compareTwoPeriods

  • checkAlerts

Example prompts

These are the kinds of prompts this MCP is designed to support well:

  • "List all ad accounts accessible with this token."

  • "Show active campaigns for the account named Plannit."

  • "Get full details for campaign 123 including issues and delivery status."

  • "Compare this campaign between last_7d and last_30d."

  • "If the campaign did not exist in the previous period, explain which fallback reference was used."

  • "Clone this campaign and reduce its budget by 20%."

  • "Pause these campaigns as a dry run first."

  • "Check alerts for yesterday using a CPR threshold of 5000."

  • "Search interests related to 'sustainable fashion' and suggest related ones."

  • "Validate these interest IDs before using them in a new ad set."

  • "Schedule a budget increase of 20% for campaign 123 this weekend."

Architecture

The codebase is intentionally split into layers:

  • src/tools/index.ts → MCP tool definitions and Zod-first schemas

  • src/tools/handlers.ts → MCP-facing handlers and MCP response envelopes (text summaries plus structured content when useful)

  • src/services/* → business logic

  • src/api/* → Meta API clients (GraphClient, InsightsClient, BusinessClient, TargetingClient, CreativeClient)

  • src/types/* → shared types

This separation helps keep the MCP surface, business logic, and Meta API integration independent.

For example, getInsights keeps a readable text summary, but non-account levels also preserve itemized structured metrics so clients can do their own ranking, filtering, and interpretation.

compareTwoPeriods follows the same idea: text output only includes the requested (or defaulted) metrics, while structuredContent.metrics exposes both the requested metric list and the returned per-metric values/change objects.

Quality and project status

Current technical foundations:

  • TypeScript strict mode

  • Zod-first tool schemas

  • Structured logging with Pino

  • Categorized error handling

  • Vitest test setup

  • MCP SDK integration over stdio

Project status:

  • actively evolving

  • suitable for local/self-hosted usage

  • focused on practical Meta Ads workflows for MCP clients and agents

Roadmap

Planned features:

  • Delivery diagnosis — explain why a campaign, ad set, or ad is not delivering (billing issues, policy violations, parent paused, bid too low, etc.) using issues_info and effective_status

  • Learning phase status — expose whether an ad set is in learning, how many conversions remain to exit, and whether it is LEARNING_LIMITED and why

  • Ad fatigue detection — detect when an ad needs creative rotation by combining frequency trends with CTR decay

  • Attribution comparison — side-by-side view of 1d/7d click and view attribution windows for the same object

  • Placement breakdown — performance by placement (Feed, Stories, Reels, Audience Network, Messenger)

Possible future directions:

  • remote MCP support

  • broader automation and monitoring flows

Testing

npm test
npm run test:coverage
npm run type-check
npm run lint

Documentation

Contributing

Contributions, issues, and feedback are welcome.

If you want to contribute, start with:

  1. reading the architecture docs

  2. checking existing issues

  3. opening a focused PR or improvement proposal

License

MIT © iammalego

Acknowledgments

Available Tools

31 tools
activateAdSetB

Activate a paused ad set

ParametersJSON Schema
NameRequiredDescriptionDefault
adSetIdYesAd set ID to activate

TDQS

B3.4/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 of behavioral disclosure. It only states the action without detailing side effects, required permissions, reversibility, or what happens if the ad set is not paused. This is a significant gap for a mutation tool.

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, front-loaded sentence with no filler. For a tool with one parameter and no output schema, this is appropriately concise.

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?

The description is minimal and lacks behavioral context (no permissions, side effects, or error scenarios). Given no annotations, it is incomplete for an agent to fully understand the operation's implications.

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% (adSetId is described in the schema). The description adds no extra meaning to the parameter, so the baseline of 3 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 'Activate a paused ad set' uses a specific verb and resource, clearly distinguishing it from sibling tools like pauseAdSet. It directly states what the tool does.

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 usage is implied by the action—activate a paused ad set—but there is no explicit guidance on when to use it vs. alternatives or any prerequisites. No exclusions or alternative routing is mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

activateCampaignC

Activate a paused campaign

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesCampaign ID to activate

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It states the action but does not describe preconditions (e.g., whether the campaign must be paused), side effects, permission requirements, or what happens if the campaign is already active. The 'paused' qualifier implies a precondition but does not elaborate on failure behavior. This is insufficient for a mutation tool.

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?

The description is a single concise sentence with no fluff, making it easy to parse and front-loaded with the action. However, it is so minimal that it omits critical usage and behavioral details, which slightly reduces the score. It earns its place but could be more informative without becoming verbose.

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 tool with one parameter, no output schema, and no annotations, the description is minimally adequate. It does state the intended target ('paused campaign'), which hints at a precondition. However, it fails to mention what happens when the campaign is not paused, any side effects, or how it differs from bulk activation. Given the simplicity, this is a moderate gap rather than a severe one.

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?

The schema covers the single parameter with a description 'Campaign ID to activate' at 100% coverage. The tool description adds no additional meaning beyond what the schema already provides. Since schema coverage is high, the baseline is 3, and the description neither improves nor detracts from parameter understanding.

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 the action ('Activate') and the resource ('a paused campaign'), which is specific and not a tautology. It distinguishes from bulk operations by using the singular 'a', though it does not explicitly name alternatives like bulkActivateCampaigns. The purpose is clear and unambiguous.

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 its siblings. It does not mention that this is for a single campaign as opposed to bulkActivateCampaigns, nor does it explain the difference from pauseCampaign. There are no explicit when-to-use or when-not-to-use instructions, leaving the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulkActivateCampaignsA

Activate multiple campaigns in a single operation. Supports dry-run mode to preview changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoPreview changes without executing. Default: false
campaignIdsYesArray of campaign IDs to activate

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden. It transparently states that activating is the action and that dry-run previews changes, which is useful. It does not cover failure behavior, partial success, or reversibility, so it is only partially transparent.

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 short sentences with no wasted words; the core purpose is front-loaded and the dry-run capability is added as a useful second sentence.

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 two-parameter bulk mutation with no annotations or output schema, the description gives the essential what and the dry-run mode, but omits return shape, partial-failure semantics, and any side effects beyond activation. This is adequate but not 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 description coverage is 100%, so the input schema already documents campaignIds and dryRun fully. The description only restates the dry-run concept without adding format or edge-case meaning, meeting the baseline but not exceeding it.

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 ('Activate') with a plural resource ('multiple campaigns') and states the batch nature, clearly distinguishing it from the singular sibling activateCampaign. This is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'in a single operation' implies this tool is for bulk activation rather than the singular activateCampaign, and the dry-run mention gives a concrete use case. However, it does not explicitly state when to prefer alternatives 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.

bulkPauseCampaignsB

Pause multiple campaigns in a single operation. Supports dry-run mode to preview changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoPreview changes without executing. Default: false
campaignIdsYesArray of campaign IDs to pause

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It confirms the pause action and mentions dry-run preview, but it does not state whether the operation is reversible, what happens on partial failure, or what the response contains. For a mutation tool, this is a significant gap.

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 front-loads the action and resource ('Pause multiple campaigns') and then notes the dry-run capability. Every phrase earns its place without wasted words.

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?

This is a bulk mutation tool with no annotations and no output schema, so the description should explain operational context such as return behavior, error handling, or reversibility. The current description covers the basic action and dry-run, but leaves an agent uncertain about the outcome of executing the pause.

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?

The input schema already documents both parameters: campaignIds as an array of campaign IDs and dryRun as a boolean with default false. The description adds only the idea of 'dry-run mode to preview changes,' which overlaps with the schema's dryRun property without adding new meaning.

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 states a specific verb and resource: 'Pause multiple campaigns in a single operation.' It clearly differentiates from the sibling pauseCampaign by emphasizing batch behavior, so an agent can distinguish it without inspecting the schema.

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 'multiple campaigns' implies the batch use case, and the sibling list includes pauseCampaign as a likely single-campaign alternative. However, the description does not explicitly say when to prefer this tool over pauseCampaign or mention bulkActivateCampaigns as the inverse operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

checkAlertsB

Check campaigns for performance alerts based on configurable thresholds. Identifies high CPR, low CTR, and other performance issues.

ParametersJSON Schema
NameRequiredDescriptionDefault
minCtrNoAlert if CTR is below this percentage. Default: 1.0
accountIdYesAd account ID or name to check
datePresetNoTime period to analyze. Default: yesterdayyesterday
cprThresholdNoAlert if CPR (cost per result) exceeds this value in dollars. Default: 50 ($50.00)
minDailySpendNoAlert if daily spend is below this value in dollars. Default: 10 ($10.00)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of conveying safety and behavior. 'Check' and 'Identifies' imply a read-only diagnostic operation, and 'configurable thresholds' adds useful behavioral context. However, it does not explicitly state that no changes are made, what the response contains, or how alerts are presented.

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 focused sentences with no filler. The first sentence states the main action, and the second provides concrete alert examples, so each sentence earns its place.

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 five-parameter tool with no annotations and no output schema, the description is adequate but not fully complete. It does not mention the return shape, empty-alert behavior, or when to prefer this over sibling insight tools, though the schema fully documents parameters and defaults.

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%, and each parameter already has clear descriptions with defaults and units. The description adds only the conceptual notion of configurable thresholds and alert categories, not additional semantic detail beyond the schema, so the baseline of 3 applies.

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 a specific verb and resource: 'Check campaigns for performance alerts' and names concrete alert categories like high CPR and low CTR. It is unambiguous about what the tool does, though it does not explicitly distinguish itself from sibling analytics tools such as getInsights.

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?

There is no guidance on when to use this tool versus alternatives like getInsights or compareTwoPeriods. The description implies a threshold-based alert use case but provides no exclusions, prerequisites, or selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cloneAdSetA

Clone an existing ad set to the same or different campaign. Copies targeting, budget, and all configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
newNameNoName for the new ad set. Default: "{original_name} (Copy)"
sourceAdSetIdYesAd set ID to clone
targetCampaignIdYesCampaign ID to create the clone in (can be same as source)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral disclosure. It does state the core effect: copying targeting, budget, and configuration. But it does not disclose whether the source remains unchanged, whether the new ad set is active or paused, or what response/errors to expect.

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, front-loaded with the action and object, and includes the most relevant qualifier about target campaigns without repeating schema details.

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 low-complexity three-parameter tool with full schema coverage, the description provides sufficient context to choose and invoke it correctly. The main gap is the absence of return-value or side-effect details, but this is minor given the simplicity of the 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%, so the schema already documents all parameter semantics. The description adds general context about what is copied but no parameter-specific details 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 states a specific action ('Clone') and resource ('an existing ad set'), and clarifies target scope ('same or different campaign'). This clearly distinguishes it from sibling cloneCampaign and other ad-set tools.

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 when to use the tool—whenever an ad set needs to be duplicated—and adds useful context about the target campaign. However, it does not explicitly name alternatives such as cloneCampaign or updateAdSet, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cloneCampaignB

Clone an existing campaign with a new name. Optionally clone all ad sets within the campaign. Useful for duplicating successful campaign structures.

ParametersJSON Schema
NameRequiredDescriptionDefault
newNameYesName for the new campaign
copyAdSetsNoClone all ad sets from the source campaign. Default: true
budgetAdjustmentNoPercentage to adjust budget (e.g., 10 = increase 10%, -10 = decrease 10%). Default: 0
sourceCampaignIdYesCampaign ID to clone

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the burden. It indicates cloning creates new entities but does not disclose potential side effects, such as whether it duplicates budgets or requires specific permissions. It does not mention reversibility or errors that might occur.

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?

The description is concise, with only two sentences, and front-loads the primary purpose. It is efficient and free of fluff, though it could be slightly more detailed without becoming verbose.

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 tool's moderate complexity (4 parameters) and lack of annotations or output schema, the description is incomplete. It does not explain what happens to the budget adjustment (e.g., is it applied to the new campaign?), nor does it clarify the behavior of copyAdSets when set to false. Missing details about the expected outcome (e.g., response format, new campaign ID) would leave an agent uncertain.

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% for all 4 parameters, so the baseline is 3. The description adds context for the overall purpose but does not elaborate on parameters beyond what's in the schema. It adds minimal extra value for parameter semantics.

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 (clone), the resource (campaign), and the scope (optionally clone ad sets). It distinguishes itself from siblings like cloneAdSet by focusing on campaigns. It is specific and unambiguous.

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?

It mentions it is useful for duplicating successful campaign structures, which implies a common use case. However, it does not explicitly say when NOT to use it or contrast with cloneAdSet, which is a close sibling. There is no mention of prerequisites like permissions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compareTwoPeriodsA

Compare performance metrics between two explicit periods for an account, campaign, adset, or ad. Each side accepts either a preset or a custom timeRange. Result selection can follow the primary action inferred from insights, a specific Meta action_type, or all actions. Optional metrics let callers compare spend, results, cpr, impressions, clicks, and/or ctr; omitting metrics keeps the backward-compatible spend/results/cpr default. For campaigns, the response also explains whether the baseline came from the same campaign, a similar campaign, or the account campaign average.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelYesAggregation level for the comparison
metricsNo
objectIdYesID of account (act_XXX), campaign, adset, or ad. Account name is also supported.
resultModeNoHow to define results for the comparison. Default: primary_from_insights.primary_from_insights
currentPeriodYesCurrent period selector. Pass either { datePreset } or { timeRange: { since, until } }. Legacy preset strings are still accepted and normalized.
previousPeriodYesPrevious period selector. Pass either { datePreset } or { timeRange: { since, until } }. Legacy preset strings are still accepted and normalized.
resultActionTypeNoSpecific Meta action_type to compare (for example: lead or purchase). If provided without resultMode, specific_action is inferred.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful details: the backward-compatible default metrics, result mode options, legacy preset string normalization, and the campaign-specific baseline explanation. However, it does not state whether the operation is read-only, how errors are handled, or what the general response structure looks like for non-campaign levels. Some transparency is present but not comprehensive.

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?

The description is a single, well-organized paragraph that front-loads the core purpose. It progressively covers periods, result selection, metrics, and campaign-specific output. Every sentence contributes new information; there is no filler. It could be broken into bullets, but the flow is logical and efficient.

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?

This is a complex tool with nested period objects, multiple modes, and a specific campaign baseline feature. The description thoroughly covers input selection and the campaign output nuance, but it does not describe the general response format (e.g., metric comparisons, percentage changes) for account, adset, or ad levels. With no output schema, this gap could leave an agent uncertain about the return structure. Adequate but not fully 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 86%, which is high, so the baseline is 3. The description reiterates most parameter information already present in the schema (e.g., preset vs. timeRange, metrics options, resultMode). It adds minor clarifications like 'legacy preset strings are still accepted and normalized' and the backward-compatible default, but these are also implied in the schema defaults. The description adds little 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 uses a specific verb ('Compare'), names the resource ('performance metrics'), and defines scope ('between two explicit periods for an account, campaign, adset, or ad'). This clearly distinguishes it from siblings like getInsights (single-period) and other ad management tools. The tool's unique purpose is unambiguous.

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 clearly states the tool is for comparing two periods, which implies its use case. However, it does not explicitly mention alternatives or when not to use it (e.g., 'use getInsights for single-period analysis'). No exclusions are given, but the context is clear enough for an agent to infer when it applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createBudgetScheduleC

Create a budget schedule for a campaign with a specific time window.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeEndYesSchedule end time as a unix timestamp
timeStartYesSchedule start time as a unix timestamp
campaignIdYesCampaign ID to create the budget schedule for
budgetValueYesBudget value (absolute amount or multiplier)
budgetValueTypeYesWhether the budget value is an absolute amount or a multiplier

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, but it only restates that the tool 'creates' a schedule. It does not mention side effects, whether the schedule replaces an existing one, idempotency, validation constraints, or what happens on conflict.

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?

The description is a single clear sentence with no redundant flufftons. It is front-loaded with the core action and resource, but 'specific time window' is somewhat vague and could be more precise without adding length.

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?

For a mutation tool with five required parameters, no annotations, and no output schema, the description is too sparse. It omits behavioral context, return value expectations, and parameter constraints such as timeStart needing to precede timeEnd, making it insufficient for confident invocation.

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%, so all five parameters already have semantic descriptions in the schema. The tool description only adds the vague phrase 'specific time window', which loosely maps to timeStart/timeEnd but provides no additional meaning beyond what the schema already states.

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 states the action 'Create' and the resource 'budget schedule for a campaign', which is distinct from the sibling tools like updateCampaign or pauseCampaign. It adds 'with a specific time window', giving some scope. However, it does not explicitly differentiate from closely related budget operations or explain what a budget schedule entails.

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?

There is no guidance on when to use this tool versus alternatives such as updateCampaign or cloneCampaign. No prerequisites, conditions, or exclusions are mentioned, leaving the agent to infer appropriate usage solely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discoverAdAccountsA

Discover all ad accounts accessible via the System User Token. Returns account IDs, names, and business information. Results are cached for 5 minutes to improve performance.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It explicitly mentions that results are cached for 5 minutes, which is valuable operational context, and the 'Discover'/'Returns' language implies a non-destructive read operation. It does not discuss errors or rate limits, but for a zero-parameter read tool the disclosure is reasonably complete.

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 with no wasted words. The purpose is front-loaded, the return contents are summarized, and the caching behavior is a single relevant note. Every sentence contributes useful 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?

For a parameterless discovery tool with no output schema, the description adequately covers what the agent needs to know: what to call it for, what it returns, and the caching caveat. It does not describe the response structure or pagination, but that is a minor gap given the tool's simplicity.

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 trivially complete with 100% coverage. The description still adds useful context by identifying the System User Token as the implicit authorization scope, which is appropriate at the baseline level for parameterless tools.

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 states a specific verb ('Discover') and resource ('all ad accounts accessible via the System User Token'), and lists the returned data (IDs, names, business information). It is clear and easily distinguishable from siblings like getAccountInfo, though it does not explicitly name any alternative.

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 should be used when an agent needs to enumerate all ad accounts available to the System User Token, but it does not explicitly state when to use it over alternatives or when not to use it. Usage context is present through the word 'Discover' and the scope phrasing, but no exclusions or sibling comparisons are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAccountInfoB

Get detailed information about an ad account including currency, timezone, status, and linked business.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesAd account ID (act_XXX)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavior disclosure burden. 'Get' clearly signals a read-only operation and the listed fields imply the response content, but no details are given about permissions, error conditions, data freshness, or any side effects. This is adequate for a simple getter but not rich.

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, front-loaded sentence with no wasted words. It begins with the action and resource, then lists the useful detail categories, making it immediately scannable for an agent.

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?

This is a low-complexity, single-parameter read tool with no output schema. The description names the main output areas—currency, timezone, status, and linked business—which is enough for an agent to anticipate the return value. It lacks usage-alternative context, but that is partially addressed elsewhere in this evaluation.

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?

The input schema has 100% coverage, documenting accountId as an ad account ID in act_XXX format. The description adds no additional parameter semantics, but the schema already fully explains the required input, so the baseline of 3 is appropriate.

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 states a specific verb and resource: 'Get detailed information about an ad account' and names concrete data categories: currency, timezone, status, and linked business. It is clear, though it does not explicitly distinguish itself from siblings like getBillingInfo or discoverAdAccounts.

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?

There is no guidance about when to use this tool versus alternatives. No mention of when to prefer getAccountInfo over getBillingInfo or discoverAdAccounts, and no exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAdCreativesA

Get all creatives associated with an ad.

ParametersJSON Schema
NameRequiredDescriptionDefault
adIdYesAd ID to fetch creatives for

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic operation without revealing whether it is read-only, whether pagination exists, or what the response format looks like. This is a significant gap for an unannotated tool.

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 with no wasted words. The core action is front-loaded, making it efficient and easy to parse.

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 parameter, no output schema), the description adequately conveys its purpose. However, it lacks any detail on the return structure or potential edge cases (e.g., empty results), which is a minor gap for an unannotated tool. Overall, it is reasonably complete for the intended use.

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?

The schema already provides a full description for the single parameter adId (100% schema coverage). The tool description adds no extra semantic detail beyond what the schema states, so it meets the baseline but provides no additional value.

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 a specific verb ('Get') and resource ('creatives') tied to an ad, which distinguishes it from sibling tools like getAds or getCampaigns. It leaves no ambiguity about what the tool retrieves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for fetching creatives for a specific ad, which is evident from both the name and content. However, it does not explicitly mention when to avoid using it or name alternatives, though the sibling list makes the context clear. No exclusions are provided, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAdDetailsA

Get full ad details including effective status, creative ID, and issues.

ParametersJSON Schema
NameRequiredDescriptionDefault
adIdYesAd ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the burden of behavioral context. 'Get' strongly implies a read-only operation and the listed fields signal the returned data, but the description does not explicitly state that the tool makes no changes or explain how 'issues' are represented.

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, front-loaded sentence with no filler: the verb, resource, and key output fields are all present. Every word contributes.

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 one required parameter and no output schema, the description is mostly sufficient for invoking the tool, and it names three key return components. However, 'full ad details' and 'issues' remain vague, and the lack of any output schema or behavioral notes leaves some ambiguity about the exact response shape.

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?

The schema already covers the only parameter (adId with 'Ad ID'), so the baseline is 3. The description does not add format details, examples, or constraints for adId, but it does connect the parameter to the detailed results returned.

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 the operation ('Get') and resource ('full ad details') and names specific returned fields (effective status, creative ID, issues). It does not explicitly differentiate from siblings like getAds or getAdCreatives, but the singular adId and 'full details' wording make the intended use reasonably clear.

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?

Usage is implied: call this when you have an adId and need detailed information about a specific ad. However, it does not state when not to use it or mention alternatives such as getAds for listing ads or getAdCreatives for creative content.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAdsB

Get ads from an ad set or campaign. Supports filtering by status.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status. Default: ALLALL
adSetIdNoAd set ID to get ads from (optional if campaignId provided)
campaignIdNoCampaign ID (optional if adSetId provided)

TDQS

B3.4/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 of behavioral disclosure. It discloses the status filtering behavior but does not state that the operation is read-only, whether pagination or limits apply, or what happens if neither adSetId nor campaignId is provided. These gaps are significant for a tool with no annotation safety net.

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 short sentences with no filler. The core action and the optional filter are both presented up front, and every word earns its place.

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 list-type tool with fully documented parameters, the description is largely sufficient: it names the resource, the two scopes, and the filter. The absence of an output schema or mention of return shape is a minor gap, but the tool's behavior is straightforward enough that an agent can call it correctly with the provided context.

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%, so the schema fully documents all three parameters. The description adds minimal meaning beyond the schema: it reinforces that ads can be fetched 'from an ad set or campaign' and that status filtering is supported. This matches the baseline of 3 because the schema is doing the heavy lifting.

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 states a specific verb and resource: 'Get ads from an ad set or campaign.' It clearly indicates the tool's function and the two valid scopes. It does not explicitly differentiate itself from siblings like getAdDetails or getAdSets, so it stops short of a 5.

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 when to use the tool: when you need ads from an ad set or campaign, optionally filtered by status. It offers no explicit guidance on when to prefer getAds over getAdDetails or getAdSets, and no exclusions or alternatives are named. This is adequate but relies on inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAdSetDetailsA

Get extended ad set details including bid amount, effective status, and issues.

ParametersJSON Schema
NameRequiredDescriptionDefault
adSetIdYesAd set ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. 'Get' indicates a read-only operation, and the named fields suggest return content, but the description does not disclose response shape, error behavior, or access requirements.

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 front-loaded sentence: verb, resource, and example fields. There is no unnecessary wording or filler, making it easy to parse quickly.

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 one-parameter read tool, the core invocation is clear. However, with no output schema and no mention of alternatives, the response structure remains ambiguous and the tool is not explicitly positioned relative to siblings like getAdSets.

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?

The single parameter adSetId is already fully described in the input schema, so the description adds no new parameter-level detail. It does provide mild context that the ID is for fetching extended ad set details, but no format or source semantics.

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 the verb ('get'), resource ('ad set details'), and the word 'extended' with example fields. This distinguishes it from list-oriented siblings like getAdSets, though it does not explicitly name that sibling.

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 'extended ad set details' implies this is for deeper inspection of a single ad set, but the description does not explicitly state when to choose this tool over getAdSets or other detail tools. Usage context is inferred rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAdSetsB

Get ad sets from a campaign or account. Supports filtering by status.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status. Default: ALLALL
accountIdNoAd account ID (optional if campaignId provided)
campaignIdNoCampaign ID to get ad sets from (optional if accountId provided)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of behavioral disclosure. It simply says 'Get', implying read-only, but it does not state whether the operation is safe, non-destructive, or whether there are any side effects. It also fails to explain what happens when both accountId and campaignId are provided, or when neither is provided. The behavior around missing parameters and potential pagination is undocumented, leaving the agent uncertain about 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 sentence with two clauses, conveying the essential action and a key feature. It is front-loaded with the primary purpose and contains no filler or redundant details. Every word earns its place, making it highly concise and efficient.

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?

For a three-parameter tool with no annotations and no output schema, the description is too sparse. It does not clarify the relationship between accountId and campaignId (e.g., mutual exclusivity or precedence), nor does it mention pagination, response shape, or any error conditions. An agent needs more context on how to properly invoke this tool and interpret results, but the description leaves these gaps.

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?

The input schema already provides descriptions for all three parameters with 100% coverage, so the baseline is 3. The description adds the phrase 'supports filtering by status', which is redundant since the schema already specifies the status enum and default. It also rephrases 'from a campaign or account' which is already captured by the parameter descriptions. No additional meaning is added beyond the schema.

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 states a specific verb ('Get') and resource ('ad sets') plus scope ('from a campaign or account'). It clearly indicates a list retrieval operation. However, it does not explicitly distinguish itself from sibling tools like getAdSetDetails or getAds, which could be confused with the same resource. The intent is clear but not fully differentiated from close siblings.

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 usage for retrieving ad sets at the campaign or account level, but it gives no explicit guidance on when to prefer this tool over alternatives like getCampaigns or getAdSetDetails. There is no mention of exclusions or when not to use it, so the agent must infer usage from the name and context. This is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getBillingInfoA

Get billing and financial information for an ad account including pending balance (bill amount due), total spend, spend cap, payment method details, and tax info. All monetary values are in the smallest currency unit (e.g. cents for USD).

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesAd account ID (act_XXX) or account name

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It mentions that monetary values are in the smallest currency unit, which is useful for interpreting output. However, it does not disclose whether this is a read-only operation, any data limits, or response format details. This is adequate for a read-like tool but not fully transparent.

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?

The description is concise, two sentences, with the core function front-loaded. The currency unit note is valuable and placed at the end. There is minimal waste, though the second sentence could be seen as extra, but it earns its place for interpretability.

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 (single parameter, no output schema), the description is complete enough. It lists the included fields, which compensates for the lack of an output schema. The only omission is potential authentication requirements, but for a billing read tool, it's reasonably 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?

The schema already documents the parameter fully (accountId as string with description 'Ad account ID (act_XXX) or account name'), and schema coverage is 100%. The description adds no additional parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate.

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 the tool's purpose: retrieving billing and financial information for an ad account, listing specific data fields such as pending balance, total spend, spend cap, payment method details, and tax info. It distinguishes itself from sibling tools like getAccountInfo by focusing on billing-specific details.

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 usage when billing information is needed, but it does not explicitly state when not to use this tool or mention alternatives. For example, it doesn't clarify that getAccountInfo might be more appropriate for general account details. The context is clear for billing purposes, but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCampaignDetailsA

Get extended campaign details including bid strategy, buying type, special ad categories, and issues.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesCampaign ID

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden of behavioral disclosure. The description only lists returned fields but does not state whether the operation is read-only, whether special permissions are required, error handling (e.g., campaign not found), or any side effects. For a tool that likely performs a read, this omission is significant.

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, front-loaded sentence with zero filler. It immediately states the action and the specific information returned. Every word earns its place.

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?

The tool has a single required parameter and no output schema. The description lists the key fields returned, which gives some context, but it omits behavioral details (permissions, errors, pagination if any) and does not explain the difference from getCampaigns. Given the simplicity, it is adequate but not complete; more context on when to use and expected behavior would improve it.

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%: the only parameter campaignId is described as 'Campaign ID' in the schema. The description does not add any additional meaning, format, or constraints beyond that. Since the schema fully documents the parameter, baseline 3 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 clearly states the tool's purpose: 'Get extended campaign details' and enumerates specific fields (bid strategy, buying type, special ad categories, issues). This is a specific verb+resource combination and distinguishes it from the sibling getCampaigns (likely basic listing) by the word 'extended' and the listed details.

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 usage for retrieving extended campaign details but does not explicitly contrast with getCampaigns or any alternative. There is no 'use this instead of X' guidance. The intended context is inferable from the 'extended' qualifier, but explicit exclusion or alternative routing is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCampaignsB

Get campaigns from an ad account. Supports filtering by status (ACTIVE, PAUSED, ALL). Account can be specified by ID (act_XXX) or by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter campaigns by status. Default: ALLALL
accountIdYesAd account ID (act_XXX) or account name (e.g., "Plannit")

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must carry behavioral disclosure. It reveals that filtering by status is supported and account can be an ID or name, but it doesn't disclose return shape, pagination, ordering, or the fact that this is a read-only operation (beyond the verb 'Get').

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 tight sentences, no redundant phrasing, and the core action is front-loaded. Efficient.

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?

The schema handles parameter semantics, but the description omits any indication of return format or whether results are paginated, and it doesn't situate this tool against the many campaign siblings. For a simple list operation this is a minor but real gap.

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?

Input schema already documents both parameters including enum values and the act_XXX/name forms; the description mostly restates these facts without adding new semantic detail. Baseline 3 applies given 100% schema coverage.

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?

States a specific operation (Get campaigns from an ad account) and includes filtering and account-specification details. It is clearly a list-level tool, but it doesn't explicitly contrast itself with getCampaignDetails or other siblings, so it stops short of full differentiation.

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 choose this over getCampaignDetails, which likely retrieves a single campaign, or over other campaign management tools. The description only states what it does, not when it should be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getInsightsA

Get performance metrics for accounts, campaigns, adsets, or ads. Supports date presets (yesterday, last_7d, etc) or custom date ranges. Account level returns an aggregated summary; campaign/adset/ad levels also return structured per-item metrics with normalized ids/names plus spend, results, and CPR so consumers can filter and interpret the full signal.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelYesAggregation level for metrics
objectIdYesID of account (act_XXX), campaign, adset, or ad
timeRangeNoCustom date range (alternative to datePreset)
datePresetNoPredefined date range. Ignored if timeRange is specified.

TDQS

A3.8/5.0
Behavior4/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 — and it delivers: it discloses the return-shape difference between account level (aggregated summary) and campaign/adset/ad levels (per-item metrics with normalized ids/names, spend, results, CPR). It does not cover pagination or error behavior, but the structural disclosure is strong for a metrics tool.

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?

Two focused sentences with no filler. The core capability and supported levels are front-loaded, and the return-shape clarification is appended where it belongs. Could be tightened slightly but is appropriately sized.

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?

With no output schema, the description must explain return values — it does, clarifying the aggregated vs per-item distinction and listing the metric fields. For a read-only metrics tool with well-documented parameters, the remaining gaps (pagination, max range limits) are minor.

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?

Schema coverage is 100% with detailed parameter descriptions (enum values, format hints, precedence between timeRange and datePreset). The description adds real value beyond the schema by explaining what each level actually returns, which is the most ambiguous part of the contract.

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 uses a clear verb+resource ('Get performance metrics for accounts, campaigns, adsets, or ads') and distinguishes levels of aggregation. It does not explicitly name sibling tools to differentiate from, but the purpose is specific enough to separate it from discovery tools like getCampaigns/getAdSets.

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?

Usage context is implied rather than stated: the description tells what it returns but never says when to choose this over getCampaignDetails, getAdSetDetails, or compareTwoPeriods. With 30 siblings, explicit routing guidance would materially help an agent pick correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getInterestSuggestionsB

Get interest suggestions based on a list of seed interests.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results. Default: 25
interestListYesList of interest names to use as seeds for suggestions

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. 'Get' and 'suggestions' imply a read-only operation, and the seed-interest dependency is clear arranged. However, it does not mention authentication requirements, rate limits, failure modes, or output characteristics, so the disclosure is minimal but not contradictory.

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?

The description is a single, front-loaded sentence with no filler. It is efficient, though it sacrifices a small amount of helpful context that could have been added, such as naming the closest sibling tool.

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 two-parameter tool with fully documented parameters, the description covers the core invocation. However, the lack of annotations and output schema means the return shape, success/failure behavior, and any additional constraints are unstated, leaving some reliance on the tool name and general inference.

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%, so the description does not need to add parameter detail. It reinforces that interestList acts as 'seed' interests, but adds no new meaning beyond the schema and does not clarify limit behavior beyond the schema default.

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 names a concrete action ('Get') and resource ('interest suggestions') and ties the output to seed interests. This is enough to distinguish it from sibling searchInterests at a basic level, though it does not explicitly name alternatives.

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?

There is no explicit guidance on when to use this tool versus a sibling like searchInterests or validateInterests. The phrase 'based on a list of seed interests' implies an input condition but does not state a use case or when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pauseAdSetB

Pause an active ad set

ParametersJSON Schema
NameRequiredDescriptionDefault
adSetIdYesAd set ID to pause

TDQS

B3.1/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 of behavioral disclosure. The description only states the action without revealing side effects, such as whether pausing affects related ads, whether the action is reversible, or what the response looks like. For a mutating operation, this is a significant gap.

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 with no wasted words. It front-loads the action and the object.

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 single-parameter tool, the schema covers the parameter fully. However, the description lacks any behavioral context (what happens after pausing, reversibility, effect on ads) and has no output schema, so an agent may not fully understand the consequences of calling this tool.

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% and there is a single parameter (adSetId) that is already well-documented in the schema as 'Ad set ID to pause'. The description adds no additional meaning beyond the schema, so the baseline of 3 applies.

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 states a clear verb and resource: 'Pause an active ad set'. It clearly distinguishes the action from sibling tools like pauseCampaign (pauses a campaign) and activateAdSet (activates rather than pauses). However, it doesn't explicitly differentiate itself from the sibling tools, so a 4 rather than 5.

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 given on when to use this tool versus alternatives such as pauseCampaign or bulkPauseCampaigns. The description does not state prerequisites (e.g., the ad set must currently be active) or mention any scenarios where another tool would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pauseCampaignC

Pause an active campaign

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesCampaign ID to pause

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description must disclose behavioral context on its own. It only restates the state change implied by the name and says nothing about reversibility, downstream effects on ads or budgets, idempotency, or required permissions.

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?

The description is a single short sentence with no filler and front-loads the action. It is concise but minimal, leaving out behavioral context that could have been added without bloating the text.

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 one-parameter mutation with no annotations or output schema, the description conveys the basic operation. It omits any indication of what pausing entails or how it differs from the bulk variant, making it minimally adequate rather than 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?

The input schema already documents campaignId as 'Campaign ID to pause' with 100% coverage. The description adds no additional parameter meaning, so it merits the baseline of 3.

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 uses the imperative 'Pause' with the resource 'an active campaign,' making the action unambiguous. However, it does not explicitly differentiate from sibling tools like bulkPauseCampaigns or pauseAdSet beyond the name itself.

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 given about when to choose this tool over alternatives such as bulkPauseCampaigns, activateCampaign, or updateCampaign. Agents must infer usage purely from the tool name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchBehaviorsC

Search for Facebook behavior targeting categories.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results. Default: 50

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates a search (likely read-only), but does not disclose pagination behavior, result format, authentication needs, or any constraints around the search.

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?

The description is a single concise sentence with no filler and the core purpose is front-loaded. It is efficient, though slightly sparse in supporting context.

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 tool with one optional parameter, the description is minimally adequate. However, with no output schema and no annotations, it does not explain what the search returns or how results are presented, leaving some ambiguity for an agent.

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%, and the 'limit' parameter is already fully documented in the schema. The description adds no extra meaning about the parameter, so it sits at the baseline for schema-documented parameters.

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 a specific verb ('Search') and a distinct resource ('Facebook behavior targeting categories'). It is easy to understand what the tool does, though it does not explicitly differentiate itself from sibling tools like searchInterests or searchDemographics.

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 about when to use this tool versus the many sibling search tools. The name and description imply it is for behavior targeting, but there are no explicit when-to-use or alternative-selection cues.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchDemographicsA

Search for Facebook demographic targeting categories by class.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results. Default: 50
demographicClassYesDemographic class to search

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates a search/read operation but does not mention output format, pagination behavior, or any constraints on the search results. This is a notable gap for a tool with no annotation safety signals.

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, focused sentence with no filler or repetition. It front-loads the core action and resource while leaving parameter details to the schema, which is appropriately concise.

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 two-parameter search tool with full schema coverage, the description is minimally adequate. However, with no output schema or annotations, it could benefit from mentioning whether results are lists, how pagination works via the limit parameter, or how this relates to sibling search tools.

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%, so the baseline is 3. The description's phrase 'by class' aligns with the demographicClass parameter, but it adds no new semantic detail beyond what the schema enum and parameter descriptions already provide.

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 ('Search') and a clear resource ('Facebook demographic targeting categories') with a scoping qualifier ('by class'). This distinguishes it from sibling search tools like searchInterests, searchBehaviors, and searchGeoLocations based on the targeting category type.

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 when to use the tool: when the agent needs Facebook demographic targeting categories. However, it provides no explicit when-not-to-use guidance or references to alternative sibling tools, leaving the agent to infer usage from the name and resource.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchGeoLocationsB

Search for geographic locations for targeting (countries, cities, regions, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results. Default: 25
queryYesLocation name to search for
locationTypesNoFilter by location type (e.g. ["country", "city", "region"])

TDQS

B3.3/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 of behavioral disclosure. It only states that the tool searches and for what purpose; it does not describe the return shape, matching behavior, result limits, or any other operational characteristics.

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 filler. The core action and resource are front-loaded, and the parenthetical examples add useful context without bloating the text.

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?

This is a simple tool with well-documented parameters, so an agent can call it with the required query. However, with no output schema and no behavioral details in the description, the agent is left without expectations about what results look like or how matching works.

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%, so the baseline is 3; the schema already explains query, limit, and locationTypes. The description adds only illustrative examples of location types and does not provide meaningful parameter detail beyond what the schema gives.

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 uses a specific verb ('Search') and resource ('geographic locations') with concrete examples ('countries, cities, regions'), making the tool's purpose clear. It is implicitly distinguished from sibling interest/behavior/demographic search tools, though it does not name them explicitly.

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 'for targeting' gives useful context about when to use the tool. However, it does not explicitly mention alternative tools like searchInterests, searchBehaviors, or searchDemographics, nor does it state exclusions or when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchInterestsC

Search for Facebook interest targeting options by keyword.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return. Default: 25
queryYesSearch keyword for interests

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It does not mention whether the operation is read-only, pagination behavior, rate limits, or what the response format looks like. The simple search implies a safe read, but that is not explicitly stated.

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?

The description is a single concise sentence, front-loaded with the action and resource. It is appropriately sized, though it could be slightly more informative without losing conciseness.

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?

For a tool with two parameters and no output schema, the description is incomplete. It lacks usage guidance and behavioral context, and the agent receives no hints about what the search returns or how to distinguish it from similar search tools.

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%, so the baseline is 3. The description adds minimal value by saying 'by keyword', which essentially restates the query parameter's schema description. No additional semantic context is provided.

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 states a specific action ('Search') and a specific resource ('Facebook interest targeting options'), which is clear and not a tautology. It distinguishes from siblings like searchBehaviors and searchDemographics by focusing on interests, though it doesn't explicitly name any alternatives.

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 related siblings like getInterestSuggestions or validateInterests. The description only states what it does, not the appropriate context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateAdB

Update an existing ad status or bid amount.

ParametersJSON Schema
NameRequiredDescriptionDefault
adIdYesAd ID
statusNoNew status for the ad
bidAmountNoNew bid amount in cents

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It discloses that the tool mutates an ad, but not whether status changes are immediate, whether bid changes affect running delivery, whether the operation is idempotent, or what permissions are required. The use of 'or' is also ambiguous about whether both status and bidAmount can be updated together.

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, front-loaded sentence with no filler or redundant content. It is economical and immediately communicates the tool's core action, though the 'or' phrasing introduces a slight ambiguity.

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 three-parameter update tool with a fully documented schema, the one-line description plus schema is enough to construct a valid call. However, with many sibling tools and no annotations or output schema, the description lacks routing guidance and does not fully explain behavioral expectations.

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%, with adId, status enum, and bidAmount in cents already documented. The description adds no parameter-level detail beyond the schema, so it meets but does not exceed the baseline.

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 the operation ('Update'), the resource ('an existing ad'), and the specific fields involved ('status or bid amount'). It is distinguishable from siblings like updateAdSet and updateCampaign by naming the ad resource, though it does not explicitly contrast with them.

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?

There is no guidance on when to use this tool versus related siblings such as pauseCampaign, activateCampaign, updateAdSet, or pauseAdSet. The intended usage is only implied by the tool name and description, with no exclusions, prerequisites, or alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateAdSetB

Update an existing ad set. Only provided fields will be updated.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name
statusNoNew status
adSetIdYesAd set ID to update
targetingNoUpdated targeting configuration
dailyBudgetNoNew daily budget in cents
lifetimeBudgetNoNew lifetime budget in cents

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral disclosure burden. It does disclose the key trait that only provided fields are updated, implying a partial update (PATCH-like). However, it omits other relevant behaviors such as permissions required, atomicity, or return format. This is a minimal but non-contradictory disclosure.

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, direct sentence with no wasted words. The primary action is front-loaded, and the partial-update note is appended efficiently. It is an exemplar of concise, structured communication.

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 tool with 6 parameters, including a nested targeting object, the description is minimal but not incomplete. The schema covers parameter details, and the description adds the core behavior. However, it lacks usage context and does not mention return values (no output schema), so it is adequate but not richly complete.

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 input schema has 100% parameter coverage, describing each field individually. The description adds crucial semantics beyond the schema by clarifying that only provided fields are updated, which defines how the optional parameters behave. This enriches the agent's understanding of parameter interactions.

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 the verb 'Update' and resource 'existing ad set', making the purpose unambiguous. It distinguishes from status-specific siblings like pauseAdSet and activateAdSet, though it does not explicitly contrast them. The name itself is self-explanatory, reinforcing clarity.

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 that dedicated tools exist for status changes (pause/activate) or that this tool is for general field updates. An agent would have to infer the appropriate usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateCampaignB

Update an existing campaign. Only provided fields will be updated.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew campaign name
statusNoNew status
campaignIdYesCampaign ID to update
dailyBudgetNoNew daily budget in cents
lifetimeBudgetNoNew lifetime budget in cents

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It clearly indicates a mutating operation on an existing campaign and the patching behavior of only updating provided fields. However, it does not disclose return values, permission requirements, or side effects when invalid fields or campaign IDs are supplied.

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 short sentences with no redundant wording. The primary action is stated first, and the partial-update behavior is added as a concise, useful qualifier.

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?

The description and schema together cover the essential call mechanics: which campaign to update and which fields can change. However, without an output schema or additional context, the agent cannot know the return format, and the description does not address overlap with specialized status-change siblings like pauseCampaign and activateCampaign.

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?

Schema description coverage is 100%, so the schema already documents each parameter. The description adds meaningful parameter semantics by stating that only provided fields are updated, which clarifies how optional parameters are applied. This goes beyond what the schema alone states.

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 states a clear verb and resource: 'Update an existing campaign.' It also adds 'Only provided fields will be updated,' which clarifies the update scope. However, it does not explicitly differentiate from sibling tools like pauseCampaign or activateCampaign, which also modify campaign state.

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 that status-specific operations like pausing or activating might be better handled by dedicated siblings, nor does it state prerequisites or expected usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validateInterestsB

Validate a list of interests by name or Facebook ID. At least one of interestList or interestFbidList must be provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
interestListNoInterest names to validate
interestFbidListNoInterest Facebook IDs to validate

TDQS

B3.4/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 of behavioral disclosure. It only states the 'at least one' requirement but does not explain what 'validate' means in terms of side effects (e.g., is it read-only?), what happens on invalid inputs, or what the response structure looks like. It also does not clarify whether both lists can be provided simultaneously or how they interact.

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, front-loaded sentence that states the action, resource, and the critical constraint without any waste. Every word earns its place, and it is immediately scannable.

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 there is no output schema and no annotations, the description is too sparse for an agent to fully understand the tool's behavior. It lacks information about the return value (e.g., does it return a boolean, a list of valid/invalid items?), error handling, or any side effects. For a validation tool, the agent needs to know what to do with the result, and this is missing.

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?

The schema already describes both parameters clearly ('Interest names to validate' and 'Interest Facebook IDs to validate'), covering 100% of the parameter semantics. The description adds the constraint about at least one being required, which is not in the schema (no required fields), so it does add some value. However, it does not provide additional meaning about the parameters themselves beyond what the schema states.

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's action (validate) and resource (interests) with the method (by name or Facebook ID). This distinguishes it from siblings like searchInterests (which searches/disovers) and getInterestSuggestions (which suggests), making the purpose unambiguous.

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 mentions the key usage constraint that at least one of the two lists must be provided, which is essential for calling the tool. However, it does not explicitly state when to use this tool versus alternatives like searchInterests, nor does it provide any context about typical validation scenarios or prerequisites. The distinction is implied but not made explicit.

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. 31 tool updatesv0.3.0
    • First observedactivateAdSet
    • First observedactivateCampaign
    • First observedbulkActivateCampaigns
    • First observedbulkPauseCampaigns
    • First observedcheckAlerts
    • First observedcloneAdSet
    • First observedcloneCampaign
    • First observedcompareTwoPeriods
    • First observedcreateBudgetSchedule
    • First observeddiscoverAdAccounts
    • First observedgetAccountInfo
    • First observedgetAdCreatives
    • First observedgetAdDetails
    • First observedgetAds
    • First observedgetAdSetDetails
    • First observedgetAdSets
    • First observedgetBillingInfo
    • First observedgetCampaignDetails
    • First observedgetCampaigns
    • First observedgetInsights
    • First observedgetInterestSuggestions
    • First observedpauseAdSet
    • First observedpauseCampaign
    • First observedsearchBehaviors
    • First observedsearchDemographics
    • First observedsearchGeoLocations
    • First observedsearchInterests
    • First observedupdateAd
    • First observedupdateAdSet
    • First observedupdateCampaign
    • First observedvalidateInterests

TDQS

B3.2/5.0

Scored across 31 tools

Disambiguation4/5

Most tools are clearly separated by resource and action, but some pairs like getCampaigns/getCampaignDetails and getAds/getAdDetails could confuse an agent because the names do not clearly signal list versus detail. The interest-related tools also overlap somewhat, though their descriptions distinguish keyword search from suggestions and validation.

Naming Consistency4/5

Tool names consistently use camelCase and generally follow a verb-noun pattern. Minor deviations exist, such as discoverAdAccounts versus getAccountInfo, and compareTwoPeriods not following the same noun-object shape, but overall the naming is predictable.

Tool Count2/5

With 31 tools, the surface exceeds the 25+ threshold and feels heavy for an MCP server. While Meta Ads has a broad domain, many tools could be consolidated, such as single and bulk campaign state changes or list-versus-detail retrieval pairs.

Completeness3/5

The server covers reading, updating, pausing, activating, cloning, insights, targeting, billing, and alerts, which is substantial. However, direct creation of campaigns, ad sets, and ads is missing except through cloning, and there are no delete operations, leaving notable lifecycle gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for managing Google Ads, Meta Ads, LinkedIn Ads, and TikTok Ads via AI. 210+ tools including account audits, wasted spend detection, and PMax insights.
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server for managing and analyzing Meta Ads (Facebook/Instagram) with over 80 natural-language tools for AI agents like Claude Desktop.
    -
  • 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
    9 npm
    MIT