mcp-facebook-ads
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-facebook-adsshow me insights for last 7 days"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Custom Facebook Ads MCP Server
Eigen MCP server (Python) voor Meta/Facebook Business Manager, met:
data inladen via Marketing API (insights/reporting),
campagnes opbouwen (campaigns, ad sets, ads, creatives),
optimalisatie en budgetadvies op basis van best practices.
Architectuur en endpoints
MCP-transport: stdio. Cursor (of een andere MCP-client) start het proces; er is geen apart HTTP-endpoint voor de MCP zelf.
Meta API: alle calls gaan via de Graph API / Marketing API zoals de SDK (
facebook-business) die gebruikt. Basis-URL:https://graph.facebook.com/{META_API_VERSION}/...De standaard API-versie in deze codebase is
v25.0(zetMETA_API_VERSIONin.envgelijk aan wat je app ondersteunt).
Related MCP server: Meta Marketing API MCP Server
1) Vereisten
Python 3.11+
Een Meta Developer-app met Marketing API en een geldig access token met rechten op het gewenste ad account
Benodigde permissies (scopes) op het token:
ads_managementads_readbusiness_managementpages_read_engagement
Zonder deze scopes kunnen tools deels of volledig falen.
2) Meta Developer-app aanmaken
Ga naar Meta for Developers.
Maak een app (kies het type dat past bij Marketing API / zakelijke ads).
Voeg het product Marketing API toe en voltooi de stappen die Meta vraagt.
Noteer onder App settings → Basic:
App ID →
META_APP_IDApp Secret →
META_APP_SECRET
3) Ad account en token (aanbevolen: System User)
Aanbevolen voor een stabiele, team- of server-achtige setup: een System user in Meta Business Settings (Gebruikers → System users), met toegewezen assets (het juiste ad account en indien nodig Pages). Genereer daar een token met de scopes hierboven.
Ad account-ID in
.envalsact_<numeriek_id>. De server voegtact_automatisch toe als je alleen het nummer invult.
Alternatieven (minder ideaal voor productie):
Korte tokens uit de Graph API Explorer (vooral geschikt om even te testen).
OAuth-flow (zie hieronder) om user tokens of long-lived tokens te verkrijgen.
4) OAuth- en token-endpoints (Meta)
Vervang {VERSION} door dezelfde waarde als META_API_VERSION (bijv. v25.0). Vervang placeholders door je echte app- en redirect-gegevens.
Stap | URL |
Gebruiker inloggen en scopes goedkeuren |
|
Authorization code omzetten naar short-lived access token |
|
Short-lived token omzetten naar long-lived token (ca. 60 dagen) |
|
Redirect URI: in de Meta-app (bijv. onder Facebook Login / OAuth-instellingen) moet de OAuth redirect URI exact overeenkomen met {REDIRECT_URI} in bovenstaande requests.
5) Installatie en .env
git clone <jouw-repo-url> mcp-facebook-ads
cd mcp-facebook-ads
uv sync
cp .env.example .env # of maak .env handmatigVul .env (zie .env.example voor veldnamen):
META_APP_ID=...
META_APP_SECRET=...
META_ACCESS_TOKEN=...
META_AD_ACCOUNT_ID=act_...
META_API_VERSION=v25.0De server laadt .env via python-dotenv vanaf de working directory van het proces. Zorg dat de MCP in Cursor cwd op de projectroot heeft staan als je geen inline env in de MCP-config gebruikt.
Commit .env nooit; die staat in .gitignore.
6) Cursor-configuratie
Je kunt de MCP op twee manieren configureren:
Project (aanbevolen voor dit repo):
.cursor/mcp.jsonin de projectroot (staat mogelijk niet in git; maak hem lokaal aan).Globaal: Cursor Settings → MCP, afhankelijk van je Cursor-versie.
Voorbeeld .cursor/mcp.json (geldige JSON — geen //-comments). Vervang het pad door je eigen projectmap; secrets horen in .env in die map, niet in git.
Optie A — cwd op de projectroot (aanbevolen; .env wordt dan automatisch geladen):
{
"mcpServers": {
"facebook-ads": {
"command": "uv",
"args": ["run", "python", "-m", "mcp_facebook_ads.server"],
"cwd": "/ABSOLUUT/PAD/NAAR/mcp-facebook-ads"
}
}
}Optie B — zonder cwd, met expliciet pad in uv run:
{
"mcpServers": {
"facebook-ads": {
"command": "uv",
"args": [
"run",
"--directory",
"/ABSOLUUT/PAD/NAAR/mcp-facebook-ads",
"python",
"-m",
"mcp_facebook_ads.server"
]
}
}
}Secrets kun je óf in .env in die cwd laten staan, óf (minder ideaal) als env-object in mcp.json zetten — let op dat je die file dan niet deelt.
7) Delen met collega’s
Wel delen: repository, deze README, App ID, bekende ad account-identifiers waar ze toch al toegang toe moeten hebben, en het Cursor-commando + cwd.
Niet delen (alleen via een secrets manager of 1:1 veilig kanaal): META_APP_SECRET, META_ACCESS_TOKEN. Liever per persoon of per omgeving een eigen System user-token met minimale benodigde rechten dan één gedeelde token zonder rotatie.
8) Sneltest tegen de Graph API
Controleer of je token werkt (zelfde {VERSION} als in .env):
GET https://graph.facebook.com/{VERSION}/me?access_token={META_ACCESS_TOKEN}Als dit faalt, los eerst app- en tokenconfiguratie op voordat je de MCP gebruikt.
9) Starten als MCP-server (handmatig)
uv run python -m mcp_facebook_ads.serverDraait op stdio; normaal start Cursor dit proces zelf.
10) Beschikbare toolgroepen
Account Management
get_ad_accountsget_account_infoget_account_pages
Campaigns
get_campaignsget_campaign_detailscreate_campaignupdate_campaigndelete_campaign
Ad Sets
get_adsetsget_adset_detailscreate_adsetupdate_adsetdelete_adset
Ads
get_adsget_ad_detailscreate_adupdate_addelete_ad
Creatives & Media
get_ad_creativesupload_ad_imagecreate_ad_creativecreate_asset_feed_ad_creativeupdate_ad_creativeget_ad_previews
Insights & Reporting
get_insightsget_account_insightscompare_performance
Audience & Targeting
search_interestssearch_behaviorssearch_demographicssearch_geo_locationsestimate_audience_size
Best Practices & Optimization
get_campaign_templatescreate_campaign_from_templateanalyze_campaignsuggest_budget_allocation
11) Best-practice defaults
Nieuwe entities worden standaard met status
PAUSEDaangemaakt.Templates zijn beschikbaar voor
awareness,traffic,leads,sales.Adviezen sturen op CTR/CPC, en op funnel-gescheiden structuur.
12) Veiligheid en governance
Gebruik bij voorkeur een system user-token, niet je persoonlijke user-token.
Geef productie-activatie (
ACTIVE) pas na review.Log API-fouten en
fbtrace_id-waarden voor snelle debugging bij Meta.
13) Testen
uv run pytestAvailable Tools
39 toolsanalyze_campaignC
Analyze campaign performance and return practical recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| date_preset | No | last_7d |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full behavioral disclosure. It mentions 'recommendations' but doesn't say whether the tool is read-only, what analysis it performs, whether it can mutate campaign state, or what kind of output to expect. With an output schema present, some return info is covered, but the operation's safety profile and behavior remain opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence that is front-loaded with the core action. No wasted words, though it is arguably too terse given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that presumably performs complex analysis and returns recommendations, the description is severely incomplete. It doesn't explain what 'analyze' entails, what recommendations look like, or how it differs from similar tools. The output schema may cover the return format, but behavioral gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description adds no information about the two parameters: campaign_id (required) and date_preset. It doesn't explain what date_preset values are valid or what time period the analysis covers. The description fails to compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb 'analyze' and resource 'campaign performance', plus a benefit ('return practical recommendations'). However, it doesn't distinguish this from siblings like get_insights or compare_performance, which also analyze performance data. The purpose is clear but generic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this vs get_insights, compare_performance, or get_campaign_details. The description implies analysis but offers no context about appropriate scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_performanceC
Compare two periods for spend/clicks/conversions.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_account_id | No | ||
| date_preset_a | No | last_7d | |
| date_preset_b | No | last_30d |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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, yet it discloses nothing about permissions, read-only nature, default behavior, or what the comparison returns. Only 'compare ... for spend/clicks/conversions' hints at the output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the key concept front-loaded and no filler. However, brevity here is under-specification rather than efficiency, so it is only minimally adequate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be described, but the critical gaps remain: undocumented parameters with defaults, no usage context, and no behavioral disclosure for a comparison tool with zero annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across all three parameters, and the description only vaguely gestions 'two periods' without mapping to date_preset_a/date_preset_b. No allowed values, formats, or the fact that both default to last_7d/last_30d, and no account scoping is explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (compare) with a clear scope: two periods on spend/clicks/conversions. It is distinguishable from read-oriented siblings like get_insights, but it never names or contrasts itself with those alternatives, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this comparison tool instead of get_insights, get_account_insights, or analyze_campaign, nor any precondition or exclusion. The agent must guess at the selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_adC
Create ad from an existing creative.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | PAUSED | |
| adset_id | Yes | ||
| creative_id | Yes | ||
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and fails. 'Create' implies a write/mutation, but no permissions, no side effects, no default-status implications (the schema default is PAUSED, invisible here). No mention of whether the ad is active immediately or what the return is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded and waste-free. It is concise, though brevity here is achieved by omission rather than efficiency of a well-formed description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no annotations, no description coverage, and only a bare output schema, the definition is too thin. Required relationships, defaults, and behavioral context are all absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no parameter meaning. It does not explain adset_id, creative_id, name, ad_account_id, or the significance of the PAUSED default. With 5 params and zero coverage, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (Create) and resource (ad), but the qualifier 'from an existing creative' is the only differentiator. It does not clearly distinguish from siblings like create_ad_creative or update_ad. The purpose is understandable but leaves ambiguity about relationship to creative-creation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no alternatives named, no preconditions stated (e.g., that the creative must already exist). An agent has no explicit routing signal vs. create_ad_creative or create_campaign.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ad_creativeC
Create a link ad creative.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| page_id | Yes | ||
| headline | Yes | ||
| link_url | Yes | ||
| image_hash | Yes | ||
| description | No | ||
| primary_text | Yes | ||
| ad_account_id | No | ||
| call_to_action | No | LEARN_MORE |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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, and it says nothing about permissions, whether image_hash must be pre-uploaded via upload_ad_image, what account context is required, or side effects. 'Create' is the only behavioral signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence is technically concise and front-loaded, but at this size the brevity reflects under-specification rather than economy. There is nothing to trim because almost nothing was said.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no annotations and no parameter documentation, a single eight-word sentence is far too thin. The output schema exists, so return values needn't be explained, but inputs, prerequisites, and sibling selection are all unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no parameter meaning whatsoever. Nine parameters, six required (name, page_id, image_hash, link_url, primary_text, headline), and the agent gets no help on what page_id, image_hash, or call_to_action's default 'LEARN_MORE' imply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource and names the creative subtype ('link ad creative'), which implicitly distinguishes it from siblings like create_ad_video_creative and create_asset_feed_ad_creative. It stops short of explicitly differentiating, but an agent can route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the three sibling creative-creation tools it competes with. The agent must infer that a link creative (image + link_url) is selected over video or asset-feed creatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_adsetC
Create ad set with targeting and optimization settings.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | PAUSED | |
| end_time | No | ||
| targeting | Yes | ||
| bid_amount | No | ||
| start_time | No | ||
| campaign_id | Yes | ||
| daily_budget | No | ||
| ad_account_id | No | ||
| billing_event | Yes | ||
| lifetime_budget | No | ||
| optimization_goal | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It does not say whether the ad set is created paused or active (despite the 'status' default being PAUSED), whether it requires a specific ad account, or what happens to budgets and targeting. For a multi-parameter mutation tool, this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words, but it is under-specified for a tool with 12 parameters. Conciseness is appropriate, though it borders on being too sparse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters, 5 required, nested targeting object, and no annotations, the description is far too thin. It omits required fields, defaults (e.g., status defaults to PAUSED), and budget implications. An output schema exists, so return values need not be explained, but the input side remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema provides no semantic help for any of the 12 parameters. The description mentions only 'targeting and optimization settings', leaving 10 parameters (including required ones like billing_event, campaign_id, and name) completely unexplained. It fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb and resource ('Create ad set') and mentions 'targeting and optimization settings', which maps to two fields. However, it does not distinguish this tool from siblings like create_campaign or create_ad beyond the resource noun, leaving the agent to infer the level of the ad hierarchy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use create_adset versus alternatives such as create_ad or create_campaign, nor any mention of prerequisites like needing a campaign_id first. The description offers no context beyond the action itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ad_video_creativeB
Create a link ad creative that uses a previously uploaded video (video_id).
Dit maakt een object_story_spec met zowel link_data (landing URL + CTA)
als video_data (video asset).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| page_id | Yes | ||
| headline | Yes | ||
| link_url | Yes | ||
| video_id | Yes | ||
| description | No | ||
| primary_text | Yes | ||
| ad_account_id | No | ||
| call_to_action | No | SHOP_NOW |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the creative uses an existing video_id and constructs an object_story_spec with link_data and video_data, which is useful behavioral context. However, it doesn't mention permissions, side effects, or whether the video must be owned by the same ad account. This is partial behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first is clear and front-loaded; the second is a technical detail in Dutch that adds some value but is unnecessarily cryptic. Overall efficient but could be improved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, 6 required, 0% schema coverage, and no annotations, the description is incomplete. It omits required parameters like name, page_id, primary_text, and headline, and doesn't explain the output schema (though an output schema exists, the description doesn't clarify return values). Significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for 9 undocumented parameters. The description only mentions video_id and implies link_url and call_to_action via 'link_data (landing URL + CTA)', but doesn't explain the other parameters. Most parameter semantics are missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Create a link ad creative that uses a previously uploaded video (video_id).' This clearly distinguishes the tool from siblings like create_ad_creative and create_asset_feed_ad_creative by specifying it is video-based with link_data. However, the second sentence is in Dutch and unclear to most agents, slightly reducing cross-lingual clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying 'uses a previously uploaded video', which suggests you should call upload_ad_video first. However, it doesn't explicitly state when to use this tool versus create_ad_creative or create_asset_feed_ad_creative, nor does it mention prerequisites or exclusions. Usage is implied but not fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_asset_feed_ad_creativeC
Create a dynamic creative using raw asset_feed_spec and object_story_spec.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| url_tags | No | ||
| ad_account_id | No | ||
| asset_feed_spec | Yes | ||
| object_story_spec | Yes | ||
| authorization_category | No | ||
| degrees_of_freedom_spec | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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. It implies a mutation ('Create') and hints that the caller must supply raw specs, but says nothing about required permissions, whether the creative is immediately usable, side effects, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the action front-loaded and no filler. It is concise but the brevity reflects under-specification rather than efficient information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters including nested objects and an output schema, so return values need not be explained. Still, for a create operation with zero annotation and zero schema-description coverage, the description omits everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the description must compensate and does not. It mentions only asset_feed_spec and object_story_spec, ignoring name, url_tags, ad_account_id, authorization_category, and degrees_of_freedom_spec, and gives no format or content guidance for the two it does name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (dynamic creative) and names the two raw payload objects involved, which is more informative than the title alone. However, it never distinguishes this from siblings like create_ad_creative or create_ad_video_creative, leaving the agent to guess which creative creator applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of create_ad_creative, create_ad_video_creative, or update_ad_creative. The agent is given no prerequisites, no mention of ad account context, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_campaignC
Create a campaign (paused by default for safe review).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | PAUSED | |
| objective | Yes | ||
| daily_budget | No | ||
| ad_account_id | No | ||
| lifetime_budget | No | ||
| special_ad_categories | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden, and it does surface one meaningful trait: campaigns are created paused for safe review. That is largely mirrored by the schema's status default of 'PAUSED', and nothing is said about permissions, budget side effects, or what happens to the returned entity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the key behavior is stated immediately. Brevity is not achieved by padding, though the sentence is arguably too terse given the parameter surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, but for a 7-parameter mutation tool with zero schema descriptions and no annotations, the definition leaves too much unstated: required context, parameter meaning, and when to prefer this over the template-based sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the description was required to compensate and does not. It never explains name, objective, the daily_budget vs lifetime_budget relationship, ad_account_id, or the accepted values for special_ad_categories.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a campaign'), so the operation is unambiguous. However, it does not differentiate itself from the sibling create_campaign_from_template, leaving the agent to infer which creation path applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisite conditions (e.g., required ad account context), and no mention of the alternative create_campaign_from_template. The agent gets no routing help despite several related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_campaign_from_templateC
Create a campaign from a best-practice template.
| Name | Required | Description | Default |
|---|---|---|---|
| daily_budget | No | ||
| template_key | Yes | ||
| ad_account_id | No | ||
| campaign_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It implies preset best-practice settings are applied but says nothing about which settings the template controls, whether daily_budget overrides the template default, whether ad_account_id is required for authentication, or what happens on failure. For a mutation tool this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding is structurally sound, but for a 4-parameter mutating tool it is underspecified rather than concise. The terseness leaves the agent without the context it needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, but the combination of zero annotations, 0% schema coverage, and overlapping siblings (create_campaign, get_campaign_templates) leaves the definition incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with 4 parameters (template_key, campaign_name, daily_budget, ad_account_id) and the description documents none of them. It does not explain template_key's format or source, nor the units of daily_budget, nor the default ad account behavior — so it fails to compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a campaign') with the distinguishing modifier 'from a best-practice template', which separates it from the sibling create_campaign. It stops short of naming the sibling or the relationship to get_campaign_templates, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of prerequisites (e.g., obtaining template_key via get_campaign_templates), and no comparison to create_campaign. The agent is left to infer that this is the template-driven alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_adB
Archive ad.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Archive' does disclose a meaningful behavioral trait - the operation is non-destructive/reversible rather than a permanent deletion - which is valuable given the misleading tool name. However, nothing is said about permissions, side effects on creatives or insights, or whether the ad stops delivering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two words, front-loaded and free of padding, but the terseness crosses into under-specification for a mutation tool - no usage context or behavioral caveat is included. It is efficient without being informative enough.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low complexity (one obvious parameter) and an output schema exists, so return values need not be described. Still, for a mutation with zero annotation coverage, the description should at least indicate the reversibility implications or any preconditions; it states only 'archive' and stops.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but there is only one parameter, ad_id, which is required and self-explanatory from its name. The description adds no meaning beyond the schema, so it neither compensates for the coverage gap nor misleads; a middle score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Archive ad.' names a specific verb and resource, and crucially clarifies that the operation is an archive rather than the hard delete implied by the tool name delete_ad. It does not, however, differentiate itself from siblings such as delete_adset, update_ad, or delete_campaign, so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g., whether the ad must be paused first), and no mention of alternatives like update_ad or delete_adset. The agent gets no routing help at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_adsetC
Archive ad set.
| Name | Required | Description | Default |
|---|---|---|---|
| adset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Archive' hints at a soft-delete rather than permanent removal, but it does not disclose whether the action is reversible, what permissions are required, or how associated entities are affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At three words, the description is under-specified rather than concise. It is front-loaded but does not provide enough structure or information for an agent to act on confidently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and need not be described, the definition lacks essential context: when to use it, whether it requires specific permissions, and what 'archive' entails. For a mutation tool with no annotations, this is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no meaning to the single adset_id parameter. It does not clarify the expected ID format, source, or any constraints, failing to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Archive) and resource (ad set), making the operation identifiable. It does not differentiate from sibling tools like delete_ad, delete_campaign, or update_adset, so it falls 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.
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 update_adset or delete_ad, nor any prerequisites or exclusions. The description simply names the action without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_campaignB
Archive a campaign (safe delete).
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose one important trait: deletion is really an archive/soft delete. However, it omits whether the action is reversible, whether child adsets/ads are affected, and any permission requirements, which matters for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the key clarifying fact ('safe delete') front-loaded after the verb. No wasted words, though it is arguably too terse given what is left unsaid.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be described, but for a destructive tool with zero annotations the description should cover reversibility, side effects on nested entities, and required permissions. None of that is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description says nothing about campaign_id, but the parameter is a single, self-evident identifier whose meaning is clear from its name. There is little semantic ambiguity to compensate for, so this is a baseline-adequate case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Archive') and resource ('campaign'), and the parenthetical '(safe delete)' disambiguates the operation from a hard delete. It does not explicitly contrast with the sibling delete_adset/delete_ad, but the resource noun makes the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus update_campaign or the template-based alternatives, and no prerequisites (permissions, campaign status) are mentioned. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_audience_sizeC
Estimate audience size for targeting specification.
| Name | Required | Description | Default |
|---|---|---|---|
| optimize_for | No | IMPRESSIONS | |
| ad_account_id | No | ||
| targeting_spec | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether the operation is read-only, requires authentication, has rate limits, or has any side effects. Only the core estimation purpose is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It is appropriately sized for its scope and immediately communicates the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters with 0% schema descriptions, a nested targeting_spec object, and no annotations, the description is too sparse. While an output schema exists (reducing the need to explain return values), the lack of parameter and behavioral context leaves agents under-equipped to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions only 'targeting specification' and does not explain the meaning or expected format of optimize_for or ad_account_id, leaving most parameter semantics undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Estimate') and resource ('audience size') tied to a targeting specification. It is clear what the tool does, but it does not differentiate the tool from siblings such as search_demographics or search_interests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives, nor does it state prerequisites or exclusions. The only implied context is that a targeting specification is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_infoC
Get detailed info for one ad account (incl. opportunity_score = Kansscore in Ads Manager).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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. It signals a read ('Get') and adds a domain alias for opportunity_score, but says nothing about authentication, permissions, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One efficient sentence with the core action front-loaded and the only elaboration (the Kansscore alias) directly useful. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema reduces the need to describe return values, and the description names the key field opportunity_score. However, with no annotations and no parameter documentation, it leaves important gaps for a tool that fetches account details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter ad_account_id has no schema description. The description does not explain the parameter's expected format, whether it is required or optional, or how a null default behaves, adding no meaning beyond the schema title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (detailed info for one ad account), and the singular 'one ad account' implicitly contrasts with sibling get_ad_accounts. It does not explicitly name that sibling or other alternatives, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no mention of alternatives like get_ad_accounts for listing or get_account_insights for analytics. The agent must infer context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_insightsC
Get account summary insights.
| Name | Required | Description | Default |
|---|---|---|---|
| date_preset | No | last_30d | |
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and it discloses almost nothing. "Get" implies a read, but there is no mention of permissions, rate limits, scope defaults, or what happens when ad_account_id is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no padding, and the core purpose is front-loaded. However it is under-specified rather than concise: the brevity comes from omitting necessary information rather than from efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, but with zero annotations and zero parameter descriptions the definition leaves the agent without enough to call the tool confidently. The absence of any sibling differentiation is a real gap given the crowded insights/analysis namespace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters (date_preset, ad_account_id) and the description adds no meaning for either. It never explains the default last_30d window or what a null ad_account_id resolves to, so the agent must guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get account summary insights" gives a verb and a resource, but "insights" is vague and the description does nothing to distinguish it from siblings like get_insights, get_account_info, analyze_campaign, or compare_performance. An agent cannot tell from the text alone which of these to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the many insight/analysis-shaped siblings. The only hint is the word "account", which is weak routing at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_opportunity_recommendationsC
Kansscore-uitleg: openstaande aanbevelingen (zelfde bron als Ads Manager). summary_only groepeert per type; anders ruwe items (max limit).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| summary_only | No | ||
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the key behavioral switch, that summary_only groups by type whereas the default returns raw items capped at limit, and notes the source is the same as Ads Manager. It says nothing about permissions, read-only nature, or pagination beyond the limit hint, leaving notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the topic front-loaded ('Kansscore-uitleg'). It wastes few words, though the telegraphic Dutch phrasing and parenthetical 'max limit' make it slightly cryptic rather than maximally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a 3-parameter read tool it covers the central summary_only behavior, but the undocumented ad_account_id and absent usage/permission context leave it only partially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is expected to compensate. It explains two of three parameters, clarifying that summary_only controls grouped-vs-raw output and that limit caps the raw items, but it adds nothing about ad_account_id (defaults to null), leaving one parameter fully undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource ('openstaande aanbevelingen', i.e. outstanding recommendations) tied to 'Kansscore', which matches the tool name's intent, so the purpose is discernible. However, it is terse, Dutch-only, and relies on loose paraphrasing ('zelfde bron als Ads Manager') rather than naming the action and scope plainly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no reference to any alternative tool. The reader is left to infer that this is the recommendations-retrieval endpoint from the name alone; the summary_only sentence describes output shape rather than usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_pagesC
Get Facebook pages connected to ad account business.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 states the basic operation. It does not mention whether this is a read-only operation, what permissions are required, pagination behavior, or whether it returns all pages or a subset. For a retrieval tool with no annotation coverage, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple retrieval tool, though it could benefit from a brief note on usage or behavior to improve completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description need not explain return values. However, with no annotations and a vague parameter, the description is only minimally adequate. It states the core action but lacks context about when to use it, its read-only nature, and how the parameter affects the result. For a tool with sibling alternatives, more contextual differentiation would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the single parameter 'ad_account_id'. The description mentions 'ad account' but does not explain the parameter's format, whether it's required (it's optional with a default of null), or what happens if omitted. Since parameter semantics are not elaborated beyond the schema, but there is only one parameter and its name is self-explanatory, a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Get) and resource (Facebook pages connected to ad account business), which is clear enough to distinguish this from siblings like get_ad_accounts or get_account_info. However, the phrasing 'ad account business' is slightly ambiguous – it's unclear whether 'business' refers to a Business Manager entity or is just descriptive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. Given siblings like get_ad_accounts and get_account_info, an agent would benefit from knowing the specific context in which retrieving connected pages is appropriate (e.g., for ad creative assignment). No when-to-use or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_accountsB
Get ad accounts the token can access.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full behavioral burden, yet it says nothing about permissions required, pagination, result limits, or return format. A read-only list tool with zero behavioral disclosure leaves the agent guessing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence, front-loaded with the verb and resource. No waste, but also no added structure or scoping detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema disclosure in the description (though one exists), no annotations, and no mention of auth scope or pagination. For a tool in a crowded ad-account family, this is under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline is 4. No parameter semantics are needed and none are introduced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (ad accounts) with scope 'the token can access', clearly distinguishing it from sibling account tools like get_account_info and get_account_pages. No sibling is named as an alternative, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_account_info or get_account_pages, nor any prerequisites. The 'token can access' clause implies a scope but not a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_creativesC
Get creatives attached to an ad.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The word 'Get' implies a read operation, but there is no mention of permissions, pagination, error handling, or return size. For a retrieval tool with zero annotation coverage, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple retrieval tool, though it sacrifices detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, the description leaves key invocation context missing: ad_id format is undefined, there is no usage guidance versus siblings, and no behavioral traits are disclosed despite the absence of annotations. For a 1-parameter tool this is materially incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and the single parameter ad_id is undocumented in both the schema and the description. 'Attached to an ad' implies the parameter identifies an ad, but no format, source, or example is given. This does not compensate for the complete lack of schema-level parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get creatives attached to an ad.' This clearly distinguishes it from sibling creation tools like create_ad_creative or update_ad_creative. However, it does not explicitly differentiate from other read siblings such as get_ad_details or get_ad_previews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives or prerequisites. The implied context is that it fetches creatives for a known ad, but the description never states when an agent should call it instead of get_ad_details or get_ad_previews.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_detailsC
Get one ad with details.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden, and it discloses almost nothing. It does not state what happens if the ad_id is invalid, whether permissions are required, or what "details" encompasses. The existence of an output schema softens the return-value gap, but the description adds negligible behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no waste and the resource is front-loaded, which is structurally sound. But it is terse to the point of under-specification rather than genuinely efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema is present, so return values need not be explained, keeping this a simple single-resource read. Still, with no annotations and 0% parameter coverage, the definition leaves the agent guessing about the identifier's semantics and the tool's boundary with the sibling ad getters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter ad_id is only documented by its name and type. The description says nothing about the identifier's format, source, or constraints, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (get) and resource (ad) with singular scope, which distinguishes it from get_ads by cardinality. However, "with details" is vague filler that doesn't clarify what fields are returned or how it differs from get_ad_creatives/get_ad_previews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_ads (list) or the other ad-related getters. Usage must be inferred entirely from the tool name and the fact that ad_id is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_previewsC
Generate ad previews for a specific format.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| ad_format | No | DESKTOP_FEED_STANDARD |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about whether previews are cached, whether generating has side effects, what permissions are needed, or what the output looks like. For an unannotated 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is efficient. It is arguably too terse given the undocumented parameters, but on pure conciseness it earns credit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but with 0% parameter coverage and no annotations the description is not complete enough for an agent to invoke the tool correctly. It should at least enumerate format values and clarify the ad_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so neither ad_id nor ad_format is documented anywhere. The description references 'format' but gives no valid values or syntax, and never explains ad_id, leaving the agent unable to use the parameters beyond guessing the default DESKTOP_FEED_STANDARD.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Generate') and resource ('ad previews'), so the core action is understandable. However, it offers no differentiation from adjacent read tools like get_ad_details or get_ad_creatives, and the mismatch between the 'get_' name and the 'Generate' verb is unexplained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The single clause 'for a specific format' hints at a condition but never states when to use previews versus get_ad_details, nor any prerequisites. There is no when-to-use or when-not-to-use guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adsC
Get ads with optional filters.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| adset_id | No | ||
| campaign_id | No | ||
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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" weakly implies a read operation, but the description says nothing about pagination (despite a limit param), default result set size, ordering, or permissions. For a list-returning tool with zero structured behavioral coverage, this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the action. There is no waste, though there is also almost no substance to waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be described, but with no annotations, 0% schema coverage, and four undocumented parameters, the description leaves the agent without enough to invoke confidently. It should at minimum explain what the filters do and how results are bounded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description names none of the four parameters (limit, adset_id, campaign_id, ad_account_id). It only says "optional filters," leaving the agent to infer from parameter titles alone that these are scope-narrowing filters and that limit is a page size. The description adds almost nothing beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get ads" names a specific verb and resource, so the basic action is clear. However, it offers no differentiation from siblings like get_ad_details, get_ad_previews, or get_insights, all of which also retrieve ad-related data. Beyond the bare action, an agent cannot tell from the description what scope of ads this returns versus those tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"with optional filters" implies the tool is used to narrow a list of ads, but it names no alternatives and no when-to-use or when-not-to-use conditions. With siblings like get_ad_details competing for the same retrieval need, the absence of routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adset_detailsC
Get one ad set in detail.
| Name | Required | Description | Default |
|---|---|---|---|
| adset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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, but it only says 'Get one ad set in detail.' It doesn't disclose permissions needed, whether it's read-only (though 'get' implies read), rate limits, or what fields are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise, front-loaded with the verb and resource. However, it's arguably too terse, missing potential useful context that could be added without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there's a single parameter with no schema description and an output schema exists, the description is minimally adequate. But with no annotations, it should provide more behavioral context such as read-only nature or typical use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single parameter 'adset_id'. The description doesn't describe the parameter, but with one required string parameter that is self-explanatory, a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (get) and resource (one ad set) in detail. It distinguishes from get_adsets (plural list) by specifying 'one' ad set, but doesn't explicitly name the sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this tool versus get_adsets or get_ad_details. The description is purely about what it does, not when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adsetsC
Get ad sets, optionally filtered by campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| campaign_id | No | ||
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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, and it discloses almost nothing. It implies a read operation via "Get" but does not mention pagination behavior despite a limit parameter, default page size, required permissions, or ordering of results. For a zero-annotation 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the core purpose front-loaded and no wasted words. It is arguably terse to the point of under-specification, but as a structure/conciseness matter it is clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but for a 3-parameter tool with no annotations and 0% parameter coverage the description omits too much. An agent cannot tell how to scope results by ad account or what limit does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 3 parameters, so the description must compensate and largely does not. It hints at campaign_id filtering but says nothing about ad_account_id scoping or what the limit parameter controls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get ad sets") plus a scope hint ("optionally filtered by campaign"). However, it never differentiates itself from the sibling get_adset_details, so an agent must infer that this is the list endpoint versus the singular detail endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "optionally filtered by campaign" implies the campaign_id parameter is available but gives no guidance on when to use this tool versus get_adset_details, get_ads, or get_campaigns. No prerequisites, no exclusions, no alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaign_detailsC
Get one campaign with rich details.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and largely fails it. 'Rich details' hints at a heavier payload but does not state required permissions, whether errors occur for unknown IDs, or any rate-limit/caching behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words, and the resource is front-loaded. It is efficient, though the terseness contributes to the vagueness flagged elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, the description need not enumerate return fields, which limits the damage. Still, with no annotations covering safety and no parameter explanation, a caller of this otherwise simple single-parameter tool is left with noticeable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the single parameter campaign_id is documented nowhere. The description does not clarify its expected format or where to obtain it, leaving the caller with no semantic detail beyond the schema's type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (one campaign), and 'one campaign' implies a single-item fetch as opposed to the list-oriented sibling get_campaigns. However, it never names that sibling or otherwise differentiates beyond the singular article.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of get_campaigns or analyze_campaign, nor any stated prerequisite such as needing a valid campaign_id obtained elsewhere. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaignsC
Get campaigns with optional status/objective filters.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | ||
| objective | No | ||
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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. It does not state pagination behavior, default result scope, that limit defaults to 50, or how ad_account_id constrains results, leaving the agent with little beyond the fact that filters are optional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the resource and filter capability front-loaded and no wasted words. It is lean to the point of being under-specified, but it is structurally sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters at 0% schema coverage and no annotations, the description should clarify scope (ad_account_id), result limits, and filtering syntax. An output schema exists so return values needn't be described, but the input-side gaps are substantial for a tool with this many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, yet it only alludes to status and objective and mentions nothing about limit or ad_account_id. No accepted value formats or defaults are conveyed for any parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get campaigns) plus the filtering capability, which signals a list operation rather than a single-record fetch. It does not, however, name the closely related sibling get_campaign_details or otherwise say how it differs from a detail lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'with optional status/objective filters' implies you can narrow results, but there is no explicit when-to-use guidance, no exclusions, and no mention of the alternative get_campaign_details or get_campaign_templates. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaign_templatesA
Get built-in campaign templates by objective.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral load. 'Get' plus 'built-in' reasonably conveys a safe, read-only fetch of system-provided (not user-created) content, and the output schema covers the return shape, but nothing is said about permissions, caching, or freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the key scoping qualifier ('by objective') placed where it is read first. Nothing is wasted and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool whose return values are documented by an output schema, the description is nearly sufficient. It misses only the downstream relationship to create_campaign_from_template, which matters for an agent deciding whether to call this first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. The phrase 'by objective' is the only semantic content and is not actionable since no objective argument exists, but this is a natural consequence of a no-arg tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (built-in campaign templates) plus the organizing dimension (objective). It does not distinguish itself from the sibling create_campaign_from_template, which an agent would likely need to know about, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: no mention that these templates are the input to create_campaign_from_template, no exclusions, and no note about whether this is a discovery step versus a listing of already-configured campaigns. 'By objective' hints at a filter concept but no parameter exists to express it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insightsC
Get insights on account or a specific campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | campaign | |
| limit | No | ||
| breakdowns | No | ||
| campaign_id | No | ||
| date_preset | No | last_30d | |
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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. It implies a read via 'Get' but says nothing about whether this is read-only, what date range defaults apply, how 'limit' paginates, or how breakdowns affect the result shape — all things an agent needs for a 6-parameter analytics call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no wasted words and the tool's scope is front-loaded. But terseness here is under-specification rather than efficiency, so it only reaches the minimum viable level.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, which helps. Still, a six-parameter tool with zero annotation coverage, zero schema descriptions, and no usage guidance is left materially incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six parameters, so the description must compensate and largely does not. The phrase 'account or a specific campaign' loosely hints at ad_account_id vs. campaign_id, but level, limit, breakdowns, and date_preset are entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a verb ('get'), a resource ('insights') and a scope ('account or a specific campaign'), which is better than a tautology. However, it does not differentiate itself from the sibling get_account_insights, which sounds like it covers exactly the 'account' half of the scope, leaving the agent unsure which tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no named alternative. Given the closely overlapping sibling get_account_insights and the analytics siblings (compare_performance, analyze_campaign), the agent is left to guess which tool serves which need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_behaviorsC
Search behavior targeting options.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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, and it discloses nothing about pagination, result count behavior, rate limits, or required permissions. It only weakly implies a read-only lookup by using 'Search'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence and is front-loaded, which is good structurally. However, the brevity reflects under-specification rather than disciplined conciseness, so it cannot score above adequate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema means return values need not be explained, but for a two-parameter tool with 0% schema coverage and no annotations, the description should define the query semantics and disambiguate from sibling search tools. It does neither.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, so the description must carry the semantic load; it does not. Nothing is said about what 'query' should contain (keyword, ID, category?) or what 'limit' governs beyond its default of 25.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource pair ('Search behavior targeting options') does identify the action and subject, which is more than a tautology. But it gives no differentiation from closely related siblings such as search_interests, search_demographics, and search_geo_locations, so an agent cannot tell from the description which search to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of the sibling search_* tools, and no conditions or prerequisites. The description leaves the agent to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_demographicsC
Search demographic targeting options.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden of behavioral disclosure. It doesn't state whether this is read-only (implied by 'search' but not confirmed), how results are paginated, what a match looks like, or whether results are localized. For a search tool with zero annotation coverage this is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded, no wasted words. However, it is arguably under-specified rather than concise, which caps the score below 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained. But with no annotations, 0% param coverage, and three sibling search_* tools, the description leaves the agent unable to disambiguate or to use the parameters correctly. Incomplete for the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both parameters are undocumented in structured metadata. The description mentions neither 'query' semantics (substring vs full-text, expected format) nor 'limit' behavior. Since this is not a zero-param tool and coverage is poor, description must compensate and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (demographic targeting options), which is clear on its own. Sibling search_interests and search_behaviors make the resource family inferable, but the description doesn't distinguish itself from those siblings (e.g., what qualifies as a demographic option vs an interest or behavior).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the two other search_* targeting tools. An agent has to guess whether a query like 'young adults' belongs here or in search_interests. No prerequisites, no exclusions, no alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_geo_locationsC
Search geolocation targeting options.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| location_types | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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, and it does almost nothing. It does not disclose that this is a read-only lookup, whether results are paginated, how matching works (prefix, fuzzy, exact), or the meaning of the location_types filter. For an unannotated read tool this is a significant disclosure gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded and free of waste, which is appropriate for the size. It is concise, though the brevity reflects under-specification rather than crispness backed by substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters, zero schema description coverage, and no annotations, the description should carry a lot and instead carries almost nothing. The presence of an output schema relieves it of explaining return values, but it still fails to describe parameter meaning, matching behavior, or usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does not. It never explains that 'query' is the required search string, what values 'location_types' accepts, or the role of 'limit'. All three parameters are undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (search) and resource (geolocation targeting options), which is clear enough on its face. However, it is not differentiated from siblings like search_interests, search_behaviors, or search_demographics, which share the identical 'search_' targeting-option pattern. The description gives no signal about what geo targeting uniquely returns or how it differs from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative guidance. An agent cannot tell from this sentence whether to reach for search_geo_locations vs search_demographics vs search_interests when building an audience. No prerequisites or context are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_interestsC
Search interest targeting options.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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, and it delivers almost nothing. It does not state whether results are paginated, ranked, capped by limit, or whether any auth/permission is required. Only the implicit read-only nature of 'Search' is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is efficient and front-loaded, but at this length it is under-specified rather than truly concise. It earns its place but leaves obvious room to add parameter and usage detail without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and that lowers the bar. Still, for a 2-param search tool with zero schema coverage and no annotations, the description omits query semantics, limit behavior, and sibling differentiation, leaving the agent under-equipped to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema documents neither parameter beyond its title. The description says nothing about the query string's semantics (free text? exact match?) or the limit parameter (default 25, but max/behavior unknown). It fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (interest targeting options), so the basic purpose is clear. However, it does not differentiate from close siblings like search_behaviors and search_demographics, which an agent could easily confuse it with. Vague enough that scope (what an 'interest' is, granularity) is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no mention of alternatives. Given three near-identical search_* siblings (interests, behaviors, demographics), the absence of routing guidance is a real gap. The agent must guess 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.
suggest_budget_allocationC
Suggest budget shifts based on campaign CTR and CPC.
| Name | Required | Description | Default |
|---|---|---|---|
| date_preset | No | last_30d | |
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It indicates the tool produces suggestions based on CTR and CPC, implying a read-only recommendation, but it does not explicitly state that no changes are made, what account scope is used, or whether authentication or specific permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is efficient, though its extreme brevity leaves little room for necessary context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, the description omits prerequisites, scope, and any mention of the two input parameters, leaving significant gaps for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for two parameters, date_preset and ad_account_id, and the description does not mention either one. CTR and CPC are not parameters, so no parameter meaning is added beyond what the schema names provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: suggesting budget shifts. It also names the basis (campaign CTR and CPC), which helps an agent understand the tool's core function. However, it does not differentiate this tool from adjacent siblings like get_account_opportunity_recommendations or analyze_campaign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention prerequisites, whether it analyzes existing campaigns or requires prior setup, or what happens after suggestions are returned. Usage context is only implied by the verb 'suggest'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_adC
Update ad status, name, or creative.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| ad_id | Yes | ||
| status | No | ||
| creative_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says 'update' but doesn't disclose whether this requires specific permissions, whether changes are reversible, what happens to unspecified fields (they default to null), or any rate limits. It only lists mutable fields that are already implied by the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no waste. It efficiently lists the main updateable attributes, though it could be slightly more structured by including conditions or prerequisites.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of an update operation with no annotations, 0% schema coverage, and four parameters, the description is incomplete. It doesn't address return values (though an output schema exists), potential side effects, or permissions. For a mutation tool, this is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions status, name, and creative, which maps to three of the four parameters (ad_id is required and implied). However, it doesn't explain the format of these parameters, valid values for status, or what creative_id refers to (e.g., an ID from get_ad_creatives).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates an ad with specific fields (status, name, creative). It distinguishes itself from siblings like create_ad and delete_ad through the verb 'update', though it doesn't explicitly differentiate from update_adset or update_ad_creative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, conditions, or exclusions. Sibling tools like update_ad_creative and update_adset exist, so clarification would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_creativeC
Update mutable creative fields.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| name | No | ||
| title | No | ||
| creative_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says 'update' implies mutation but does not state what is mutable, whether changes are reversible, auth requirements, or that omitted fields are left unchanged — significant gaps 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words, but it is under-specified rather than genuinely concise — the brevity comes at the cost of meaning rather than from efficient expression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, but the description leaves the four parameters, the mutation behavior, and any usage context entirely unexplained — inadequate for a 4-param write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters (creative_id, body, name, title). The description says 'mutable creative fields' but does not name or explain any of them, so it fails to compensate for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource (update a creative), which distinguishes it from create_ad_creative and get_ad_creatives by action. However 'mutable creative fields' is vague — it names no actual field (body/name/title) and gives no sense of scope beyond the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus alternatives. With siblings like update_ad, create_ad_creative, and create_asset_feed_ad_creative, an agent gets no guidance on which tool fits a given intent or what preconditions exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_adsetD
Update ad set fields.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| adset_id | Yes | ||
| end_time | No | ||
| targeting | No | ||
| daily_budget | No | ||
| lifetime_budget | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden for a mutation tool, and it discloses nothing. It does not say whether unspecified fields are left untouched, whether changes are reversible, whether budget changes require special authorization, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is short but vacuous rather than efficient; brevity here comes from under-specification, not from front-loading useful content. It wastes no words but also communicates nothing actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no annotations and no schema descriptions, the definition is grossly incomplete. Although an output schema exists (so return values need not be explained), the absence of any input, permission, or usage context leaves the agent unable to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six parameters (status, adset_id, end_time, targeting, daily_budget, lifetime_budget), and the description only says 'fields' generically. Formats for end_time, budget units/currency, and the structure of targeting are entirely undocumented, so an agent cannot populate the schema confidently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name almost verbatim ('Update ad set fields') without naming which fields matter or how this differs from siblings like update_ad, update_campaign, or update_ad_creative. It technically conveys a verb and resource, but adds no specificity beyond the identifier itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus create_adset, delete_adset, or get_adset_details, and no mention of prerequisites, partial-update semantics, or required permissions. An agent gets zero routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_campaignC
Update campaign status/budget/name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| campaign_id | Yes | ||
| daily_budget | No | ||
| lifetime_budget | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states 'update' but omits whether changes are reversible, whether budget changes take effect immediately, what partial updates do to unset fields, and any permission requirements. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded and wastes no words. Under-specification is the issue, not verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, one required, 0% schema coverage, no annotations, and a mutation operation, the description is far too thin. An output schema exists, so return values need not be explained, but the behavioral and parameter gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does not. It mentions status, budget, and name but ignores campaign_id (the only required parameter), the distinction between daily_budget and lifetime_budget, and valid status values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (update) and resource (campaign) and lists the mutable fields (status/budget/name), so the purpose is identifiable. However, it does not distinguish this tool from siblings like update_adset or update_ad_creative beyond the resource noun, and 'budget' is ambiguous between the two budget parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, no mention of alternatives such as update_adset or create_campaign. The agent must infer that this edits an existing campaign by name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_ad_imageC
Upload an image by public URL to use in creatives.
| Name | Required | Description | Default |
|---|---|---|---|
| image_url | Yes | ||
| ad_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It doesn't state whether the URL is fetched asynchronously, format/size limits, whether the image persists or is deduplicated, or what permissions the ad_account_id requires. 'By public URL' hints at a fetch requirement but nothing more is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no waste, front-loading the action and mechanism. Appropriately sized for the operation described.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values needn't be explained, but the description is still thin for a mutation/upload tool with no annotations and 0% schema coverage. Missing: auth context for ad_account_id, URL fetch semantics, and validation limits, leaving real gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that image_url is a public URL (adding meaning beyond the bare 'Image Url' title) but says nothing about ad_account_id — what it's for, whether it's required, or how it affects the upload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Upload an image') and clarifies the mechanism ('by public URL') and intended use ('to use in creatives'). This distinguishes it from sibling 'upload_ad_video' by resource type, though it doesn't explicitly contrast with 'create_ad_creative'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage is derivable from 'to use in creatives' — the image is a prerequisite asset for creative creation. However, no explicit when-to-use/when-not guidance, and the relationship to siblings like create_ad_creative (must you upload before creating a creative?) is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_ad_videoB
Upload a local video file to the ad account.
Let op: video_file_path moet op deze machine bestaan, omdat de SDK hier direct uploadt.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| description | No | ||
| ad_account_id | No | ||
| video_file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the local-file precondition but says nothing about permissions, upload size/duration limits, processing latency, or what happens on repeated uploads of the same file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and then the one critical constraint. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. But with zero annotations and 0% schema coverage, a mutation/upload tool with a required filesystem precondition should do much more: auth requirements, size limits, and the meaning of the three optional params are all absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters. The description adds meaning only for video_file_path (must exist locally), leaving title, description, and ad_account_id entirely undocumented in both schema and description. It partially compensates but leaves a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('Upload a local video file') and the target ('to the ad account'), which distinguishes it from sibling upload_ad_image. It does not name or differentiate from create_ad_video_creative, which also produces a video asset, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note that the file must exist on this machine implies a usage precondition but no explicit when-to-use or when-not-to-use guidance compared to alternatives like create_ad_video_creative.
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.
39 tool updates
v0.1.0- First observed
analyze_campaign - First observed
compare_performance - First observed
create_ad - First observed
create_ad_creative - First observed
create_ad_video_creative - First observed
create_adset - First observed
create_asset_feed_ad_creative - First observed
create_campaign - First observed
create_campaign_from_template - First observed
delete_ad - First observed
delete_adset - First observed
delete_campaign - First observed
estimate_audience_size - First observed
get_account_info - First observed
get_account_insights - First observed
get_account_opportunity_recommendations - First observed
get_account_pages - First observed
get_ad_accounts - First observed
get_ad_creatives - First observed
get_ad_details - First observed
get_ad_previews - First observed
get_ads - First observed
get_adset_details - First observed
get_adsets - First observed
get_campaign_details - First observed
get_campaign_templates - First observed
get_campaigns - First observed
get_insights - First observed
search_behaviors - First observed
search_demographics - First observed
search_geo_locations - First observed
search_interests - First observed
suggest_budget_allocation - First observed
update_ad - First observed
update_ad_creative - First observed
update_adset - First observed
update_campaign - First observed
upload_ad_image - First observed
upload_ad_video
TDQS
Scored across 39 tools
Most tools target clearly distinct resources and actions (campaign vs adset vs ad vs creative). Some overlap remains between get_insights, get_account_insights, and compare_performance, and between get_ad_accounts and get_account_info, but descriptions help differentiate.
The set is predominantly snake_case with a verb_noun pattern. Minor deviations exist, such as get_account_info versus get_campaign_details/get_adset_details/get_ad_details, and multiple similar prefixes for creative tools.
39 tools is heavy for this domain and exceeds the 25+ threshold for 'too many'. Several tools could be consolidated, including the multiple creative-creation tools, insight variants, and separate targeting search tools.
Core CRUD/lifecycle coverage exists for campaigns, adsets, ads, and creatives, plus targeting searches, uploads, previews, and insights. Minor gaps include no delete_ad_creative and no clear adset/ad-level insights tool.
Maintenance
Related MCP Connectors
Read and manage Meta Ads campaigns, ad sets, ads, audiences, pages and Business Manager. You provide
Query Meta Ads performance data — accounts, campaigns, ad sets, ads, metrics & settings.
60+ Meta Ads tools for AI agents: audits, campaign management, audiences and CAPI tracking.
Meta Ads MCP (Facebook + Instagram) - analyze performance, manage budgets, pause campaigns.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to manage Facebook and Instagram advertising via the Meta Marketing API. It provides comprehensive tools for campaign lifecycle management, performance analytics, audience targeting, and creative optimization.18 npm200MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Facebook and Instagram advertising data through the Meta Marketing API. It supports full campaign lifecycle management, performance analytics, audience targeting, and creative optimization.1,242 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive management of Facebook and Instagram advertising campaigns via the Meta Marketing API, supporting campaign creation, targeting optimization, and budget management. It provides tools for detailed performance reporting and creative analysis, including insights into spend, ROI, and audience breakdowns.MIT
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to manage Facebook and Instagram advertising campaigns through the Meta Marketing API. Supports full campaign lifecycle management, performance analytics, audience targeting, and creative optimization.-