meta-ads-mcp
This MCP server lets you manage Facebook & Instagram advertising end-to-end through the Meta Marketing API.
Campaigns & Ads: create, list, update, delete, copy campaigns, ad sets, and ads; preview ads and estimate delivery.
Creatives & Media: build creatives/dynamic creatives, upload images and videos, manage Instant Experience canvases, generate previews.
Audiences & Targeting: manage custom/lookalike/saved audiences, add users, search interests and locations, estimate reach.
Insights & Reporting: pull account/campaign/ad set/ad performance metrics and run async reports.
Leads: create and list lead forms, retrieve lead data.
Catalog & Commerce: manage catalogs, product sets, products, feeds, and batch operations.
Automation & Experiments: create/update automated rules and A/B test experiments.
Conversions: send server-side and offline conversion events.
Budget, Brand Safety, Account & Business: manage budget schedules, RF predictions, block lists, ad accounts, business users/pages, system users, and tokens.
Ad Library: search public competitor ads.
Provides tools for managing Facebook ad campaigns, ad sets, ads, and lead generation forms, including performance tracking and audience targeting.
Enables management of Instagram advertising through the Meta Marketing API, supporting creative asset management and campaign performance analysis.
Comprehensive integration with the Meta Marketing API v25.0 for managing ad accounts, product catalogs, business assets, automated rules, and cross-platform marketing insights.
meta-ads-mcp
MCP server for the Meta Marketing API v26.0 — 134 tools for managing Facebook & Instagram ad campaigns, audiences, creatives, insights, catalogs, and more.
When to Use
Use this MCP when you need to:
"Create a new Facebook ad campaign" — use
create_campaign,create_adset,create_ad, andcreate_creativeto build a full funnel"Check how my ads are performing today" — use
get_account_insightsorget_campaign_insightswith today's date range"Pause all campaigns with ROAS below 2" — use
list_campaigns+get_campaign_insightsto find underperformers, thenupdate_campaignto pause"Set up A/B test between two ad creatives" — use
create_experimentto run a controlled test between ad sets"Create a lookalike audience from my customers" — use
create_custom_audience,add_users_to_audience, thencreate_lookalike_audience"Upload ad images and create a carousel ad" — use
upload_imagefor each image, thencreate_creativewith carousel format"Get a detailed performance report for last 30 days" — use
create_async_reportfor large date ranges, thenget_async_reportto retrieve"Search the Facebook Ad Library for competitor ads" — use
search_ad_libraryto find public ad data"Set up automated rules to pause underperforming ads" — use
create_rulewith conditions like CPA > threshold"Manage my product catalog for dynamic ads" — use
create_catalog,create_feed, andupload_feedto set up dynamic product ads
Related MCP server: Meta Ads MCP Server
What's New in v1.6.0
create_adsetacceptsbid_amount; creation and updates acceptdsa_beneficiaryanddsa_payor. For EU-targeted ads, supply each required value or configure the corresponding account default. The payer does not automatically copy the beneficiary.Ad and ad-set lists use campaign/ad-set edges when scoped. Combined campaign/ad-set filters and explicit account IDs are checked for consistency.
create_adsetandupdate_adsetacceptdestination_type,attribution_spec,adset_schedule,pacing_type, andvalidate_only. Existing calls still perform their requested writes; setvalidate_only: trueto ask Meta to validate without mutation. A successful validation does not create an ad set.Hourly schedules accept minute ranges and days (Sunday = 0); specify
timezone_typeasUSERorADVERTISER. Scheduling addsday_partingpacing. Meta validates effective lifetime budgeting, objective eligibility, and attribution restrictions. No budget or status is changed automatically.create_custom_audienceaccepts a JSONrule,pixel_id, andretention_daysfor rule-based audiences. Audience creation is a real write, not a dry run.
See the official ad-set creation and ad-set update contracts.
What's New in v1.5.0
Conversion tools validate the existing
eventsJSON input and send it as the requireddataarray. Usetest_event_codeto verify receipt in Events Manager; offline events use a dataset ID andaction_source=physical_storefor store events.Creative creation accepts top-level
destination_spec,wamo_whatsapp_identity_spec, anddegrees_of_freedom_specJSON objects. Dynamic creatives also acceptobject_story_specfor Page identity. To opt out of the v26 Shops destination default, setdestination_specto{"destination_type":"WEBSITE_AND_SHOP_OPT_OUT"}.Includes complete async-report result retrieval, token extension, and budget schedule fixes since v1.4.1. Some detailed Insights breakdowns require an Ads Manager opt-in; an empty response does not necessarily mean zero performance.
Installation
Requires Node.js 20 or later, including the MCP host's npx environment.
{
"mcpServers": {
"meta-ads": {
"command": "npx",
"args": ["-y", "@mikusnuz/meta-ads-mcp"],
"env": {
"META_ADS_ACCESS_TOKEN": "your-access-token",
"META_AD_ACCOUNT_ID": "123456789",
"META_APP_ID": "your-app-id",
"META_APP_SECRET": "your-app-secret",
"META_BUSINESS_ID": "your-business-id",
"META_PIXEL_ID": "your-pixel-id"
}
}
}
}Environment Variables
Variable | Required | Description |
| Yes | Meta Marketing API access token |
| Yes | Ad account ID (numeric, without |
| Optional | App ID — required for token exchange/extension and debug |
| Optional | App secret — required for token exchange/extension and debug |
| Optional | Business Manager ID — required for business tools |
| Optional | Pixel ID — required for conversion tools |
Tools (134)
Campaign Management (25)
Tool | Description |
| List campaigns with filtering and pagination |
| Get campaign details by ID |
| Create a new campaign |
| Update campaign settings |
| Delete a campaign |
| Copy an existing campaign with ad sets and ads |
| List ad sets within a campaign |
| List ads within a campaign |
| Get leads from a campaign |
| List ad sets with filtering |
| Get ad set details by ID |
| Create a new ad set |
| Update ad set settings |
| Delete an ad set |
| Copy an existing ad set to same or different campaign |
| Get human-readable targeting description |
| List ads within an ad set |
| Get leads from an ad set |
| List ads with filtering |
| Get ad details by ID |
| Create a new ad |
| Update ad settings |
| Delete an ad |
| Copy an existing ad to same or different ad set |
| Generate ad preview HTML |
| Get delivery estimate for an ad set |
Creatives (6)
Tool | Description |
| List ad creatives |
| Get creative details |
| Create a new ad creative |
| Update an ad creative |
| Create a dynamic creative |
| Generate ad preview from creative spec without an existing ad |
Media Assets (12)
Tool | Description |
| List ad images |
| Upload an image from a URL or local file |
| Get image details |
| Delete an image |
| List ad videos |
| Upload a video from a URL or local file |
| Get video details |
| Delete a video |
| List Instant Experience canvases |
| Get canvas details |
| Create a canvas |
| Delete a canvas |
Audiences & Targeting (16)
Tool | Description |
| List custom audiences |
| Get audience details |
| Create a custom audience |
| Update audience settings |
| Delete an audience |
| Add users to a custom audience |
| Remove users from a custom audience |
| Create a lookalike audience |
| Get audience health, delivery status, and match rate |
| List saved audiences |
| Get saved audience details |
| Search targeting interests, behaviors, demographics |
| Search targetable locations |
| Browse targeting category tree |
| Estimate audience reach for targeting spec |
| Get related targeting suggestions |
Insights & Reporting (6)
Tool | Description |
| Account-level performance metrics |
| Campaign-level performance metrics |
| Ad set-level performance metrics |
| Ad-level performance metrics |
| Create an async insights report |
| Poll the report-run status, then fetch its |
date_preset values are lowercase Graph API identifiers such as today, yesterday, last_7d, and last_30d. create_async_report always creates an asynchronous job; get_async_report returns status immediately and, by default, fetches the paginated result edge after the status becomes Job Completed.
Leads (5)
Tool | Description |
| Get leads from a lead form |
| Get a single lead by ID |
| Create a new lead generation form on a page |
| List lead gen forms for a page |
| Get lead form details |
Catalog & Commerce (17)
Tool | Description |
| List product catalogs |
| Get catalog details |
| Create a product catalog |
| Update a catalog |
| List product sets in a catalog |
| Create a product set |
| Get product set details |
| Update a product set |
| List products in a catalog |
| Get product details |
| Update a product |
| List data feeds for a catalog |
| Create a data feed |
| Upload data to a feed |
| Get feed upload history |
| Batch create, update, or delete products (up to 5,000/request) |
| Check status of a catalog batch operation |
Automation & Rules (5)
Tool | Description |
| List automated rules |
| Get rule details |
| Create an automated rule |
| Update a rule |
| Delete a rule |
Experiments (5)
Tool | Description |
| List A/B test experiments |
| Create an experiment |
| Get experiment details |
| Update an experiment |
| Get experiment results |
Conversions (4)
Tool | Description |
| Send server-side conversion event via Conversions API |
| Send an offline conversion event |
| List offline event sets |
| Create an offline event set |
Budget & Planning (8)
Tool | Description |
| List schedules from a campaign or ad set |
| Create a schedule on a campaign or ad set |
| Update a budget schedule |
| Delete a budget schedule |
| List Reach & Frequency predictions |
| Create a Reach & Frequency prediction |
| Get prediction details |
| Delete a prediction |
Brand Safety (5)
Tool | Description |
| List publisher block lists |
| Create a block list |
| Add URLs/domains to a block list |
| Remove entries from a block list |
| Delete a block list |
Account & Business (15)
Tool | Description |
| Get ad account details |
| List ad accounts for a business |
| Update ad account settings |
| Get account activity log |
| List users with access to the account |
| List businesses you have access to |
| Get business details |
| List ad accounts in a business |
| List users in a business |
| Add a user to a business |
| Remove a user from a business |
| List Facebook Pages owned by a business |
| List Instagram accounts owned by a business |
| List system users for a business |
| Create a system user |
Auth & Token (3)
Tool | Description |
| Exchange short-lived token for long-lived token |
| Extend a valid long-lived user token through the documented exchange flow |
| Debug/inspect token metadata |
Ad Library (1)
Tool | Description |
| Search Meta Ad Library for public ad data |
Resources (3)
URI | Description |
| Ad account overview — status, balance, currency, timezone, and total spend |
| All active campaigns with budget information |
| Today's spending summary — spend, impressions, clicks, and reach |
Prompts (3)
Prompt | Description |
| Step-by-step guide to create a full ad campaign from scratch |
| Analyze ad performance with detailed breakdowns and recommendations |
| Build and refine target audiences using Meta's targeting tools |
Permissions Required
Your Meta access token needs the following permissions depending on which tools you use:
Permission | Tools |
| All campaign, ad set, ad, and creative CRUD operations |
| All read/list operations and insights |
| Business tools, system users, account assignments |
| Lead form and lead data tools |
| Catalog, product set, product, and feed tools |
| Lead forms linked to pages |
License
MIT
Available Tools
134 toolsadd_business_userA
Add a user to the configured business by email. Requires META_BUSINESS_ID env var.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Role for the new user | |
| Yes | Email address of the user to add |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only mentions the env var requirement and doesn't disclose behavior for edge cases (e.g., duplicate user, invalid role), side effects, or return values. For a mutation tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, direct sentences with no filler. The description is front-loaded with the action and includes a critical prerequisite in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with fully described schema, the description covers the main operation and prerequisite. However, the lack of any behavioral or return details makes it merely adequate rather than thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, so the schema already documents email and role. The description adds minor context (configured business, by email) but does not go beyond the schema for parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add') and the resource ('a user to the configured business') with a specific method ('by email'). It distinguishes itself well from sibling tools like remove_business_user and list_business_users.
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 a prerequisite (META_BUSINESS_ID env var) but does not explicitly contrast with alternatives or state when to use this tool over others. Usage is implied by the clear action and sibling context, but no explicit guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_block_listA
Add publisher URLs to an existing block list.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | JSON array of URLs to block (e.g. '["example.com","bad-site.com"]') | |
| list_id | Yes | Block list ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. 'Add... to an existing block list' clearly indicates a mutation, but it does not disclose side effects, idempotency, whether duplicates are allowed, or if changes are reversible. This is minimal but not misleading; it provides the core behavioral trait (adding URLs) but lacks deeper 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?
A single, clear sentence with no filler or redundancy. It fully captures the action and scope without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation, the description is adequately complete: it names the action, the resource, and the precondition ('existing'). No output schema is present, so return details are not required. The sibling tools provide additional context for list management, but the description itself is sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds extra meaning by specifying 'publisher URLs' (not just any URLs) and 'existing' block list (not creation). This goes beyond the schema's generic 'Block list ID' and 'URLs to block', enriching the semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Add' and clearly states the resource: 'publisher URLs to an existing block list.' This distinguishes it from sibling tools like create_block_list (new list), remove_from_block_list (removal), and list_block_lists (listing).
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 'existing block list' implies the tool is for modifying an already-created list, which gives some context. However, it does not explicitly mention alternatives or when not to use this tool (e.g., use create_block_list if the list doesn't exist). Sibling names provide hints but the description itself offers no direct guidance beyond the implied precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_users_to_audienceA
Add users to a custom audience. Payload must be a JSON string containing hashed user data with a schema array defining the data types (e.g. EMAIL, PHONE, FN, LN).
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | JSON string: {schema: ['EMAIL','PHONE',...], data: [['hash1','hash2',...], ...]}. All PII must be SHA-256 hashed. | |
| audience_id | Yes | Audience ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially carries the transparency burden by specifying that the payload must be hashed and formatted as a JSON string with a schema. However, it does not disclose side effects, prerequisites (e.g., audience must exist), idempotency, or error behavior, leaving significant gaps for a mutating 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?
The description is two sentences, with the primary action front-loaded and the payload constraint stated in a single additional sentence. There is no filler or redundancy, making it maximally efficient for its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter mutation tool, the description covers the core action and essential payload format, but omits details like response behavior, whether the audience must pre-exist, and handling of duplicate users. Given no annotations or output schema, a slightly richer description would be expected for full 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?
Schema coverage is 100%, so both parameters are documented. The description adds a concrete example of schema values (EMAIL, PHONE, FN, LN) that supports but mostly repeats the schema's payload description. It does not introduce new semantic meaning beyond highlighting the hashing requirement, which is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Add') and names both the resource ('users') and target ('custom audience'), making the tool's function immediately obvious. It also distinguishes this from sibling tools like remove_users_from_audience and create_custom_audience by showing it adds to an existing audience.
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 (adding users to an audience) but provides no explicit guidance on when to use this tool versus alternatives, such as create_custom_audience or update_audience. There are no stated exclusions or conditions, so the usage context is only implied by the tool name and action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_productsA
Batch create, update, or delete products in a catalog. Supports up to 5,000 items per request. Update operations support upsert.
| Name | Required | Description | Default |
|---|---|---|---|
| requests | Yes | JSON array of batch requests. Each: {method: 'CREATE'|'UPDATE'|'DELETE', retailer_id: string, data?: {name, description, price, url, image_url, availability, ...}} | |
| catalog_id | Yes | Product catalog ID | |
| allow_upsert | No | Allow UPDATE to create items if they don't exist (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses the batch limit and upsert support, but omits crucial details such as whether operations are atomic, error handling, authentication requirements, or the asynchronous nature (given the sibling get_batch_status).
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 concise sentences deliver the essential information without redundancy. It is front-loaded with the core function and immediately adds limits and upsert behavior, making every word useful.
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 involves batch mutations and there is a sibling tool get_batch_status, but the description doesn't mention that results might be retrieved separately or how errors are reported. It covers limits and upsert but leaves out lifecycle details, which are significant for a batch operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with clear descriptions (requests format, catalog_id, allow_upsert). The description only reinforces the upsert behavior already captured in allow_upsert, adding no new semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool's function: batch create, update, or delete products in a catalog. It distinguishes from single-product siblings by emphasizing batch capability and includes concrete limits (5,000 items) and upsert 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?
The description implies this is the batch variant for product operations, but it doesn't explicitly compare to single-product tools or feed upload alternatives. It doesn't state when NOT to use it or mention alternative tools, so guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_adA
Copy an existing ad. Creates a duplicate within the same or different ad set.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name for the copied ad | |
| ad_id | Yes | Source ad ID to copy | |
| status | No | Status for copied ad (default PAUSED) | PAUSED |
| adset_id | No | Target ad set ID. If omitted, copies to same ad set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It mentions the core behavior (creates a duplicate) but does not disclose nuances like whether all fields are copied, the independence of the copy from the source, or permission requirements. It's adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the primary purpose and the key variation (same/different ad set). Every word earns its place, with no redundancy or unrelated information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple copy tool with fully documented parameters, the description covers the main action and scope. However, it lacks any mention of return values (e.g., new ad ID) or side effects, and with no output schema, this leaves a gap for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description does not add semantic meaning beyond the schema. The adset_id parameter's behavior (same/different ad set) is already documented in the schema, so the tool description adds no extra value here.
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?
Description clearly states the action ('Copy an existing ad') with a specific resource, and adds scope ('within the same or different ad set') that differentiates it from create/update/delete ad tools. It's a specific verb+resource pairing.
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 usage is implied by the description — copying an ad when you want a duplicate. However, there is no explicit guidance on when to prefer this over create_ad or update_ad, nor any alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_adsetA
Copy an existing ad set. Creates a duplicate within the same or different campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name for the copied ad set | |
| status | No | Status for copied ad set (default PAUSED) | PAUSED |
| adset_id | Yes | Source ad set ID to copy | |
| deep_copy | No | Copy ads within the ad set (default true) | |
| campaign_id | No | Target campaign ID. If omitted, copies to same campaign |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose side effects. It states 'Creates a duplicate' but omits critical behaviors such as deep_copy defaulting to true (copying internal ads) and status defaulting to PAUSED, which significantly affect the operation's outcome.
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 redundant terms. It efficiently communicates the core action and key option.
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 5 parameters, no output schema, and no annotations, yet the description only covers the basic purpose. It does not explain important behavioral defaults like deep copy or paused status, leaving an agent without critical information for 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 coverage is 100% as every parameter has a detailed description including defaults and behavior ('If omitted, copies to same campaign'). The tool description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific action ('Copy'), a resource ('ad set'), and a key variable ('same or different campaign'), clearly distinguishing it from sibling tools like copy_campaign and copy_ad.
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 when duplicating an ad set and clarifies the same/different campaign option, but does not explicitly state when not to use it or mention alternatives like create_adset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_campaignA
Copy an existing campaign. Creates a duplicate with optional name override. Copies structure including ad sets and ads.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name for the copied campaign. Defaults to 'Copy of <original>' | |
| status | No | Status for copied campaign (default PAUSED) | PAUSED |
| deep_copy | No | Copy ad sets and ads within the campaign (default true) | |
| campaign_id | Yes | Source campaign ID to copy |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the action (copy/duplicate) and what is copied, but does not mention side effects such as whether the original is modified, required permissions, cost implications, or the return value (e.g., new campaign ID). 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?
The description is two short sentences with no filler. It leads with the core action and follows with key details, making it highly efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and no output schema, the description should explain the return value and side effects. It covers the main functionality but omits what is returned (e.g., new campaign ID) and whether the original is untouched. It is adequate for basic understanding but incomplete for a copy operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds minimal context by mentioning 'optional name override' and 'copies structure including ad sets and ads', which loosely maps to the name and deep_copy parameters. It does not provide additional syntax or formatting details beyond the schema, hence the baseline score.
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 copies an existing campaign, with a specific verb and resource. It also distinguishes from sibling copy tools by noting it copies structure including ad sets and ads, making its 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?
The description implies usage: it is for copying an entire campaign, not just an ad set or ad. However, it does not explicitly mention alternatives like copy_adset or copy_ad, nor does it provide when-not-to-use guidance. The context is clear but not contrasted with other copy tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_adC
Create a new ad. Requires name, adset_id, and creative (JSON object_story_spec). Defaults to PAUSED status.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Ad name | |
| status | No | Ad status (default PAUSED) | PAUSED |
| adset_id | Yes | Parent ad set ID | |
| creative | Yes | JSON string of creative spec (object_story_spec with page_id, link_data/photo_data/video_data). Note: as of v26.0, a creative with applink_treatment=web_only can no longer be attached to an ad in a campaign using Website and App conversion locations — use automatic destination selection or a compatible manual destination instead. | |
| account_id | No | Ad account ID to create the ad in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| tracking_specs | No | JSON string of tracking specs array |
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 mentions the default PAUSED status, but that is already in the schema. It omits permissions, rate limits, side effects, dependency on an existing adset, and error behavior—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?
Two front-loaded sentences with no filler. The second sentence largely repeats schema facts (required fields, default status), so it does not fully earn its place, but the overall structure is 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 rich schema (100% coverage) compensates for the short description, but with no output schema and no annotations, the description leaves behavioral context, return value expectations, and creation prerequisites unstated. Adequate but with clear 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 100%, so the schema fully documents all parameters including creative and account_id. The description only repeats required fields and the default status, adding no meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('ad'), clearly distinguishing it from siblings like create_campaign, create_adset, and create_creative. It does not explicitly name or contrast with any sibling, which keeps it from 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 description gives no guidance on when to use this tool versus alternatives (e.g., create_creative first, update_ad, copy_ad). It only lists required parameters, which is schema information 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.
create_adsetB
Create a new ad set. Requires name, campaign_id, budget, optimization_goal, billing_event, and targeting. Defaults to PAUSED status.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Ad set name | |
| status | No | Ad set status (default PAUSED) | PAUSED |
| end_time | No | End time (ISO 8601) | |
| dsa_payor | No | Payer of EU-targeted ads; does not automatically copy dsa_beneficiary. May use the account's saved default. | |
| targeting | Yes | JSON string of targeting spec (age_min, age_max, genders, geo_locations, interests, etc.). Advantage+ Audience automation and other flags go inside this object too, e.g. targeting_automation: {"advantage_audience":1}. As of v26.0, ad sets in the Housing, Employment, or Financial Products and Services (HEC-F) special ad categories with relaxable (non-broad) targeting must explicitly set targeting.targeting_automation.advantage_audience to 1 or 0 — omitting it now returns ADS_TARGETING__REQUIRE_EXPLICIT_ADVANTAGE_AUDIENCE_FLAG. Not required for broad/default audience setups. Also note: as of Marketing API v26.0, the Instagram Explore Feed placement was removed (explicitly specifying it in publisher_platforms/instagram_positions now returns an error) and the 'story' value in messenger_positions is silently dropped. | |
| account_id | No | Ad account ID to create the ad set in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| bid_amount | No | Bid amount in the account currency's minor unit. Required for COST_CAP or LOWEST_COST_WITH_BID_CAP except Reach and Frequency. | |
| start_time | No | Start time (ISO 8601) | |
| campaign_id | Yes | Parent campaign ID | |
| pacing_type | No | Pacing settings. When a schedule is supplied, day_parting is required and is added if omitted. | |
| bid_strategy | No | Bid strategy: LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS | |
| daily_budget | No | Daily budget in currency cents (e.g. '5000' = $50.00) | |
| billing_event | Yes | Billing event: APP_INSTALLS, CLICKS, IMPRESSIONS, LINK_CLICKS, NONE, OFFER_CLAIMS, PAGE_LIKES, POST_ENGAGEMENT, THRUPLAY, PURCHASE, LISTING_INTERACTION | |
| validate_only | No | Validate with Meta without creating or updating the ad set (default false) | |
| adset_schedule | No | Hourly delivery intervals (Sunday=0). Requires lifetime budgeting. Set timezone_type explicitly; Meta defaults to USER. | |
| dsa_beneficiary | No | Beneficiary of EU-targeted ads; may use the account's saved default when omitted | |
| lifetime_budget | No | Lifetime budget in currency cents | |
| promoted_object | No | JSON string of the promoted_object spec. Required for many objectives, e.g. OUTCOME_SALES needs {"pixel_id":"...","custom_event_type":"PURCHASE"}, OUTCOME_APP_PROMOTION needs {"application_id":"...","object_store_url":"..."}, OUTCOME_ENGAGEMENT page-like ads need {"page_id":"..."}. Omitting it when the objective requires one causes ad set creation to fail. | |
| attribution_spec | No | Attribution windows; Meta validates compatibility with the objective and optimization goal | |
| destination_type | No | Conversion destination, e.g. WEBSITE, APP, MESSENGER, INSTAGRAM_DIRECT, WHATSAPP | |
| optimization_goal | Yes | Optimization goal: NONE, APP_INSTALLS, AD_RECALL_LIFT, ENGAGED_USERS, EVENT_RESPONSES, IMPRESSIONS, LEAD_GENERATION, QUALITY_LEAD, LINK_CLICKS, OFFSITE_CONVERSIONS, PAGE_LIKES, POST_ENGAGEMENT, QUALITY_CALL, REACH, LANDING_PAGE_VIEWS, VISIT_INSTAGRAM_PROFILE, ENGAGED_PAGE_VIEWS, VALUE, THRUPLAY, DERIVED_EVENTS, APP_INSTALLS_AND_OFFSITE_CONVERSIONS, CONVERSATIONS, IN_APP_VALUE, MESSAGING_PURCHASE_CONVERSION, MESSAGING_DEEP_CONVERSATION_AND_FOLLOW, SUBSCRIBERS, REMINDERS_SET, MEANINGFUL_CALL_ATTEMPT, PROFILE_VISIT, PROFILE_AND_PAGE_ENGAGEMENT, ADVERTISER_SILOED_VALUE, AUTOMATIC_OBJECTIVE, MESSAGING_APPOINTMENT_CONVERSION |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the creation default ('Defaults to PAUSED status'), which tells the agent the new ad set will not immediately spend, but omits permissions/auth requirements, whether creation is idempotent, and what happens on failure.
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 short sentences, no padding, with the core action front-loaded and the operational default (PAUSED) trailing. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter create tool with no annotations and no output schema, the description is thin: it never states what is returned (e.g. the new ad set ID) nor flags interplay among the budget/bid_strategy parameters. The rich schema compensates for parameter detail, but the description leaves the agent to infer creation behavior and outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 21 parameters in depth, setting the baseline at 3. The description only restates a subset of required fields and adds no syntax or format meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new ad set'), which clearly separates it from create_campaign, create_ad, and update_adset by noun. It does not explicitly name or contrast with any sibling, but the resource is unambiguous enough that an agent can select it 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?
The description lists required fields but gives no when-to-use guidance, no prerequisites, and no alternatives (e.g. update_adset vs create_adset). It also references a 'budget' requirement that does not map to any single parameter (there are daily_budget, lifetime_budget, and bid_amount), so the guidance it does offer is imprecise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_async_reportA
Create an async insight report for large data queries. Returns a report_run_id to poll with get_async_report.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Aggregation level: campaign, adset, ad | |
| fields | No | Comma-separated insight fields | impressions,clicks,spend,reach,frequency,cpc,cpm,ctr,actions,cost_per_action_type |
| filtering | No | JSON string for filtering | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| breakdowns | No | Breakdown dimensions: age,gender,country,region,publisher_platform,platform_position,device_platform,comscore_market (replaces dma). Some accounts must opt in in Ads Manager for impression_device, hourly_stats_aggregated_by_audience_time_zone, and frequency_value; empty results do not necessarily mean zero performance. | |
| time_range | No | JSON string {since,until} in YYYY-MM-DD format | |
| date_preset | No | Lowercase date preset, for example: today, yesterday, last_7d, last_14d, last_30d, this_month, last_month, this_quarter, last_quarter, this_year, last_year | |
| time_increment | No | Time granularity: all_days, 1, 7, monthly |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the most important trait: the operation is asynchronous and yields a report_run_id that must be polled via get_async_report. It omits secondary operational context such as whether the report expires, expected latency, permission requirements, or that all 8 parameters are optional (notably no default time window is stated).
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 short sentences with zero filler; the purpose and scope lead, and the essential follow-up action (polling) is stated second. Nothing is redundant with the schema.
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?
There is no output schema, and the description compensates by naming the returned handle (report_run_id) and the tool that consumes it, which is the one piece an agent must know to use this correctly. Remaining gaps — report lifetime, latency, and error behavior — are minor against a 100%-documented input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all 8 parameters are self-documented (including the env-var fallback for account_id and the breakdown opt-in caveat). The description adds no parameter-level meaning at all, so the baseline 3 for a fully-documented schema 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 specific verb and resource ('Create an async insight report') plus a scope qualifier ('for large data queries'), which differentiates it from the many synchronous insight siblings like get_account_insights. It names get_async_report but as the polling follow-up rather than as the alternative it replaces, so the differentiation from sync insight tools is implied rather than stated.
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?
'for large data queries' gives a clear selection condition and the second sentence tells the agent exactly what to do next (poll with get_async_report). However, it never states when NOT to use this tool — e.g. that smaller queries should use get_account_insights/get_campaign_insights instead — so the alternative routing 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.
create_block_listC
Create a new publisher block list for the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the block list | |
| account_id | No | Ad account ID to create the block list in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: it implies mutation but says nothing about required permissions, whether list names must be unique, whether duplicates overwrite or error, or what is returned. For a write 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?
A single front-loaded sentence with no waste. It is efficient, though the brevity is partly the cause of the missing guidance rather than a virtue in itself.
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 mutation tool with no annotations and no output schema, the description should say what a successful creation yields (e.g. an ID) and how errors/duplicates behave. None of that is present, leaving the agent under-informed about outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both name and account_id fully documented in the schema, including the env-var fallback for account_id. The description adds no parameter meaning beyond the schema, so baseline 3 applies.
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 new publisher block list') scoped to the ad account, which distinguishes it from list_block_lists, add_to_block_list, and delete_block_list. It doesn't explicitly name those siblings, but the create verb makes the distinction clear.
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 the sibling block-list tools, nor any prerequisites such as needing an existing ad account or how block lists are then populated via add_to_block_list. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_budget_scheduleC
Create a budget schedule on a campaign or ad set.
| Name | Required | Description | Default |
|---|---|---|---|
| time_end | Yes | Schedule end time as a Unix timestamp | |
| parent_id | Yes | Campaign or ad set ID that will own the budget schedule | |
| time_start | Yes | Schedule start time as a Unix timestamp | |
| parent_type | No | Type of parent object | campaign |
| budget_value | Yes | Unsigned value interpreted according to budget_value_type (ABSOLUTE uses currency minor units) | |
| budget_value_type | Yes | How budget_value is applied |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosure and offers only 'create a budget schedule'. It says nothing about the mutating effects, required permissions on the parent object, validation rules (e.g. time_start before time_end), or whether an existing schedule is replaced.
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. It is efficient, though the extreme brevity is arguably under-specification rather than disciplined conciseness 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 six-parameter mutation tool with five required fields, no annotations and no output schema, the description omits the temporal constraint linking time_start/time_end, the meaning of a MULTIPLIER versus ABSOLUTE budget, and the parent_type default. An agent could not call this correctly from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters, including budget_value_type semantics and the Unix timestamp format. The description adds no parameter-level meaning beyond what the schema provides, making the baseline 3 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 gives a specific verb ('Create') and resource ('budget schedule') plus the owning scope ('on a campaign or ad set'), so the agent knows exactly what object is produced. It does not explicitly distinguish itself from the nearby siblings (list_/update_/delete_budget_schedule), but the create verb makes the intent 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 guidance on when to use this tool versus update_budget_schedule, or on the precondition that a campaign/ad set must already exist. Usage can only be inferred from the tool name, and no alternative is ever named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_campaignA
Create a new ad campaign. Defaults to PAUSED status. Requires name and objective. Budget can be set at campaign or ad set level.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Campaign name | |
| status | No | Campaign status (default PAUSED) | PAUSED |
| objective | Yes | Campaign objective | |
| spend_cap | No | Lifetime spend cap for the campaign, in account currency cents. Once set it cannot be removed, only raised or reset — pass '0' to reset/clear it. | |
| stop_time | No | Campaign stop time (ISO 8601 format) | |
| account_id | No | Ad account ID to create the campaign in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| start_time | No | Campaign start time (ISO 8601 format) | |
| bid_strategy | No | Bid strategy: LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS. Meta defaults new campaigns to LOWEST_COST_WITH_BID_CAP, which requires a bid_amount on every ad set — pass LOWEST_COST_WITHOUT_CAP to avoid that. | |
| daily_budget | No | Daily budget in account currency cents (e.g. '5000' = $50.00) | |
| lifetime_budget | No | Lifetime budget in account currency cents | |
| special_ad_categories | No | JSON array of special ad categories: HOUSING, EMPLOYMENT, FINANCIAL_PRODUCTS_SERVICES, ISSUES_ELECTIONS_POLITICS, NONE. This field is required by Meta on every campaign — pass '[]' or '["NONE"]' if none apply. CREDIT was renamed to FINANCIAL_PRODUCTS_SERVICES; the old name is no longer accepted. | |
| special_ad_category_country | No | JSON array of ISO 3166-1 alpha-2 country codes, e.g. '["US"]'. Required for ISSUES_ELECTIONS_POLITICS (which also requires authorization to run ads in those countries). For HOUSING, EMPLOYMENT, and FINANCIAL_PRODUCTS_SERVICES it is optional and defaults to the ad account's listed tax country if omitted. | |
| is_adset_budget_sharing_enabled | No | Whether ad sets under this campaign can share budget with each other. Required on some newer ad accounts — omitting it can cause campaign creation to fail with 'Must specify True or False in is_adset_budget_sharing_enabled'. |
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 usefully discloses the PAUSED default and that budgets can live at either campaign or ad set level, but it says nothing about required permissions, side effects, failure modes, or reversibility of a mutation.
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?
Four short sentences, front-loaded with the operation and default status, with zero filler. Every sentence carries a distinct piece of information (what, default state, required fields, budget placement).
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 13-parameter mutation tool with no output schema, the description covers the essentials while the very detailed schema carries the tricky edge cases (Meta-required special_ad_categories, is_adset_budget_sharing_enabled failures). An agent has enough to call it correctly, though the description itself does not surface those gotchas.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the rich per-field documentation (spend_cap immutability, special_ad_categories requirement, bid_strategy pitfalls) already lives in the schema. The description only reiterates name/objective as required and the budget-level choice, adding little beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new ad campaign'), so the operation is unambiguous. It does not, however, differentiate itself from the several sibling creation tools (create_adset, create_ad, copy_campaign), leaving the agent to infer the hierarchy from names alone.
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?
Usage context is only implied by the verb 'Create'. The note that 'Budget can be set at campaign or ad set level' hints at a design decision, but there is no explicit guidance on when to create a campaign vs. an ad set, or when copy_campaign would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_canvasB
Create a new Instant Experience (Canvas) on a Facebook Page. Requires page_id and body_elements JSON array defining the canvas layout.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Canvas name | |
| page_id | Yes | Facebook Page ID to create the canvas on | |
| body_elements | Yes | JSON array of canvas body elements (buttons, carousels, photos, videos, text, etc.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only says 'Create a new Instant Experience' and lists required parameters, but does not mention side effects, permissions, idempotency, or what happens after creation. For a 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 two concise sentences, immediately states the core purpose, and includes only essential parameter requirements. No filler or redundant 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?
While parameters are well documented in the schema, there is no output schema and the description does not explain the return value (e.g., a canvas ID) or any authentication requirements. For a create operation, this missing information makes the description incomplete for an agent to fully understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds 'JSON array defining the canvas layout' for body_elements, which is consistent with the schema but does not provide significant new meaning beyond it.
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 opens with a specific verb and resource: 'Create a new Instant Experience (Canvas) on a Facebook Page.' This clearly states the action and target, and distinguishes it from sibling tools like get_canvas, list_canvases, and delete_canvas.
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 about when to use this tool versus alternatives like get_canvas or list_canvases. The description only mentions required parameters ('Requires page_id and body_elements') but does not provide usage context, exclusions, or alternative comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_catalogB
Create a new product catalog for the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Catalog name | |
| vertical | No | Catalog vertical: commerce, hotels, flights, destinations, home_listings, vehicles | |
| account_id | No | Ad account ID to create the catalog in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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 identifies this as a create operation and scopes it to an ad account, but it does not disclose required permissions, duplicate-name handling, side effects, or what happens on success or failure.
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. Its brevity suits a simple create tool whose parameter details are handled by the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter create tool with full schema coverage, the description is adequate but incomplete. It lacks usage guidance and behavioral details, and because no output schema exists, it also does not indicate what a successful creation returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents name, vertical values, and the account_id fallback behavior. The description only adds the phrase "for the ad account," which is marginal beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Create a new product catalog," and scopes it to "the ad account." It is clear what the tool does, but it does not explicitly distinguish itself from sibling catalog tools like list_catalogs, get_catalog, or update_catalog.
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 such as list_catalogs or update_catalog. It implies creation, but does not state prerequisites, exclusions, or the conditions under which a new catalog should be created.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_creativeA
Create a new ad creative with object_story_spec. The spec defines the ad content (link, photo, or video) and the associated Facebook Page. Notes for v26.0: poll_spec and the poll type under interactive_components_spec are no longer supported and will be rejected. If the advertiser has a shop, eligible creatives now default to destination_spec.destination_type=WEBSITE_AND_SHOP — set it to WEBSITE_AND_SHOP_OPT_OUT to opt out.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Creative name | |
| url_tags | No | URL tags to append to all links | |
| account_id | No | Ad account ID to create the creative in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| asset_feed_spec | No | JSON string of asset_feed_spec for dynamic creative | |
| destination_spec | No | JSON object controlling the destination; set destination_type=WEBSITE_AND_SHOP_OPT_OUT to opt out of the v26 Shops default | |
| object_story_spec | Yes | JSON string of object_story_spec (page_id, link_data/photo_data/video_data). Use the separate wamo_whatsapp_identity_spec parameter for WhatsApp Status ads. | |
| degrees_of_freedom_spec | No | JSON object for Advantage+ creative controls, including creative_features_spec.image_animation, video_filtering, and video_uncrop | |
| wamo_whatsapp_identity_spec | No | JSON object with wamo_whatsapp_identity_id or whatsapp_phone_number for WhatsApp Status ads; sent at the creative's top level |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses real behavioral traits: poll_spec and poll interactive_components are rejected in v26.0, and shop-eligible creatives silently default to WEBSITE_AND_SHOP unless opted out. It omits auth/permission requirements and rate/return behavior, but the version-specific rejection and defaulting behavior is substantive.
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?
Front-loaded with the core purpose and spec definition, followed by dense but specific version notes. Every sentence carries operational information; the version block is long but earns its place by stating what will be rejected and what changes by default.
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 an 8-parameter mutation with 100% schema coverage and no output schema, the description covers the key behavioral gotchas (rejections, defaults/opt-out) an agent would otherwise miss. It stops short of stating permission requirements or the response, minor gaps given the rich schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 8 parameters (including destination_spec and wamo_whatsapp_identity_spec guidance). The description's restatement of object_story_spec content types and the WEBSITE_AND_SHOP default adds marginal meaning beyond the schema, fitting the baseline 3.
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 new ad creative') and immediately characterizes the required payload, explaining what object_story_spec is (link/photo/video content plus the Facebook Page). It does not explicitly distinguish itself from the sibling create_dynamic_creative, which also creates creatives, so sibling differentiation is missing.
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?
Usage is implied by the ad-creation flow and the v26.0 default-shop note gives one conditional ('If the advertiser has a shop...'), but there is no explicit when-to-use versus create_dynamic_creative or update_creative, and no named alternative for dynamic creatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_custom_audienceB
Create a new custom audience. Subtype determines the audience source (CUSTOM, WEBSITE, APP, OFFLINE_CONVERSION, LOOKALIKE, ENGAGEMENT, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Audience name | |
| rule | No | JSON object defining website, video, or engagement audience rules. This creates an audience; validate-only is not supported. | |
| subtype | Yes | Audience subtype | |
| pixel_id | No | Pixel ID for website audiences | |
| account_id | No | Ad account ID to create the audience in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| description | No | Audience description | |
| retention_days | No | Retention period; allowed range depends on the audience source | |
| customer_file_source | No | Source of customer file: USER_PROVIDED_ONLY, PARTNER_PROVIDED_ONLY, BOTH_USER_AND_PARTNER_PROVIDED |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden and delivers very little: it does not state permission requirements, that this is an irreversible write, which fields are mandatory per subtype (pixel_id for WEBSITE, rule for engagement/video), or what happens when a required companion field is missing. The "validate-only is not supported" caveat lives in the schema, not the description.
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 short sentences with the core action front-loaded and the subtype semantics attached directly to it. No filler and nothing an agent must read past to find the important constraint.
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 an 8-parameter, no-annotation, no-output-schema mutation tool with subtype-conditional required fields, the description is too thin. It never explains which parameters become mandatory for which subtype, which is the single most likely source of a failed call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description adds meaning the schema lacks by explaining that subtype is a causal selector of the audience source. It stops short of covering the other seven parameters, so it is a modest rather than comprehensive uplift.
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 new custom audience") and immediately explains that subtype drives the audience source. It does not differentiate itself from the sibling create_lookalike_audience, even though LOOKALIKE appears in its own subtype enum, which leaves a real ambiguity unresolved.
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 comparison against alternatives such as create_lookalike_audience or list_custom_audiences. The only contextual hint is that subtype determines the source, which is a mechanic rather than guidance about when to pick this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dynamic_creativeA
Create a dynamic creative with asset_feed_spec. Meta automatically combines different images, videos, titles, bodies, and CTAs to find the best performing combinations.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Creative name | |
| account_id | No | Ad account ID to create the creative in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| asset_feed_spec | Yes | JSON string of asset_feed_spec with arrays: images (hash), videos (video_id), bodies (text), titles (text), descriptions (text), call_to_action_types | |
| destination_spec | No | JSON object controlling the destination; set destination_type=WEBSITE_AND_SHOP_OPT_OUT to opt out of the v26 Shops default | |
| object_story_spec | No | JSON object containing the associated page_id and optional instagram_user_id | |
| degrees_of_freedom_spec | No | JSON object for Advantage+ creative controls, including creative_features_spec.image_animation, video_filtering, and video_uncrop | |
| wamo_whatsapp_identity_spec | No | JSON object with wamo_whatsapp_identity_id or whatsapp_phone_number for WhatsApp Status ads; sent at the creative's top level |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden. It discloses the useful behavioral trait that Meta automatically combines assets, but omits permissions/auth needs, the account_id env-var fallback, validation behavior, and what a successful call yields.
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 tight sentences with the purpose front-loaded and the mechanism following; zero 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?
For a 7-parameter creation tool with no annotations and no output schema, the description should say more about the optional specs (destination_spec, degrees_of_freedom_spec, wamo_whatsapp_identity_spec) and the return value. The rich schema partially compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema itself documents all seven parameters. The description's mention of images, videos, titles, bodies and CTAs largely restates the asset_feed_spec schema description, adding little new semantics.
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 dynamic creative') and explains the distinguishing mechanism (Meta auto-combines assets). This separates it from the generic sibling create_creative, though it never names that sibling explicitly.
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?
Usage is only implied by the 'dynamic creative' framing; there is no explicit when-to-use-this-vs-create_creative guidance, no prerequisites, and no mention of what happens if asset_feed_spec is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_experimentB
Create a new A/B test experiment (ad study).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Experiment name | |
| type | No | Study type | |
| cells | Yes | JSON array of test cells: [{name, campaign_id}] | |
| end_time | Yes | End time in ISO 8601 or Unix timestamp | |
| account_id | No | Ad account ID to create the experiment in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| start_time | Yes | Start time in ISO 8601 or Unix timestamp | |
| description | No | Experiment description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since there are no annotations, the description carries the full burden of behavioral disclosure. It does not inform the agent about the side effects, necessary permissions for mutation, or any critical failure behaviors associated with creating a live ad study.
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, highly efficient sentence that front-loads the necessary action and resource name. There is zero waste in the language used.
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?
As a complex, mutation-based operation (creating an experiment), the definition is lacking in completeness. It does not provide necessary context about dependencies, scope, or potential impact beyond the basic definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning all parameter definitions are handled comprehensively by the structured input schema. As such, the description adds no additional semantic value to the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and clearly identifies the resource ('A/B test experiment' or 'ad study'). This verb explicitly distinguishes it from sibling functions like 'list_experiments' or 'get_experiment'.
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 is purely declarative and offers no guidance on when to use this tool versus alternatives. It fails to specify prerequisites or constraints, such as when an existing experiment must be updated instead of created.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_feedB
Create a new product feed for a catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Feed name | |
| file_url | No | URL of the feed file | |
| schedule | No | JSON string for feed schedule configuration | |
| catalog_id | Yes | Product catalog ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the creation action and does not disclose side effects, required permissions, validation behavior, or return value. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that gets straight to the point with no filler. Front-loaded with the action and resource.
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 description is too sparse for a create operation with no output schema or annotations. It does not explain what constitutes a feed, how file_url and schedule relate, or what the response looks like. There is also no mention of prerequisites like an existing catalog.
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 already describes all four parameters with 100% coverage. The description adds no additional meaning beyond the parameter names, so it relies entirely on the schema's minimal 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?
The description clearly states it creates a new product feed for a catalog, using a specific verb and resource. It is differentiated from related feed operations like upload_feed or list_feeds by the explicit 'create' action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as upload_feed or update_catalog. The context implies creation of a new feed, but there are no explicit exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_lead_formB
Create a new lead generation form on a Facebook Page. Requires pages_manage_ads permission.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Lead form name | |
| page_id | Yes | Facebook Page ID | |
| questions | Yes | JSON array of questions. Each: {key: string, type: 'CUSTOM'|'EMAIL'|'PHONE'|'FULL_NAME'|'CITY'|'STATE'|'COUNTRY'|'ZIP'|'JOB_TITLE'|'COMPANY_NAME', label?: string} | |
| thank_you_page | No | JSON object: {title: string, body: string, button_text?: string, button_type?: 'VIEW_WEBSITE'|'DOWNLOAD'} | |
| privacy_policy_url | Yes | URL to privacy policy | |
| follow_up_action_url | No | URL to redirect after submission |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only mentions the required permission and the basic creation action. It does not describe the return value, side effects, error handling, or any constraints beyond permission, leaving significant behavioral 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?
The description is a single sentence that conveys the essential information without any wasted words. It includes the action, resource, location, and a key prerequisite, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters (4 required), no output schema, and no annotations, the description is insufficiently complete. It lacks information about the return value, error scenarios, or any additional behavioral context needed 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?
The schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level detail beyond what the schema already provides, thus not meeting the higher bar for compensation.
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 specifies the action (create), the resource (lead generation form), and the location (on a Facebook Page), distinguishing it from list/get siblings. It also mentions required permission, which adds 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 states a prerequisite (pages_manage_ads permission) but does not provide explicit guidance on when to use this tool versus alternatives or when not to use it. The context is clear, but no exclusions or alternative comparisons are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_lookalike_audienceB
Create a lookalike audience based on an existing custom audience. Ratio (1-10) determines how closely the new audience resembles the source.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Lookalike audience name | |
| account_id | No | Ad account ID to create the audience in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| lookalike_spec | Yes | JSON string: {country: 'US', ratio: 0.01-0.10} where ratio is the lookalike percentage (1%-10%) | |
| origin_audience_id | Yes | Source custom audience ID |
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 only notes the ratio's effect, omitting permissions, mutation effects, account fallback behavior, and return characteristics. It also says ratio is '1-10' while the schema defines it as 0.01-0.10, creating ambiguity.
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 concise sentences with the core purpose and key behavioral note front-loaded. No wasted text.
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 create/mutation tool with no annotations and no output schema, the description covers the source audience and ratio but leaves important operational context unexplained, such as account fallback behavior and what happens on success or failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds a note about ratio but does not meaningfully document the other parameters and its ratio scale conflicts with the schema's percentage range.
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 gives a specific verb and resource: 'Create a lookalike audience based on an existing custom audience.' It clearly distinguishes this from creating a custom audience, though it does not name the sibling tool explicitly.
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?
Usage is implied: use this when you want to derive a lookalike audience from an existing custom audience. However, there are no explicit when-not conditions, prerequisites, or named alternatives to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_offline_event_setC
Create a new offline conversion data set.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Event set name | |
| account_id | No | Ad account ID to create the event set in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| description | No | Event set description |
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 only implies a create mutation; it does not disclose required auth, duplicate-name handling, whether the operation is reversible, or what happens to existing data.
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 sentence with no filler. It is front-loaded and zero-waste, though it is arguably too sparse to be fully helpful.
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 create tool with no annotations and no output schema, the description is too thin. It omits prerequisites, side effects, and any sense of how the created set relates to offline event sending, leaving the agent under-informed for a mutation operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents name, account_id, and description. The description adds no parameter-level meaning beyond the action itself, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: create a new offline conversion data set. It does not, however, distinguish this from sibling tools like list_offline_event_sets or send_offline_event, so an agent must infer the difference from the name alone.
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 prerequisites (e.g., required permissions or an existing account), and no alternatives named. The agent is left to guess whether this is the right tool for setting up offline conversion tracking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_product_setB
Create a new product set within a catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Product set name | |
| filter | No | JSON string of filter rules for the product set | |
| catalog_id | Yes | Product catalog ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden but only states the core action. It does not disclose side effects, required permissions, idempotency, or error conditions. For a write operation, this is insufficient context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It clearly communicates the action without unnecessary padding.
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 description lacks context about return values, prerequisites (e.g., existing catalog ID), or filter format details. Since no output schema exists, the agent gets no indication of what to expect after creation, which is a notable gap for a 3-parameter 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?
The input schema provides 100% parameter description coverage. The tool description adds no additional parameter context beyond what is already in the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Create' with a clear resource 'product set' and context 'within a catalog', which distinguishes it from sibling tools like update_product_set or list_product_sets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that this is for creating a new set while update_product_set modifies existing ones, leaving the agent to infer usage from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_rf_predictionC
Create a new reach & frequency prediction. Provide targeting spec as JSON string, budget in cents, and scheduling info.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | Yes | Budget in account currency cents | |
| stop_time | Yes | Prediction stop time (ISO 8601 or Unix timestamp) | |
| account_id | No | Ad account ID to create the prediction in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| start_time | Yes | Prediction start time (ISO 8601 or Unix timestamp) | |
| target_spec | Yes | JSON string of targeting specification | |
| frequency_cap | Yes | Maximum frequency cap per user | |
| destination_id | Yes | Destination ID (e.g. Facebook Page ID) |
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 says nothing about required permissions, whether the prediction runs asynchronously, what identifier is returned, or whether the prediction persists as a billable object. Only the parameter-adjacent hints (cents, JSON string) are offered.
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 short sentences with zero filler and the core action front-loaded. It is efficient, though the second sentence is a loose enumeration that omits half the required parameters.
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?
This is a seven-parameter, six-required mutation tool with no annotations and no output schema, so the description should do more. It omits required inputs such as frequency_cap and destination_id, says nothing about the account_id fallback or the shape of the result, leaving an agent under-informed about what a successful call produces.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters including the account_id env-var fallback and the ISO 8601 / Unix formats. The description repeats a subset (targeting spec as JSON string, budget in cents, scheduling info) but adds no syntax or constraints beyond the schema, so the baseline 3 applies.
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 ('reach & frequency prediction'), and the verb itself distinguishes it from the sibling read/delete tools list_rf_predictions, get_rf_prediction and delete_rf_prediction. It does not, however, explicitly differentiate itself from other creation or estimation siblings such as get_reach_estimate.
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 is given. The description never explains when a reach & frequency prediction is the right choice versus get_reach_estimate, get_delivery_estimate, or creating an experiment, nor does it state prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ruleB
Create a new automated rule for the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Rule name | |
| account_id | No | Ad account ID to create the rule in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| schedule_spec | No | JSON string defining rule schedule | |
| execution_spec | Yes | JSON string defining rule actions | |
| evaluation_spec | Yes | JSON string defining rule conditions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of transparency. It does not disclose behavioral traits such as required permissions, mutation consequences, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is maximally concise, consisting of a single, clear sentence that immediately conveys the tool's function without any 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?
Given that this is a complex mutation operation involving multiple JSON specification strings, the description should provide more context about prerequisites or operational constraints, which it fails to do.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning the schema already documents the parameters adequately. The description adds no meaningful semantic meaning beyond what the input structure defines. Baseline score is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and identifies the exact resource ('automated rule'). It successfully differentiates this tool from its siblings like list_rules and update_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only states what the tool does, not when to use it. There is no guidance to differentiate between creating a new rule and modifying an existing one (update_rule sibling).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_system_userB
Create a new system user in the configured business. Requires META_BUSINESS_ID env var.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the system user | |
| role | Yes | Role for the system user |
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. It mentions the required env var, but does not disclose permissions, idempotency, conflict handling, or side effects beyond the creation itself. For a mutation tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences that front-load the action and scope, then state a key requirement. No filler or redundant wording; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool with fully documented parameters, the description covers essential purpose and a prerequisite. However, it omits expected return behavior, potential duplicate-name errors, and does not clarify how it differs from similar user-creation tools, leaving some uncertainty for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters (name and role) described inline. The description adds no additional parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Create' and the resource 'new system user', and scopes it to 'the configured business'. This distinguishes it from sibling tools like add_business_user, which likely targets business users rather than system users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like add_business_user or list_system_users. The only contextual clue is the META_BUSINESS_ID env var requirement, but there is no explicit when-to-use or what-not-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_tokenA
Debug an access token to inspect its properties, permissions, expiration, and validity. Requires META_APP_ID and META_APP_SECRET.
| Name | Required | Description | Default |
|---|---|---|---|
| input_token | Yes | Access token to debug/inspect |
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. It mentions the credential requirement (META_APP_ID and META_APP_SECRET) and indicates what the tool inspects (properties, permissions, expiration, validity). However, it does not explicitly state whether the operation is read-only, potential side effects, or response format, leaving some ambiguity.
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 long, front-loaded with the core purpose, and the credential requirement is presented succinctly. Every sentence earns its place, and there is no unnecessary elaboration.
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 there is no output schema, the description specifies what information the tool provides ('properties, permissions, expiration, and validity'), which effectively covers the return content. It also notes the required credentials. For a simple one-parameter, read-only tool, this is reasonably complete, though it could explicitly mention response format or error behavior.
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 input schema has 100% coverage for the single parameter 'input_token' with description 'Access token to debug/inspect'. The description does not add any additional parameter meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Debug an access token to inspect its properties, permissions, expiration, and validity.' This is a specific verb with a clear resource and scope, and it distinguishes itself from sibling token tools like exchange_token and refresh_token by focusing on inspection rather than token lifecycle management.
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 through its purpose ('Debug an access token...'), but it does not explicitly state when to use compared to alternatives like exchange_token or refresh_token. It provides a prerequisite ('Requires META_APP_ID and META_APP_SECRET') but lacks explicit 'when to use' or 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_adA
Delete an ad. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | Ad ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits itself. It does state that the action is irreversible, which is a critical trait, but omits other relevant behaviors such as required permissions, potential cascading deletions, or success/error responses.
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 extremely concise, with two short sentences and no wasted words. The primary action is front-loaded, and the irreversibility warning is placed efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete operation, the description covers the essential action and irreversibility. It is almost complete, though it could mention what happens to associated data or the return value, but this is a minor gap given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single parameter, with ad_id described as 'Ad ID to delete'. The description adds no extra meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete an ad') with a specific verb and resource, distinguishing it from sibling tools like get_ad, update_ad, and copy_ad. The added warning about irreversibility further reinforces the purpose.
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 explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. While deletion intent is implied by the verb, the description does not mention that this is for permanent removal or advise using update_ad for modifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_adsetA
Delete an ad set. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| adset_id | Yes | Ad set ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that deletion is irreversible, a critical behavioral trait. However, with no annotations, it doesn't mention other potential consequences (e.g., impact on associated ads) or permission requirements, leaving some behavioral ambiguity.
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 short sentences with no redundancy. The irreversibility warning is meaningful and earns its place, making it highly concise and well-structured.
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 one-parameter delete operation, the description and schema cover basic invocation, but the lack of any context about when deletion is appropriate or cascading effects leaves some gaps. Adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds no meaning beyond the schema's 'Ad set ID to delete'. The parameter is fully documented, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete an ad set' with a specific verb and resource, distinguishing it from sibling delete operations like delete_campaign or delete_ad. The irreversibility note adds clarity about the action's nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as update_adset or delete_campaign. There are no prerequisites, conditions, or exclusions mentioned, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_audienceA
Delete a custom audience. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| audience_id | Yes | Audience ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explicitly states the action is irreversible, which is a critical behavioral trait beyond what the schema provides. However, it could mention side effects or authorization requirements, but for a simple delete this is sufficient.
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 short sentences with no redundant information. Every word earns its place, making it concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one parameter and no output schema, the description covers the essential purpose and the key caveat (irreversibility). While it could mention what happens to related data, the simplicity of the tool makes this adequate.
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 covers the single parameter (audience_id) with a clear description. The tool description adds no additional parameter semantics, but the baseline of 3 applies given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the resource ('a custom audience'), distinguishing it from sibling tools that create, get, list, update, or manage audiences. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for when deletion is needed, but does not explicitly state when to use it versus alternatives or provide exclusions. The irreversibility warning hints at caution but does not give context like 'use only if you no longer need the audience'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_block_listA
Delete a publisher block list. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | Block list ID to delete |
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. It explicitly states that the action is irreversible, which is a critical behavioral trait for a delete operation. It does not mention permissions or cascade effects, but for a simple 1-parameter delete, this is sufficient.
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 short sentences with no filler. The primary purpose is front-loaded, and the irreversibility warning adds necessary context without 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?
Given the tool's simplicity (1 parameter, no output schema), the description is complete. It states the action and its irreversible nature, which is all the agent needs to know for correct invocation. The lack of sibling differentiation is a minor gap but does not affect the core completeness for this straightforward delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a description for the single parameter list_id ('Block list ID to delete'), giving 100% schema coverage. The tool description adds nothing beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and resource ('publisher block list'), clearly distinguishing it from sibling operations like create_block_list, add_to_block_list, and remove_from_block_list. It also adds the irreversibility warning, further clarifying the action.
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 guidance on when to use this tool versus alternatives such as remove_from_block_list. The description only states what the tool does, not the context or exclusions. The irreversibility warning implies caution but does not provide usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_budget_scheduleA
Delete a budget schedule. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| schedule_id | Yes | Budget schedule ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It discloses a key trait—irreversibility—which is critical for a delete operation. However, it does not mention permissions, effects on linked resources, or what happens if the schedule is in use, leaving some behavioral 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?
The description is two sentences long, front-loaded with the action, and every word is purposeful. The irreversibility warning is concise yet meaningful, achieving maximum clarity in minimal space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one parameter and no output schema, the description covers the essential purpose and a key consequence. It does not explain what a budget schedule is or prerequisites, but the sibling tools provide enough context to infer usage. Minor omissions like the return value or not-found behavior prevent a higher score.
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 already provides 100% coverage of the single parameter (schedule_id) with a clear description. The tool description adds no additional semantics about the parameter, so it meets the baseline but does not enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and a clear resource ('budget schedule'), making the tool's purpose immediately obvious. It also adds the caveat 'irreversible' for emphasis, distinguishing it from create/update/list siblings without confusion.
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 (delete when you want to remove a budget schedule) but does not explicitly state when to use it versus alternatives or provide prerequisites. The irreversibility warning is a caution, not a usage guideline, so it falls short of clear context with exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_campaignA
Delete a campaign. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | Campaign ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the action is irreversible, which is a critical behavioral trait. However, with no annotations provided, it does not disclose other potential consequences like cascading deletion of associated adsets/ads or permission requirements. It covers the most obvious risk but leaves other behaviors unstated.
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 only two sentences, front-loaded with the verb and resource, and the second sentence about irreversibility adds meaningful value without waste. It is appropriately concise.
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 simple (one parameter, no output schema), and the description states its primary purpose and its irreversible nature. However, given the absence of annotations, it does not address potential side effects on related objects or expected response on success/failure, leaving some ambiguity for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema includes a single required parameter `campaign_id` with a description, and the schema coverage is 100%. The tool description adds nothing about the parameter's meaning beyond what the schema already specifies, so baseline 3 applies.
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 specific action ('Delete') and resource ('a campaign'), clearly distinguishing it from other campaign-related tools like get_campaign or update_campaign. 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?
The description provides no guidance on when to use this tool versus alternatives such as update_campaign (to change status) or delete_adset. It lacks any contextual cues about prerequisites or when deletion is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_canvasA
Delete an Instant Experience (Canvas). This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes | Canvas ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the critical behavioral fact that deletion is irreversible, but with no annotations available, it does not cover other important aspects like permissions, side effects, or return 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?
Two sentences, front-loaded with the action, and the irreversibility warning is concise and relevant. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one parameter, the description covers the action and key warning, but lacks details on return values or prerequisites, and there is no output schema or annotations to fill the 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?
The input schema already documents the canvas_id parameter with a description, and the tool description does not add any additional parameter-level information. Since schema coverage is 100%, the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (delete) and the specific resource (Instant Experience/Canvas), which distinguishes it from sibling tools like get_canvas and create_canvas.
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 for deletion but does not provide explicit guidance on when to use this tool vs alternatives, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_imageB
Delete an ad image by hash. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | Image hash to delete | |
| account_id | No | Ad account ID the image belongs to (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden, and it does disclose the most important trait for a destructive operation: irreversibility. It omits other behavioral context such as permission requirements and any cascade effect on ads/creatives that reference the image.
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 short sentences, zero filler, with the destructive nature front-loaded. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate minimum for a two-parameter destructive tool whose params are fully documented, but for an irreversible delete with no annotations and no output schema, an agent would benefit from knowing required permissions and whether dependent ads break.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'hash' and the optional 'account_id' (with its env-var fallback) are already documented in the schema. The description adds nothing about parameter format or the fallback behavior, so it sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete') and resource ('ad image') with the identifying key ('by hash'). It is clearly distinguishable from siblings like get_image, list_images, upload_image and delete_video, though it does not name any sibling explicitly.
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 alternatives, no prerequisites, and no warning about which ads or creatives may reference the image. The agent must infer everything from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_rf_predictionA
Delete a reach & frequency prediction. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| prediction_id | Yes | Prediction ID to delete |
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. It adds a key warning that the action is irreversible, which is significant. However, it does not disclose other potential side effects, error handling, or permissions, leaving gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first states the purpose, the second adds a critical warning. There is no redundant information, and it is front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, no annotations), the description covers the essential information: what it does and that it is irreversible. It is complete enough for an agent to understand the tool's function, though it could mention prerequisites or side effects for full comprehensiveness.
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 input schema already fully describes the only parameter (prediction_id) as 'Prediction ID to delete'. The description adds no additional meaning beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the specific resource ('reach & frequency prediction'). It unambiguously distinguishes this tool from sibling tools like list_rf_prediction, create_rf_prediction, and get_rf_prediction.
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 when a reach & frequency prediction needs to be permanently removed, but it does not explicitly mention when-not to use it or name alternative tools. The context is clear but no exclusions or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ruleB
Delete an automated rule.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | Rule ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the full burden of behavioral disclosure. It states only the destructive action ('Delete') without mentioning irreversibility, side effects, authorization requirements, or consequences. This is minimal and largely restates the obvious.
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. For a simple delete operation, this level of conciseness is appropriate and easy to parse.
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 one-parameter, simple delete tool, the core action is communicated adequately. However, the lack of any indication about permanence, response behavior, or failure conditions leaves some contextual gaps, especially given the complete absence of 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 coverage is 100% for the single parameter rule_id, so the schema already documents it. The description adds no extra meaning beyond confirming the target of deletion, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and resource ('automated rule'), clearly distinguishing it from siblings like create_rule, update_rule, get_rule, and list_rules. It states exactly what the tool does with no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or exclusions. The usage context is only implied by the tool name and description, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_videoA
Delete an ad video. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes | Video ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the action is irreversible, which is valuable behavioral context. However, with no annotations, it fails to mention potential cascading effects, such as what happens to ads referencing the video, or whether special 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 two short, front-loaded sentences with no fluff. It states the action and the critical caveat in an efficiently structured manner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool, it covers the key trait (irreversibility) but lacks details about dependent resources, success/error responses, or prerequisites. Given there is no output schema, more context 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 already provides 100% coverage for video_id with the description 'Video ID to delete'. The tool description adds no meaningful parameter semantics beyond implying the video is an ad video, so it does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Delete' with a clear resource ('an ad video'), making it immediately obvious what the tool does. It distinguishes itself from sibling delete tools like delete_ad or delete_image by specifying 'video'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There are many delete tools among siblings (e.g., delete_ad, delete_image), and this description does not clarify when delete_video is the appropriate choice or mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exchange_tokenA
Exchange a short-lived access token for a long-lived token. Requires META_APP_ID and META_APP_SECRET to be configured.
| Name | Required | Description | Default |
|---|---|---|---|
| short_lived_token | Yes | Short-lived access token to exchange |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden of disclosing behavior. It mentions a configuration requirement but does not state what the exchange does beyond the token conversion, whether it is a read-only operation, what the response contains, or any side effects. This is a significant gap for an authentication-related 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?
The description is two sentences, each serving a purpose: one states the core function, the other notes a necessary configuration. There is no redundancy or filler, making it appropriately concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool, the description covers the main action and a key requirement. However, it omits information about the returned token, potential errors, and the broader context of when to use this exchange. Since there are no annotations or output schema, the description could be more complete, earning a mid-range score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes the parameter 'short_lived_token' fully (100% coverage), and the description's phrase 'short-lived access token' aligns with the schema. The description does not add extra semantic details about the parameter beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Exchange') and the specific resources ('short-lived access token' to 'long-lived token'), making the tool's purpose unmistakable. It is specific enough to distinguish from related token tools like refresh_token and debug_token, even though alternatives aren't named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (when you have a short-lived token and need a long-lived one) and provides a key prerequisite (META_APP_ID and META_APP_SECRET configured). However, it does not explicitly mention when to use this tool versus refresh_token or debug_token, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_previewA
Generate an ad preview without needing an existing ad. Provide creative spec directly to see how it would look.
| Name | Required | Description | Default |
|---|---|---|---|
| creative | Yes | JSON string of creative spec: {object_story_spec: {...}} or {object_story_id: '...'} | |
| ad_format | Yes | Ad format: DESKTOP_FEED_STANDARD, MOBILE_FEED_STANDARD, INSTAGRAM_STANDARD, INSTAGRAM_STORY, RIGHT_COLUMN_STANDARD, etc. | |
| account_id | No | Ad account ID to generate the preview in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It usefully discloses that no prior ad object is required, but says nothing about side effects, rate limits, or authentication beyond what the schema states. For a no-annotation tool the disclosure is partial.
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 short sentences, zero filler, with the differentiating qualifier front-loaded immediately after the verb. Nothing in it is redundant with the title or name.
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?
There is no output schema, so the description should characterize what a preview returns (image/URL/iframe payload), and it only offers the vague 'see how it would look'. Inputs and the no-existing-ad behavior are adequately covered, but the artifact an agent will receive is left undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the three parameters is documented in the schema, including the env-var fallback for account_id and the accepted creative spec shapes. The description's 'provide creative spec directly' adds no syntax or format detail beyond that, so baseline 3 applies.
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 (generate an ad preview) and adds a meaningful scope qualifier: 'without needing an existing ad', which separates it from the sibling get_ad_preview. It does not name that sibling outright, so an agent must infer the pairing rather than being told.
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?
'Provide creative spec directly' tells the agent the required input posture, and 'without needing an existing ad' defines the situation that selects this tool over get_ad_preview. The alternative tool is not named, so the routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_activitiesB
Get activity log for the ad account. Shows changes made to campaigns, ad sets, ads, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; 'Get' implies a read-only operation, and the second sentence discloses the kind of events returned (changes to campaigns, ad sets, ads). It says nothing about permission requirements, retention window, or how pagination behaves beyond the schema fields, so disclosure is partial rather than rich.
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 short sentences, front-loaded with the core purpose and with zero filler. The second sentence earns its place by naming the object types covered. Could be marginally tighter but is well-structured.
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 no output schema and no annotations, the description is the only source of behavioral context, and it stops at naming the log's subject matter. It omits return shape, whether results are chronological, and any indication of scope defaults (e.g., all activities vs. a window), which an agent would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – all four parameters (after, limit, fields, account_id) are documented in the schema, including the env-var fallback for account_id. The description adds no parameter-level meaning, so the 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?
Clear specific verb+resource: 'Get activity log for the ad account' tells the agent exactly what it retrieves. The second sentence clarifies the log's contents (campaign/ad set/ad changes), distinguishing it conceptually from insight tools like get_account_insights. However, it does not name any sibling explicitly, so an agent must still infer the boundary.
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 when to prefer this over get_account_insights or get_campaign, and no prerequisites stated. The only implicit cue is the phrase 'activity log,' leaving the agent to guess the appropriate context.
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 performance insights for the ad account. Returns metrics like impressions, clicks, spend, reach, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Aggregation level: campaign, adset, ad | |
| fields | No | Comma-separated insight fields | impressions,clicks,spend,reach,frequency,cpc,cpm,ctr,actions,cost_per_action_type |
| filtering | No | JSON string for filtering | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| breakdowns | No | Breakdown dimensions: age,gender,country,region,publisher_platform,platform_position,device_platform,comscore_market (replaces dma). Some accounts must opt in in Ads Manager for impression_device, hourly_stats_aggregated_by_audience_time_zone, and frequency_value; empty results do not necessarily mean zero performance. | |
| time_range | No | JSON string {since,until} in YYYY-MM-DD format | |
| date_preset | No | Lowercase date preset, for example: today, yesterday, last_7d, last_14d, last_30d, this_month, last_month, this_quarter, last_quarter, this_year, last_year | |
| time_increment | No | Time granularity: all_days, 1, 7, monthly |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full behavioral burden. It discloses the returned metrics, which is mildly useful, but says nothing about whether this is a read-only operation, required permissions, pagination/row limits, or the caveat that empty results may not mean zero performance (that caveat lives only in 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?
Two short, front-loaded sentences with no padding; the purpose is stated first. The 'etc.' trailing example list is slightly loose but harmless.
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 8 optional parameters, no output schema, and no annotations, the description is thin: it hints at return content but omits pagination behavior, the interaction between date_preset/time_range/time_increment, and any dependency on account-level defaults. The rich schema compensates for most parameter detail, but the behavioral picture 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 100% across all 8 parameters, so the schema already documents levels, fields, filtering, breakdowns, date ranges, and time increment. The description's metric list loosely maps to the `fields` default but adds no syntax, defaults, or constraints beyond what the schema provides; baseline 3 applies.
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 ('performance insights for the ad account') and gives examples of returned metrics. However, it does not differentiate itself from the sibling insight tools (get_campaign_insights, get_adset_insights, get_ad_insights), and 'for the ad account' is misleading given the `level` param allows campaign/adset/ad aggregation, so an agent could confuse it with 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?
The description offers no when-to-use guidance, no exclusions, and never names the alternative insight tools. An agent must infer from the name alone that this is the account-scoped variant rather than the campaign/adset/ad ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adA
Get details of a specific ad by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | Ad ID | |
| fields | No | Comma-separated fields to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'Get' implies a read-only operation, but with no annotations, the description carries the full burden. It does not disclose what fields are returned by default, error behavior, or that it returns a single object. No side effects are mentioned, but the verb suggests none.
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 filler words. It is appropriately concise for a simple getter operation.
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 simple with well-documented parameters, but the description lacks context about what 'details' includes, how the fields parameter affects the response, and how it differs from sibling getters like get_campaign_ads. Without an output schema, the description could be more explicit about the return shape.
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 provides 100% coverage for both parameters (ad_id and fields), so the description need not repeat them. It adds no extra meaning beyond the schema, such as examples or constraints, but the baseline is 3 given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('details of a specific ad'), and the identifier ('by ID'). It distinguishes this from sibling list tools like list_ads and get_campaign_ads by emphasizing a single ad 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 description implies usage when you have a specific ad ID and need its details, which is clear context. However, it does not explicitly mention alternatives or when not to use it, such as using list_ads for multiple ads. No exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_accountB
Get details of the configured ad account including status, balance, currency, timezone, and spend info.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | id,name,account_status,balance,currency,timezone_name,amount_spent,business_name,business_city,business_country_code,owner,min_campaign_group_spend_cap |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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-only operation by saying 'Get details,' but does not disclose permissions, rate limits, error behavior, or whether changes are made. It adds field examples but no real behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no redundant or filler content. Every part contributes to identifying the resource and the fields returned.
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 two-parameter read tool with no output schema and no annotations, the description gives the core fields but not the full return shape or any behavioral caveats. It is adequate but leaves some gaps that an agent might need when interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the input schema, including the account_id env-var fallback. The description adds no parameter syntax or usage details beyond what the schema provides, making the baseline 3 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 ('configured ad account') and lists concrete fields, so an agent can tell it retrieves one account rather than listing many. However, it does not explicitly name the sibling alternative list_ad_accounts, leaving that differentiation implicit.
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 guidance about when to use this tool versus list_ad_accounts or other account-related siblings. The phrase 'configured ad account' hints at scope, but no alternatives, prerequisites, or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_insightsC
Get performance insights for a specific ad.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | Ad ID | |
| level | No | Aggregation level: campaign, adset, ad | |
| fields | No | Comma-separated insight fields | impressions,clicks,spend,reach,frequency,cpc,cpm,ctr,actions,cost_per_action_type |
| filtering | No | JSON string for filtering | |
| breakdowns | No | Breakdown dimensions: age,gender,country,region,publisher_platform,platform_position,device_platform,comscore_market (replaces dma). Some accounts must opt in in Ads Manager for impression_device, hourly_stats_aggregated_by_audience_time_zone, and frequency_value; empty results do not necessarily mean zero performance. | |
| time_range | No | JSON string {since,until} in YYYY-MM-DD format | |
| date_preset | No | Lowercase date preset, for example: today, yesterday, last_7d, last_14d, last_30d, this_month, last_month, this_quarter, last_quarter, this_year, last_year | |
| time_increment | No | Time granularity: all_days, 1, 7, monthly |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden and delivers almost nothing: no statement of read-only safety, no auth/permission requirements, no rate-limit or timeout guidance (notable for an insights endpoint where large queries typically require an async report), and no sense of 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?
A single front-loaded sentence with no filler or repetition. It is efficient, though the brevity is partly under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter analytics tool with no annotations and no output schema, sitting in a family of four near-identical insight tools, the description omits everything an agent needs beyond the schema: when to prefer it over the sibling insight tools, the interaction between ad_id and level, and how to handle queries too large for a synchronous call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 8 parameters (including the nuanced breakdowns and date_preset options) are already documented in the schema. The description adds no parameter meaning at all, so the baseline 3 applies.
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?
Clear verb+resource ('Get performance insights') with a scoping qualifier ('for a specific ad') that separates it from the account/campaign/adset insight siblings. It stops short of naming those siblings or explaining the level parameter's role, so differentiation is implied rather than stated.
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 the obvious alternatives (get_account_insights, get_campaign_insights, get_adset_insights) or of create_async_report for heavy queries. The agent must infer routing 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_ad_previewB
Get a preview of an ad in a specific format. Returns HTML iframe for rendering.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | Ad ID | |
| ad_format | Yes | Ad format: DESKTOP_FEED_STANDARD, MOBILE_FEED_STANDARD, INSTAGRAM_STANDARD, INSTAGRAM_STORY, RIGHT_COLUMN_STANDARD, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the output is an HTML iframe for rendering, but omits any information about side effects, authentication requirements, whether the preview is static or live, or any limitations. Minimal behavioral transparency beyond the return type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the primary purpose. Every word earns its place, with no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the description provides the essential purpose and return type. However, it lacks any broader context, such as typical use cases, prerequisite conditions, or potential edge cases, leaving some gaps for a complete understanding.
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?
Both parameters (ad_id, ad_format) are fully described in the input schema with 100% coverage. The description adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a preview of an ad in a specified format, with a concrete return type (HTML iframe). It is specific about the verb and resource, though it does not explicitly distinguish itself from the sibling tool 'generate_preview'.
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 such as generate_preview or get_ad. There are no conditions, exclusions, or context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adsetC
Get details of a specific ad set by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| adset_id | Yes | Ad set ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It merely states 'Get details,' implying a read operation, but does not disclose default fields, response format, permissions, or how the 'fields' parameter affects the output. The agent is left to infer behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loading the action and resource with no extraneous words. It is efficient, though it could incorporate a bit more contextual detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with full parameter schema, the description is minimally adequate. However, with no output schema and no annotations, it lacks information about the return value structure, what 'details' includes, and when to use this tool over siblings, which is a notable 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?
The input schema provides descriptions for both parameters (adset_id and fields), achieving 100% schema coverage. The description adds little beyond reinforcing the 'by ID' aspect, so it does not compensate for any gaps in schema semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('ad set'), specifying that it targets a specific ad set by ID. It does not explicitly differentiate from sibling tools like list_adsets or get_campaign_adsets, but 'specific' and 'by ID' imply a single-entity fetch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as list_adsets or get_campaign_adsets. The description lacks context about prerequisites or typical use cases, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adset_adsA
Get all ads belonging to a specific ad set.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| adset_id | Yes | Ad set ID |
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 for behavioral disclosure. It does not mention that this is a read-only operation, nor does it explain pagination (via 'after' and 'limit'), the meaning of 'all' relative to pagination, or any response structure. The description is too sparse to set expectations for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, front-loading the core purpose. It is appropriately sized for the tool's simplicity, though it could benefit from more detail without becoming verbose.
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 list-type tool with a simple 4-parameter schema and no output schema, the description is minimally acceptable but leaves gaps. It fails to mention that results are paginated (despite the 'all' wording), which could mislead the agent into expecting a single unbounded response. The schema helps, but the description should complement it with behavioral notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters (adset_id, after, limit, fields) are already documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, aligning with the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and resource 'ads' with scope 'belonging to a specific ad set', clearly distinguishing it from sibling tools like get_campaign_ads or list_ads. It is concise and 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?
The description implies usage when you have an ad set ID and need its ads, but it does not explicitly state when to use this tool versus alternatives or mention exclusions. No alternative tools are referenced, so guidance is minimal but not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adset_insightsB
Get performance insights for a specific ad set.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Aggregation level: campaign, adset, ad | |
| fields | No | Comma-separated insight fields | impressions,clicks,spend,reach,frequency,cpc,cpm,ctr,actions,cost_per_action_type |
| adset_id | Yes | Ad Set ID | |
| filtering | No | JSON string for filtering | |
| breakdowns | No | Breakdown dimensions: age,gender,country,region,publisher_platform,platform_position,device_platform,comscore_market (replaces dma). Some accounts must opt in in Ads Manager for impression_device, hourly_stats_aggregated_by_audience_time_zone, and frequency_value; empty results do not necessarily mean zero performance. | |
| time_range | No | JSON string {since,until} in YYYY-MM-DD format | |
| date_preset | No | Lowercase date preset, for example: today, yesterday, last_7d, last_14d, last_30d, this_month, last_month, this_quarter, last_quarter, this_year, last_year | |
| time_increment | No | Time granularity: all_days, 1, 7, monthly |
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 beyond the core action. It does not state that this is a read-only operation, whether results are paginated, how the 8 optional parameters (time_range, breakdowns, filtering) affect the response, or any rate/credit constraints — a significant gap for a data-retrieval 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, front-loaded sentence with no wasted words. It is efficient, though arguably under-specified rather than optimally concise.
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 schema is fully documented and there is no output schema to explain, so return values need not be described. However, with zero annotations and a large optional-parameter surface, the description leaves behavioral and usage context incomplete for an agent deciding between the several insight tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters including their formats (JSON strings, date presets, comma-separated fields). The description adds no syntax or semantic detail beyond the schema, so the 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 specific verb ('Get') and resource ('performance insights') scoped to 'a specific ad set'. The ad-set scoping implicitly distinguishes it from the sibling insight tools get_account_insights, get_campaign_insights, and get_ad_insights, though it never names them.
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 'specific ad set' phrasing implies the usage context (single-adset performance reporting) but gives no explicit when-to-use guidance, no prerequisites, and does not route the agent to alternatives like get_campaign_insights or get_ad_insights for other levels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adset_leadsA
Get leads generated by a specific ad set. Requires leads_retrieval permission.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| adset_id | Yes | Ad set ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral requirement: 'Requires leads_retrieval permission,' which is valuable since no annotations are provided. However, it doesn't mention pagination (despite after/limit parameters), return format, or rate limits, so it only partially covers the transparency burden.
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 one short, front-loaded sentence that states the core purpose and a necessary permission note. Every word is meaningful, and there is no redundancy or 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?
The tool lacks an output schema and annotations, so the description must carry more weight. It covers the core purpose and permission, but doesn't explain what the response contains (e.g., a list of leads) or pagination behavior, leaving some gaps for an agent to infer. For a simple read operation with comprehensive parameter schemas, this is minimally acceptable.
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 input schema covers all four parameters with descriptions, meeting the 100% coverage baseline. The description adds no extra parameter-level information beyond reinforcing that the tool targets a specific ad set, so it neither improves nor detracts from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get leads') and the resource ('a specific ad set'), which precisely differentiates it from sibling tools like get_campaign_leads. It is specific, uses a strong verb, and leaves no ambiguity about the tool's scope.
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 'a specific ad set' implies the use case and distinguishes from campaign-level leads, but it doesn't explicitly mention alternatives or when-not-to-use conditions. There is no guidance on choosing between this and similar tools like get_form_leads, leaving the context implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adset_targeting_sentenceB
Get human-readable targeting description for an ad set. Converts targeting spec into readable sentences.
| Name | Required | Description | Default |
|---|---|---|---|
| adset_id | Yes | Ad set ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It indicates the tool converts a targeting spec into readable sentences, but it does not disclose whether it fetches the ad set, returns plain text, or has any side effects. The behavior is somewhat transparent but lacks safety and boundary details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that are front-loaded with the action and resource. The second sentence clarifies the first without excessive redundancy, making it efficiently worded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema) and the self-explanatory nature of the output (a human-readable sentence), the description is sufficiently complete. It does not explain return structure but that is not critical here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes the single parameter adset_id with a simple 'Ad set ID' description, giving 100% coverage. The tool description adds no extra meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a human-readable targeting description for an ad set and converts the targeting spec into readable sentences. This distinguishes it from sibling tools by its unique function of generating descriptive text rather than raw data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool compared to alternatives. It does not mention whether to prefer this over get_adset or search_targeting, nor does it specify any prerequisites or contexts where it is not appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_async_reportB
Check status and retrieve results of an async insight report.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for the result page | |
| limit | No | Maximum result rows per page | |
| fields | No | Comma-separated insight fields to return once the job completes | |
| report_run_id | Yes | Report run ID from create_async_report | |
| include_results | No | Fetch /{report_run_id}/insights when the job is complete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a read-only status-check and retrieval but does not state whether the operation is idempotent, what happens if the job is incomplete, whether pagination is automatic, or any auth/rate-limit requirements. This is a minimal behavioral disclosure for a polling 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?
The description is a single front-loaded sentence with zero wasted words. It immediately conveys what the tool does without unnecessary preamble.
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?
While the parameter schema is fully documented, the description is sparse for a tool with no output schema and no annotations. It does not explain the response shape, how status is returned, or when results become available, leaving meaningful contextual gaps for an agent invoking an async report retrieval 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 100%, so all five parameters are documented in the schema. The description adds no additional parameter meaning or formatting guidance beyond what the schema already provides, which is the expected baseline when the schema is complete.
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: 'Check status and retrieve results of an async insight report.' This clearly identifies the tool's function and separates it from creation tools like create_async_report, though it does not explicitly name any sibling for 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?
Usage is implied: the async report context suggests this is called after create_async_report and potentially repeatedly to poll for completion. However, the description provides no explicit when-to-use guidance, prerequisites, or alternatives, leaving the agent to infer the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audienceA
Get details of a specific custom audience by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| audience_id | Yes | Audience ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavioral traits. The verb 'Get' clearly indicates a read operation, but it does not explicitly state read-only status, authentication requirements, or behavior on missing IDs. For a benign read tool this is acceptable, but it lacks richer context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence that immediately states the tool's purpose. There is zero wasted text, and the structure is direct and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool, the description is adequate but minimal. It does not explain what 'details' includes, nor does it mention error handling or return format, especially with no output schema present. It lacks the richness needed for full contextual 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 input schema already describes both parameters (audience_id and fields) with 100% coverage. The description adds no extra parameter meaning beyond reinforcing 'by ID', which is already in the schema. Baseline of 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 clearly states the action ('Get details') and resource ('specific custom audience by ID'), making it easy to understand. It also distinguishes from sibling tools like list_custom_audiences and get_saved_audience by specifying 'custom audience' and 'by ID'.
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 when you need details for a single custom audience by ID, but it does not explicitly contrast it with alternatives like listing audiences or getting audience health. No when/when-not guidance is provided beyond the basic read scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audience_healthA
Get health status and delivery readiness of a custom audience. Shows match rate, size, and operation status.
| Name | Required | Description | Default |
|---|---|---|---|
| audience_id | Yes | Custom audience ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the fields shown (match rate, size, operation status), which adds behavioral context about the response. However, it does not explicitly state that the operation is read-only, mention required permissions, or describe any potential side effects or freshness. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the purpose and key outputs with no redundant filler. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter getter with no output schema, the description is largely complete: it explains what the tool returns (match rate, size, operation status) and identifies the resource as a custom audience. It could mention error conditions or permission details, but these are not essential for basic use, making it slightly above the minimum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (audience_id is described as 'Custom audience ID'), so the baseline is 3. The description does not add any extra meaning beyond the schema, but the schema already fully documents the parameter, so no deduction is needed.
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 a specific action ('Get health status and delivery readiness') and resource ('custom audience'), and lists the key outputs (match rate, size, operation status). This distinguishes it from sibling tools like get_audience which would focus on general audience details, not health status.
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 for checking audience health and delivery readiness, but does not explicitly contrast with alternatives such as get_audience or list_custom_audiences, nor does it state when not to use it. There is no direct guidance on scenario selection, so it remains at the 'implied usage' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_batch_statusC
Check the status of a catalog batch operation.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Batch handle returned from batch_products | |
| catalog_id | Yes | Product catalog ID |
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. It only states the basic action, adding no context about read-only nature, potential status values, response format, or any prerequisites. This is a significant gap for a status-checking 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?
The description is a single, clear sentence with no redundant information. It is appropriately sized and front-loaded, earning its place without wasting words.
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 lack of an output schema and the absence of annotations, the description is too sparse to be complete. It does not explain what 'status' information is returned, what possible statuses exist, or any edge cases. The tool is simple, but still requires more context to be fully usable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'handle' and 'catalog_id' documented. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Check the status of a catalog batch operation.' It uses a specific verb ('check') and a clear resource ('status of a catalog batch operation'). While it doesn't explicitly distinguish itself from siblings, the sibling list contains batch_products (the initiating operation), making the purpose sufficiently distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention that a handle from batch_products is required, nor does it describe the typical workflow (e.g., call batch_products first). The schema hints at this, but the description itself offers no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_businessB
Get details of a specific business by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| business_id | Yes | Business ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'Get details' without disclosing return format, pagination, or any side effects. Since this is a read operation, the lack of behavioral context (e.g., what fields are available via the optional 'fields' parameter) 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?
One short sentence, front-loaded with verb and target. Every word earns its place.
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 simple with only 2 parameters, so a minimal description might be acceptable. However, with no output schema, the description should at least hint at the response shape or how 'details' are scoped. The lack of any guidance on the 'fields' parameter and no linkage to related business tools makes it minimally 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?
The schema descriptions already fully define both parameters: business_id (required) and fields (comma-separated). The description adds no additional semantics beyond what the schema provides. Baseline 3 is appropriate since schema coverage is 100%.
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?
Description clearly states the action 'Get details' and the resource 'a specific business by ID'. It distinguishes well from sibling list_businesses by specifying a single entity look-up. However, it doesn't specify the type of details or how this differs from other business-related getters, so not quite 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 description implies when to use (when you have a specific business ID) but provides no explicit context or exclusions. It doesn't contrast with list_businesses or any related tools, leaving the agent to infer the appropriate scenario. This meets the 'implied usage' standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaignA
Get details of a specific campaign by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| campaign_id | Yes | Campaign ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavior. It implies a read-only operation but doesn't disclose response format, default fields, or potential errors. The statement is straightforward but minimal, providing basic transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded. It states the verb, resource, and differentiator without unnecessary words, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with only two parameters and no output schema, the description covers the core need. It lacks extra context like error handling or field selection details, but the low complexity means this is mostly sufficient. A slightly richer description would push it to 5.
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 input schema already provides descriptions for both parameters (campaign_id and fields), so there is 100% coverage. The tool description adds no additional detail about parameter meaning or usage, so the baseline of 3 applies given the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' with a clear resource 'campaign' and a unique identifier 'by ID'. It immediately distinguishes this from list_campaigns and other get_campaign_* tools (e.g., get_campaign_ads) by focusing on a single campaign's details.
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 makes clear this is for fetching a single campaign by ID, which implies when to use it versus list_campaigns. However, it doesn't explicitly name alternatives or state when not to use it, so it's clear but lacks formal exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaign_adsA
Get all ads belonging to a specific campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| campaign_id | Yes | Campaign ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of behavioral disclosure. It only states the basic purpose and does not mention pagination, response format, rate limits, or any side effects. Since the tool likely returns paginated results (given 'after' and 'limit' parameters), this omission is significant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence of eight words. It wastes zero words and immediately conveys the action and target, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with fully documented parameters and no output schema, the description is minimally adequate. However, it fails to mention that results are paginated or how to retrieve all ads across pages, which is important contextual information for a user expecting 'all ads' in a single response.
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 input schema has 100% parameter coverage, so the baseline is 3. The description adds no parameter-specific meaning beyond what the schema already provides, but it doesn't need to because all four parameters (campaign_id, after, limit, fields) are already described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get all ads belonging to a specific campaign' uses a specific verb ('Get'), clearly identifies the resource ('ads'), and scopes it by campaign. This distinguishes it from sibling tools like list_ads (all ads) and get_adset_ads (ads by adset).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you need ads for a specific campaign, but it does not explicitly state when to use it over alternatives or provide exclusion criteria. There is no mention of related tools like get_campaign_leads or get_adset_ads, leaving guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaign_adsetsA
Get all ad sets belonging to a specific campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| campaign_id | Yes | Campaign ID |
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. It states this is a read operation ('get') and scopes it to a campaign, but it does not mention pagination behavior despite the presence of 'after' and 'limit' parameters, nor does it clarify that 'all' may be subject to pagination. This lack of detail leaves important behavioral traits undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, clear sentence delivers the core purpose with no redundancy. It is perfectly sized and front-loaded, earning a top score.
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 simple, but the description lacks details about pagination (especially the 'after' cursor and 'limit' parameter) and how 'all' adsets are returned. Since there is no output schema, the description should have mentioned these behavioral aspects to be fully complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds only minimal context (the 'specific campaign' maps to campaign_id) and does not enhance understanding of fields, pagination, or limits beyond what the schema provides. Baseline of 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 clearly states the tool's function: retrieving all ad sets for a specific campaign. The verb 'get' and resource 'ad sets' with scope 'belonging to a specific campaign' effectively distinguishes it from siblings like list_adsets or get_campaign_ads.
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 (use when you need all adsets for a campaign) but does not explicitly mention when to use this tool over alternatives such as list_adsets or get_campaign_ads. No exclusions or alternative tool references are provided, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaign_insightsC
Get performance insights for a specific campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Aggregation level: campaign, adset, ad | |
| fields | No | Comma-separated insight fields | impressions,clicks,spend,reach,frequency,cpc,cpm,ctr,actions,cost_per_action_type |
| filtering | No | JSON string for filtering | |
| breakdowns | No | Breakdown dimensions: age,gender,country,region,publisher_platform,platform_position,device_platform,comscore_market (replaces dma). Some accounts must opt in in Ads Manager for impression_device, hourly_stats_aggregated_by_audience_time_zone, and frequency_value; empty results do not necessarily mean zero performance. | |
| time_range | No | JSON string {since,until} in YYYY-MM-DD format | |
| campaign_id | Yes | Campaign ID | |
| date_preset | No | Lowercase date preset, for example: today, yesterday, last_7d, last_14d, last_30d, this_month, last_month, this_quarter, last_quarter, this_year, last_year | |
| time_increment | No | Time granularity: all_days, 1, 7, monthly |
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 operation but does not disclose permissions, rate limits, return format, pagination, or caveats such as empty breakdown results not necessarily meaning zero performance.
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 filler or redundancy. Every word contributes to the core purpose statement.
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 an 8-parameter insights tool with no output schema and no annotations, the one-sentence description is too thin. It does not explain return values, how level/date/breakdown parameters shape results, or how it relates to the other insights tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 8 parameters. The description adds no parameter-level meaning beyond the schema, which fits the baseline of 3 when the schema does the heavy lifting.
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: "Get performance insights" for "a specific campaign." The campaign scope distinguishes it from sibling insights tools like get_account_insights, get_adset_insights, and get_ad_insights, though it does not name those alternatives explicitly.
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?
It offers no guidance on when to use this tool versus the account-, adset-, or ad-level insights siblings, nor any prerequisites or exclusions. The only usage signal is the implicit scope of "specific campaign."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaign_leadsA
Get leads generated by a specific campaign. Requires leads_retrieval permission.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| campaign_id | Yes | Campaign ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. 'Get' implies a read-only operation, and the permission note is useful, but the description does not explicitly state non-destructive behavior, return format, pagination behavior, or rate limits. It adds some context beyond the schema but omits important behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, no fluff, front-loaded with the main action. The permission note is relevant and efficiently stated. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with 100% parameter coverage and no output schema, the description is adequate but leaves gaps. It states what it does and a permission requirement, but does not describe what the response looks like, how pagination works, or any exclusions. Given no output schema, the description should have provided a bit more clarity on return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional meaning to parameters beyond 'specific campaign' mapping to campaign_id, which is already stated in the schema. Baseline 3 applies because the schema does the heavy lifting.
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 a specific verb and resource: 'Get leads generated by a specific campaign.' It distinguishes itself from sibling tools like get_campaign_ads (ads, not leads), get_adset_leads (leads at adset level), and get_form_leads (form-specific leads) by scoping to campaign. The permission requirement adds precision.
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 context ('specific campaign') but does not explicitly state when to use this tool versus alternatives like get_adset_leads or get_form_leads. It provides a prerequisite (permission) but no alternatives or exclusions. Usage guidance is implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_canvasA
Get details of a specific Instant Experience (Canvas) by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| canvas_id | Yes | Canvas ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of indicating the operation type. 'Get details' clearly signals a read-only operation with no side effects. While it does not discuss authentication or rate limits, these are not critical for a simple getter and the read-only nature is transparent.
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 immediately states the action and resource, making it highly concise and effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with only two parameters and no output schema, the description is complete. It covers the essential purpose and scope without needing to elaborate on return values or complex behavior.
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 input schema fully describes both parameters (canvas_id and fields) with 100% coverage. The description adds no additional parameter semantics beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get details') with a clear resource ('specific Instant Experience (Canvas)') and scope ('by ID'). This distinguishes it from sibling tools like list_canvases, create_canvas, and delete_canvas.
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 when you have a specific canvas ID, but it does not explicitly mention when to use it versus alternatives like list_canvases. The context is clear but lacks explicit exclusions or alternative naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_catalogB
Get details of a specific product catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| catalog_id | Yes | Product catalog ID |
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. It merely says 'Get details' without specifying what details are returned, the effect of the 'fields' parameter, or any prerequisites like authentication. This is minimal and under-disclosing for a tool with no annotations.
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 sentence with no wasted words. It is well-structured and front-loaded with the action and resource, making it easy to parse.
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 with no output schema and no annotations, the description is too sparse. It does not explain the return format, the purpose of the 'fields' parameter, or any context about catalogs, leaving the agent with insufficient information to fully predict the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%—both 'catalog_id' and 'fields' have clear descriptions. The tool description adds no extra meaning beyond implying the use of an ID for a specific catalog, so the baseline score of 3 applies.
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's function: retrieving details for a specific product catalog. The verb 'Get' and resource 'specific product catalog' make it distinct from siblings like 'list_catalogs' (which lists all) and 'update_catalog' (which modifies).
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 when a known catalog_id exists but provides no explicit guidance on when to use this over alternatives. It does not mention list_catalogs for enumeration or explain when to use the 'fields' parameter, leaving usage context ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creativeA
Get details of a specific ad creative by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| creative_id | Yes | Creative ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. 'Get details' clearly implies a read-only, non-destructive operation, which is a useful behavioral signal. However, it does not disclose the response format, error behavior (e.g., if the ID is invalid), or any permission requirements. For a simple getter, this is minimal but acceptable, though it leaves some ambiguity.
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, tightly worded sentence that fully conveys the tool's purpose in eight words. It is well front-loaded and contains no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple getter with only two parameters, both fully described in the schema, and no output schema to explain. The description is adequate for an agent to select and invoke it, but it could be slightly more complete by mentioning that 'fields' is optional or that the returned details can be customized. Overall, it is complete enough for its simplicity.
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 description coverage is 100%: both 'fields' and 'creative_id' have explicit descriptions. The tool description adds no additional parameter semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get details' and the specific resource 'ad creative' with the qualifier 'by ID.' This distinguishes it from sibling tools like 'list_creatives' (which lists all creatives) and 'create_creative'/'update_creative' (which write). The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' clearly implies this tool should be used when a specific creative ID is known, and it contrasts with list-type tools. However, it does not explicitly name alternatives or exclusions like 'use list_creatives to see all creatives,' so it provides clear context but no explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_delivery_estimateA
Get delivery estimate for an ad set, including estimated daily reach. Note: the delivery_estimate edge exists on the ad set (and ad account) node, not on individual ads. Also note: as of v26.0, the daily_outcomes_curve, budget_guardrail, and estimate_dau fields are no longer returned (removed with no replacement).
| Name | Required | Description | Default |
|---|---|---|---|
| adset_id | Yes | Ad Set ID | |
| optimization_goal | No | Optimization goal to estimate for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it does add real value: it discloses the v26.0 removal of daily_outcomes_curve, budget_guardrail, and estimate_dau. That said, it omits auth/permission requirements, rate-limit or cost behavior, and the overall shape of what remains in the response.
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?
Purpose is front-loaded in the first clause, followed by two clearly marked caveats. It is appropriately sized and every sentence earns its place, though the two 'Note:' blocks are slightly repetitive in framing.
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 read-only, two-parameter tool with no output schema, the description usefully sets expectations about node scope and version-dependent field removal. Auth requirements and remaining return shape are still unaddressed, but the critical caveats an agent needs are 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 description coverage is 100%, so adset_id and optimization_goal are already documented in the schema; the baseline is 3. The description implies the ad-set scope but adds no syntax, format, or allowed-value detail 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?
States a specific verb and resource ('Get delivery estimate for an ad set') plus the scope of what is returned ('estimated daily reach'). The note that the delivery_estimate edge lives on the ad set/ad account node, not on individual ads, helps separate it from ad-level siblings, but the closely-named sibling get_reach_estimate is never addressed.
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 node-scope note implies when this is applicable (ad set / ad account, not individual ads), which is useful routing guidance. However, it never names or contrasts the obvious alternative (get_reach_estimate) or states any prerequisites, leaving the when-to-use decision partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_experimentB
Get details of a specific experiment (ad study).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| experiment_id | Yes | Experiment (ad study) ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden for behavioral disclosure. It merely states 'Get details' without describing what details are returned, the effect of the 'fields' parameter, error behavior, or any permissions needed. This adds minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of eight words, front-loaded with the verb 'Get', with no redundant or filler content. Every word contributes to the meaning.
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 simple and parameters are fully described in the schema, but there is no output schema and no annotations. The description does not clarify what the response contains or how it differs from get_experiment_results, leaving a notable gap in contextual 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?
Schema description coverage is 100% with both parameters documented (experiment_id and fields). The description adds no extra parameter meaning, but the schema already provides adequate semantics, so a baseline score of 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 'Get details of a specific experiment (ad study)' clearly states the action (get), resource (experiment/ad study), and specificity (a single experiment). It distinguishes from sibling tools like list_experiments (list vs. specific) and get_experiment_results (details vs. results).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of list_experiments for browsing or get_experiment_results for results, nor any exclusions. Usage must be inferred from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_experiment_resultsB
Get results/cells of an experiment (ad study).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| experiment_id | Yes | Experiment (ad study) ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It only says 'Get results/cells' without detailing return format, pagination, field filtering behavior, or any side effects. The safety profile is only implied by the verb 'get', which is insufficient for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no filler. It is front-loaded with the verb and resource. However, it is extremely terse and could profitably include a note about the 'fields' parameter or return format without becoming verbose.
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 low complexity (2 params, no nested objects) but no output schema, so the description must explain return values. 'Results/cells' vaguely indicates what is returned but lacks detail on structure or filtering. The description is minimally adequate for a simple getter.
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 input schema has full descriptive coverage: experiment_id is 'Experiment (ad study) ID' and fields is 'Comma-separated fields to return'. The description adds no additional meaning beyond this schema, so the baseline score applies.
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 verb 'Get' and the resource 'results/cells of an experiment (ad study)'. This distinguishes it from sibling tools like get_experiment, which likely fetches experiment metadata, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when you need experiment results/cells) but provides no explicit guidance on alternatives or exclusions. It does not mention when to use get_experiment instead, leaving usage context to be inferred 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_feed_uploadsB
Get upload history for a product feed.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results to return | |
| fields | No | Comma-separated fields to return | |
| feed_id | Yes | Product feed ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It only states the action without disclosing pagination, sorting, response format, or any constraints beyond the feed_id. The schema's parameter descriptions cover mechanics, but the description adds no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that is front-loaded and contains no waste. It is appropriately sized for a simple retrieval operation, though it sacrifices depth 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?
With no output schema and no annotations, the description is insufficiently complete for a tool with four parameters and pagination. It fails to mention pagination behavior, return structure, or the significance of the 'after' cursor. The schema fills some gaps, but the description alone leaves the agent guessing about the result format.
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?
All four parameters are described in the schema with 100% coverage, so the baseline is 3. The description does not add any additional parameter semantics beyond what the schema already provides. It remains neutral, neither enhancing nor detracting.
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 identifies the tool as retrieving upload history for a product feed, using a specific verb ('Get') and resource ('upload history'), which distinguishes it from sibling tools like list_feeds or get_feed. It is unambiguous and tells the agent exactly what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description is minimal and only implies usage when you need upload history for a specific feed (feed_id). It does not explicitly state when to use this tool over alternatives, nor does it provide exclusions or preferred contexts. No reference to sibling tools is made in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_form_leadsB
Get leads submitted through a lead generation form.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results to return | |
| fields | No | Comma-separated fields to return | |
| form_id | Yes | Lead form ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only implies a read operation but doesn't disclose behavioral traits such as pagination, error handling, or data freshness. The 'after' parameter hints at pagination but is not explained.
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 with purpose. No extraneous information. Concise but could be slightly expanded without losing 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?
Missing details on return format, pagination behavior, field selection, and error scenarios. No output schema. For a tool with 4 parameters and no annotations, the description is 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?
Input schema has 100% description coverage for all 4 parameters. The description adds no additional meaning beyond what the schema provides (e.g., form_id is self-explanatory). 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 clearly states the verb 'get' and the resource 'leads submitted through a lead generation form'. It distinguishes this from sibling tools like 'get_lead' (single lead) and 'list_lead_forms' (list forms).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'get_adset_leads' or 'get_campaign_leads'. The description does not mention context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_imageA
Get details of a specific ad image by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| image_id | Yes | Image ID |
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 burden of behavioral disclosure. It states a read operation ('Get') but does not disclose response format, error handling, or any side effects. For a simple get operation, this is minimal but lacks explicit confirmation of read-only behavior or details on the 'fields' parameter.
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, focused sentence with no redundant information. It front-loads the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with full schema coverage and no output schema, the description is adequate but could mention the optional 'fields' parameter or the return format. It doesn't, but the schema covers the parameters, so it remains mostly 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?
The input schema already describes both parameters fully (100% coverage). The description adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get details') and the target resource ('a specific ad image'), scoped by 'by ID'. This distinguishes it from sibling tools like list_images (listing) and upload_image/delete_image (mutations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended usage: when you have an image ID and need details. It distinguishes from list_images by specifying 'by ID', but it doesn't explicitly mention alternatives or exclusion criteria. Given the clear context, this warrants a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leadA
Get details of a specific lead by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| lead_id | Yes | Lead ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only states 'Get details' without mentioning authentication requirements, response shape, potential errors, or any side effects. The description essentially restates the tool's purpose without adding meaningful behavioral context beyond what the name and schema already imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the essential purpose without any extraneous words. It is appropriately sized and front-loads the core action, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (get by ID) and the presence of a complete schema, the description is adequate for successful invocation. However, the absence of an output schema and annotations means the description could have added return format or usage caveats, but for a standard get-by-ID operation, the current level is sufficient.
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 input schema provides 100% coverage with descriptions for both parameters (lead_id and fields). The description adds no extra semantic value beyond the schema, mentioning only 'by ID' which repeats the lead_id parameter. Since the schema already explains the parameters clearly, a baseline score of 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 clearly states the verb 'Get' and the resource 'details of a specific lead by ID', which precisely identifies the tool's function. It distinguishes itself from sibling tools like get_form_leads or get_campaign_leads by emphasizing the singular 'specific lead by ID', making its 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?
The description implies usage when a specific lead ID is known, but it does not explicitly discuss when to prefer this tool over alternatives (e.g., get_form_leads, get_campaign_leads). There is no mention of exclusions or scenarios where other tools should be used, so the context is clear but lacks explicit guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lead_formC
Get details of a specific lead generation form.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| form_id | Yes | Lead form ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only says 'Get details', implying a safe read, but does not disclose behavioral traits like authentication requirements, rate limits, or error handling. This is minimal transparency for a read 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?
The description is a single sentence with no filler. Every word serves a purpose, making it appropriately concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool lacks an output schema, yet the description does not hint at the return structure (e.g., full form object, specific fields). For a simple get operation, more context is needed, especially to distinguish from sibling tools like 'get_lead' (which returns a single lead) or 'get_form_leads' (returns leads).
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 input schema already describes both parameters: 'form_id' as 'Lead form ID' and 'fields' as 'Comma-separated fields to return'. Since schema coverage is 100%, the description adds no additional meaning. Score is baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get details of a specific lead generation form' with a verb+resource pattern. It effectively distinguishes from siblings like 'list_lead_forms' (listing all forms) and 'create_lead_form' (creating forms). However, it does not specify what 'details' entails, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of context or exclusions, such as preferring 'list_lead_forms' for overviews or 'get_form_leads' for form submissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productA
Get details of a specific product.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| product_id | Yes | Product ID |
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. It only restates the tool's name ('Get details of a specific product') and offers no additional context such as required permissions, error behavior, or return format. The description adds no behavioral information beyond what the name already conveys.
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 of six words with no filler or repetition. It is front-loaded and every word contributes to the meaning, making it appropriately sized for such a simple read operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get tool with full schema coverage and no output schema, the description is minimally sufficient. However, it lacks guidance on when to use the tool (beyond what is implied), and it does not describe the return value format or any edge cases. It is a viable but sparse description that leaves room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (product_id and fields), so the baseline is 3. The description does not mention or elaborate on the parameters, relying entirely on the schema. It adds no extra meaning beyond the structured field 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?
The description 'Get details of a specific product' uses a specific verb ('Get') and resource ('a specific product'), clearly indicating a single-product retrieval operation. It distinguishes itself from sibling tools like 'list_products' by emphasizing 'specific', which implies retrieval by ID rather than listing.
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 wording 'a specific product' implies usage for retrieving one product, contrasting with list operations, but there is no explicit guidance on when to use this tool versus alternatives or any exclusion criteria. The tool name and description imply the use case, but no alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_setA
Get details of a specific product set.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| set_id | Yes | Product set ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It only states 'Get details' without disclosing behavior such as default return fields, handling of the 'fields' parameter, error cases, or whether the operation is read-only. This is minimal and does not go beyond the action itself.
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 sentence, front-loaded with the action and resource, and contains no unnecessary words. It is highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with two parameters, the description gives the essential purpose but does not elaborate on return format, defaults for 'fields', or error behavior. Given there is no output schema, slightly more context would improve completeness, but the simplicity keeps it adequate.
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 description coverage is 100%, as both 'set_id' and 'fields' have descriptions. The tool description adds no extra meaning beyond the schema, so the baseline score of 3 applies.
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 a specific verb ('Get') and resource ('product set') with a qualifier ('specific') that distinguishes it from list_product_sets. It is unambiguous and identifies the exact operation.
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 for retrieving a single product set when the ID is known, but it does not explicitly mention when to use it over alternatives like list_product_sets. No exclusions or alternative tools are referenced, leaving usage context somewhat implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reach_estimateB
Get estimated audience reach for a given targeting specification. Useful for planning campaigns before creating them.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| targeting_spec | Yes | JSON string of targeting spec (same format as ad set targeting) |
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. Beyond the implied read-only nature of 'Get', it says nothing about permissions, rate limits, latency/cost of an estimate call, or whether results are cached — significant gaps for a tool with zero annotation coverage.
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 short sentences with zero padding, and the core purpose is front-loaded ahead of the planning use case. Nothing needs trimming.
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 no output schema and no annotations, the description should carry more weight, but it never explains what the estimate returns (e.g. reach numbers, breakdowns) or how it differs from get_delivery_estimate. Adequate to call the tool, but incomplete for confident selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (account_id with its env-var fallback and targeting_spec) are already fully documented in the schema. The description adds no syntax or format detail beyond restating 'targeting specification', so the baseline 3 applies.
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 ('estimated audience reach') scoped to a targeting specification, which is far more than a tautology. However, it fails to distinguish itself from the very close sibling get_delivery_estimate, which an agent would plausibly confuse it with.
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?
'Useful for planning campaigns before creating them' implies a usage context (pre-flight planning), which is genuine but vague. It gives no explicit when-to-use or when-not-to-use guidance and never names get_delivery_estimate as the alternative for a different estimation task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rf_predictionA
Get details of a specific reach & frequency prediction by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| prediction_id | Yes | Prediction ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. However, for a simple getter, the behavior is straightforward and no side effects or special conditions are expected. The description adds no further context (e.g., error handling, rate limits), but this is not a significant gap for a read-only fetch-by-ID 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?
The description is a single, front-loaded sentence that directly states the action and scope. No unnecessary words or repetition. It is exactly as concise as needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with two well-documented parameters and no output schema, the description is sufficient to convey the core functionality. It does not detail the returned fields, but the term 'details' reasonably covers that, and the simplicity of the operation makes additional context unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds no additional meaning beyond the schema; 'by ID' simply restates the prediction_id parameter, and the fields parameter's effect on output is not elaborated, but the schema covers its syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get details') and the resource ('a specific reach & frequency prediction') with an explicit method ('by ID'). It distinguishes this tool from siblings like list_rf_predictions (which lists all predictions) and create_rf_prediction/delete_rf_prediction.
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 when to use the tool: when you have a specific prediction ID and need its details. It does not explicitly mention alternatives or exclusions, but the 'by ID' scope and sibling names make the intended usage clear without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ruleB
Get details of a specific automated rule.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| rule_id | Yes | Rule ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must own behavioral disclosure. It conveys a read-only 'get' operation but does not mention return format, permissions, rate limits, or potential errors. This leaves the agent without essential operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant text. Every word contributes to communicating the core purpose, making it highly 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?
For a simple get-by-ID tool, the description is adequate but incomplete. It does not explain what 'details' includes, how the 'fields' parameter interacts with the response, or any security/visibility constraints. Without an output schema or additional context, an agent may struggle to fully anticipate the tool's behavior.
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 input schema fully documents both parameters (rule_id and fields) with clear descriptions. The tool description adds no extra meaning beyond what the schema already provides, so the baseline score of 3 applies.
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 verb 'Get' and the resource 'details of a specific automated rule,' making it unambiguous that this retrieves a single rule by ID. This distinguishes it from list_rules which would list all rules, and from other get_* tools that focus on different entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as list_rules or get_campaign. The word 'specific' implies an ID is needed, but there is no explicit mention of prerequisites, exclusions, or related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_audienceA
Get details of a specific saved audience by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| audience_id | Yes | Saved audience ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. 'Get' clearly signals a read-only operation, but it does not disclose other aspects such as return format, pagination, or error handling. The description is minimal and does not enrich the safety profile beyond the obvious read nature.
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 that directly states the action and resource. No wasted words, ideal for a simple getter.
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 low-complexity get-by-ID tool, the description is mostly adequate, but without an output schema or any description of what 'details' includes, the agent may not know what fields are returned by default. The 'fields' parameter hints at configurability, but the description does not clarify the default return structure.
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 input schema has 100% coverage with descriptions for both parameters (audience_id and fields), so the tool description adds no additional parameter context. Baseline of 3 applies as the schema does the heavy lifting and the description does not conflict.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Get details), the resource (saved audience), and the qualifier (specific by ID). This distinguishes it from list_saved_audiences (which lists multiple) and other audience-related 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?
The description implies usage when a single saved audience ID is known, but it does not explicitly state when to use this tool over alternatives like list_saved_audiences or get_audience. No explicit when-not-to-use guidance is provided, but the purpose is clear enough to infer the primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_targeting_suggestionsB
Get targeting suggestions based on existing targeting criteria. Meta suggests related interests, behaviors, and demographics.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| targeting_list | Yes | JSON string of current targeting criteria to get suggestions for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add meaningful behavior by saying Meta suggests related interests, behaviors, and demographics from existing criteria. However, it does not disclose permission requirements, rate limits, result size, or return structure, so transparency is only adequate.
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 followed by a brief explanation of what Meta returns. There is no redundant or filler language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with complete schema coverage, the description is adequate: it explains the conceptual output and the basis for suggestions. However, with no output schema and no annotations, it could say more about result shape and how this differs from sibling targeting-search tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters, including account_id fallback behavior and targeting_list as a JSON string. The description reinforces that suggestions are based on existing targeting criteria but adds no further parameter-level detail.
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 gives a specific verb and resource: it gets targeting suggestions based on existing targeting criteria, and it clarifies the output categories as related interests, behaviors, and demographics. It is clear on its own, but it does not explicitly distinguish itself from sibling targeting tools such as search_targeting or search_targeting_map.
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?
It implies usage when existing targeting criteria are available, but it does not state when to use this tool versus alternatives like search_targeting, search_targeting_map, or get_reach_estimate. There are no exclusions or prerequisites beyond the schema requirement for targeting_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_videoA
Get details of a specific ad video by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields to return | |
| video_id | Yes | Video ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'Get details' without disclosing behavioral traits such as whether fields parameter is supported, what happens for invalid IDs, or any error behavior. Minimal value beyond 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, well-structured sentence that front-loads the action and resource. No wasted words, and it is easy to parse quickly.
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 simple (get by ID) with no output schema or annotations. The description covers the core purpose but does not mention return format or any edge cases. Given the simplicity, it is adequate but could be improved with a note on the fields parameter or error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (video_id and fields) are already documented. The description adds no additional semantic meaning beyond the schema, matching the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('ad video'), and the identifier ('by ID'). This distinguishes it from sibling tools like list_videos or delete_video.
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 when to use this tool—when you have a specific video ID—but does not explicitly mention alternatives or exclusions. The context is clear but there is no guidance on choosing between this and list_videos or other related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_account_usersC
List users who have access to the ad account with their roles and permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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 largely does not meet it. It never states that this is a read-only listing, how pagination behaves, rate limits, or the env-var fallback for account_id. Only the implicit 'List' verb hints at a non-mutating 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 tight sentence with the resource front-loaded and zero filler. It is appropriately sized, though it says almost nothing beyond the essentials.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple four-parameter read with no output schema and no annotations, the description covers what is returned (roles and permissions) but omits pagination expectations and the account_id fallback. Adequate but with visible gaps given the total reliance on prose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (after, limit, fields, account_id) are already documented in the schema. The description adds nothing about parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('users who have access to the ad account') and even states the returned shape (roles and permissions). It does not explicitly distinguish itself from the nearby sibling list_business_users, 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 prerequisites, and no named alternative. An agent cannot tell from the text whether this belongs at account level versus the business-level user listing siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ad_accountsA
List all ad accounts accessible by the current user. Returns paginated results.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses pagination and the scope of accessible accounts, but with no annotations, it omits details like authentication requirements, rate limits, or default fields returned. The mention of pagination adds some behavioral context beyond what the schema hints.
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 concise, front-loaded sentences with no wasted words. The key verb and resource appear immediately, and pagination is noted without 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?
For a simple list tool with no output schema, the description covers the basic purpose and pagination, but doesn't explain the return object structure or differentiate from similar list tools like list_business_ad_accounts. It is adequate but has clear 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?
The input schema provides 100% coverage with descriptions for all three parameters (after, limit, fields). The tool description adds no additional semantic meaning beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('ad accounts'), and clarifies scope ('accessible by the current user'), distinguishing it from siblings like get_ad_account or list_business_ad_accounts.
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?
Clearly states the context (all ad accounts accessible by the current user) and that results are paginated, but does not explicitly mention when to use this over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_adsB
List ads in the ad account. Optionally filter by campaign, ad set, or status.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| status | No | Filter by status: ACTIVE, PAUSED, DELETED, ARCHIVED | |
| adset_id | No | Filter by ad set ID | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| campaign_id | No | Filter by campaign ID |
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, yet it only states the listing action. It does not mention that this is a read-only operation, whether pagination is automatic, what permissions are required, or any other behavioral trait beyond what the schema already provides.
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 short sentences with zero waste, and the main purpose is front-loaded before the optional filtering note. Every word earns its place.
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 description is minimal but adequate for a list tool whose parameter details are fully covered by the schema. However, with no annotations or output schema, it should provide more context about the read-only nature, return format, and pagination to be 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 100%, so all seven parameters are already documented in detail. The description mentions filtering by campaign, ad set, or status, which corresponds to some parameters, but adds no syntax, format, or fallback details beyond what the schema already specifies.
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 'List' and resource 'ads' within the ad account, making the core operation clear. However, it does not differentiate from sibling tools like get_campaign_ads or get_adset_ads that also retrieve ads, so an agent cannot tell when to use this account-level list versus a nested one without inspecting schemas.
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 filter by campaign, ad set, or status' implies how to narrow results, but there is no explicit guidance on when to use this tool versus alternatives such as get_campaign_ads. No when-not conditions or prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_adsetsB
List ad sets in the ad account. Optionally filter by campaign or status.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| status | No | Filter by status: ACTIVE, PAUSED, DELETED, ARCHIVED | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| campaign_id | No | Filter by campaign ID |
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 safe read via 'List' but says nothing about pagination semantics, permission/auth requirements, defaults, or what is returned for a 6-parameter listing 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?
Two short sentences with the resource and filters front-loaded; there is no filler. It is appropriately sized, though it could carry a bit more signal 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?
For a paginated listing tool with no annotations and no output schema, the description is minimally adequate: the rich schema covers inputs, but return shape and pagination behavior must be inferred from parameter names alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented in the schema, including the account_id env-var fallback and status values. The description only restates the campaign/status filters and adds no new parameter semantics, so baseline 3 applies.
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 ('List ad sets') with a scoping clause ('in the ad account'), which distinguishes it from generic siblings. It does not explicitly contrast with near-neighbors like get_campaign_adsets or list_ads, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Optionally filter by campaign or status' implies usage contexts, but there is no explicit when-to-use guidance and no mention of alternatives such as get_campaign_adsets or get_adset. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_block_listsB
List publisher block lists for the ad account. Returns paginated results.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It clearly implies a read-only listing operation and adds that results are paginated, but it does not disclose permissions, rate limits, or other operational 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?
Two short sentences, front-loaded with the core action and resource, with no unnecessary wording. The pagination note is useful and brief.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-parameter list tool with full schema descriptions, the definition is mostly complete: it identifies the resource, scope, and pagination behavior. It could be slightly richer about the returned block-list objects, but no output schema is present and the key calling information is available.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains account_id, after, limit, and fields. The description only reinforces the ad-account scope and pagination, adding little parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb and resource: 'List publisher block lists for the ad account.' This is specific enough to distinguish retrieval from the sibling mutation tools like create_block_list, add_to_block_list, and delete_block_list, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states what the tool retrieves but gives no explicit guidance on when to use it versus related block-list tools or how it should be chosen over alternatives. The ad-account scope is implied but not framed as a selection condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_budget_schedulesB
List budget schedules attached to a campaign or ad set. Returns paginated results.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| parent_id | Yes | Campaign or ad set ID that owns the budget schedules | |
| parent_type | No | Type of parent object | campaign |
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 useful trait: results are paginated. However it says nothing about permission requirements, rate limits, whether parent_type must match the parent_id, or what a page contains, so it only partially covers the load.
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 short, front-loaded sentences with zero filler; the scoping statement comes first and the pagination note second. Every sentence earns its place.
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 fully documented read-only list tool with one required parameter and no output schema, the definition covers purpose and the paginated-return behavior. It is slightly thin on operational context (no mention of how to page forward or what fields default to), but nothing critical to a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so pagination cursor, limit, fields, parent_id and the parent_type enum are all documented in the schema. The description adds no parameter meaning beyond that, which is the expected baseline when the schema does the heavy lifting.
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 ('List budget schedules') plus the scoping object ('attached to a campaign or ad set'), so an agent immediately knows what is returned. It does not explicitly distinguish itself from create_budget_schedule/update_budget_schedule, but the read verb makes the distinction obvious without opening a schema.
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 when-to-use guidance, no prerequisite explanation, and names no alternative tool. 'Attached to a campaign or ad set' implies the required parent but the agent must infer that from the name and schema rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_business_ad_accountsA
List ad accounts owned by the configured business. Requires META_BUSINESS_ID env var.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits on its own. It only mentions a prerequisite (META_BUSINESS_ID env var) and does not state that this is a read-only operation, describe pagination behavior, or note any required permissions. This is a significant gap for a tool with no annotation safety hints.
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, direct sentence that conveys the core purpose and a key requirement. No unnecessary words or redundant information. It is exemplary in conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (3 optional parameters, no output schema), and the description covers the basic purpose. However, since there is no output schema, the description could have mentioned the return structure (e.g., paginated list, fields included) to help the agent understand expected results. For a list tool, this is a modest 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?
The input schema provides full descriptions for all three parameters (after, limit, fields), so the schema already covers parameter semantics. The description adds no additional value beyond the schema, which is acceptable per the baseline scoring.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (List), the resource (ad accounts), and the scope (owned by the configured business). This distinguishes it from sibling tools like list_ad_accounts and get_ad_account, providing an unambiguous purpose.
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 indicates a specific context: it lists ad accounts owned by the configured business, and the META_BUSINESS_ID env var requirement clarifies when this tool is applicable. However, it does not explicitly mention alternatives or exclusions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_businessesA
List all businesses accessible by the current user. Returns paginated results.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return |
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 pagination behavior ('Returns paginated results') and implicitly states read-only nature via 'List', and scopes access. It does not mention rate limits or ordering, but for a simple read operation this is reasonable transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the purpose and includes essential behavioral info (pagination). No wasted words or redundant details.
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 simple with no output schema; the description adequately covers what it does and that results are paginated. It does not detail the return object shape or ordering, but these are less critical for a low-complexity list tool that is clearly scoped. It could mention that it returns business objects, but the name implies this.
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 input schema has 100% coverage for all three parameters (after, limit, fields) with clear descriptions. The tool description adds only the pagination detail that maps to 'after' and 'limit', but does not add new semantic value beyond the schema. 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 uses a specific verb ('List') and resource ('all businesses accessible by the current user'), clearly distinguishing it from sibling tools like get_business (singular), list_business_ad_accounts, and list_business_users. The scope and pagination note make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context—'all businesses accessible by the current user'—which indicates the tool’s scope. However, it does not explicitly state when to prefer this over alternatives like get_business for a single entity, or other list tools, though the context is sufficient for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_business_instagram_accountsA
List Instagram accounts owned by the configured business. Requires META_BUSINESS_ID env var.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the environment variable prerequisite, which is valuable. However, it does not elaborate on return format, pagination behavior, or any access/rate-limit concerns. The disclosure is minimal but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core purpose, and includes the prerequisite. Every word earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple list operation with no output schema. The description explains the purpose and prerequisite, but it does not mention what fields are available via the 'fields' parameter or what the response structure looks like. This is a moderate gap for a tool that supports arbitrary field selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (after, limit, fields) are already well-documented in the schema. The description adds no additional parameter guidance, which is acceptable given the schema coverage. 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 uses a specific verb+resource combination: 'List Instagram accounts owned by the configured business.' It clearly distinguishes this from sibling tools like list_business_ad_accounts or list_business_pages by naming Instagram accounts explicitly.
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 clear context for when to use the tool (when you need Instagram accounts for the configured business) and a crucial prerequisite (requires META_BUSINESS_ID env var). It does not explicitly mention alternatives or when not to use it, but the resource type is specific enough to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_business_pagesA
List Facebook Pages owned by the configured business. Requires META_BUSINESS_ID env var.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It mentions the env var requirement and implicitly indicates a read-only operation ('List'), but it does not describe pagination behavior, default fields, or any other side effects or constraints beyond the env var. Adequate basic disclosure but lacks depth.
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 that states the action, resource, scope, and a critical prerequisite. Every word earns its place, with no filler or repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema and clear parameter documentation, the description is mostly complete. It covers purpose and a key environmental requirement. However, it does not mention pagination or what fields are returned by default, which would be marginally helpful but not essential given the schema and simple nature of the 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 100%, so the parameters (after, limit, fields) are already well-documented. The description adds no additional parameter-specific semantics beyond the env var requirement, which is not a parameter. Baseline 3 is appropriate given the schema handles the details.
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 contains a specific verb ('List') and resource ('Facebook Pages') with a clear ownership scope ('owned by the configured business'), distinguishing it from sibling tools like list_businesses or list_business_ad_accounts. It is immediately obvious what this tool does.
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 clearly indicates the tool is for listing Facebook Pages associated with the configured business, which establishes when to use it. It also notes the required META_BUSINESS_ID environment variable, a useful prerequisite. However, it does not explicitly mention when not to use it or name alternative tools for similar operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_business_usersA
List users of the configured business. Requires META_BUSINESS_ID env var.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry behavioral disclosure. It does state a configuration dependency and implies a read-only operation via the verb 'list', but it does not describe pagination behavior, default output fields, or error conditions. The schema defines pagination parameters, so the description adds limited additional transparency beyond the verb and prerequisite.
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 long, immediately states the action, and wastes no words. It includes the essential prerequisite in a compact second sentence, achieving high information density without 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?
For a simple list tool, the description covers the core purpose and prerequisite, but lacks any indication of the return value structure since there is no output schema. It also does not reference sibling tools or special behaviors like automatic pagination. The schema covers parameters well, but the overall completeness is moderate for an agent needing to understand what it will receive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so a baseline of 3 is appropriate. The tool description does not add any parameter-specific meaning beyond what the schema already provides for 'after', 'limit', and 'fields'. Since the schema fully documents the parameters, the description does not need to compensate, but it also adds no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and identifies the resource as 'users of the configured business', making the tool's purpose unmistakable. It distinguishes this from sibling tools like list_account_users by scoping to the business context. The mention of META_BUSINESS_ID further clarifies the target resource.
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 a clear prerequisite (META_BUSINESS_ID env var) which informs when the tool can be used. However, it does not explicitly state when to prefer this over list_account_users or other list tools, nor does it mention situations where an alternative would be more appropriate. The context is clear but exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_campaignsB
List campaigns in the ad account. Supports filtering by status and objective. Returns paginated results.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| before | No | Pagination cursor for previous page | |
| fields | No | Comma-separated fields to return | |
| status | No | Filter by status: ACTIVE, PAUSED, DELETED, ARCHIVED | |
| objective | No | Filter by objective: OUTCOME_AWARENESS, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_TRAFFIC, OUTCOME_APP_PROMOTION | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose that results are paginated and that status/objective filtering is supported, which is useful behavioral context, but says nothing about auth/account scoping requirements, rate limits, or default page size behavior beyond what the schema already states.
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?
Three short sentences, front-loaded with the core action and no filler. The final sentence about paginated results is slightly redundant given the after/before/limit parameters, keeping this just short of a 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?
For a 7-parameter list tool with no output schema and no annotations, the description covers the essentials (what it lists, filters, pagination) but omits return shape details, default behaviors, and account-scoping caveats. Minimum viable rather than 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 100%, including a detailed account_id fallback explanation and enum-like status/objective lists, so the schema already documents every parameter. The description only restates the status/objective filters and adds no syntax or format detail beyond the schema, making the baseline 3 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 clear verb+resource ('List campaigns in the ad account') and names the two supported filters. It implicitly distinguishes itself from get_campaign/create_campaign by being a listing operation, but does not explicitly route the agent away from siblings like list_adsets or get_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?
Filtering by status and objective is mentioned, which implies browsing/filtering use, but there is no explicit when-to-use guidance or comparison against alternatives such as get_campaign (single entity) or the various list_* siblings. Usage context 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.
list_canvasesB
List Instant Experience (Canvas) creatives in the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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 disclose that the operation is read-only, that results are paginated (the schema's 'after' cursor implies paging), or what the response contains. For a list tool with zero annotation coverage 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?
A single, front-loaded sentence with zero filler. The resource and scope appear immediately and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool without an output schema, the description covers what is returned at a high level but omits pagination behavior and result shape. It is minimally adequate but leaves the agent to rely on schema defaults for the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents pagination, limit, fields, and account fallback. The description adds no parameter-level detail beyond what is in the schema, which is the expected baseline when the schema does the heavy lifting.
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 ('List') and a precise resource ('Instant Experience (Canvas) creatives') scoped to 'the ad account'. It is clearly distinguishable from get_canvas, create_canvas, and delete_canvas by its plural/list nature, though it never names those siblings explicitly.
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 the many alternatives (get_canvas for a single canvas, list_creatives for other creative types). The agent must infer the usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalogsB
List product catalogs for the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results to return | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure, but it only restates the listing purpose. It does not mention read-only behavior, pagination, permissions, or what the returned catalog list 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 description is a single front-loaded sentence with no filler. Every word contributes to stating the operation and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with fully described parameters, the definition is minimally sufficient. However, with no output schema and no annotations, it could have explained return shape or pagination behavior to be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are fully documented in the schema. The description adds no additional parameter meaning, which is acceptable given the schema already does that work.
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 gives a specific verb ("List") and resource ("product catalogs") scoped to the ad account, so the core purpose is clear. It does not explicitly differentiate itself from nearby catalog tools such as get_catalog or create_catalog, which keeps it below 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 explicit guidance on when to use this tool versus alternatives like get_catalog or list_product_sets. The listing intent is implied, but neither exclusions nor usage context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_creativesC
List ad creatives in the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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 only states the basic action. It discloses nothing about pagination behavior, return volume, ordering, or rate limits for what is presumably a large collection endpoint.
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 filler, and the resource is front-loaded. It is efficient, though arguably under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool whose four parameters are fully documented in the schema, the description is minimally adequate. There is no output schema, and the description offers nothing about return shape or usage context, leaving gaps for an agent deciding between this and get_creative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with after, limit, fields, and account_id each documented including the env-var fallback. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.
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 (List) and resource (ad creatives) scoped to the ad account, which is clear. However, it does not distinguish itself from siblings like get_creative or create_creative, so the agent gets no differentiation help.
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 the single-creative alternative get_creative, and no prerequisites. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_audiencesC
List custom audiences in the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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 pagination behavior, the default result limit, the read-only nature of the call, or the account_id environment-variable fallback. For a list tool with zero annotation coverage this leaves the agent under-informed about how calls behave.
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 or repetition. It is appropriately tight, though its brevity borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and four parameters of which all are optional, the description does not tell the agent how results are paginated, what the default page size implies, or how account context is resolved. The schema covers the parameters, but behavioral completeness is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with after, limit, fields, and account_id all documented including the env-var fallback, so the schema does the heavy lifting. The description adds no syntax or format detail beyond that, so baseline 3 applies.
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 specific verb ('List') and resource ('custom audiences') scoped to the ad account, so an agent can tell what it does. It does not distinguish itself from siblings like list_saved_audiences or get_audience, which leaves some ambiguity about which listing 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 exclusions, and no mention of the alternative audience-listing or retrieval tools. The agent must infer context entirely from the tool name and the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_experimentsA
List A/B test experiments (ad studies) for the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results to return | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the behavioral burden. As a listing tool, it lacks unique behavioral constraints (like write permissions or destructive nature) to disclose. It remains a viable minimum disclosure for a read 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?
The description is maximally concise, achieving its purpose in a single, highly focused sentence. There is zero wasted text, and the core function is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the comprehensive input schema that covers pagination and filtering options, the description is functionally complete. It is a solid definition, though it does not proactively describe limitations or potential data gaps outside of the defined parameters.
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 input schema coverage is 100%, meaning the schema already provides full documentation for all parameters. Therefore, the description adds no semantic value that was not already present in the structured input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states its function: to list A/B test experiments. By including the parenthetical clarification '(ad studies)', it strongly links the function to the advertising domain, successfully differentiating it from a generic experiment retrieval tool.
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?
It implies scope by stating the experiments are 'for the ad account,' which restricts usage. However, it does not provide explicit guidance on when this tool is the correct choice versus, for example, using get_experiment to retrieve details of a single experiment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feedsA
List product feeds for a catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results to return | |
| fields | No | Comma-separated fields to return | |
| catalog_id | Yes | Product catalog ID |
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 burden of behavioral disclosure. It only states the basic action and does not mention pagination, field selection, default limit, or explicitly confirm read-only behavior. While 'list' implies read-only, the description lacks any additional context about side effects or operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence with no redundant or irrelevant content. It is front-loaded and highly scannable, earning maximum conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with a well-documented schema, the description is minimally adequate. However, given the absence of annotations and an output schema, it does not clarify what the response contains or any explicit behavioral nuances, leaving some gaps in 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 input schema already provides descriptions for all four parameters (100% coverage), so the description adds no extra meaning beyond restating that feeds belong to a catalog. The baseline is 3 due to high schema coverage, and the description does not elevate it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('product feeds') with a specific scope ('for a catalog'), effectively differentiating it from sibling tools like list_catalogs or list_products. It is a specific and unambiguous statement of purpose.
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 usage is implied by the description: one would use this tool to enumerate feeds for a given catalog. However, it does not explicitly mention when to prefer it over alternatives (e.g., get_feed_uploads) or provide any exclusion criteria, leaving the decision to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_imagesC
List ad images uploaded to the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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 delivers almost nothing: 'List' implies a read, but there is no statement about pagination behavior, result ordering, scoping to the account, or required permissions. The only behavioral signal is the implicit read-only nature of 'List'.
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 filler and the scope front-loaded. It is appropriately sized, though brevity here reflects under-specification as much as discipline.
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 4-parameter tool with no annotations and no output schema, the description should at minimum cover pagination, scoping, and return shape. It covers none of these, leaving gaps that the structured fields only partially fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description says nothing about the four parameters (after, limit, fields, account_id) and adds no meaning beyond the schema, but the schema itself is fully self-documenting.
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 ('List') and resource ('ad images uploaded to the ad account'), which is clear enough to separate it from write siblings like upload_image and delete_image. However, it never names get_image or explains the collection-vs-single distinction, so differentiation is left implicit.
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 such as get_image for a single image or list_creatives for creative-level data. The agent must infer the correct tool purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_lead_formsB
List lead generation forms for a Facebook Page.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results to return | |
| fields | No | Comma-separated fields to return | |
| page_id | Yes | Facebook Page ID |
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. It only states that the tool lists forms, without mentioning read-only nature, pagination behavior, permissions, or any side effects. The term 'List' implicitly suggests non-mutation but lacks explicit transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the core functionality without redundancy. Every word contributes to clarity, and there is 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?
For a simple list tool with well-documented parameters, the description adequately covers the core purpose. It does not mention return format or pagination behavior, but the schema provides parameter details, and the listing nature makes the return type inferable. A longer description may be unnecessary given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (page_id, after, limit, fields) having a clear description. The tool description adds no extra semantic meaning beyond the schema, so baseline 3 applies.
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 identifies the verb ('List'), resource ('lead generation forms'), and scope ('for a Facebook Page'). It distinguishes this list operation from sibling tools like get_lead_form (single form) and get_form_leads (leads from forms), which target different resources.
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 explicit guidance is provided on when to use this tool versus alternatives. The description does not mention sibling tools, exclusions, or specific scenarios where listing forms is appropriate beyond the generic purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_offline_event_setsC
List offline conversion data sets for the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results to return | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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 says only that a list is returned; it omits pagination behavior, default ordering, authentication/account requirements, and any rate-limit or result-cap context, despite the schema exposing an 'after' cursor that implies paged results.
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 or repetition. It is efficient, though the brevity borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated list tool with full parameter coverage in the schema and no output schema, the description is minimally adequate. It lacks any statement of what an offline event set is or how results are shaped, leaving a gap given the absence of 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 100% — account_id, after, limit, and fields are all documented in the schema, including the META_AD_ACCOUNT_ID fallback. Baseline 3 applies since the description adds nothing beyond what the schema already documents.
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 ('List offline conversion data sets') scoped to an ad account, which clearly separates it from the create/send siblings. It does not explicitly name an alternative, but the list-vs-create distinction is unambiguous from the name and text.
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 routing to alternatives such as create_offline_event_set or send_offline_event. The listing intent is inferable, but nothing tells the agent when this is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsB
List products within a catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results to return | |
| fields | No | Comma-separated fields to return | |
| filter | No | JSON string of filter rules | |
| catalog_id | Yes | Product catalog ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides minimal behavioral detail beyond the action. It does not mention pagination, filtering capabilities, response structure, or any operational considerations. With no annotations, the agent is left without information about rate limits, access requirements, or the potential size of response.
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 that efficiently states the core function. No wasted words.
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 with five parameters and no annotations, the description is under-specifying. It fails to mention pagination (after/limit), filtering (filter), and field selection (fields), all of which are key behaviors. It also does not explain the return format, which is especially important without an output schema.
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 documents all five parameters, so the description adds no additional semantic value. It does reinforce the meaning of catalog_id by noting the products are within a catalog, but this is directly derivable from the parameter name 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?
The description uses a specific verb 'list' and specifies the resource 'products within a catalog', clearly distinguishing it from sibling tools like get_product (single product) and list_catalogs. It leaves no ambiguity about the tool's function.
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 explicit usage guidance is provided. The description implies it is for enumerating products in a catalog, but does not explicitly contrast with get_product or mention when not to use it. The agent must infer this from the schema and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_product_setsB
List product sets within a catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results to return | |
| fields | No | Comma-separated fields to return | |
| catalog_id | Yes | Product catalog ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It only states the basic action and does not disclose pagination behavior (despite 'after' and 'limit' parameters), authentication needs, or whether the operation is read-only. This lack of context is a gap for a tool with pagination parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that efficiently states the tool's purpose. It is not verbose, and while it could include more detail, it earns its place without wasted words.
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 moderate complexity (4 parameters, pagination, no output schema, no annotations), the description is incomplete. It does not explain what the response looks like, how pagination works, or how to use the 'fields' parameter effectively. More context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with meaningful descriptions for all four parameters. The tool description adds no extra parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and resource 'product sets' with the scope 'within a catalog'. This clearly distinguishes it from sibling tools like list_products or get_product_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like get_product_set or list_products. There is no mention of use cases, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rf_predictionsB
List reach & frequency predictions for the ad account. Returns paginated results.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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 disclose that results are paginated, which is genuine added context, but it omits ordering, permissions, whether the list can be empty, and any rate-limit behavior. Adequate but thin for a tool with zero annotation coverage.
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 short sentences, front-loaded with the resource and scope, followed by the pagination property. Nothing is redundant, though the second sentence is somewhat generic.
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 4-parameter read-list tool with no output schema and no annotations, the description covers the essentials but not much more. It never says what a prediction record contains, how results are ordered, or the default page size behavior beyond what the schema states.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (after, limit, fields, account_id) is already documented in the schema, including the META_AD_ACCOUNT_ID fallback. The description adds no syntax or format guidance beyond that, making the baseline 3 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 specific verb and resource: lists reach & frequency predictions scoped to the ad account. It is clear on its own, but it does not differentiate itself from the sibling rf-prediction tools (get_rf_prediction, create_rf_prediction, delete_rf_prediction) that share the same noun.
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 indication of when to use this list tool versus get_rf_prediction for a single prediction or the create/delete siblings. No prerequisites or exclusions are stated; the agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rulesC
List automated rules for the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results to return | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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. 'List' implies a read-only operation, but the description says nothing about permissions, rate limits, or pagination behavior beyond what the schema implies. Minimal 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?
A single front-loaded sentence with no filler. It is efficient, though arguably terse given the absence of annotations and usage 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?
For a simple, read-only listing tool with four fully documented parameters, the description is minimally sufficient. However, with no annotations and no output schema, it leaves the agent without confirmation of read-only safety or return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so after, limit, fields, and account_id are all documented with semantics (including the env var fallback). The description adds no parameter detail beyond 'for the ad account', so the baseline 3 applies.
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 (list) and resource (automated rules) scoped to the ad account. It is clearly distinguishable from get_rule, create_rule, and update_rule, though it does not explicitly name 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?
No guidance on when to use this versus get_rule for a single rule, or how it relates to create_rule/update_rule. The ad-account scoping is implied but no conditions, prerequisites, or alternatives are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_audiencesB
List saved audiences in the ad account. Saved audiences are reusable targeting presets.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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 that this is a read-only operation, whether results are paginated (the schema implies it but the description is silent), what the response shape is, or what auth is needed. The semantic definition of 'saved audience' is the only added value.
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 short sentences, front-loaded with the action, and the second sentence earns its place by defining the resource. 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?
For a 4-parameter list tool with no annotations and no output schema, the description is only minimally adequate. It omits pagination behavior and return shape, though the parameter documentation softens the impact since cursoring is described in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (after, limit, fields, account_id) are fully documented including the env-var fallback. The description adds nothing parameter-level, which is acceptable given the schema does the work – baseline 3.
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 (List) and resource (saved audiences) scoped to the ad account, and the second sentence clarifies what a saved audience actually is. It does not, however, differentiate from the nearby list_custom_audiences sibling, leaving the agent to infer the distinction.
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 statement of when to use this versus list_custom_audiences or get_saved_audience, no prerequisites, no exclusions. The agent gets a purpose but zero routing guidance despite several plausible alternatives in the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_system_usersA
List system users of the configured business. Requires META_BUSINESS_ID env var.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return |
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. It discloses a critical prerequisite (META_BUSINESS_ID) and implies a read-only operation via the verb 'List.' However, it does not mention pagination behavior, response shape, error conditions, or side effects. For a simple list tool this is acceptable but not richly transparent.
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 sentence efficiently conveys both the purpose and a key prerequisite. No filler or repetition. Every element earns its place, making it highly concise and well-structured for an AI agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (3 optional params, no output schema) and full schema coverage, the description is sufficient to understand what the tool does and what is required. It does not explain return values, but 'List' reasonably implies a paginated collection, and the schema already covers parameters. Slightly more detail about pagination behavior could make it fully 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?
The input schema fully describes all three parameters ('after', 'limit', 'fields') with individual descriptions, achieving 100% schema_description_coverage. The tool description adds no extra parameter-level semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is specific and unambiguous: 'List system users of the configured business' uses a clear verb ('List') and resource ('system users') with a defined scope. It distinguishes itself from sibling tools like list_account_users and list_business_users by explicitly naming 'system users' as the target. The prerequisite META_BUSINESS_ID env var is also stated, adding needed context.
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 clear context: it lists system users for the configured business and notes the required environment variable. It does not explicitly compare itself to alternatives or state when not to use it, but the scope is well-defined and the prerequisite is a good usage hint. Missing explicit exclusion or alternative guidance keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_videosB
List ad videos uploaded to the ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It is a minimal statement of purpose, but it does not disclose key behaviors such as whether the operation is read-only, its pagination mechanism, or any required permissions beyond the high-level description.
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 extremely concise, consisting of a single, clear sentence that is highly efficient and front-loaded with the core function.
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 there is no output schema or annotations, the description should provide more behavioral context. Its brevity is insufficient for a listing tool, as it does not indicate the nature of the returned data (e.g., list of IDs vs. full metadata) or any default scoping.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning the schema fully documents all parameters. The description does not add any semantic meaning to the parameters (like 'after' or 'fields'), making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and clearly identifies the resource ('ad videos') and the scope ('uploaded to the ad account'). It is precise, but it does not explicitly differentiate itself from other video-related tools like 'get_video' or 'upload_video'.
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 definition only states the purpose of the tool. It provides no guidance on when this tool should be chosen over other related tools (like 'list_ads' or 'list_creatives'), leaving the agent to rely purely on schema and naming conventions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_tokenA
Extend a valid long-lived user access token through Meta's documented token exchange flow. Requires META_APP_ID and META_APP_SECRET.
| Name | Required | Description | Default |
|---|---|---|---|
| long_lived_token | Yes | Long-lived access token to refresh |
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 add real value by naming the required environment credentials and implying the call hits Meta's documented exchange flow, but it omits failure modes (expired/revoked token, minimum token age), whether the old token is invalidated, and what the resulting token's lifetime 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?
Two sentences, front-loaded with the action and followed immediately by the hard prerequisite. No filler, no restatement of the tool name.
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 single-parameter, low-complexity tool with no output schema and no annotations, the description covers the action and credentials but leaves the return value (new token, expiry) and the exchange_token overlap unexplained, which are the two things an agent would most need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter with 100% schema description coverage ('Long-lived access token to refresh'), so the schema already carries the semantics and the baseline is 3. The description adds no format, source, or validity constraints for the token itself.
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: extend a valid long-lived user access token via Meta's token exchange flow. That is clearly distinct from most siblings, but the sibling set contains exchange_token and debug_token, and the phrase 'token exchange flow' blurs the line with exchange_token without explaining how this differs.
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 a precondition (token must be valid, i.e. not expired) and the config prerequisites META_APP_ID/META_APP_SECRET, which is genuinely useful context. It does not, however, say when to choose this over exchange_token or debug_token, nor what to do when refresh is not possible.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_business_userA
Remove a user from the configured business. Requires META_BUSINESS_ID env var.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | User ID to remove from the business |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'Remove' implicitly signals a destructive operation, and the env var requirement provides useful context. However, with no annotations, the description does not disclose permissions, reversibility, or side effects, leaving some behavioral ambiguity.
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 sentence conveys the action and the key prerequisite with no redundant words. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description and schema together provide sufficient information to select and invoke the tool correctly. The env var requirement is a valuable contextual addition, though it could mention the source of user_id (e.g., from list_business_users) for extra clarity.
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 parameter user_id is fully described in the schema (100% coverage), and the description does not add meaning beyond the schema. Baseline of 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 clearly states the action ('Remove') and the specific resource ('a user from the configured business'). It distinguishes this tool from siblings like add_business_user and list_business_users, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It identifies the core use case and notes a critical prerequisite (META_BUSINESS_ID env var). However, it does not explicitly mention alternatives or when-not-to-use, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_block_listA
Remove publisher URLs from an existing block list.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | JSON array of URLs to remove (e.g. '["example.com"]') | |
| list_id | Yes | Block list ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations provided, so the description carries the full burden of behavioral disclosure. It only says 'Remove' without mentioning whether this is reversible, what happens to URLs not in the list, required permissions, or any 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?
The description is a single sentence that is concise and front-loaded with the key verb and resource. No wasted words.
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 relatively simple with only two parameters and no output schema. However, the description lacks any guidance on expected behavior, return values, or error handling. It is minimally adequate but leaves room for improvement, especially given it is a mutation with no 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 100%, so the schema already fully describes both parameters (urls, list_id). The description adds no extra meaning beyond what the schema provides, hence a baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove'), the target resource ('publisher URLs'), and the context ('from an existing block list'). It distinguishes itself from sibling tools like add_to_block_list (opposite operation) and delete_block_list (deletes entire list).
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 use when you need to remove specific URLs from a block list, but it does not explicitly state when to use this vs. alternatives (e.g., when to use delete_block_list instead) or mention prerequisites like the list must exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_users_from_audienceB
Remove users from a custom audience. Payload format is the same as add_users_to_audience.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | JSON string: {schema: ['EMAIL','PHONE',...], data: [['hash1','hash2',...], ...]}. All PII must be SHA-256 hashed. | |
| audience_id | Yes | Audience ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states the removal action and payload format reference, without mentioning irreversibility, required permissions, side effects, or whether the removal is permanent. 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?
The description is two short sentences with no fluff, effectively front-loading the main action. It earns efficiency points, though it sacrifices depth that could improve behavioral transparency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no annotations and no output schema, the description is too minimal. It does not explain side effects, prerequisites, or when to prefer this over sibling tools. The schema covers parameters, but contextual and behavioral aspects are left entirely 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?
The schema provides 100% coverage with detailed descriptions for both parameters, including payload structure and SHA-256 hashing requirement. The description adds only a cross-reference to add_users_to_audience for format, which is helpful but not essential given the schema already carries the details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove users') and the target resource ('a custom audience'). It distinguishes from siblings like add_users_to_audience by using the verb 'Remove' and also references the payload format to link with the add tool, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by the action verb and indicates the payload format matches add_users_to_audience, but it does not explicitly state when to use this tool vs alternatives or any exclusions. There is no contextual guidance beyond the basic action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ad_libraryB
Search the Meta Ad Library for ads. Allows searching by keywords, countries, and ad type. Useful for competitive research and transparency.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (default 25) | |
| fields | No | Comma-separated fields to return | |
| ad_type | No | Ad type filter: ALL, POLITICAL_AND_ISSUE_ADS, HOUSING_ADS, etc. | |
| order_by | No | Sort order for results | |
| search_terms | Yes | Keywords to search for in ads | |
| ad_reached_countries | Yes | Comma-separated country codes where ads were shown (e.g. 'US,GB,KR') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It only says 'Search' and 'Useful for competitive research and transparency,' which implies read-only, but it does not explicitly affirm read-only behavior, mention authentication/authorization requirements, rate limits, pagination, or what data is returned. This leaves significant behavioral ambiguity.
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?
Three short sentences, front-loaded with the core purpose, followed by supporting detail and use case. No redundancy or filler—every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should explain what the response contains (e.g., ad fields, creative, impressions), but it is silent on return value structure. It also lacks mention of pagination behavior, result count defaults, or error scenarios. The tool has 7 parameters and no output schema, so this is a meaningful 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?
The input schema has 100% description coverage, with all seven parameters individually described. The description adds no new semantics beyond restating that searching is possible by keywords, countries, and ad type, which maps to search_terms, ad_reached_countries, and ad_type but adds no syntax, format, or usage nuance. 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 starts with a specific verb+resource: 'Search the Meta Ad Library for ads.' It clearly states the function and distinguishes it from sibling tools like list_ads or get_campaign_ads, which deal with the user's own ad objects. The added detail (keywords, countries, ad type) further clarifies scope.
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?
'Useful for competitive research and transparency' provides some context, implying a public-search use case, but it does not explicitly state when to prefer this tool over alternatives or mention exclusions (e.g., not for retrieving your own campaign ads). There is no direct comparison with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_locationsB
Search for geographic locations (countries, regions, cities, zip codes) for ad targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query (e.g. 'New York', 'California', 'United States') | |
| limit | No | Number of results (default 25) | |
| location_types | No | Comma-separated location types: country, region, city, zip, geo_market, electoral_district |
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. It only says 'Search' without indicating read-only nature, error handling, response format, or any side effects. This minimal disclosure is insufficient for the agent to understand the tool's behavior beyond the obvious.
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 that directly states the tool's purpose. It contains zero wasted words and is appropriately sized for a simple search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, so the description needs to compensate by explaining return values or potential limitations. It does not mention what the search results look like, how many results are returned (beyond the schema's default), or any restrictions on query format. This leaves the agent without critical operational 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 100%, so the schema already provides detailed descriptions for all three parameters. The overall description adds only the purpose ('for ad targeting') but does not add any new meaning to the parameters themselves, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search') and the resource ('geographic locations') with specific examples (countries, regions, cities, zip codes). It conveys a specific purpose ('for ad targeting'), but it does not explicitly differentiate from sibling tools like search_targeting or search_targeting_map, 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 phrase 'for ad targeting' implies the context of use, giving some guidance on when this tool is relevant. However, there is no mention of alternatives or exclusions, such as 'use search_targeting for broader criteria', so it only provides implied usage context rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_targetingA
Search for targeting options (interests, behaviors, demographics, etc.) by keyword. Use this to find valid targeting IDs for ad set targeting specs.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query (e.g. 'fitness', 'technology', 'cooking') | |
| type | No | Targeting type filter: adinterest, adgeolocation, adeducationschool, adeducationmajor, adworkemployer, adworkposition, adlocale, etc. | |
| limit | No | Number of results (default 25) | |
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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-only search, but does not disclose authentication needs, rate limits, pagination behavior, or what the response looks like. For an unannotated search tool, this leaves significant behavioral 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?
Two sentences, front-loaded with the tool's purpose, then the intended use. There is no wasted text and the most important information comes first.
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?
It covers the core purpose and usage, and the schema supplies all parameter details. But with no annotations and no output schema, the description should do more to explain the result structure or search behavior. It is minimally adequate but leaves the agent inferring return format and operational constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents q, type, limit, and account_id in detail. The description adds only the keyword-search context and does not supplement the parameters beyond what the schema provides. 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 uses the specific verb 'Search' with the resource 'targeting options' and gives examples (interests, behaviors, demographics). It clearly states the outcome, finding valid targeting IDs for ad set targeting specs, though it does not explicitly differentiate from siblings like search_targeting_map or get_targeting_suggestions.
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?
It gives clear usage context: 'Use this to find valid targeting IDs for ad set targeting specs.' That tells the agent when this tool is appropriate. However, it does not name alternatives or exclusions, such as when to use search_targeting_map or get_targeting_suggestions instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_targeting_mapA
Map targeting IDs to their full details (names, types, paths). Useful for resolving IDs obtained from other endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| targeting_list | Yes | JSON array of targeting IDs to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. It conveys the operation is a lookup that resolves IDs to details (implicitly a safe read), but says nothing about behavior with unknown/invalid IDs, batch size limits, rate limits, or auth requirements.
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 tight sentences with the core action front-loaded and the use-case hint following. No filler or redundancy; every clause earns its place.
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?
There is no output schema and no annotations, so the description must carry more weight. It partly compensates by naming the returned fields (names, types, paths) and the resolving use case, but omits limits on the input list and error handling for unresolvable IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both account_id and targeting_list are already fully documented in the schema, including the env-var fallback for account_id. The description adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
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: mapping targeting IDs to full details (names, types, paths). The parenthetical clarifies exactly what comes back, so an agent knows the return content. It does not, however, distinguish itself from the sibling search_targeting, which an agent could easily confuse with it.
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?
"Useful for resolving IDs obtained from other endpoints" gives a clear situational trigger for when to reach for this tool. It provides no exclusions and does not name search_targeting as the alternative for discovering IDs in the first place, so the routing is good but not fully disambiguated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_conversion_eventA
Send a server-side conversion event via the Conversions API (pixel).
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes | JSON array of events: [{event_name, event_time, user_data, custom_data, action_source}] | |
| test_event_code | No | Events Manager test code; use to verify delivery as test events |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations were provided, the description carries the full burden of behavioral context. Stating it uses the 'Conversions API (pixel)' is a vital piece of operational information that defines how the event is processed and where the data originates (server-side vs. web). This goes beyond merely stating 'send event'.
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 definition is a single, highly focused sentence. It immediately states the action and its constraints without any superfluous language, making it maximally concise and efficiently structured.
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 service endpoint defined by a specific API (Conversions API), the definition is nearly complete. It clearly defines the action and the input requirements (including the structure of the event payload). The omission of rate limits or specific error handling is a minor gap, especially given the lack of 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?
Although the schema coverage is 100%, the description adds crucial semantic meaning by detailing the required structure of the 'events' parameter: 'JSON array of events: [{event_name, event_time, user_data, custom_data, action_source}]'. This clarifies the payload composition beyond a generic 'string' 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?
The description clearly states the specific action ('Send a server-side conversion event') and specifies the delivery mechanism ('via the Conversions API (pixel)'). This high specificity allows an agent to differentiate it from other generic event sending tools, such as send_offline_event.
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 specifies the scope and mechanism ('server-side conversion event via the Conversions API'), implicitly guiding the agent toward its correct use case and away from client-side or less integrated alternatives. While it doesn't explicitly name alternatives, the contextual guidance is very clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_offline_eventA
Send offline conversion events through the Conversions API to a dataset. Store events must use action_source=physical_store.
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes | JSON array of offline events | |
| event_set_id | Yes | Dataset ID for offline events (legacy parameter name retained) | |
| test_event_code | No | Events Manager test code; use to verify delivery as test events |
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 adds one real behavioral rule not found in the schema (the action_source=physical_store requirement for store events), but is silent on permissions, batch/size limits, deduplication, and error behavior for what is a write 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?
Two tight sentences, no filler, with the core action stated first and the constraining rule second. Every sentence earns its place.
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 mutation tool with no annotations and no output schema, the description covers the essential targeting and one constraint but omits anything about the response, success/failure behavior, or delivery verification beyond the schema's test_event_code. Adequate but with clear 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 100%, so event_set_id, events, and test_event_code are already documented. The description adds only a loose reference to 'a dataset' for event_set_id and no detail on the events JSON structure or test_event_code semantics, so it matches the baseline rather than adding value.
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 gives a specific verb (send), resource (offline conversion events), and mechanism/destination (Conversions API to a dataset), which separates it from the create/list offline-event-set siblings. It does not explicitly name or contrast the close sibling send_conversion_event, so sibling differentiation is implied rather than stated.
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 second sentence gives a concrete usage rule for store events (action_source=physical_store), which is a genuine usage constraint. However, it never says when to use this tool versus send_conversion_event, nor does it state prerequisites such as the dataset having to already exist or the required access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_adA
Update an existing ad. Only provided fields will be modified.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New ad name | |
| ad_id | Yes | Ad ID to update | |
| status | No | New status: ACTIVE, PAUSED, DELETED, ARCHIVED | |
| creative | No | New creative spec as JSON string | |
| tracking_specs | No | New tracking specs as JSON string |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses a key behavior: 'Only provided fields will be modified,' indicating a partial-update semantic. However, it does not mention side effects, permission requirements, or response behavior, leaving some opacity for a mutation tool. This is a modest improvement over a bare 'update' but lacks depth.
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 short sentences, front-loaded with the action and resource. Every clause earns its place: the second sentence adds a critical behavioral nuance without redundancy. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple update tool with 5 parameters and no output schema, the description covers the core purpose and partial-update behavior. However, it omits any mention of the required identifier (ad_id) or likely response/error behavior. Since the schema provides detailed parameter descriptions, the description is adequate but not exceptional; more context on return values or side effects 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?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful parameter semantics by clarifying that only provided fields will be modified, which directly informs how the optional parameters should be used. This goes beyond what the schema states about each individual field, providing a holistic behavioral contract.
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's action (update) and resource (existing ad). It distinguishes from siblings like create_ad and delete_ad by specifying the update operation on ads. However, it does not elaborate on scope or differentiate among other update tools, unlike the high-caliber example that explicitly names alternatives.
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 'Update an existing ad' provides clear context for when to use this tool—when modifying an existing ad. It implicitly excludes creation, deletion, or retrieval. It does not explicitly mention alternatives or when-not-to-use scenarios, but the context is unambiguous enough for an agent to select this tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_accountB
Update the configured ad account settings. Only provided fields will be modified.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New account name | |
| spend_cap | No | Account spend cap in currency cents (e.g. '100000' = $1000.00) | |
| account_id | No | Ad account ID to update (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| timezone_name | No | New timezone (e.g. 'America/New_York') |
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 disclose one genuinely important trait — that omitted fields are left untouched, i.e. non-destructive partial update — but says nothing about required permissions, whether the update is reversible, or what confirmation is returned. Adequate but incomplete for a mutation tool with zero annotation coverage.
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 short sentences with no filler; the action is front-loaded and the partial-update caveat follows immediately. It is efficient, though slightly thin for the number of fields it governs.
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 four-parameter mutation tool with no annotations and no output schema, the description covers the core semantics but leaves the agent without permission requirements, error behavior, or any indication of the response. The rich schema compensates for parameter documentation but not for the behavioral 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 100%, and the schema already documents each of the four fields with types and examples (cents formatting, timezone string, account ID fallback). The description adds only the optionality rule, not format or constraint detail, so the baseline of 3 applies.
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 ('Update the configured ad account settings'), clearly distinct from sibling mutations like update_campaign or update_adset. It stops short of naming which account is targeted (the schema's account_id / META_AD_ACCOUNT_ID fallback is the only place that appears), so it is clear but not fully self-contained.
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 sentence 'Only provided fields will be modified' implies a partial-update (PATCH-style) workflow, which is useful usage context. However, there is no explicit guidance on when to use this versus get_ad_account, list_ad_accounts, or other update_* tools, and no prerequisites or side-effect warnings are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_adsetB
Update an existing ad set. Only provided fields will be modified.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New ad set name | |
| status | No | New status: ACTIVE, PAUSED, DELETED, ARCHIVED | |
| adset_id | Yes | Ad set ID to update | |
| end_time | No | New end time (ISO 8601) | |
| dsa_payor | No | Payer of EU-targeted ads; does not automatically copy the beneficiary | |
| targeting | No | New targeting spec as JSON string. Advantage+ Audience automation flags go inside this object, e.g. targeting_automation: {"advantage_audience":1} — required for HEC-F (Housing/Employment/Financial Products and Services) ad sets with relaxable, non-broad targeting as of v26.0. Note: the Instagram Explore Feed placement was removed in Marketing API v26.0 — requests that explicitly include it now return an error. | |
| bid_amount | No | New bid amount in currency cents | |
| start_time | No | New start time (ISO 8601) | |
| pacing_type | No | Pacing settings. When a schedule is supplied, day_parting is required and is added if omitted. | |
| bid_strategy | No | New bid strategy | |
| daily_budget | No | New daily budget in currency cents | |
| validate_only | No | Validate with Meta without creating or updating the ad set (default false) | |
| adset_schedule | No | Hourly delivery intervals (Sunday=0). Requires lifetime budgeting. Set timezone_type explicitly; Meta defaults to USER. | |
| dsa_beneficiary | No | Beneficiary of EU-targeted ads | |
| lifetime_budget | No | New lifetime budget in currency cents | |
| attribution_spec | No | Attribution windows; Meta validates compatibility with the objective and optimization goal | |
| destination_type | No | Conversion destination, e.g. WEBSITE, APP, MESSENGER, INSTAGRAM_DIRECT, WHATSAPP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral context. It usefully discloses that unspecified fields are left unchanged, but it omits permissions, validation behavior, reversibility, and implications of status changes such as DELETED or ARCHIVED.
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 front-loaded sentences with no wasted text. Both sentences are relevant and concise.
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 rich input schema covers parameter details, and no output schema needs explanation. However, for a 17-parameter mutation tool with no annotations, the description is thin on usage context and operational caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 17 parameters in detail. The description adds only the high-level partial-update rule and no parameter-specific meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: update an existing ad set. It does not explicitly differentiate itself from siblings such as create_adset, delete_adset, or copy_adset, but the update purpose is clear.
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 when-to-use guidance, prerequisites, or alternatives. It only notes the partial-update behavior, leaving selection between update_adset and other ad set tools to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_audienceA
Update an existing custom audience. Only provided fields will be modified.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New audience name | |
| audience_id | Yes | Audience ID to update | |
| description | No | New audience description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses partial update behavior ('only provided fields will be modified'), which is useful, but omits permissions, error handling, and response format, leaving some behavioral ambiguity.
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 purpose, with no wasted words. Efficiently conveys the core function and update semantics.
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 simple with 3 params and no output schema. The description covers purpose and partial update behavior, but lacks usage guidance, validation, or error context. Adequate for the low complexity, but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning by clarifying that only provided fields are updated, which is not evident from the schema alone and helps the agent understand optional parameter behavior.
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 verb 'Update' and the resource 'existing custom audience', distinguishing it from create/delete/get audience tools. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to update an existing audience) but provides no explicit guidance on when not to use it or when to prefer alternatives. The context is clear but no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_budget_scheduleC
Update an existing budget schedule. Only provided fields will be modified.
| Name | Required | Description | Default |
|---|---|---|---|
| time_end | No | New end time as a Unix timestamp | |
| time_start | No | New start time as a Unix timestamp | |
| schedule_id | Yes | Budget schedule ID to update | |
| budget_value | No | New unsigned value interpreted according to budget_value_type | |
| budget_value_type | No | How budget_value is applied |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose PATCH semantics ('Only provided fields will be modified'), which is genuinely useful, but says nothing about required permissions, whether changing a budget schedule affects live ad delivery/spend, or how an invalid or expired schedule is handled.
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 short sentences with no filler, and the partial-update constraint is front-loaded rather than buried. Appropriately sized for a simple update tool, though it stops short of earning a 5 by omitting any extra operational 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?
For a mutation tool with no annotations and no output schema, the description covers the core semantics but leaves gaps: success/failure behavior, permission requirements, and side effects on active spend are all unstated. The fully documented schema compensates only for parameter questions, not behavioral ones.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – every parameter, including the budget_value/budget_value_type enum pairing, is documented in the schema itself. The description adds only the partial-update rule, which is behavioral rather than parameter-level, so baseline 3 applies.
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 ('Update') and resource ('budget schedule'), which clearly distinguishes it from the sibling create/list/delete_budget_schedule tools. It does not explicitly name or contrast those siblings, but the name-plus-description pair is unambiguous about intent.
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 create_budget_schedule or delete_budget_schedule, and no prerequisites or exclusions. 'Update an existing budget schedule' implies the record must already exist, but that requirement is left for the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_campaignB
Update an existing campaign. Only provided fields will be modified.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New campaign name | |
| status | No | New status: ACTIVE, PAUSED, DELETED, ARCHIVED | |
| spend_cap | No | Lifetime spend cap for the campaign, in account currency cents. Once set it cannot be removed, only raised or reset — pass '0' to reset/clear it. | |
| stop_time | No | New stop time (ISO 8601) | |
| start_time | No | New start time (ISO 8601) | |
| campaign_id | Yes | Campaign ID to update | |
| bid_strategy | No | New bid strategy: LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS | |
| daily_budget | No | New daily budget in currency cents | |
| lifetime_budget | No | New lifetime budget in currency cents |
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 partly discharges it: 'Only provided fields will be modified' is a genuinely useful partial-update guarantee not stated in the schema. However, it omits any auth/permission requirements, reversibility, and notably the destructive implication that passing status=DELETED effectively removes the campaign. Useful but incomplete for a zero-annotation 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?
Two short sentences with zero padding; the core action is front-loaded and the partial-update qualifier follows immediately. Both sentences earn their place.
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 mutation tool with no annotations and no output schema, the definition is functional but thin: parameters are well covered by the schema, yet the agent gets no guidance on side effects, required permissions, or conflicting fields (e.g. daily vs. lifetime budget, start vs. stop time). Adequate, not 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 100% for all nine parameters, so the baseline is 3. The description adds nothing beyond what the schema already documents (field meanings, enum-ish values, the spend_cap reset semantics all live in the schema), so it neither helps nor hurts here.
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 ('Update an existing campaign') that is clearly distinct from create_campaign, delete_campaign, and copy_campaign in the sibling list. The second sentence adds the partial-update scope. It stops short of explicitly contrasting with the patch-style siblings (update_adset, update_ad), but the intent 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?
The description implies use-on-existing-campaign but gives no when-to-use framing, no prerequisites (does the campaign need to be ACTIVE/not DELETED?), and no pointer to get_campaign for discovering current values. Nothing tells the agent when this tool is the right choice versus re-creating or copying a campaign.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_catalogC
Update an existing product catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New catalog name | |
| catalog_id | Yes | Product catalog ID |
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. It only says 'update' with no information about partial vs. full updates, side effects, error handling, or permissions. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 concise, but slightly under-specified; however, for such a simple tool, this length is acceptable.
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?
This is a mutation tool with no annotations and no output schema. The description does not explain what happens when updating, whether only the name is updatable, or what fields are affected. For an agent to use it safely, much more context is needed.
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 already provides 100% coverage with descriptions for both parameters ('New catalog name' and 'Product catalog ID'). The description adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (update) and the resource (existing product catalog), distinguishing it from create_catalog or list_catalogs. However, it doesn't explicitly contrast with sibling tools like update_product_set or include details about what fields can be updated, which slightly limits 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?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites like needing an existing catalog_id. It only implies that existing catalogs are updated, but there is no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_creativeA
Update an existing ad creative. Only name and url_tags can be modified after creation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New creative name | |
| url_tags | No | New URL tags | |
| creative_id | Yes | Creative ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It usefully states that only name and url_tags are modifiable, which is a key behavioral constraint. However, it does not mention permissions, error handling, immutability of other fields in practice, or what happens when attempting to modify unmodifiable fields, leaving some transparency 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?
The description is just two sentences and contains no fluff. The first sentence states the purpose, the second adds a critical constraint. Every word earns its place, making it highly efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter tool with no output schema or nested objects, the description adequately covers the core operation and its limitations. It does not explain return values or error semantics, but given the low complexity and existing schema, this is not a significant gap. It fully supports correct tool selection among 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?
The schema already provides 100% description coverage for all three parameters. The description reinforces that only name and url_tags are updatable, which aligns with the schema but does not add significant new meaning beyond what the schema conveys. 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 specifies the exact verb 'Update', the resource 'existing ad creative', and the critical constraint that 'only name and url_tags can be modified'. This clearly distinguishes it from create_creative and update_ad, which target different resources or operations.
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 'after creation' implies when this tool is appropriate (updating an existing creative) and the restriction 'only name and url_tags' tells the agent what can be changed, preventing misuse. However, it does not explicitly name alternatives like create_creative for initial creation or update_ad for ads, so it lacks an explicit when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_experimentA
Update an existing experiment (ad study).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New experiment name | |
| description | No | New experiment description | |
| experiment_id | Yes | Experiment (ad study) ID |
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. It only states the basic action and does not reveal any behavioral traits such as whether the update is partial or full, required permissions, side effects, or return value format. For a mutating 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?
The description is a single sentence with no extraneous words. It is front-loaded with the action and resource, making it highly scannable. Every part of the sentence contributes to the purpose, earning a perfect conciseness score.
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 simple (3 parameters, all described in schema), but there is no output schema or annotations. The description is minimal and leaves out important context such as usage guidelines, behavioral details, and what to expect after the update. It is adequate but has clear 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?
The input schema has 100% coverage for all three parameters, each with a description. The tool description itself adds no additional parameter semantics, but since the schema does the heavy lifting, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Update an existing experiment (ad study).' The verb 'update' is specific, the resource is 'experiment', and the parenthetical clarifies that 'experiment' refers to an ad study, distinguishing it from other experiment-related tools like create_experiment or get_experiment.
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 via the word 'existing' (i.e., update an already-created experiment, not create one), but it does not explicitly state when to use it versus alternatives like create_experiment or get_experiment. No exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_productB
Update an existing product in a catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Product URL | |
| name | No | Product name | |
| price | No | Product price (e.g. '9.99 USD') | |
| image_url | No | Product image URL | |
| product_id | Yes | Product ID | |
| description | No | Product description | |
| availability | No | Product availability: in stock, out of stock, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only says 'update', implying mutation without details on partial vs. full update, authentication needs, or side effects. It fails to inform the agent about how unspecified fields are handled.
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 action, containing no unnecessary words.
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 description is too sparse for a mutation tool with seven parameters and no output schema or annotations. It lacks information about update semantics, return values, and required context, making it insufficient for reliable agent use.
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?
All seven parameters have schema descriptions, so the schema covers attribute semantics; however, the description adds no additional parameter-related information.
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 existing product, using a specific verb and resource. It distinguishes from read-only siblings like get_product and list_products.
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 offers no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or alternate methods for product management.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_product_setC
Update an existing product set.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New product set name | |
| filter | No | JSON string of updated filter rules | |
| set_id | Yes | Product set ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden of behavioral disclosure. It mentions 'Update' but does not explain side effects, irreversibility, authentication requirements, or partial update behavior. 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?
The description is extremely concise with a single sentence that states the core function. It is front-loaded and without fluff, though it could be slightly richer without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 flat params, no output schema) and lack of annotations, the description is thin. It does not provide enough context for an agent to understand edge cases, return values, or relationship to sibling product set tools. A mutation tool typically requires more behavioral detail.
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 input schema provides complete descriptions for all three parameters (100% coverage), so the description does not need to explain them. Since the description adds no additional parameter context, the baseline of 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 uses a specific verb ('Update') and resource ('existing product set'), clearly identifying the tool's function. It does not explicitly differentiate from sibling tools like update_product, but the resource name is distinct enough that an agent can likely disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool, prerequisites, or alternatives. The description only states what it does, leaving the agent to infer usage context from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ruleC
Update an existing automated rule.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New rule name | |
| status | No | Rule status: ENABLED, DISABLED | |
| rule_id | Yes | Rule ID | |
| schedule_spec | No | JSON string defining updated rule schedule | |
| execution_spec | No | JSON string defining updated rule actions | |
| evaluation_spec | No | JSON string defining updated rule conditions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description must carry the behavioral transparency burden. It only says 'Update', implying mutation, but gives no details about permissions, whether the update is partial or full, side effects, or reversibility. This is insufficient for a mutation tool with no safety annotations.
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, grammatically complete sentence with no filler or redundancy. It is appropriately front-loaded, though it may be too brief given the tool's complexity, which prevents a perfect score.
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 a mutation with 6 parameters and no output schema or annotations, yet the description only states its basic purpose. It does not explain update semantics (e.g., whether omitted fields are retained), what the response contains, or any prerequisites like rule_id. This is incomplete for an agent to invoke it confidently.
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 input schema has 100% description coverage for all 6 parameters, including rule_id, name, status, schedule_spec, execution_spec, and evaluation_spec. The description adds no extra meaning beyond the schema, so it meets the baseline but does not improve parameter understanding.
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 'Update an existing automated rule.' clearly states the action (update) and resource (automated rule), and the word 'existing' distinguishes it from create operations. However, it doesn't explicitly differentiate from sibling update tools or describe the scope of what can be updated, so it is clear but not maximally specific.
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 like create_rule, delete_rule, or get_rule. No context, prerequisites, or exclusions are provided. The description simply states what the tool does without helping the agent choose it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_feedC
Upload/trigger a feed file upload for a product feed.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the feed file to upload | |
| feed_id | Yes | Product feed ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing side effects. It fails to mention whether the upload is asynchronous, whether it requires an existing feed, what the response contains, or any permission requirements.
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 fluff. The phrase 'Upload/trigger' is slightly redundant, but it remains short and front-loaded with the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple upload tool with no output schema, the description is incomplete. It does not explain the upload lifecycle, how to check status, or what constitutes successful execution, leaving the agent to guess.
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 input schema already provides descriptions for both parameters (feed_id and url) with 100% coverage. The description adds no extra meaning beyond what the schema states, so the baseline score of 3 applies.
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 'Upload/trigger a feed file upload for a product feed' clearly states the action (upload/trigger) and the resource (feed file). It is specific enough to distinguish from list/read feed tools, though it does not explicitly contrast with create_feed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like create_feed or get_feed_uploads. There is no mention of prerequisites, typical scenarios, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_imageA
Upload an ad image from a public URL or a local file. Returns image hash for use in ad creatives. Note: fetching from a URL requires the app to have Meta's URL-fetch capability — if that fails with an OAuthException 'Application does not have the capability to make this API call', use file_path to upload the raw bytes instead, which does not require that capability.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public URL of the image to upload | |
| name | No | Name to assign to the uploaded image. Defaults to the file_path basename when uploading a local file. | |
| file_path | No | Local filesystem path of the image to upload. Sent as base64-encoded bytes, bypassing Meta's URL-fetch capability requirement. | |
| account_id | No | Ad account ID to upload into (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. |
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 usefully discloses the return value (image hash), a Meta app capability requirement for URL fetching, and the exact failure mode that should trigger the file_path fallback. It does not cover file format/size limits or broader permission requirements, but it adds substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then return value, then the important fallback condition. Every sentence adds useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description supplies the key return value: the image hash. It also covers the main operational failure mode for URL uploads. It is nearly complete, though additional upload constraints such as supported formats or size limits would make it fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the URL-versus-file_path distinction and the capability failure scenario, but it does not add meaning for name or account_id beyond what the schema already documents.
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: uploading an ad image from either a public URL or a local file. It also names the outcome (image hash for ad creatives), which clearly distinguishes it from sibling tools like list_images, get_image, delete_image, and upload_video.
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?
It gives an explicit condition for choosing file_path over url when URL fetching fails with a specific OAuthException. It does not provide broader guidance about when to use this tool instead of sibling tools, but the primary alternative path is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_videoB
Upload an ad video from a public URL or a local file. Returns video ID for use in ad creatives.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Video title | |
| file_url | No | Public URL of the video to upload | |
| file_path | No | Local filesystem path of the video to upload. Sent as multipart/form-data, bypassing the need for a publicly reachable URL. | |
| account_id | No | Ad account ID to upload into (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted. | |
| description | No | Video description |
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 only states the return value and omits permissions needed, rate limits, supported file sizes/formats, asynchronous behavior, and any side effects of the upload.
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 that are front-loaded with the action and outcome, with zero wasted words. It is appropriately sized for the core 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?
For a five-parameter upload tool with no annotations and no output schema, the description covers purpose and the returned video ID. It leaves out behavioral details such as auth fallback, file constraints, and async behavior that an agent would need for robust 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 100%, so the baseline is 3. The description mentions URL and local file sources, which map to file_url and file_path, but adds no syntax, constraints, or fallback details beyond what the schema already documents.
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 ('Upload an ad video') along with source types and the return value. It does not explicitly name or contrast with siblings like upload_image or list_videos, so it misses the top mark for 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?
Implies usage by stating 'for use in ad creatives' and offering a choice between public URL and local file. However, it gives no explicit when-to-use, when-not, or alternative-tool guidance, leaving the agent to infer the workflow.
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.
54 tool updates
v1.6.1- Changed
create_ad2 fields changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the ad in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +} - changed
Input schema / properties / creative / descriptionPrevious value: -"JSON string of creative spec (object_story_spec with page_id, link_data/photo_data/video_data)"New value: +"JSON string of creative spec (object_story_spec with page_id, link_data/photo_data/video_data). Note: as of v26.0, a creative with applink_treatment=web_only can no longer be attached to an ad in a campaign using Website and App conversion locations — use automatic destination selection or a compatible manual destination instead."
- Changed
create_adset13 fields changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the ad set in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +} - added
Input schema / properties / adset_scheduleAdded value: +{ + "description": "Hourly delivery intervals (Sunday=0). Requires lifetime budgeting. Set timezone_type explicitly; Meta defaults to USER.", + "items": { + "additionalProperties": false, + "properties": { + "days": { + "items": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "maxItems": 7, + "minItems": 1, + "type": "array" + }, + "end_minute": { + "maximum": 1440, + "minimum": 1, + "type": "integer" + }, + "start_minute": { + "maximum": 1439, + "minimum": 0, + "type": "integer" + }, + "timezone_type": { + "enum": [ + "USER", + "ADVERTISER" + ], + "type": "string" + } + }, + "required": [ + "start_minute", + "end_minute", + "days" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / attribution_specAdded value: +{ + "description": "Attribution windows; Meta validates compatibility with the objective and optimization goal", + "items": { + "additionalProperties": false, + "properties": { + "event_type": { + "enum": [ + "CLICK_THROUGH", + "VIEW_THROUGH", + "ENGAGED_VIDEO_VIEW" + ], + "type": "string" + }, + "weight": { + "type": "number" + }, + "window_days": { + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "event_type", + "window_days" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / bid_amountAdded value: +{ + "description": "Bid amount in the account currency's minor unit. Required for COST_CAP or LOWEST_COST_WITH_BID_CAP except Reach and Frequency.", + "pattern": "^\\d+$", + "type": "string" +} - changed
Input schema / properties / billing_event / descriptionPrevious value: -"Billing event: IMPRESSIONS, LINK_CLICKS, APP_INSTALLS, THRUPLAY"New value: +"Billing event: APP_INSTALLS, CLICKS, IMPRESSIONS, LINK_CLICKS, NONE, OFFER_CLAIMS, PAGE_LIKES, POST_ENGAGEMENT, THRUPLAY, PURCHASE, LISTING_INTERACTION" - added
Input schema / properties / destination_typeAdded value: +{ + "description": "Conversion destination, e.g. WEBSITE, APP, MESSENGER, INSTAGRAM_DIRECT, WHATSAPP", + "type": "string" +} - added
Input schema / properties / dsa_beneficiaryAdded value: +{ + "description": "Beneficiary of EU-targeted ads; may use the account's saved default when omitted", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / dsa_payorAdded value: +{ + "description": "Payer of EU-targeted ads; does not automatically copy dsa_beneficiary. May use the account's saved default.", + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / optimization_goal / descriptionPrevious value: -"Optimization goal: IMPRESSIONS, REACH, LINK_CLICKS, LANDING_PAGE_VIEWS, OFFSITE_CONVERSIONS, APP_INSTALLS, LEAD_GENERATION, VALUE, THRUPLAY, ENGAGED_USERS"New value: +"Optimization goal: NONE, APP_INSTALLS, AD_RECALL_LIFT, ENGAGED_USERS, EVENT_RESPONSES, IMPRESSIONS, LEAD_GENERATION, QUALITY_LEAD, LINK_CLICKS, OFFSITE_CONVERSIONS, PAGE_LIKES, POST_ENGAGEMENT, QUALITY_CALL, REACH, LANDING_PAGE_VIEWS, VISIT_INSTAGRAM_PROFILE, ENGAGED_PAGE_VIEWS, VALUE, THRUPLAY, DERIVED_EVENTS, APP_INSTALLS_AND_OFFSITE_CONVERSIONS, CONVERSATIONS, IN_APP_VALUE, MESSAGING_PURCHASE_CONVERSION, MESSAGING_DEEP_CONVERSATION_AND_FOLLOW, SUBSCRIBERS, REMINDERS_SET, MEANINGFUL_CALL_ATTEMPT, PROFILE_VISIT, PROFILE_AND_PAGE_ENGAGEMENT, ADVERTISER_SILOED_VALUE, AUTOMATIC_OBJECTIVE, MESSAGING_APPOINTMENT_CONVERSION" - added
Input schema / properties / pacing_typeAdded value: +{ + "description": "Pacing settings. When a schedule is supplied, day_parting is required and is added if omitted.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / promoted_objectAdded value: +{ + "description": "JSON string of the promoted_object spec. Required for many objectives, e.g. OUTCOME_SALES needs {\"pixel_id\":\"...\",\"custom_event_type\":\"PURCHASE\"}, OUTCOME_APP_PROMOTION needs {\"application_id\":\"...\",\"object_store_url\":\"...\"}, OUTCOME_ENGAGEMENT page-like ads need {\"page_id\":\"...\"}. Omitting it when the objective requires one causes ad set creation to fail.", + "type": "string" +} - changed
Input schema / properties / targeting / descriptionPrevious value: -"JSON string of targeting spec (age_min, age_max, genders, geo_locations, interests, etc.)"New value: +"JSON string of targeting spec (age_min, age_max, genders, geo_locations, interests, etc.). Advantage+ Audience automation and other flags go inside this object too, e.g. targeting_automation: {\"advantage_audience\":1}. As of v26.0, ad sets in the Housing, Employment, or Financial Products and Services (HEC-F) special ad categories with relaxable (non-broad) targeting must explicitly set targeting.targeting_automation.advantage_audience to 1 or 0 — omitting it now returns ADS_TARGETING__REQUIRE_EXPLICIT_ADVANTAGE_AUDIENCE_FLAG. Not required for broad/default audience setups. Also note: as of Marketing API v26.0, the Instagram Explore Feed placement was removed (explicitly specifying it in publisher_platforms/instagram_positions now returns an error) and the 'story' value in messenger_positions is silently dropped." - added
Input schema / properties / validate_onlyAdded value: +{ + "description": "Validate with Meta without creating or updating the ad set (default false)", + "type": "boolean" +}
- Changed
create_async_report3 fields changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +} - changed
Input schema / properties / breakdowns / descriptionPrevious value: -"Breakdown dimensions: age,gender,country,region,placement,device_platform"New value: +"Breakdown dimensions: age,gender,country,region,publisher_platform,platform_position,device_platform,comscore_market (replaces dma). Some accounts must opt in in Ads Manager for impression_device, hourly_stats_aggregated_by_audience_time_zone, and frequency_value; empty results do not necessarily mean zero performance." - changed
Input schema / properties / date_preset / descriptionPrevious value: -"Date preset: TODAY,YESTERDAY,LAST_7D,LAST_14D,LAST_30D,THIS_MONTH,LAST_MONTH,THIS_QUARTER,LAST_QUARTER,THIS_YEAR,LAST_YEAR"New value: +"Lowercase date preset, for example: today, yesterday, last_7d, last_14d, last_30d, this_month, last_month, this_quarter, last_quarter, this_year, last_year"
- Changed
create_block_list1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the block list in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
create_budget_schedule14 fields changed- changed
Input schema / properties / budget_value / descriptionPrevious value: -"Budget amount in account currency cents"New value: +"Unsigned value interpreted according to budget_value_type (ABSOLUTE uses currency minor units)" - added
Input schema / properties / budget_value / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / budget_value / typePrevious value: -"string"New value: +"integer" - changed
Input schema / properties / budget_value_type / descriptionPrevious value: -"Budget value type (e.g. ABSOLUTE, MULTIPLIER)"New value: +"How budget_value is applied" - added
Input schema / properties / budget_value_type / enumAdded value: +[ + "ABSOLUTE", + "MULTIPLIER" +] - added
Input schema / properties / parent_idAdded value: +{ + "description": "Campaign or ad set ID that will own the budget schedule", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / parent_typeAdded value: +{ + "default": "campaign", + "description": "Type of parent object", + "enum": [ + "campaign", + "adset" + ], + "type": "string" +} - changed
Input schema / properties / time_end / descriptionPrevious value: -"Schedule end time (ISO 8601 or Unix timestamp)"New value: +"Schedule end time as a Unix timestamp" - added
Input schema / properties / time_end / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / time_end / typePrevious value: -"string"New value: +"integer" - changed
Input schema / properties / time_start / descriptionPrevious value: -"Schedule start time (ISO 8601 or Unix timestamp)"New value: +"Schedule start time as a Unix timestamp" - added
Input schema / properties / time_start / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / time_start / typePrevious value: -"string"New value: +"integer" - changed
Input schema / requiredPrevious value: -[ - "budget_value", - "budget_value_type", - "time_start", - "time_end" -]New value: +[ + "parent_id", + "budget_value", + "budget_value_type", + "time_start", + "time_end" +]
- Changed
create_campaign6 fields changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the campaign in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +} - added
Input schema / properties / bid_strategyAdded value: +{ + "description": "Bid strategy: LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS. Meta defaults new campaigns to LOWEST_COST_WITH_BID_CAP, which requires a bid_amount on every ad set — pass LOWEST_COST_WITHOUT_CAP to avoid that.", + "type": "string" +} - added
Input schema / properties / is_adset_budget_sharing_enabledAdded value: +{ + "description": "Whether ad sets under this campaign can share budget with each other. Required on some newer ad accounts — omitting it can cause campaign creation to fail with 'Must specify True or False in is_adset_budget_sharing_enabled'.", + "type": "boolean" +} - changed
Input schema / properties / special_ad_categories / descriptionPrevious value: -"JSON array of special ad categories: CREDIT, EMPLOYMENT, HOUSING, ISSUES_ELECTIONS_POLITICS"New value: +"JSON array of special ad categories: HOUSING, EMPLOYMENT, FINANCIAL_PRODUCTS_SERVICES, ISSUES_ELECTIONS_POLITICS, NONE. This field is required by Meta on every campaign — pass '[]' or '[\"NONE\"]' if none apply. CREDIT was renamed to FINANCIAL_PRODUCTS_SERVICES; the old name is no longer accepted." - added
Input schema / properties / special_ad_category_countryAdded value: +{ + "description": "JSON array of ISO 3166-1 alpha-2 country codes, e.g. '[\"US\"]'. Required for ISSUES_ELECTIONS_POLITICS (which also requires authorization to run ads in those countries). For HOUSING, EMPLOYMENT, and FINANCIAL_PRODUCTS_SERVICES it is optional and defaults to the ad account's listed tax country if omitted.", + "type": "string" +} - added
Input schema / properties / spend_capAdded value: +{ + "description": "Lifetime spend cap for the campaign, in account currency cents. Once set it cannot be removed, only raised or reset — pass '0' to reset/clear it.", + "type": "string" +}
- Changed
create_catalog1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the catalog in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
create_creative5 fields changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the creative in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +} - added
Input schema / properties / degrees_of_freedom_specAdded value: +{ + "description": "JSON object for Advantage+ creative controls, including creative_features_spec.image_animation, video_filtering, and video_uncrop", + "type": "string" +} - added
Input schema / properties / destination_specAdded value: +{ + "description": "JSON object controlling the destination; set destination_type=WEBSITE_AND_SHOP_OPT_OUT to opt out of the v26 Shops default", + "type": "string" +} - changed
Input schema / properties / object_story_spec / descriptionPrevious value: -"JSON string of object_story_spec (page_id, link_data/photo_data/video_data)"New value: +"JSON string of object_story_spec (page_id, link_data/photo_data/video_data). Use the separate wamo_whatsapp_identity_spec parameter for WhatsApp Status ads." - added
Input schema / properties / wamo_whatsapp_identity_specAdded value: +{ + "description": "JSON object with wamo_whatsapp_identity_id or whatsapp_phone_number for WhatsApp Status ads; sent at the creative's top level", + "type": "string" +}
- Changed
create_custom_audience4 fields changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the audience in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +} - added
Input schema / properties / pixel_idAdded value: +{ + "description": "Pixel ID for website audiences", + "type": "string" +} - added
Input schema / properties / retention_daysAdded value: +{ + "description": "Retention period; allowed range depends on the audience source", + "exclusiveMinimum": 0, + "type": "integer" +} - added
Input schema / properties / ruleAdded value: +{ + "description": "JSON object defining website, video, or engagement audience rules. This creates an audience; validate-only is not supported.", + "type": "string" +}
- Changed
create_dynamic_creative5 fields changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the creative in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +} - added
Input schema / properties / degrees_of_freedom_specAdded value: +{ + "description": "JSON object for Advantage+ creative controls, including creative_features_spec.image_animation, video_filtering, and video_uncrop", + "type": "string" +} - added
Input schema / properties / destination_specAdded value: +{ + "description": "JSON object controlling the destination; set destination_type=WEBSITE_AND_SHOP_OPT_OUT to opt out of the v26 Shops default", + "type": "string" +} - added
Input schema / properties / object_story_specAdded value: +{ + "description": "JSON object containing the associated page_id and optional instagram_user_id", + "type": "string" +} - added
Input schema / properties / wamo_whatsapp_identity_specAdded value: +{ + "description": "JSON object with wamo_whatsapp_identity_id or whatsapp_phone_number for WhatsApp Status ads; sent at the creative's top level", + "type": "string" +}
- Changed
create_experiment1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the experiment in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
create_lookalike_audience1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the audience in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
create_offline_event_set1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the event set in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
create_rf_prediction1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the prediction in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
create_rule1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to create the rule in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
delete_image1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID the image belongs to (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
generate_preview1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to generate the preview in (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
get_account_activities1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
get_account_insights3 fields changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +} - changed
Input schema / properties / breakdowns / descriptionPrevious value: -"Breakdown dimensions: age,gender,country,region,placement,device_platform"New value: +"Breakdown dimensions: age,gender,country,region,publisher_platform,platform_position,device_platform,comscore_market (replaces dma). Some accounts must opt in in Ads Manager for impression_device, hourly_stats_aggregated_by_audience_time_zone, and frequency_value; empty results do not necessarily mean zero performance." - changed
Input schema / properties / date_preset / descriptionPrevious value: -"Date preset: TODAY,YESTERDAY,LAST_7D,LAST_14D,LAST_30D,THIS_MONTH,LAST_MONTH,THIS_QUARTER,LAST_QUARTER,THIS_YEAR,LAST_YEAR"New value: +"Lowercase date preset, for example: today, yesterday, last_7d, last_14d, last_30d, this_month, last_month, this_quarter, last_quarter, this_year, last_year"
- Changed
get_ad_account1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
get_ad_insights2 fields changed- changed
Input schema / properties / breakdowns / descriptionPrevious value: -"Breakdown dimensions: age,gender,country,region,placement,device_platform"New value: +"Breakdown dimensions: age,gender,country,region,publisher_platform,platform_position,device_platform,comscore_market (replaces dma). Some accounts must opt in in Ads Manager for impression_device, hourly_stats_aggregated_by_audience_time_zone, and frequency_value; empty results do not necessarily mean zero performance." - changed
Input schema / properties / date_preset / descriptionPrevious value: -"Date preset: TODAY,YESTERDAY,LAST_7D,LAST_14D,LAST_30D,THIS_MONTH,LAST_MONTH,THIS_QUARTER,LAST_QUARTER,THIS_YEAR,LAST_YEAR"New value: +"Lowercase date preset, for example: today, yesterday, last_7d, last_14d, last_30d, this_month, last_month, this_quarter, last_quarter, this_year, last_year"
- Changed
get_adset_insights2 fields changed- changed
Input schema / properties / breakdowns / descriptionPrevious value: -"Breakdown dimensions: age,gender,country,region,placement,device_platform"New value: +"Breakdown dimensions: age,gender,country,region,publisher_platform,platform_position,device_platform,comscore_market (replaces dma). Some accounts must opt in in Ads Manager for impression_device, hourly_stats_aggregated_by_audience_time_zone, and frequency_value; empty results do not necessarily mean zero performance." - changed
Input schema / properties / date_preset / descriptionPrevious value: -"Date preset: TODAY,YESTERDAY,LAST_7D,LAST_14D,LAST_30D,THIS_MONTH,LAST_MONTH,THIS_QUARTER,LAST_QUARTER,THIS_YEAR,LAST_YEAR"New value: +"Lowercase date preset, for example: today, yesterday, last_7d, last_14d, last_30d, this_month, last_month, this_quarter, last_quarter, this_year, last_year"
- Changed
get_async_report4 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Pagination cursor for the result page", + "type": "string" +} - changed
Input schema / properties / fields / descriptionPrevious value: -"Comma-separated fields to return"New value: +"Comma-separated insight fields to return once the job completes" - added
Input schema / properties / include_resultsAdded value: +{ + "default": true, + "description": "Fetch /{report_run_id}/insights when the job is complete", + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "default": 100, + "description": "Maximum result rows per page", + "exclusiveMinimum": 0, + "type": "integer" +}
- Changed
get_campaign_insights2 fields changed- changed
Input schema / properties / breakdowns / descriptionPrevious value: -"Breakdown dimensions: age,gender,country,region,placement,device_platform"New value: +"Breakdown dimensions: age,gender,country,region,publisher_platform,platform_position,device_platform,comscore_market (replaces dma). Some accounts must opt in in Ads Manager for impression_device, hourly_stats_aggregated_by_audience_time_zone, and frequency_value; empty results do not necessarily mean zero performance." - changed
Input schema / properties / date_preset / descriptionPrevious value: -"Date preset: TODAY,YESTERDAY,LAST_7D,LAST_14D,LAST_30D,THIS_MONTH,LAST_MONTH,THIS_QUARTER,LAST_QUARTER,THIS_YEAR,LAST_YEAR"New value: +"Lowercase date preset, for example: today, yesterday, last_7d, last_14d, last_30d, this_month, last_month, this_quarter, last_quarter, this_year, last_year"
- Changed
get_delivery_estimate3 fields changed- removed
Input schema / properties / ad_idRemoved value: -{ - "description": "Ad ID", - "type": "string" -} - added
Input schema / properties / adset_idAdded value: +{ + "description": "Ad Set ID", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "ad_id" -]New value: +[ + "adset_id" +]
- Changed
get_reach_estimate1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
get_targeting_suggestions1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_account_users1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_ads1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_adsets1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_block_lists1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_budget_schedules5 fields changed- added
Input schema / properties / limit / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / parent_idAdded value: +{ + "description": "Campaign or ad set ID that owns the budget schedules", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / parent_typeAdded value: +{ + "default": "campaign", + "description": "Type of parent object", + "enum": [ + "campaign", + "adset" + ], + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "parent_id" +]
- Changed
list_campaigns1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_canvases1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_catalogs1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_creatives1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_custom_audiences1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_experiments1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_images1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_offline_event_sets1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_rf_predictions1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_rules1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_saved_audiences1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
list_videos1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
search_targeting1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
search_targeting_map1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to query (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
send_conversion_event1 field changed- added
Input schema / properties / test_event_codeAdded value: +{ + "description": "Events Manager test code; use to verify delivery as test events", + "type": "string" +}
- Changed
send_offline_event2 fields changed- changed
Input schema / properties / event_set_id / descriptionPrevious value: -"Offline event set ID"New value: +"Dataset ID for offline events (legacy parameter name retained)" - added
Input schema / properties / test_event_codeAdded value: +{ + "description": "Events Manager test code; use to verify delivery as test events", + "type": "string" +}
- Changed
update_ad_account1 field changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to update (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +}
- Changed
update_adset9 fields changed- added
Input schema / properties / adset_scheduleAdded value: +{ + "description": "Hourly delivery intervals (Sunday=0). Requires lifetime budgeting. Set timezone_type explicitly; Meta defaults to USER.", + "items": { + "additionalProperties": false, + "properties": { + "days": { + "items": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "maxItems": 7, + "minItems": 1, + "type": "array" + }, + "end_minute": { + "maximum": 1440, + "minimum": 1, + "type": "integer" + }, + "start_minute": { + "maximum": 1439, + "minimum": 0, + "type": "integer" + }, + "timezone_type": { + "enum": [ + "USER", + "ADVERTISER" + ], + "type": "string" + } + }, + "required": [ + "start_minute", + "end_minute", + "days" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / attribution_specAdded value: +{ + "description": "Attribution windows; Meta validates compatibility with the objective and optimization goal", + "items": { + "additionalProperties": false, + "properties": { + "event_type": { + "enum": [ + "CLICK_THROUGH", + "VIEW_THROUGH", + "ENGAGED_VIDEO_VIEW" + ], + "type": "string" + }, + "weight": { + "type": "number" + }, + "window_days": { + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "event_type", + "window_days" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / bid_strategyAdded value: +{ + "description": "New bid strategy", + "type": "string" +} - added
Input schema / properties / destination_typeAdded value: +{ + "description": "Conversion destination, e.g. WEBSITE, APP, MESSENGER, INSTAGRAM_DIRECT, WHATSAPP", + "type": "string" +} - added
Input schema / properties / dsa_beneficiaryAdded value: +{ + "description": "Beneficiary of EU-targeted ads", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / dsa_payorAdded value: +{ + "description": "Payer of EU-targeted ads; does not automatically copy the beneficiary", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / pacing_typeAdded value: +{ + "description": "Pacing settings. When a schedule is supplied, day_parting is required and is added if omitted.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / targeting / descriptionPrevious value: -"New targeting spec as JSON string"New value: +"New targeting spec as JSON string. Advantage+ Audience automation flags go inside this object, e.g. targeting_automation: {\"advantage_audience\":1} — required for HEC-F (Housing/Employment/Financial Products and Services) ad sets with relaxable, non-broad targeting as of v26.0. Note: the Instagram Explore Feed placement was removed in Marketing API v26.0 — requests that explicitly include it now return an error." - added
Input schema / properties / validate_onlyAdded value: +{ + "description": "Validate with Meta without creating or updating the ad set (default false)", + "type": "boolean" +}
- Changed
update_budget_schedule10 fields changed- changed
Input schema / properties / budget_value / descriptionPrevious value: -"New budget amount in account currency cents"New value: +"New unsigned value interpreted according to budget_value_type" - added
Input schema / properties / budget_value / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / budget_value / typePrevious value: -"string"New value: +"integer" - added
Input schema / properties / budget_value_typeAdded value: +{ + "description": "How budget_value is applied", + "enum": [ + "ABSOLUTE", + "MULTIPLIER" + ], + "type": "string" +} - changed
Input schema / properties / time_end / descriptionPrevious value: -"New schedule end time"New value: +"New end time as a Unix timestamp" - added
Input schema / properties / time_end / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / time_end / typePrevious value: -"string"New value: +"integer" - changed
Input schema / properties / time_start / descriptionPrevious value: -"New schedule start time"New value: +"New start time as a Unix timestamp" - added
Input schema / properties / time_start / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / time_start / typePrevious value: -"string"New value: +"integer"
- Changed
update_campaign2 fields changed- added
Input schema / properties / bid_strategyAdded value: +{ + "description": "New bid strategy: LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS", + "type": "string" +} - added
Input schema / properties / spend_capAdded value: +{ + "description": "Lifetime spend cap for the campaign, in account currency cents. Once set it cannot be removed, only raised or reset — pass '0' to reset/clear it.", + "type": "string" +}
- Changed
upload_image4 fields changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to upload into (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +} - added
Input schema / properties / file_pathAdded value: +{ + "description": "Local filesystem path of the image to upload. Sent as base64-encoded bytes, bypassing Meta's URL-fetch capability requirement.", + "type": "string" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Name to assign to the uploaded image. Defaults to the file_path basename when uploading a local file.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "url" -]
- Changed
upload_video3 fields changed- added
Input schema / properties / account_idAdded value: +{ + "description": "Ad account ID to upload into (e.g. 'act_123' or '123'). Falls back to META_AD_ACCOUNT_ID env var if omitted.", + "type": "string" +} - added
Input schema / properties / file_pathAdded value: +{ + "description": "Local filesystem path of the video to upload. Sent as multipart/form-data, bypassing the need for a publicly reachable URL.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "file_url" -]
11 tool updates
v1.2.1- Added
batch_products - Added
copy_ad - Added
copy_adset - Added
copy_campaign - Added
create_lead_form - Added
generate_preview - Added
get_adset_targeting_sentence - Added
get_audience_health - Added
get_batch_status - Added
list_business_instagram_accounts - Added
list_business_pages
123 tool updates
v1.2.0- First observed
add_business_user - First observed
add_to_block_list - First observed
add_users_to_audience - First observed
create_ad - First observed
create_adset - First observed
create_async_report - First observed
create_block_list - First observed
create_budget_schedule - First observed
create_campaign - First observed
create_canvas - First observed
create_catalog - First observed
create_creative - First observed
create_custom_audience - First observed
create_dynamic_creative - First observed
create_experiment - First observed
create_feed - First observed
create_lookalike_audience - First observed
create_offline_event_set - First observed
create_product_set - First observed
create_rf_prediction - First observed
create_rule - First observed
create_system_user - First observed
debug_token - First observed
delete_ad - First observed
delete_adset - First observed
delete_audience - First observed
delete_block_list - First observed
delete_budget_schedule - First observed
delete_campaign - First observed
delete_canvas - First observed
delete_image - First observed
delete_rf_prediction - First observed
delete_rule - First observed
delete_video - First observed
exchange_token - First observed
get_account_activities - First observed
get_account_insights - First observed
get_ad - First observed
get_ad_account - First observed
get_ad_insights - First observed
get_ad_preview - First observed
get_adset - First observed
get_adset_ads - First observed
get_adset_insights - First observed
get_adset_leads - First observed
get_async_report - First observed
get_audience - First observed
get_business - First observed
get_campaign - First observed
get_campaign_ads - First observed
get_campaign_adsets - First observed
get_campaign_insights - First observed
get_campaign_leads - First observed
get_canvas - First observed
get_catalog - First observed
get_creative - First observed
get_delivery_estimate - First observed
get_experiment - First observed
get_experiment_results - First observed
get_feed_uploads - First observed
get_form_leads - First observed
get_image - First observed
get_lead - First observed
get_lead_form - First observed
get_product - First observed
get_product_set - First observed
get_reach_estimate - First observed
get_rf_prediction - First observed
get_rule - First observed
get_saved_audience - First observed
get_targeting_suggestions - First observed
get_video - First observed
list_account_users - First observed
list_ad_accounts - First observed
list_ads - First observed
list_adsets - First observed
list_block_lists - First observed
list_budget_schedules - First observed
list_business_ad_accounts - First observed
list_business_users - First observed
list_businesses - First observed
list_campaigns - First observed
list_canvases - First observed
list_catalogs - First observed
list_creatives - First observed
list_custom_audiences - First observed
list_experiments - First observed
list_feeds - First observed
list_images - First observed
list_lead_forms - First observed
list_offline_event_sets - First observed
list_product_sets - First observed
list_products - First observed
list_rf_predictions - First observed
list_rules - First observed
list_saved_audiences - First observed
list_system_users - First observed
list_videos - First observed
refresh_token - First observed
remove_business_user - First observed
remove_from_block_list - First observed
remove_users_from_audience - First observed
search_ad_library - First observed
search_locations - First observed
search_targeting - First observed
search_targeting_map - First observed
send_conversion_event - First observed
send_offline_event - First observed
update_ad - First observed
update_ad_account - First observed
update_adset - First observed
update_audience - First observed
update_budget_schedule - First observed
update_campaign - First observed
update_catalog - First observed
update_creative - First observed
update_experiment - First observed
update_product - First observed
update_product_set - First observed
update_rule - First observed
upload_feed - First observed
upload_image - First observed
upload_video
TDQS
Scored across 134 tools
Many tools have clearly distinct purposes (e.g., create_campaign vs create_adset), but the sheer number (134) creates inevitable overlap among lead-related tools (get_lead, get_campaign_leads, get_adset_leads, get_form_leads), targeting search tools (search_targeting, search_targeting_map), and business/account listing tools. Descriptions help, but similar naming patterns and volume increase misselection risk.
All tool names use consistent snake_case with a verb_noun pattern (list_campaigns, create_campaign, delete_campaign, get_campaign_insights). Even compound names like add_users_to_audience and remove_from_block_list follow a predictable verb_object structure, with no mixing of conventions.
134 tools is far beyond the typical well-scoped range (3–15) and constitutes an extreme mismatch for a single MCP server. Even a comprehensive API surface could be organized into fewer, more focused tools or resources; the large count makes discovery and correct selection difficult.
The server covers an extensive range of Meta Ads operations including campaigns, ad sets, ads, creatives, audiences, catalogs, rules, and business management. However, some lifecycle gaps exist (e.g., no delete for creatives, catalogs, product sets, or saved audiences), though agents can often work around these.
Maintenance
Related MCP Connectors
Meta Ads MCP server: 10 tools for Facebook and Instagram reports, ads, Ad Library. Ads start paused.
Meta Ads MCP: Facebook and Instagram reports, campaigns, creatives, audiences. Approval on writes.
Hosted Meta Ads MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Meta Ads and Google Ads MCP server: 250+ tools for Claude, ChatGPT, Cursor and Codex.
Related MCP Servers
- AlicenseBqualityBmaintenanceMCP server for Instagram Graph API, Threads API & Meta platform — posting, insights, comments, messaging66722 npm31MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for programmatic management of Meta (Facebook/Instagram) advertising campaigns through AI assistants. It enables campaign creation, ad set management, creative upload, analytics, audience management, and conversion tracking.353 npm4MIT
- AlicenseAqualityDmaintenanceMCP server that wraps the Meta Marketing API (Graph API v25.0) as semantic tools for LLM agents.181MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Meta/Facebook Marketing API allowing you to view and manage ad accounts, campaigns, ad sets, ads, and creatives, as well as fetch insights and upload ad images.MIT