Meta Ads MCP
Enables AI-powered analysis and management of Facebook advertising campaigns, including retrieving performance data, managing ad creatives, optimizing budgets, and accessing insights across Facebook ad platforms.
Enables AI-powered analysis and management of Instagram advertising campaigns, including retrieving performance data, managing ad creatives, optimizing budgets, and accessing insights across Instagram ad platforms.
Provides comprehensive tools for interacting with Meta's advertising platform, including campaign creation and management, ad set configuration, creative optimization, audience targeting, performance insights, and budget scheduling across all Meta properties.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Meta Ads MCPshow me the performance of my top 5 campaigns from last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Meta Ads MCP
A Model Context Protocol (MCP) server for interacting with Meta Ads. Analyze, manage and optimize Meta advertising campaigns through an AI interface. Use an LLM to retrieve performance data, visualize ad creatives, and provide strategic insights for your ads on Facebook, Instagram, and other Meta platforms.
DISCLAIMER: This is an unofficial third-party tool and is not associated with, endorsed by, or affiliated with Meta in any way. This project is maintained independently and uses Meta's public APIs according to their terms of service. Meta, Facebook, Instagram, and other Meta brand names are trademarks of their respective owners.
mcp-name: co.pipeboard/meta-ads-mcp
Community & Support
Discord. Join the community.
Email Support. Email us for support.
Table of Contents
Getting started with Remote MCP (Recommended)
The fastest and most reliable way to get started is to 🚀 Get started with our Meta Ads Remote MCP. Our cloud service uses streamable HTTP transport for reliable, scalable access to Meta Ads data. No technical setup required - just connect and start analyzing your ad campaigns with AI!
For Claude Pro/Max Users
Go to claude.ai/settings/integrations (requires Claude Pro or Max)
Click "Add Integration" and enter:
Name: "Pipeboard Meta Ads" (or any name you prefer)
Integration URL:
https://mcp.pipeboard.co/meta-ads-mcp
Click "Connect" next to the integration and follow the prompts to:
Login to Pipeboard
Connect your Facebook Ads account
That's it! You can now ask Claude to analyze your Meta ad campaigns, get performance insights, and manage your advertising.
Advanced: Direct Token Authentication (Claude)
For direct token-based authentication without the interactive flow, use this URL format when adding the integration:
https://mcp.pipeboard.co/meta-ads-mcp?token=YOUR_PIPEBOARD_TOKENGet your token at pipeboard.co/api-tokens.
For Cursor Users
Add the following to your ~/.cursor/mcp.json. Once you enable the remote MCP, click on "Needs login" to finish the login process.
{
"mcpServers": {
"meta-ads-remote": {
"url": "https://mcp.pipeboard.co/meta-ads-mcp"
}
}
}Advanced: Direct Token Authentication (Cursor)
If you prefer to authenticate without the interactive login flow, you can include your Pipeboard API token directly in the URL:
{
"mcpServers": {
"meta-ads-remote": {
"url": "https://mcp.pipeboard.co/meta-ads-mcp?token=YOUR_PIPEBOARD_TOKEN"
}
}
}Get your token at pipeboard.co/api-tokens.
For Other MCP Clients
Use the Remote MCP URL: https://mcp.pipeboard.co/meta-ads-mcp
📖 Get detailed setup instructions for your AI client here
Advanced: Direct Token Authentication (Other Clients)
For MCP clients that support token-based authentication, you can append your Pipeboard API token to the URL:
https://mcp.pipeboard.co/meta-ads-mcp?token=YOUR_PIPEBOARD_TOKENThis bypasses the interactive login flow and authenticates immediately. Get your token at pipeboard.co/api-tokens.
Local Installation (Advanced Technical Users Only)
🚀 We strongly recommend using Remote MCP instead - it's faster, more reliable, and requires no technical setup.
Meta Ads MCP also supports a local streamable HTTP transport, allowing you to run it as a standalone HTTP API for web applications and custom integrations. See Streamable HTTP Setup Guide for complete instructions.
Features
AI-Powered Campaign Analysis: Let your favorite LLM analyze your campaigns and provide actionable insights on performance
Strategic Recommendations: Receive data-backed suggestions for optimizing ad spend, targeting, and creative content
Automated Monitoring: Ask any MCP-compatible LLM to track performance metrics and alert you about significant changes
Budget Optimization: Get recommendations for reallocating budget to better-performing ad sets
Creative Improvement: Receive feedback on ad copy, imagery, and calls-to-action
Dynamic Creative Testing: Easy API for both simple ads (single headline/description) and advanced A/B testing (multiple headlines/descriptions)
Campaign Management: Request changes to campaigns, ad sets, and ads (all changes require explicit confirmation)
Cross-Platform Integration: Works with Facebook, Instagram, and all Meta ad platforms
Universal LLM Support: Compatible with any MCP client including Claude Desktop, Cursor, Cherry Studio, and more
Enhanced Search: Generic search function includes page searching when queries mention "page" or "pages"
Simple Authentication: Easy setup with secure OAuth authentication
Cross-Platform Support: Works on Windows, macOS, and Linux
Configuration
Remote MCP (Recommended)
✨ Get started with Remote MCP here - no technical setup required! Just connect your Facebook Ads account and start asking AI to analyze your campaigns.
Local Installation (Advanced Technical Users)
For advanced users who need to self-host, the package can be installed from source. Local installations require creating your own Meta Developer App. We recommend using Remote MCP for a simpler experience.
Available MCP Tools
mcp_meta_ads_get_ad_accountsGet ad accounts accessible by a user
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)user_id: Meta user ID or "me" for the current userlimit: Maximum number of accounts to return (default: 200)
Returns: List of accessible ad accounts with their details
mcp_meta_ads_get_account_infoGet detailed information about a specific ad account
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)account_id: Meta Ads account ID (format: act_XXXXXXXXX)
Returns: Detailed information about the specified account
mcp_meta_ads_get_account_pagesGet pages associated with a Meta Ads account
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)account_id: Meta Ads account ID (format: act_XXXXXXXXX) or "me" for the current user's pages
Returns: List of pages associated with the account, useful for ad creation and management
mcp_meta_ads_get_campaignsGet campaigns for a Meta Ads account with optional filtering
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)account_id: Meta Ads account ID (format: act_XXXXXXXXX)limit: Maximum number of campaigns to return (default: 10)status_filter: Filter by status (empty for all, or 'ACTIVE', 'PAUSED', etc.)
Returns: List of campaigns matching the criteria
mcp_meta_ads_get_campaign_detailsGet detailed information about a specific campaign
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)campaign_id: Meta Ads campaign ID
Returns: Detailed information about the specified campaign
mcp_meta_ads_create_campaignCreate a new campaign in a Meta Ads account
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)account_id: Meta Ads account ID (format: act_XXXXXXXXX)name: Campaign nameobjective: Campaign objective (ODAX, outcome-based). Must be one of:OUTCOME_AWARENESSOUTCOME_TRAFFICOUTCOME_ENGAGEMENTOUTCOME_LEADSOUTCOME_SALESOUTCOME_APP_PROMOTION
Note: Legacy objectives such as
BRAND_AWARENESS,LINK_CLICKS,CONVERSIONS,APP_INSTALLS, etc. are no longer valid for new campaigns and will cause a 400 error. Use the outcome-based values above. Common mappings:BRAND_AWARENESS→OUTCOME_AWARENESSREACH→OUTCOME_AWARENESSLINK_CLICKS,TRAFFIC→OUTCOME_TRAFFICPOST_ENGAGEMENT,PAGE_LIKES,EVENT_RESPONSES,VIDEO_VIEWS→OUTCOME_ENGAGEMENTLEAD_GENERATION→OUTCOME_LEADSCONVERSIONS,CATALOG_SALES,MESSAGES(sales-focused flows) →OUTCOME_SALESAPP_INSTALLS→OUTCOME_APP_PROMOTION
status: Initial campaign status (default: PAUSED)special_ad_categories: List of special ad categories if applicabledaily_budget: Daily budget in account currency (in cents)lifetime_budget: Lifetime budget in account currency (in cents)bid_strategy: Bid strategy. Must be one of:LOWEST_COST_WITHOUT_CAP,LOWEST_COST_WITH_BID_CAP,COST_CAP,LOWEST_COST_WITH_MIN_ROAS.
Returns: Confirmation with new campaign details
Example:
{ "name": "2025 - Bedroom Furniture - Awareness", "account_id": "act_123456789012345", "objective": "OUTCOME_AWARENESS", "special_ad_categories": [], "status": "PAUSED", "buying_type": "AUCTION", "bid_strategy": "LOWEST_COST_WITHOUT_CAP", "daily_budget": 10000 }
mcp_meta_ads_get_adsetsGet ad sets for a Meta Ads account with optional filtering by campaign
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)account_id: Meta Ads account ID (format: act_XXXXXXXXX)limit: Maximum number of ad sets to return (default: 10)campaign_id: Optional campaign ID to filter by
Returns: List of ad sets matching the criteria
mcp_meta_ads_get_adset_detailsGet detailed information about a specific ad set
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)adset_id: Meta Ads ad set ID
Returns: Detailed information about the specified ad set
mcp_meta_ads_create_adsetCreate a new ad set in a Meta Ads account
Inputs:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)campaign_id: Meta Ads campaign ID this ad set belongs toname: Ad set namestatus: Initial ad set status (default: PAUSED)daily_budget: Daily budget in account currency (in cents) as a stringlifetime_budget: Lifetime budget in account currency (in cents) as a stringtargeting: Targeting specifications (e.g., age, location, interests)optimization_goal: Conversion optimization goal (e.g., 'LINK_CLICKS')billing_event: How you're charged (e.g., 'IMPRESSIONS')bid_amount: Bid amount in account currency (in cents)bid_strategy: Bid strategy (e.g., 'LOWEST_COST')start_time,end_time: Optional start/end times (ISO 8601)access_token(optional): Meta API access token
Returns: Confirmation with new ad set details
mcp_meta_ads_get_adsGet ads for a Meta Ads account with optional filtering
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)account_id: Meta Ads account ID (format: act_XXXXXXXXX)limit: Maximum number of ads to return (default: 10)campaign_id: Optional campaign ID to filter byadset_id: Optional ad set ID to filter by
Returns: List of ads matching the criteria
mcp_meta_ads_create_adCreate a new ad with an existing creative
Inputs:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)name: Ad nameadset_id: Ad set ID where this ad will be placedcreative_id: ID of an existing creative to usestatus: Initial ad status (default: PAUSED)bid_amount: Optional bid amount (in cents)tracking_specs: Optional tracking specificationsaccess_token(optional): Meta API access token
Returns: Confirmation with new ad details
mcp_meta_ads_get_ad_detailsGet detailed information about a specific ad
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)ad_id: Meta Ads ad ID
Returns: Detailed information about the specified ad
mcp_meta_ads_get_ad_creativesGet creative details for a specific ad
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)ad_id: Meta Ads ad ID
Returns: Creative details including text, images, and URLs
mcp_meta_ads_create_ad_creativeCreate a new ad creative using an uploaded image hash
Inputs:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)name: Creative nameimage_hash: Hash of the uploaded imagepage_id: Facebook Page ID for the adlink_url: Destination URLmessage: Ad copy/textheadline: Single headline for simple ads (cannot be used with headlines)headlines: List of headlines for dynamic creative testing (cannot be used with headline)description: Single description for simple ads (cannot be used with descriptions)descriptions: List of descriptions for dynamic creative testing (cannot be used with description)dynamic_creative_spec: Dynamic creative optimization settingscall_to_action_type: CTA button type (e.g., 'LEARN_MORE')instagram_actor_id: Optional Instagram account IDaccess_token(optional): Meta API access token
Returns: Confirmation with new creative details
mcp_meta_ads_update_ad_creativeUpdate an existing ad creative with new content or settings
Inputs:
creative_id: Meta Ads creative ID to updatename: New creative namemessage: New ad copy/textheadline: Single headline for simple ads (cannot be used with headlines)headlines: New list of headlines for dynamic creative testing (cannot be used with headline)description: Single description for simple ads (cannot be used with descriptions)descriptions: New list of descriptions for dynamic creative testing (cannot be used with description)dynamic_creative_spec: New dynamic creative optimization settingscall_to_action_type: New call to action button typeaccess_token(optional): Meta API access token (will use cached token if not provided)
Returns: Confirmation with updated creative details
mcp_meta_ads_upload_ad_imageUpload an image to use in Meta Ads creatives
Inputs:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)image_path: Path to the image file to uploadname: Optional name for the imageaccess_token(optional): Meta API access token
Returns: JSON response with image details including hash
mcp_meta_ads_get_ad_imageGet, download, and visualize a Meta ad image in one step
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)ad_id: Meta Ads ad ID
Returns: The ad image ready for direct visual analysis
mcp_meta_ads_update_adUpdate an ad with new settings
Inputs:
ad_id: Meta Ads ad IDstatus: Update ad status (ACTIVE, PAUSED, etc.)bid_amount: Bid amount in account currency (in cents for USD)access_token(optional): Meta API access token (will use cached token if not provided)
Returns: Confirmation with updated ad details and a confirmation link
mcp_meta_ads_update_adsetUpdate an ad set with new settings including frequency caps
Inputs:
adset_id: Meta Ads ad set IDfrequency_control_specs: List of frequency control specificationsbid_strategy: Bid strategy (e.g., 'LOWEST_COST_WITH_BID_CAP')bid_amount: Bid amount in account currency (in cents for USD)status: Update ad set status (ACTIVE, PAUSED, etc.)targeting: Targeting specifications including targeting_automationaccess_token(optional): Meta API access token (will use cached token if not provided)
Returns: Confirmation with updated ad set details and a confirmation link
mcp_meta_ads_get_insightsGet performance insights for a campaign, ad set, ad or account
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)object_id: ID of the campaign, ad set, ad or accounttime_range: Time range for insights (default: maximum)breakdown: Optional breakdown dimension (e.g., age, gender, country)level: Level of aggregation (ad, adset, campaign, account)action_attribution_windows(optional): List of attribution windows for conversion data (e.g., ["1d_click", "1d_view", "7d_click", "7d_view"]). When specified, actions and cost_per_action_type include additional fields for each window. The 'value' field always shows 7d_click attribution.
Returns: Performance metrics for the specified object
mcp_meta_ads_get_login_linkGet a clickable login link for Meta Ads authentication
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)
Returns: A clickable resource link for Meta authentication
mcp_meta_ads_create_budget_scheduleCreate a budget schedule for a Meta Ads campaign
Inputs:
campaign_id: Meta Ads campaign IDbudget_value: Amount of budget increasebudget_value_type: Type of budget value ("ABSOLUTE" or "MULTIPLIER")time_start: Unix timestamp for when the high demand period should starttime_end: Unix timestamp for when the high demand period should endaccess_token(optional): Meta API access token
Returns: JSON string with the ID of the created budget schedule or an error message
mcp_meta_ads_search_interestsSearch for interest targeting options by keyword
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)query: Search term for interests (e.g., "baseball", "cooking", "travel")limit: Maximum number of results to return (default: 25)
Returns: Interest data with id, name, audience_size, and path fields
mcp_meta_ads_get_interest_suggestionsGet interest suggestions based on existing interests
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)interest_list: List of interest names to get suggestions for (e.g., ["Basketball", "Soccer"])limit: Maximum number of suggestions to return (default: 25)
Returns: Suggested interests with id, name, audience_size, and description fields
mcp_meta_ads_validate_interestsValidate interest names or IDs for targeting
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)interest_list: List of interest names to validate (e.g., ["Japan", "Basketball"])interest_fbid_list: List of interest IDs to validate (e.g., ["6003700426513"])
Returns: Validation results showing valid status and audience_size for each interest
mcp_meta_ads_search_behaviorsGet all available behavior targeting options
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)limit: Maximum number of results to return (default: 50)
Returns: Behavior targeting options with id, name, audience_size bounds, path, and description
mcp_meta_ads_search_demographicsGet demographic targeting options
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)demographic_class: Type of demographics ('demographics', 'life_events', 'industries', 'income', 'family_statuses', 'user_device', 'user_os')limit: Maximum number of results to return (default: 50)
Returns: Demographic targeting options with id, name, audience_size bounds, path, and description
mcp_meta_ads_search_geo_locationsSearch for geographic targeting locations
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)query: Search term for locations (e.g., "New York", "California", "Japan")location_types: Types of locations to search (['country', 'region', 'city', 'zip', 'geo_market', 'electoral_district'])limit: Maximum number of results to return (default: 25)
Returns: Location data with key, name, type, and geographic hierarchy information
mcp_meta_ads_search(Enhanced)Generic search across accounts, campaigns, ads, and pages
Automatically includes page searching when query mentions "page" or "pages"
Inputs:
access_token(optional): Meta API access token (will use cached token if not provided)query: Search query string (e.g., "Injury Payouts pages", "active campaigns")
Returns: List of matching record IDs in ChatGPT-compatible format
Licensing
Meta Ads MCP is licensed under the Business Source License 1.1, which means:
✅ Free to use for individual and business purposes
✅ Modify and customize as needed
✅ Redistribute to others
✅ Becomes fully open source (Apache 2.0) on January 1, 2029
The only restriction is that you cannot offer this as a competing hosted service. For questions about commercial licensing, please contact us.
Privacy and Security
Meta Ads MCP follows security best practices with secure token management and automatic authentication handling.
Remote MCP: All authentication is handled securely in the cloud - no local token storage required
Local Installation: Tokens are cached securely on your local machine
Testing
Basic Testing
Test your Meta Ads MCP connection with any MCP client:
Verify Account Access: Ask your LLM to use
mcp_meta_ads_get_ad_accountsCheck Account Details: Use
mcp_meta_ads_get_account_infowith your account IDList Campaigns: Try
mcp_meta_ads_get_campaignsto see your ad campaigns
For detailed local installation testing, see the source repository.
Troubleshooting
💡 Quick Fix: Skip the Technical Setup!
The easiest way to avoid any setup issues is to 🎯 use our Remote MCP instead. No downloads, no configuration - just connect your ads account and start getting AI insights on your campaigns immediately!
Local Installation Issues
For local installation issues, refer to the source repository. For the easiest experience, we recommend using Remote MCP instead.
Available Tools
33 toolscreate_adA
Create a new ad with an existing creative.
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
name: Ad name
adset_id: Ad set ID where this ad will be placed
creative_id: ID of an existing creative to use
status: Initial ad status (default: PAUSED)
bid_amount: Optional bid amount in account currency (in cents)
tracking_specs: Optional tracking specifications (e.g., for pixel events).
Example: [{"action.type":"offsite_conversion","fb_pixel":["YOUR_PIXEL_ID"]}]
access_token: Meta API access token (optional - will use cached token if not provided)
Note:
Dynamic Creative creatives require the parent ad set to have `is_dynamic_creative=true`.
Otherwise, ad creation will fail with error_subcode 1885998.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| name | Yes | ||
| adset_id | Yes | ||
| creative_id | Yes | ||
| status | No | PAUSED | |
| bid_amount | No | ||
| tracking_specs | No | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 discloses the default PAUSED status, optional access_token with a cached fallback, and the dynamic-creative constraint with a specific error subcode. These are useful behavioral details, though it does not mention permissions or rate limits.
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 well-structured: a front-loaded one-sentence summary, a parameter list with helpful details, and a critical note. Each line earns its place, and the tracking_specs example is valuable despite adding 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 Meta Ads API create operation with 8 parameters, the description covers all parameter semantics, the default behavior, and a known failure mode. It is sufficiently complete given an output schema exists. A minor gap is the lack of accepted status values and account/adset consistency constraints, but these are not essential for basic 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 has no property descriptions (0% coverage), but the description compensates by explaining every parameter, including the act_ format for account_id, bid_amount in cents, a tracking_specs JSON example, and the optional cached access token. This adds substantial meaning beyond the bare schema titles.
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 'Create a new ad with an existing creative,' clearly stating the action (create), the resource (ad), and a key constraint (existing creative). This distinguishes it from sibling tools like create_ad_creative or update_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 phrase 'with an existing creative' gives clear context that a pre-existing creative ID is required, implying that creative creation should happen first via a different tool. The dynamic creative note also provides a specific prerequisite. However, it does not explicitly name alternative tools or say when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ad_creativeA
Create a new ad creative using an uploaded image hash.
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
image_hash: Hash of the uploaded image
access_token: Meta API access token (optional - will use cached token if not provided)
name: Creative name
page_id: Facebook Page ID to be used for the ad
link_url: Destination URL for the ad
message: Ad copy/text
headline: Single headline for simple ads (cannot be used with headlines)
headlines: List of headlines for dynamic creative testing (cannot be used with headline)
description: Single description for simple ads (cannot be used with descriptions)
descriptions: List of descriptions for dynamic creative testing (cannot be used with description)
dynamic_creative_spec: Dynamic creative optimization settings
call_to_action_type: Call to action button type (e.g., 'LEARN_MORE', 'SIGN_UP', 'SHOP_NOW')
lead_gen_form_id: Lead generation form ID for lead generation campaigns. Required when using
lead generation CTAs like 'SIGN_UP', 'GET_OFFER', 'SUBSCRIBE', etc.
instagram_actor_id: Optional Instagram account ID for Instagram placements
Returns:
JSON response with created creative details
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| image_hash | Yes | ||
| access_token | No | ||
| name | No | ||
| page_id | No | ||
| link_url | No | ||
| message | No | ||
| headline | No | ||
| headlines | No | ||
| description | No | ||
| descriptions | No | ||
| dynamic_creative_spec | No | ||
| call_to_action_type | No | ||
| lead_gen_form_id | No | ||
| instagram_actor_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 indicates this is a creation/mutation operation and mentions some constraints (e.g., parameter exclusivity rules), but doesn't cover important behavioral aspects like authentication requirements beyond the optional access_token, rate limits, error handling, or what happens when creation fails. It provides basic operational context but lacks comprehensive behavioral 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 well-structured with clear sections (Args, Returns) and uses bullet-like formatting for parameters. While comprehensive for 15 parameters, every sentence serves a purpose - no redundant information. The opening purpose statement is front-loaded, followed by organized parameter documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (15 parameters, creation operation) and absence of annotations, the description does substantial work. It documents all parameters thoroughly and mentions the return format. With an output schema present, it doesn't need to detail return values. The main gap is lack of behavioral context (auth, errors, limits) which prevents a perfect 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?
With 0% schema description coverage for 15 parameters, the description provides extensive parameter documentation that fully compensates for the schema gap. It explains each parameter's purpose, format requirements (e.g., 'format: act_XXXXXXXXX'), constraints (e.g., exclusivity rules between headline/headlines), and contextual relationships (e.g., lead_gen_form_id requirements for specific CTAs). This adds significant value beyond the bare 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 specific action ('Create a new ad creative') and resource ('using an uploaded image hash'), distinguishing it from siblings like 'create_ad' or 'update_ad_creative'. The opening sentence provides a complete purpose statement that goes beyond just restating the tool name.
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 like 'create_ad' or 'update_ad_creative'. While it mentions some parameter constraints (e.g., 'cannot be used with headlines'), it doesn't offer contextual guidance about appropriate use cases, prerequisites, or tool selection criteria.
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 in a Meta Ads account.
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
campaign_id: Meta Ads campaign ID this ad set belongs to
name: Ad set name
optimization_goal: Conversion optimization goal (e.g., 'LINK_CLICKS', 'REACH', 'CONVERSIONS', 'APP_INSTALLS')
billing_event: How you're charged (e.g., 'IMPRESSIONS', 'LINK_CLICKS')
status: Initial ad set status (default: PAUSED)
daily_budget: Daily budget in account currency (in cents) as a string
lifetime_budget: Lifetime budget in account currency (in cents) as a string
targeting: Targeting specifications including age, location, interests, etc.
Use targeting_automation.advantage_audience=1 for automatic audience finding
bid_amount: Bid amount in account currency (in cents)
bid_strategy: Bid strategy (e.g., 'LOWEST_COST', 'LOWEST_COST_WITH_BID_CAP')
start_time: Start time in ISO 8601 format (e.g., '2023-12-01T12:00:00-0800')
end_time: End time in ISO 8601 format
dsa_beneficiary: DSA beneficiary (person/organization benefiting from ads) for European compliance
promoted_object: Mobile app configuration for APP_INSTALLS campaigns. Required fields: application_id, object_store_url.
Optional fields: custom_event_type, pixel_id, page_id.
Example: {"application_id": "123456789012345", "object_store_url": "https://apps.apple.com/app/id123456789"}
destination_type: Where users are directed after clicking the ad (e.g., 'APP_STORE', 'DEEPLINK', 'APP_INSTALL', 'ON_AD').
Required for mobile app campaigns and lead generation campaigns.
Use 'ON_AD' for lead generation campaigns where user interaction happens within the ad.
is_dynamic_creative: Enable Dynamic Creative for this ad set (required when using dynamic creatives with asset_feed_spec/dynamic_creative_spec).
access_token: Meta API access token (optional - will use cached token if not provided)
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| campaign_id | Yes | ||
| name | Yes | ||
| optimization_goal | Yes | ||
| billing_event | Yes | ||
| status | No | PAUSED | |
| daily_budget | No | ||
| lifetime_budget | No | ||
| targeting | No | ||
| bid_amount | No | ||
| bid_strategy | No | ||
| start_time | No | ||
| end_time | No | ||
| dsa_beneficiary | No | ||
| promoted_object | No | ||
| destination_type | No | ||
| is_dynamic_creative | No | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a creation tool (implying mutation) but doesn't mention required permissions, rate limits, error conditions, or what happens on success/failure. Some parameter descriptions hint at behavior (e.g., 'for European compliance'), but overall behavioral context is minimal for a complex creation tool with 18 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 appropriately front-loaded with the purpose statement, followed by detailed parameter documentation. However, it's quite lengthy (18 parameter explanations) which is necessary given the complexity but reduces conciseness. Some parameter explanations could be more succinct (e.g., the promoted_object example is quite detailed).
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 complexity (18 parameters, creation operation, no annotations) and the existence of an output schema, the description provides substantial context. It thoroughly documents parameters and their semantics. The main gaps are behavioral aspects (permissions, errors) and usage guidelines versus siblings. With output schema handling return values, this is reasonably complete for the creation 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?
With 0% schema description coverage, the description provides extensive parameter semantics that fully compensate. It explains 18 parameters with format examples, constraints, dependencies, and usage notes (e.g., 'in cents as a string', 'Required for mobile app campaigns', 'Use targeting_automation.advantage_audience=1'). This adds significant value beyond the bare 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 'Create a new ad set in a Meta Ads account' - a specific verb ('Create') and resource ('ad set') with platform context. It doesn't explicitly differentiate from sibling tools like 'create_campaign' or 'create_ad', but the resource specificity is clear. Not a tautology as it provides meaningful action and 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 no guidance on when to use this tool versus alternatives like 'create_campaign' or 'update_adset'. It mentions some parameter dependencies (e.g., 'Required for mobile app campaigns') but doesn't offer broader usage context, prerequisites, or comparisons to sibling tools. The agent must infer usage from parameter descriptions alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_budget_scheduleA
Create a budget schedule for a Meta Ads campaign.
Allows scheduling budget increases based on anticipated high-demand periods.
The times should be provided as Unix timestamps.
Args:
campaign_id: Meta Ads campaign ID.
budget_value: Amount of budget increase. Interpreted based on budget_value_type.
budget_value_type: Type of budget value - "ABSOLUTE" or "MULTIPLIER".
time_start: Unix timestamp for when the high demand period should start.
time_end: Unix timestamp for when the high demand period should end.
access_token: Meta API access token (optional - will use cached token if not provided).
Returns:
A JSON string containing the ID of the created budget schedule or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| budget_value | Yes | ||
| budget_value_type | Yes | ||
| time_start | Yes | ||
| time_end | Yes | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 the return format ('JSON string containing the ID... or an error message'), the meaning of budget_value_type ('ABSOLUTE' or 'MULTIPLIER'), and the optional access_token fallback. It does not mention rate limits or reversibility, but for a create operation, this is reasonably 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 well-structured: a one-line purpose, a brief contextual sentence, a clearly formatted Args list, and a Returns line. Every sentence earns its place, with no fluff or redundancy. It is appropriately sized for the 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?
Given the tool's complexity (6 parameters, no annotations, output schema present), the description is complete. It covers all parameters, explains the return value, and provides enough context for an agent to select and invoke the tool correctly. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by documenting every parameter: campaign_id, budget_value, budget_value_type, time_start, time_end, and access_token. It adds meaning beyond the schema, such as the interpretation of budget_value based on budget_value_type and the Unix timestamp requirement.
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 'Create a budget schedule for a Meta Ads campaign' with a specific verb and resource, and further explains its purpose: 'Allows scheduling budget increases based on anticipated high-demand periods.' This distinguishes it from sibling tools, none of which handle scheduling.
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 implicitly conveys when to use the tool via 'Allows scheduling budget increases based on anticipated high-demand periods,' which is clear context. It also provides practical guidance on Unix timestamps. It does not explicitly mention alternatives or exclusions, but no sibling offers similar functionality, so the guidance is adequate.
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 campaign in a Meta Ads account.
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
name: Campaign name
objective: Campaign objective (ODAX, outcome-based). Must be one of:
OUTCOME_AWARENESS, OUTCOME_TRAFFIC, OUTCOME_ENGAGEMENT,
OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_APP_PROMOTION.
Note: Legacy objectives like BRAND_AWARENESS, LINK_CLICKS,
CONVERSIONS, APP_INSTALLS, etc. are not valid for new
campaigns and will cause a 400 error. Use the outcome-based
values above (e.g., BRAND_AWARENESS → OUTCOME_AWARENESS).
access_token: Meta API access token (optional - will use cached token if not provided)
status: Initial campaign status (default: PAUSED)
special_ad_categories: List of special ad categories if applicable
daily_budget: Daily budget in account currency (in cents) as a string (only used if use_adset_level_budgets=False)
lifetime_budget: Lifetime budget in account currency (in cents) as a string (only used if use_adset_level_budgets=False)
buying_type: Buying type (e.g., 'AUCTION')
bid_strategy: Bid strategy. Must be one of: 'LOWEST_COST_WITHOUT_CAP', 'LOWEST_COST_WITH_BID_CAP', 'COST_CAP', 'LOWEST_COST_WITH_MIN_ROAS'.
bid_cap: Bid cap in account currency (in cents) as a string
spend_cap: Spending limit for the campaign in account currency (in cents) as a string
campaign_budget_optimization: Whether to enable campaign budget optimization (only used if use_adset_level_budgets=False)
ab_test_control_setups: Settings for A/B testing (e.g., [{"name":"Creative A", "ad_format":"SINGLE_IMAGE"}])
use_adset_level_budgets: If True, budgets will be set at the ad set level instead of campaign level (default: False)
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| name | Yes | ||
| objective | Yes | ||
| access_token | No | ||
| status | No | PAUSED | |
| special_ad_categories | No | ||
| daily_budget | No | ||
| lifetime_budget | No | ||
| buying_type | No | ||
| bid_strategy | No | ||
| bid_cap | No | ||
| spend_cap | No | ||
| campaign_budget_optimization | No | ||
| ab_test_control_setups | No | ||
| use_adset_level_budgets | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing critical behavioral traits: it warns about 400 errors for legacy objectives, explains default values (status: PAUSED), clarifies budget usage conditions, and mentions optional token caching. However, it doesn't cover rate limits, authentication requirements beyond token, or error handling 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 appropriately sized for a complex 15-parameter tool and front-loaded with the core purpose. The parameter explanations are necessary but somewhat dense; some formatting (like the objective list) could be more structured. Every sentence adds value, though the Args: section is lengthy.
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 high complexity (15 parameters, no annotations) but presence of an output schema, the description is quite complete: it covers all parameters thoroughly, explains behavioral constraints, and provides implementation guidance. The output schema likely handles return values, so the description appropriately focuses on input semantics and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed semantic information for all 15 parameters: it explains formats (e.g., 'act_XXXXXXXXX'), enumerates valid values for objective, clarifies dependencies (e.g., budget parameters only used if use_adset_level_budgets=False), and provides examples for complex parameters like ab_test_control_setups.
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 ('Create a new campaign') and resource ('in a Meta Ads account'), distinguishing it from sibling tools like update_campaign or get_campaigns. The verb+resource combination is precise 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 context through parameter explanations (e.g., legacy objectives cause errors) but doesn't explicitly state when to use this tool versus alternatives like update_campaign or create_adset. No explicit when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_audience_sizeA
Estimate audience size for targeting specifications using Meta's delivery_estimate API.
This function provides comprehensive audience estimation for complex targeting combinations
including demographics, geography, interests, and behaviors. It also maintains backwards
compatibility for simple interest validation.
Args:
access_token: Meta API access token (optional - will use cached token if not provided)
account_id: Meta Ads account ID (format: act_XXXXXXXXX) - required for comprehensive estimation
targeting: Complete targeting specification including demographics, geography, interests, etc.
Example: {
"age_min": 25,
"age_max": 65,
"geo_locations": {"countries": ["PL"]},
"flexible_spec": [
{"interests": [{"id": "6003371567474"}]},
{"interests": [{"id": "6003462346642"}]}
]
}
optimization_goal: Optimization goal for estimation (default: "REACH").
Options: "REACH", "LINK_CLICKS", "IMPRESSIONS", "CONVERSIONS", etc.
interest_list: [DEPRECATED - for backwards compatibility] List of interest names to validate
interest_fbid_list: [DEPRECATED - for backwards compatibility] List of interest IDs to validate
Returns:
JSON string with audience estimation results including estimated_audience_size,
reach_estimate, and targeting validation
| Name | Required | Description | Default |
|---|---|---|---|
| access_token | No | ||
| account_id | No | ||
| targeting | No | ||
| optimization_goal | No | REACH | |
| interest_list | No | ||
| interest_fbid_list | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 explains the tool's dual functionality (comprehensive estimation + backwards compatibility) and mentions token caching behavior. However, it doesn't disclose rate limits, authentication requirements beyond the token parameter, error conditions, or whether this is a read-only vs. 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?
The description is well-structured with clear sections (purpose, args, returns) and efficiently conveys necessary information. While comprehensive, some sentences could be more concise (e.g., 'It also maintains backwards compatibility for simple interest validation' could be simplified). Overall, most content 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 the tool's complexity (6 parameters, no annotations, 0% schema coverage), the description does well by explaining parameters thoroughly and mentioning the return format. However, with an output schema present, it could have been more concise about returns. The description adequately covers the tool's purpose and usage but could benefit from more behavioral 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?
With 0% schema description coverage, the description fully compensates by providing detailed parameter explanations. It clarifies optional vs. required parameters, provides format examples (account_id format), shows a comprehensive targeting example, lists optimization goal options, and explicitly marks deprecated parameters. This adds substantial value beyond the bare 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 specific verb ('estimate') and resource ('audience size') with the exact API used ('Meta's delivery_estimate API'). It distinguishes from siblings by focusing on audience estimation rather than creation, fetching, or updating operations found in other 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 provides clear context about when to use it ('for targeting specifications') and mentions backwards compatibility for simple interest validation. However, it doesn't explicitly state when NOT to use it or name specific alternative tools for related tasks like searching interests or demographics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchA
Fetch complete record data by ID.
It retrieves the full data for a specific record identified by its ID.
Args:
id: The record ID to fetch (format: "type:id", e.g., "account:act_123456")
Returns:
JSON response with complete record data including id, title, text, and metadata
Example Usage:
fetch(id="account:act_123456789")
fetch(id="campaign:23842588888640185")
fetch(id="ad:23842614006130185")
fetch(id="page:123456789")
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 clearly indicates this is a read operation ('retrieves'), but lacks details on permissions, rate limits, error handling, or response structure beyond basic return values. The example usage helps but doesn't cover behavioral traits comprehensively.
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 well-structured with clear sections (purpose, args, returns, examples) and front-loaded key information. While slightly verbose with repetitive phrasing ('fetch complete record data' then 'retrieves the full data'), every sentence adds value and the example usage is particularly 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?
Given the tool's simplicity (single parameter, read-only operation) and the presence of an output schema, the description is reasonably complete. It explains the parameter thoroughly and indicates the return format, though it could benefit from more behavioral context 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?
The schema description coverage is 0%, so the description must fully compensate. It provides excellent parameter semantics: it explains the 'id' parameter's purpose, format requirements with concrete examples, and clarifies the colon-separated 'type:id' structure. This adds significant value beyond the bare 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 tool's purpose with a specific verb ('fetch') and resource ('complete record data by ID'), distinguishing it from siblings like 'get_account_info' or 'search' which handle different retrieval patterns. However, it doesn't explicitly differentiate from similar 'get_' tools that might also retrieve records 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 provides no guidance on when to use this tool versus alternatives like 'get_ad_details' or 'search', nor does it mention prerequisites or exclusions. It simply describes what the tool does without contextual usage information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_infoA
Get detailed information about a specific ad account.
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
access_token: Meta API access token (optional - will use cached token if not provided)
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. It discloses the access_token caching behavior, but does not mention permission requirements, error handling, or explicitly confirm read-only semantics beyond the verb 'Get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the purpose, followed by a compact args section. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read tool with an output schema, so the description need not explain return values. It covers the essential purpose and parameters, but misses an explicit link to related list tools or scenarios, making it slightly 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?
With 0% schema description coverage, the description fully compensates by explaining both parameters: account_id format (act_XXXXXXXXX) and access_token optionality with fallback to cached token.
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 with a specific verb ('Get') and resource ('detailed information about a specific ad account'), distinguishing it from sibling list tools like get_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?
Usage is implied: use when you need details for a single account given its ID. No explicit alternatives or when-not-to-use conditions are provided, so guidance relies on the clear purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_pagesA
Get pages associated with a Meta Ads account.
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
access_token: Meta API access token (optional - will use cached token if not provided)
Returns:
JSON response with pages associated with the account
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 notes the optional access_token and cached-token fallback, giving insight into authentication behavior. It also states the return format (JSON). It could mention what happens when no token is available, but for a simple GET operation, this is adequately 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 well-structured with Args and Returns sections, front-loading the purpose. Every sentence provides useful information without 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?
For a simple tool with an output schema, the description covers the essential aspects: purpose, parameters, and return value. It is complete enough for an agent to select and invoke the tool correctly, especially given the explicit parameter format and caching note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It explains account_id format (act_XXXXXXXXX) and the optional access_token with caching behavior, adding meaningful context beyond the bare schema. Both parameters are effectively documented.
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 pages associated with a Meta Ads account, using a specific verb and resource. It naturally distinguishes itself from sibling tools like search_pages_by_name by focusing on account association rather than name-based search.
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 for when to use the tool: when you need pages linked to a specific Meta Ads account. It does not explicitly mention alternatives or exclusions, but the purpose is unambiguous enough to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_accountsB
Get ad accounts accessible by a user.
Args:
access_token: Meta API access token (optional - will use cached token if not provided)
user_id: Meta user ID or "me" for the current user
limit: Maximum number of accounts to return (default: 200)
| Name | Required | Description | Default |
|---|---|---|---|
| access_token | No | ||
| user_id | No | me | |
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 optional token caching and default values, which adds some context, but fails to cover critical aspects like authentication requirements (beyond the token), rate limits, pagination behavior, error handling, or what the output contains (though an output schema exists). This leaves significant gaps for safe and effective use.
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 appropriately sized and front-loaded, starting with the core purpose followed by parameter details in a structured 'Args:' section. Each sentence adds value, with no wasted words, though it could be slightly more concise by integrating the purpose and parameters more seamlessly.
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 moderate complexity (3 parameters, no annotations, but with an output schema), the description is partially complete. It covers parameter semantics well but lacks behavioral context (e.g., auth, limits) and usage guidelines. The output schema mitigates the need to describe return values, but overall, it's adequate with clear gaps for a read operation in a crowded toolset.
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 description adds meaningful semantics for all three parameters beyond the schema, which has 0% coverage (titles only). It explains that 'access_token' is optional with caching, 'user_id' can be 'me' for the current user, and 'limit' has a default of 200. This compensates well for the low schema coverage, providing clear usage context without redundancy.
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 purpose with a specific verb ('Get') and resource ('ad accounts accessible by a user'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_account_info' or 'get_account_pages', which might also retrieve account-related information, leaving some ambiguity about its unique 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 description provides no guidance on when to use this tool versus alternatives. With many sibling tools (e.g., 'get_account_info', 'get_account_pages'), there's no indication of how this tool differs in context, such as whether it's for ad-specific accounts or general user accounts, leaving the agent to guess based on the 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_creativesA
Get creative details for a specific ad. Best if combined with get_ad_image to get the full image.
Args:
ad_id: Meta Ads ad ID
access_token: Meta API access token (optional - will use cached token if not provided)
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 that 'access_token' is optional and will use a cached token if not provided, which adds useful behavioral context about authentication. However, it doesn't disclose other traits like rate limits, error handling, or response format, leaving gaps for a mutation-free 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 appropriately sized and front-loaded: the first sentence states the purpose clearly, followed by a usage guideline and parameter explanations in a structured 'Args:' section. Every sentence earns its place with no wasted words, 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 that there is an output schema (which handles return values), no annotations, and low schema coverage, the description does a good job by covering purpose, usage, and parameter semantics. However, it could be more complete by addressing potential errors or linking more explicitly to sibling tools, but it's largely adequate for a read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for both parameters: 'ad_id' is specified as 'Meta Ads ad ID', and 'access_token' is explained as 'Meta API access token (optional - will use cached token if not provided)'. This clarifies semantics beyond the schema's basic types, though it could provide more detail on formats or constraints.
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 purpose: 'Get creative details for a specific ad.' This is a specific verb ('Get') and resource ('creative details for a specific ad'), making it understandable. However, it doesn't explicitly distinguish it from sibling tools like 'get_ad_details' or 'get_ad_image', which reduces clarity slightly.
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 for usage: 'Best if combined with get_ad_image to get the full image.' This gives a helpful guideline on when to use this tool in conjunction with another. However, it lacks explicit alternatives or exclusions, such as when to use 'get_ad_details' instead, which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_detailsA
Get detailed information about a specific ad.
Args:
ad_id: Meta Ads ad ID
access_token: Meta API access token (optional - will use cached token if not provided)
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It adds useful behavioral context about the access_token parameter, noting that a cached token is used if not provided. However, it does not explicitly mention read-only safety, error handling, or what 'detailed information' includes.
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 plus a clear argument list. It is front-loaded with the purpose statement and concise, with 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?
For a simple single-resource read operation with an output schema, the description is fairly complete. It covers what the tool does, both parameters, and the token fallback behavior. The only notable gap is the lack of usage guidance, which is already penalized under usage_guidelines.
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 no descriptions for parameters (0% coverage), so the description fully compensates. It explains ad_id as 'Meta Ads ad ID' and access_token as 'Meta API access token (optional - will use cached token if not provided),' adding semantic meaning beyond the schema's bare type and default.
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: 'Get detailed information about a specific ad.' This distinguishes it from plural listing tools like get_ads and other detail tools like get_adset_details or get_creative_details by specifying 'ad' and '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?
No guidance is provided on when to use this tool versus alternatives. There is no mention of alternatives or exclusions, which is problematic given the many sibling 'get_*_details' tools that could be confused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_imageA
Get, download, and visualize a Meta ad image in one step. Useful to see the image in the LLM.
Args:
ad_id: Meta Ads ad ID
access_token: Meta API access token (optional - will use cached token if not provided)
Returns:
The ad image ready for direct visual analysis
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| access_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description bears the full burden. It discloses cached-token behavior and that the result is ready for visual analysis, but it does not explicitly state this is a read-only operation or describe any limitations/errors. These are useful additions but leave some behavioral context 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 compact and well-organized with Args and Returns sections. Every sentence contributes: purpose, usage, parameter guidance, and return behavior. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description covers purpose, arguments, and return value ('ready for direct visual analysis'). It is sufficient for an agent to invoke the tool, though it could mention error cases or specify the image 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?
Schema description coverage is 0%, and the description compensates by documenting both arguments. 'ad_id: Meta Ads ad ID' clarifies the identifier, and 'access_token ... will use cached token if not provided' adds the critical optional-token behavior. This goes beyond the bare schema but is not exceptionally detailed.
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 phrase 'Get, download, and visualize a Meta ad image in one step', clearly identifying the resource and action. It differentiates from siblings like get_ad_video and upload_ad_image by emphasizing visual inspection of ad images in the LLM.
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 'Useful to see the image in the LLM' provides clear when-to-use context for visual verification. It does not explicitly state exclusions or alternatives (e.g., use get_ad_video for videos), but the image-focused wording implicitly distinguishes it from video/upload tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adsA
Get ads for a Meta Ads account with optional filtering.
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
access_token: Meta API access token (optional - will use cached token if not provided)
limit: Maximum number of ads to return (default: 10)
campaign_id: Optional campaign ID to filter by
adset_id: Optional ad set ID to filter by
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| access_token | No | ||
| limit | No | ||
| campaign_id | No | ||
| adset_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It explains optional token caching and default limit but omits behaviors like pagination, error handling, or whether only active ads are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points and front-loaded purpose. Minor verbosity (e.g., 'optional - will use cached token if not provided') could be trimmed, but overall 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?
Given 5 parameters, required account_id, and presence of output schema, the description covers all necessary aspects. It lacks mention of pagination or result scope (e.g., active vs. all ads), but is largely 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?
With 0% schema description coverage, the description fully compensates by detailing each parameter: account_id format, access_token optionality, limit default, and filter fields. Adds significant meaning beyond 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 'Get ads for a Meta Ads account with optional filtering,' specifying the verb, resource, and context. It distinguishes from sibling tools like get_adsets or get_campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists optional filters but does not explicitly guide when to use this tool versus alternatives like search or get_campaigns. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adset_detailsA
Get detailed information about a specific ad set.
Args:
adset_id: Meta Ads ad set ID
access_token: Meta API access token (optional - will use cached token if not provided)
Example:
To call this function through MCP, pass the adset_id as the first argument:
{
"args": "YOUR_ADSET_ID"
}
| Name | Required | Description | Default |
|---|---|---|---|
| adset_id | Yes | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must communicate behavioral traits. It discloses that access_token is optional and will use a cached token if not provided, which is useful. However, it does not mention potential errors, permission requirements, or the read-only nature explicitly (though 'get' implies it). This provides some transparency but leaves 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 concise: a one-sentence purpose, a clear Args list, and an example. It is well-organized and front-loaded with the purpose. No unnecessary wording.
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 and the presence of an output schema, the description is largely complete. It explains the parameters and how to call the function. However, it omits any mention of error conditions or how the response is structured, but the output schema covers that. The description suffices for selection and basic 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 has zero descriptions for its properties, so the description must compensate. It explains adset_id as 'Meta Ads ad set ID' and access_token as an optional token with caching behavior. It also provides a concrete invocation example. This adds significant meaning beyond the raw 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 tool's function: 'Get detailed information about a specific ad set.' The verb 'get' and resource 'adset details' distinguish it from sibling tools like get_adsets (which lists adsets) and get_ad_details (which handles ads, not adsets).
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 does not provide explicit guidance on when to use this tool versus alternative tools like get_adsets. It implies you need a specific adset_id, but offers no contextual information about when to choose this over others. The example focuses on invocation syntax rather than selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adsetsA
Get ad sets for a Meta Ads account with optional filtering by campaign.
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
access_token: Meta API access token (optional - will use cached token if not provided)
limit: Maximum number of ad sets to return (default: 10)
campaign_id: Optional campaign ID to filter by
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| access_token | No | ||
| limit | No | ||
| campaign_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as pagination behavior, ordering, or side effects. It only describes the basic operation (read) without clarifying limits or error handling, which is insufficient given the absence of 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 concise with a single sentence summary followed by a structured Args block. It is front-loaded and every sentence provides useful information, though the Args block slightly repeats schema info without being 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?
Given the tool simplicity and existence of an output schema, the description covers basic functionality and parameters. However, it lacks context on edge cases (no results), error messages, or rate limits, leaving it minimally complete for a production setting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by explaining account_id format ('act_XXXXXXXXX'), access_token optionality with cached token note, limit default, and campaign_id optionality. This adds value beyond the schema, though it could detail limit behavior or filter semantics more.
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 ad sets for a Meta Ads account with optional filtering by campaign.' It specifies the verb 'Get', the resource 'ad sets', the context 'Meta Ads account', and an additional feature. This distinguishes it from siblings like get_ads (different resource) and get_adset_details (specific ad 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?
The description mentions optional filtering by campaign but does not explicitly state when to use this tool vs alternatives like get_adset_details or get_ads. There is no guidance on prerequisites or use cases, leaving the agent to infer context 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.
get_campaign_detailsA
Get detailed information about a specific campaign.
Note: This function requests a specific set of fields ('id,name,objective,status,...').
The Meta API offers many other fields for campaigns (e.g., 'effective_status', 'source_campaign_id', etc.)
that could be added to the 'fields' parameter in the code if needed.
Args:
campaign_id: Meta Ads campaign ID
access_token: Meta API access token (optional - will use cached token if not provided)
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 that the tool requests a fixed set of fields and notes the availability of other Meta API fields, setting expectations about data completeness. It also explains access_token fallback behavior. However, it does not mention error handling, pagination, or the exact return envelope, 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 well-structured with a clear purpose sentence, a useful note about field limitations, and an Args list. The note about modifying the 'fields' parameter in code is slightly tangential for an AI agent but still relevant. It is not overly verbose and each section 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 the simple read-only nature of the tool and the presence of an output schema, the description is reasonably complete. It explains the limited field set, covers both parameters, and notes token caching. However, it lacks explicit guidance on how this tool fits with sibling tools, such as when to prefer get_campaign_details over get_campaigns, which would elevate 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 0%, so the description must compensate. It defines campaign_id as 'Meta Ads campaign ID' and access_token as 'Meta API access token (optional - will use cached token if not provided),' adding real semantic meaning not present in the schema. This explains both the purpose and optionality clearly, though it could add constraints like format validation.
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 purpose with a specific verb and resource: 'Get detailed information about a specific campaign.' The word 'specific' explicitly distinguishes it from sibling get_campaigns, which would list campaigns. This makes the tool's 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 when to use the tool (when you need details for a specific campaign) and emphasizes 'specific,' but it does not explicitly name alternatives or state when not to use it. No mention of sibling tools like get_campaigns or update_campaign leaves usage guidance 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.
get_campaignsA
Get campaigns for a Meta Ads account with optional filtering.
Note: By default, the Meta API returns a subset of available fields.
Other fields like 'effective_status', 'special_ad_categories',
'lifetime_budget', 'spend_cap', 'budget_remaining', 'promoted_object',
'source_campaign_id', etc., might be available but require specifying them
in the API call (currently not exposed by this tool's parameters).
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
access_token: Meta API access token (optional - will use cached token if not provided)
limit: Maximum number of campaigns to return (default: 10)
status_filter: Filter by effective status (e.g., 'ACTIVE', 'PAUSED', 'ARCHIVED').
Maps to the 'effective_status' API parameter, which expects an array
(this function handles the required JSON formatting). Leave empty for all statuses.
objective_filter: Filter by campaign objective(s). Can be a single objective string or a list of objectives.
Valid objectives: 'OUTCOME_AWARENESS', 'OUTCOME_TRAFFIC', 'OUTCOME_ENGAGEMENT',
'OUTCOME_LEADS', 'OUTCOME_SALES', 'OUTCOME_APP_PROMOTION'.
Examples: 'OUTCOME_LEADS' or ['OUTCOME_LEADS', 'OUTCOME_SALES'].
Leave empty for all objectives.
after: Pagination cursor to get the next set of results
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| access_token | No | ||
| limit | No | ||
| status_filter | No | ||
| objective_filter | No | ||
| after | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 effectively describes key behaviors: it's a read operation (implied by 'Get'), notes API limitations (default fields vs. available fields), explains pagination ('after' parameter), and mentions token caching. It doesn't cover rate limits or error handling, but provides substantial context beyond basic functionality.
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 well-structured with a clear purpose statement upfront, followed by a note on API limitations, then detailed parameter explanations. Every sentence adds value, though the API note could be slightly more concise. It efficiently conveys necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters with 0% schema coverage and no annotations, the description does an excellent job explaining inputs and behaviors. The presence of an output schema means return values needn't be described. It covers filtering, pagination, and API quirks, though it could mention error cases or rate limits 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 description coverage is 0%, so the description must fully compensate. It does so excellently: each parameter is explained with semantics, formats (e.g., 'act_XXXXXXXXX'), defaults, examples, and usage notes. It clarifies complex behaviors like JSON formatting for 'status_filter' and array/string handling for 'objective_filter', adding significant value beyond the bare 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 tool's purpose: 'Get campaigns for a Meta Ads account with optional filtering.' It specifies the verb ('Get') and resource ('campaigns'), and distinguishes it from siblings like 'get_campaign_details' by focusing on listing/filtering rather than retrieving details. However, it doesn't explicitly contrast with other listing tools like 'get_ads' or 'get_adsets'.
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 the mention of 'optional filtering' and the detailed parameter explanations, suggesting this tool is for retrieving campaigns with specific criteria. However, it lacks explicit guidance on when to use this versus alternatives like 'get_campaign_details' for individual campaigns or 'search' for broader queries. No when-not-to-use scenarios or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insightsA
Get performance insights for a campaign, ad set, ad or account.
Args:
object_id: ID of the campaign, ad set, ad or account
access_token: Meta API access token (optional - will use cached token if not provided)
time_range: Either a preset time range string or a dictionary with "since" and "until" dates in YYYY-MM-DD format
Preset options: today, yesterday, this_month, last_month, this_quarter, maximum, data_maximum,
last_3d, last_7d, last_14d, last_28d, last_30d, last_90d, last_week_mon_sun,
last_week_sun_sat, last_quarter, last_year, this_week_mon_today, this_week_sun_today, this_year
Dictionary example: {"since":"2023-01-01","until":"2023-01-31"}
breakdown: Optional breakdown dimension. Valid values include:
Demographic: age, gender, country, region, dma
Platform/Device: device_platform, platform_position, publisher_platform, impression_device
Creative Assets: ad_format_asset, body_asset, call_to_action_asset, description_asset,
image_asset, link_url_asset, title_asset, video_asset, media_asset_url,
media_creator, media_destination_url, media_format, media_origin_url,
media_text_content, media_type, creative_relaxation_asset_type,
flexible_format_asset_type, gen_ai_asset_type
Campaign/Ad Attributes: breakdown_ad_objective, breakdown_reporting_ad_id, app_id, product_id
Conversion Tracking: coarse_conversion_value, conversion_destination, standard_event_content_type,
signal_source_bucket, is_conversion_id_modeled, fidelity_type, redownload
Time-based: hourly_stats_aggregated_by_advertiser_time_zone,
hourly_stats_aggregated_by_audience_time_zone, frequency_value
Extensions/Landing: ad_extension_domain, ad_extension_url, landing_destination,
mdsa_landing_destination
Attribution: sot_attribution_model_type, sot_attribution_window, sot_channel,
sot_event_type, sot_source
Mobile/SKAN: skan_campaign_id, skan_conversion_id, skan_version, postback_sequence_index
CRM/Business: crm_advertiser_l12_territory_ids, crm_advertiser_subvertical_id,
crm_advertiser_vertical_id, crm_ult_advertiser_id, user_persona_id, user_persona_name
Advanced: hsid, is_auto_advance, is_rendered_as_delayed_skip_ad, mmm, place_page_id,
marketing_messages_btn_name, impression_view_time_advertiser_hour_v2, comscore_market,
comscore_market_code
level: Level of aggregation (ad, adset, campaign, account)
limit: Maximum number of results to return per page (default: 25, Meta API allows much higher values)
after: Pagination cursor to get the next set of results. Use the 'after' cursor from previous response's paging.next field.
action_attribution_windows: Optional list of attribution windows (e.g., ["1d_click", "7d_click", "1d_view"]).
When specified, actions include additional fields for each window. The 'value' field always shows 7d_click.
| Name | Required | Description | Default |
|---|---|---|---|
| object_id | Yes | ||
| access_token | No | ||
| time_range | No | maximum | |
| breakdown | No | ||
| level | No | ad | |
| limit | No | ||
| after | No | ||
| action_attribution_windows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing behavioral traits: it explains pagination behavior (using 'after' cursor), default values (limit default 25), API constraints (Meta API allows higher values), and data format specifics (time_range presets, breakdown categories). It doesn't mention rate limits or authentication requirements beyond the optional access_token.
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 appropriately sized for an 8-parameter tool with complex options. It's well-structured with clear parameter sections and bullet points for breakdown categories. Some redundancy exists in listing all breakdown values, but each earns its place by compensating for the 0% schema coverage.
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 complexity (8 parameters, no annotations, 0% schema coverage) but with an output schema present, the description is remarkably complete. It thoroughly documents all parameters with semantics, explains behavioral aspects like pagination and defaults, and provides extensive examples and valid values. The output schema handles return values, so the description appropriately focuses on input semantics and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing extensive semantic details for all 8 parameters: explains what object_id represents, clarifies access_token optionality with caching behavior, documents time_range formats with examples and preset options, enumerates breakdown categories with detailed valid values, explains level options, specifies limit defaults and API constraints, describes pagination mechanics, and explains action_attribution_windows behavior with field implications.
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 'performance insights' for specific objects (campaign, ad set, ad, or account). It distinguishes from siblings like get_ad_details or get_campaign_details by focusing on performance metrics rather than general object 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 implies usage for performance insights but doesn't explicitly state when to use this tool versus alternatives like get_ad_details or search_ads_archive. It provides context about what objects it works with but lacks explicit when/when-not guidance or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_interest_suggestionsA
Get interest suggestions based on existing interests.
Args:
interest_list: List of interest names to get suggestions for (e.g., ["Basketball", "Soccer"])
access_token: Meta API access token (optional - will use cached token if not provided)
limit: Maximum number of suggestions to return (default: 25)
Returns:
JSON string containing suggested interests with id, name, audience_size, and description fields
| Name | Required | Description | Default |
|---|---|---|---|
| interest_list | Yes | ||
| access_token | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. It explains the optional access_token behavior ('will use cached token if not provided'), the default limit, and the exact return structure (JSON string with id, name, audience_size, description). This goes beyond basic expectations, though it omits details about error handling or rate limits.
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 well-structured with clear Args and Returns sections, front-loaded with a one-sentence purpose. Every piece of information is useful and directly actionable, without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all three parameters, the return format, and operational nuances (token caching, default limit). Combined with the output schema, an agent has everything needed to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverage, but the description's Args section thoroughly explains each parameter, including examples for interest_list, the optional nature of access_token, and the default for limit. This fully compensates for the schema gap and adds practical guidance.
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: 'Get interest suggestions based on existing interests.' This uses a specific verb and resource, distinguishing it from siblings like 'search_interests' by emphasizing it operates on a provided list of interests rather than a free-form search.
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 for when to use the tool ('based on existing interests') and implicitly differentiates it from search-like tools. However, it doesn't explicitly state situations to avoid or name alternative tools, so it falls short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_login_linkA
Get a clickable login link for Meta Ads authentication.
NOTE: This method should only be used if you're using your own Facebook app.
If using Pipeboard authentication (recommended), set the PIPEBOARD_API_TOKEN
environment variable instead (token obtainable via https://pipeboard.co).
Args:
access_token: Meta API access token (optional - will use cached token if not provided)
Returns:
A clickable resource link for Meta authentication
| Name | Required | Description | Default |
|---|---|---|---|
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses caching behavior (optional access_token, will use cached token) and the return type, but does not explicitly state whether generating the link has side effects (e.g., creates a session, expires) or requires specific permissions. This is a moderate 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 concise and well-structured: a one-sentence purpose, a note, and clear Args/Returns sections. Every sentence adds value and no space 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?
The tool is simple (one optional param), and the description provides usage context, parameter details, and return value. It could mention prerequisites like having a custom Facebook app, but the 'NOTE' section partially covers this. Overall, it is complete for its 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?
The schema only provides the parameter name and type, while the description adds meaningful semantics: 'Meta API access token (optional - will use cached token if not provided).' This explains the optionality and fallback behavior, compensating for the schema's minimal 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 tool's function with a specific verb and resource: 'Get a clickable login link for Meta Ads authentication.' This unambiguously distinguishes it from the sibling ad-management 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?
Explicit usage guidance is provided: the method should only be used when using your own Facebook app, and the recommended Pipeboard authentication path is described with a concrete alternative (setting PIPEBOARD_API_TOKEN). This is a model of when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Search through Meta Ads data and return matching record IDs.
It searches across ad accounts, campaigns, ads, pages, and businesses to find relevant records
based on the provided query.
Args:
query: Search query string to find relevant Meta Ads records
access_token: Meta API access token (optional - will use cached token if not provided)
Returns:
JSON response with list of matching record IDs
Example Usage:
search(query="active campaigns")
search(query="account spending")
search(query="facebook ads performance")
search(query="facebook pages")
search(query="user businesses")
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 states that the tool returns matching record IDs, searches across multiple entity types, and clarifies that access_token is optional and uses a cached token if not provided. This adds meaningful context beyond the schema, though it does not cover potential limitations like result limits or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a concise intro, Args, Returns, and Example Usage sections. The example usage includes five queries, which is slightly repetitive but useful for illustrating query variety. Overall, it is efficient and not 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?
Given the tool's simplicity (2 params, no nested objects) and the presence of an output schema, the description is adequately complete. It covers purpose, parameter semantics, return type, and examples. However, it does not mention pagination, result limits, or error behavior, which are minor 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 schema has no descriptions (0% coverage), so the description compensates by explaining 'query' as 'Search query string to find relevant Meta Ads records' and 'access_token' as optional with cached-token behavior. This adds clear semantic value beyond the plain schema, though it could provide more detail on query syntax or constraints.
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: 'Search through Meta Ads data and return matching record IDs.' It specifies the resource (Meta Ads data) and scope (across ad accounts, campaigns, ads, pages, and businesses), effectively distinguishing it from sibling tools like search_pages_by_name or search_ads_archive.
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 for use through examples like 'search(query="active campaigns")' and 'search(query="facebook pages")', implying it is a broad cross-entity search. However, it does not explicitly state when not to use it or mention alternatives, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ads_archiveA
Search the Facebook Ads Library archive.
Args:
search_terms: The search query for ads.
ad_reached_countries: List of country codes (e.g., ["US", "GB"]).
access_token: Meta API access token (optional - will use cached token if not provided).
ad_type: Type of ads to search for (e.g., POLITICAL_AND_ISSUE_ADS, HOUSING_ADS, ALL).
limit: Maximum number of ads to return.
fields: Comma-separated string of fields to retrieve for each ad.
Example Usage via curl equivalent:
curl -G \
-d "search_terms='california'" \
-d "ad_type=POLITICAL_AND_ISSUE_ADS" \
-d "ad_reached_countries=['US']" \
-d "fields=ad_snapshot_url,spend" \
-d "access_token=<ACCESS_TOKEN>" \
"https://graph.facebook.com/<API_VERSION>/ads_archive"
| Name | Required | Description | Default |
|---|---|---|---|
| search_terms | Yes | ||
| ad_reached_countries | Yes | ||
| access_token | No | ||
| ad_type | No | ALL | |
| limit | No | ||
| fields | No | ad_creation_time,ad_creative_body,ad_creative_link_caption,ad_creative_link_description,ad_creative_link_title,ad_delivery_start_time,ad_delivery_stop_time,ad_snapshot_url,currency,demographic_distribution,funding_entity,impressions,page_id,page_name,publisher_platform,region_distribution,spend |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It mentions that access_token can be omitted to use a cached token, but it lacks details on pagination, rate limits, or the read-only nature of the operation. The description covers only a small portion of potential 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 well-structured: a one-sentence purpose, an Args breakdown, and a curl example. The example is somewhat verbose and partially redundant with the Args list, but the overall organization is clear 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 description provides a complete invocation recipe including all parameters, a usage example, and defaults. Since an output schema exists, not detailing return values is acceptable. It lacks some context like pagination behavior, but for a moderately simple search tool it is sufficiently 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 0%, but the Args list explains every parameter with examples and formats. For instance, it specifies ad_reached_countries as a list of country codes, ad_type with concrete enum-like examples, and fields as a comma-separated string. This fully compensates for the schema's lack of 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 'Search the Facebook Ads Library archive,' with a specific verb and resource. This distinguishes it from sibling tools like search_pages_by_name, making it 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 an example and parameter list but does not explicitly explain when to use this tool versus alternatives. There is no mention of exclusions or any guidance on choosing among sibling search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_behaviorsA
Get all available behavior targeting options.
Args:
access_token: Meta API access token (optional - will use cached token if not provided)
limit: Maximum number of results to return (default: 50)
Returns:
JSON string containing behavior targeting options with id, name, audience_size bounds, path, and description
| Name | Required | Description | Default |
|---|---|---|---|
| access_token | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full burden of behavioral disclosure. It discloses the optional access_token and cached token behavior, plus the return format. However, it does not explicitly state safety characteristics (e.g., read-only) and the phrase 'Get all' conflicts with the limit parameter, 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 concise and well-structured: a one-line summary, clear args list with descriptions, and a returns line. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects: purpose, both parameters, and return format. The 'Get all' vs limit conflict is a minor gap, and pagination behavior is not addressed, but for a simple tool with two optional parameters, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates. It explains access_token as an optional Meta API token with cached fallback, and limit as the maximum number of results with a default of 50, adding meaningful context beyond the schema's type/default.
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 all available behavior targeting options,' using a specific verb ('get') and resource ('behavior targeting options'). This distinguishes it from sibling tools like search_interests, search_demographics, and search_geo_locations, which target different audience attributes.
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 explicit guidance on when to use this tool versus alternatives. Usage is only implied by the tool name and the description's focus on behavior targeting, but it does not mention alternatives or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_demographicsA
Get demographic targeting options.
Args:
access_token: Meta API access token (optional - will use cached token if not provided)
demographic_class: Type of demographics to retrieve. Options: 'demographics', 'life_events',
'industries', 'income', 'family_statuses', 'user_device', 'user_os' (default: 'demographics')
limit: Maximum number of results to return (default: 50)
Returns:
JSON string containing demographic targeting options with id, name, audience_size bounds, path, and description
| Name | Required | Description | Default |
|---|---|---|---|
| access_token | No | ||
| demographic_class | No | demographics | |
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 that access_token is optional and that a cached token may be used, which is useful. However, it does not explicitly state that the operation is read-only, nor does it mention pagination behavior, rate limits, or error conditions. The 'Get' verb implies reading, but more explicit behavioral context would be beneficial.
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 well-organized with clear Args and Returns sections. Every sentence contributes essential information, with no redundancy or fluff. It is succinct yet comprehensive, fitting the ideal length for a tool with three 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?
The description covers all parameters and the return value structure, which is sufficient for a search-like tool with no nested objects. However, it lacks details on potential pagination (beyond the limit parameter) or rate limiting, which might be relevant for large result sets. An output schema exists, so return type is further clarified, but the absence of explicit edge-case behavior keeps it from being a 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?
Schema description coverage is 0%, so the description fully compensates by explaining every parameter: access_token's optional nature and fallback behavior, demographic_class with its enumerated options and default, and limit with its default. This exceeds what the schema alone provides and gives clear semantic 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 tool retrieves demographic targeting options with the verb 'Get' and a specific resource. It is unambiguous, but it does not explicitly differentiate itself from sibling tools like search_interests or search_behaviors; the distinctiveness comes from the resource name rather than the description itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as search_interests, search_behaviors, or search_geo_locations. It only describes the function itself, leaving the agent to infer usage context from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_geo_locationsA
Search for geographic targeting locations.
Args:
query: Search term for locations (e.g., "New York", "California", "Japan")
access_token: Meta API access token (optional - will use cached token if not provided)
location_types: Types of locations to search. Options: ['country', 'region', 'city', 'zip',
'geo_market', 'electoral_district']. If not specified, searches all types.
limit: Maximum number of results to return (default: 25)
Returns:
JSON string containing location data with key, name, type, and geographic hierarchy information
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| access_token | No | ||
| location_types | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 access_token caching behavior, returns a JSON string with location data, and implies a read-only search operation. While it doesn't mention rate limits or pagination, it provides solid transparency for a search 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 uses a clean, structured Args/Returns format. Every line earns its place, listing parameters and return value without any filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, all parameters, token handling, and return structure. Given the tool's simple search nature and no annotations, this is complete enough for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description fully compensates by explaining each parameter: query, access_token, location_types (including available options), and limit with default. This adds complete semantic meaning beyond the bare schema types.
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 'Search for geographic targeting locations' with a specific verb and resource. This distinguishes it from sibling search tools like search_interests and search_behaviors, making the tool's 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 clearly indicates this is for geographical targeting locations, which gives clear context for when to use it. However, it does not explicitly mention alternatives or exclusion criteria, only implying the use case through the resource type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_interestsA
Search for interest targeting options by keyword.
Args:
query: Search term for interests (e.g., "baseball", "cooking", "travel")
access_token: Meta API access token (optional - will use cached token if not provided)
limit: Maximum number of results to return (default: 25)
Returns:
JSON string containing interest data with id, name, audience_size, and path fields
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| access_token | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that the access token is optional and a cached token is used, and describes the return format with specific fields. It does not explicitly state whether the operation is read-only or mention error conditions, but the search verb implies non-destructive 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 structured with Args and Returns sections, front-loads the core purpose in one sentence, and every line adds necessary information without fluff.
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 search tool with three parameters, the description covers the purpose, parameters, return format, and auth context. It lacks explicit pagination details but is otherwise complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema lacks parameter descriptions, but the tool description compensates fully: it defines the query with examples, explains the access_token optional behavior, and specifies the limit's default. This adds meaningful semantics beyond the raw 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 starts with a specific verb and resource: 'Search for interest targeting options by keyword.' This clearly distinguishes it from sibling tools like search_behaviors and search_demographics, which target different categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for keyword-based interest searches but does not explicitly explain when to prefer this tool over alternatives like search_behaviors or search_geo_locations. It offers no when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pages_by_nameA
Search for pages by name within an account.
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
access_token: Meta API access token (optional - will use cached token if not provided)
search_term: Search term to find pages by name (optional - returns all pages if not provided)
Returns:
JSON response with matching pages
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| access_token | No | ||
| search_term | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses some behaviors: access_token can be omitted and 'will use cached token if not provided', and search_term is optional with a defined fallback. However, it does not mention authentication requirements, rate limits, permissions, or response structure beyond 'JSON response with matching pages'.
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 uses a structured Arg/Returns format that is easy to scan. It is concise with no superfluous content, though the docstring formatting adds some lines. Overall it 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 search tool with 3 parameters and an output schema, this description is sufficiently informative. It covers all parameters and the return type, plus the account_id format. Minor gaps exist (no pagination, no error behavior), but these are not critical for a straightforward search 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 0%, so the description compensates. It explains all three parameters: account_id with format 'act_XXXXXXXXX', access_token with cached-token fallback, and search_term with behavior when omitted. However, it lacks details on search_term matching semantics (e.g., exact vs substring, case sensitivity).
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: 'Search for pages by name within an account.' The verb 'search' and the resource 'pages' with the qualifier 'by name' make the purpose specific and distinguish it from siblings like 'get_account_pages' or 'search_ads_archive'.
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 by explaining optional parameters (e.g., 'returns all pages if not provided'), but it does not explicitly state when to use this tool versus alternatives or mention any exclusions. No direct references to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_adB
Update an ad with new settings.
Args:
ad_id: Meta Ads ad ID
status: Update ad status (ACTIVE, PAUSED, etc.)
bid_amount: Bid amount in account currency (in cents for USD)
tracking_specs: Optional tracking specifications (e.g., for pixel events).
creative_id: ID of the creative to associate with this ad (changes the ad's image/content)
access_token: Meta API access token (optional - will use cached token if not provided)
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| status | No | ||
| bid_amount | No | ||
| tracking_specs | No | ||
| creative_id | No | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Update' implies mutation, the description doesn't specify permission requirements, whether changes are reversible, rate limits, error conditions, or what happens to existing ad settings not mentioned. For a mutation tool with 6 parameters and no annotation coverage, this is a significant gap in 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 efficiently structured with a clear purpose statement followed by well-organized parameter explanations. Every sentence earns its place, and the bullet-point style for parameters makes it scannable. No wasted words or redundant information is present.
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 this is a mutation tool with 6 parameters, no annotations, but with an output schema (which means return values are documented elsewhere), the description is moderately complete. It covers parameter semantics well but lacks behavioral context, usage guidelines, and differentiation from siblings. The presence of an output schema helps, but for a complex update operation, more contextual information would be beneficial.
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 description provides excellent parameter semantics despite 0% schema description coverage. It clarifies that 'ad_id' is a 'Meta Ads ad ID', 'bid_amount' is 'in account currency (in cents for USD)', 'tracking_specs' are 'Optional tracking specifications (e.g., for pixel events)', and 'creative_id' 'changes the ad's image/content'. This adds substantial meaning beyond the bare schema, though it doesn't cover all parameters equally (status explanation is minimal).
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 resource ('an ad with new settings'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'update_ad_creative' beyond the resource name, missing explicit distinction about what makes this ad update different from creative updates.
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 versus alternatives like 'update_ad_creative' or 'update_adset'. The description lacks context about prerequisites, dependencies, or scenarios where this specific ad update tool is appropriate versus other update operations in the system.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_creativeB
Update an existing ad creative with new content or settings.
Args:
creative_id: Meta Ads creative ID to update
access_token: Meta API access token (optional - will use cached token if not provided)
name: New creative name
message: New ad copy/text
headline: Single headline for simple ads (cannot be used with headlines)
headlines: New list of headlines for dynamic creative testing (cannot be used with headline)
description: Single description for simple ads (cannot be used with descriptions)
descriptions: New list of descriptions for dynamic creative testing (cannot be used with description)
dynamic_creative_spec: New dynamic creative optimization settings
call_to_action_type: New call to action button type
lead_gen_form_id: Lead generation form ID for lead generation campaigns. Required when using
lead generation CTAs like 'SIGN_UP', 'GET_OFFER', 'SUBSCRIBE', etc.
Returns:
JSON response with updated creative details
| Name | Required | Description | Default |
|---|---|---|---|
| creative_id | Yes | ||
| access_token | No | ||
| name | No | ||
| message | No | ||
| headline | No | ||
| headlines | No | ||
| description | No | ||
| descriptions | No | ||
| dynamic_creative_spec | No | ||
| call_to_action_type | No | ||
| lead_gen_form_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is an update operation (implying mutation) but doesn't mention permission requirements, whether changes are reversible, rate limits, error conditions, or what happens to unspecified fields. The 'Returns' section mentions JSON response but lacks detail on success/failure patterns. For a mutation tool with 11 parameters and zero annotation coverage, this is insufficient.
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 well-structured with clear sections (purpose, Args, Returns) and uses bullet-like formatting for parameters. Each parameter explanation is concise yet informative. The opening sentence clearly states the tool's purpose. However, the parameter section is quite long (11 items), which is necessary given the complexity but affects overall 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?
Given the tool's complexity (11 parameters, mutation operation, no annotations), the description does well on parameter semantics but lacks behavioral context. The presence of an output schema means the description doesn't need to detail return values, but it should address mutation-specific concerns like permissions, idempotency, and error handling. The parameter documentation is comprehensive, but behavioral transparency gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides extensive parameter documentation beyond the 0% schema description coverage. It explains creative_id is the 'Meta Ads creative ID to update', clarifies optionality of access_token, distinguishes between headline/headlines and description/descriptions with mutual exclusivity rules, explains lead_gen_form_id requirements for specific CTA types, and gives context for dynamic_creative_spec. This fully compensates for the schema's lack of 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 'Update an existing ad creative with new content or settings' - a specific verb (update) and resource (ad creative). It distinguishes from siblings like create_ad_creative (creation vs update) and update_ad/adset/campaign (different resource types). However, it doesn't explicitly contrast with get_ad_creatives or other read 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 description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing creative), when to choose update_ad_creative over create_ad_creative, or how it relates to other update operations like update_ad. The only implicit guidance is in the name itself - updating vs creating.
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 ad set with new settings including frequency caps and budgets.
Args:
adset_id: Meta Ads ad set ID
frequency_control_specs: List of frequency control specifications
(e.g. [{"event": "IMPRESSIONS", "interval_days": 7, "max_frequency": 3}])
bid_strategy: Bid strategy (e.g., 'LOWEST_COST_WITH_BID_CAP')
bid_amount: Bid amount in account currency (in cents for USD)
status: Update ad set status (ACTIVE, PAUSED, etc.)
targeting: Complete targeting specifications (will replace existing targeting)
(e.g. {"targeting_automation":{"advantage_audience":1}, "geo_locations": {"countries": ["US"]}})
optimization_goal: Conversion optimization goal (e.g., 'LINK_CLICKS', 'CONVERSIONS', 'APP_INSTALLS', etc.)
daily_budget: Daily budget in account currency (in cents) as a string
lifetime_budget: Lifetime budget in account currency (in cents) as a string
is_dynamic_creative: Enable/disable Dynamic Creative for this ad set.
access_token: Meta API access token (optional - will use cached token if not provided)
| Name | Required | Description | Default |
|---|---|---|---|
| adset_id | Yes | ||
| frequency_control_specs | No | ||
| bid_strategy | No | ||
| bid_amount | No | ||
| status | No | ||
| targeting | No | ||
| optimization_goal | No | ||
| daily_budget | No | ||
| lifetime_budget | No | ||
| is_dynamic_creative | No | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It states this is an update operation which implies mutation, but doesn't disclose behavioral aspects like: whether changes are reversible, what permissions are required, rate limits, whether partial updates are allowed (vs full replacement), or how the targeting parameter 'will replace existing targeting' affects the operation. The description provides some behavioral hints but misses critical mutation 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 appropriately front-loaded with the core purpose, but the parameter documentation section is lengthy (though necessary given schema coverage). While each parameter explanation earns its place, the overall structure could be more concise by grouping related parameters or using bullet points. It's functional but not optimally streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, mutation operation, no annotations) and the existence of an output schema, the description does substantial work. The parameter documentation is comprehensive, and the output schema will handle return values. However, for a mutation tool with no annotations, it could better address behavioral aspects like error conditions, idempotency, or side effects.
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 description provides extensive parameter documentation with 11 parameters, adding significant semantic value beyond the schema which has 0% description coverage. Each parameter gets clear explanations, examples, and important details like currency units (cents), replacement behavior for targeting, and optional token usage. This fully compensates for the schema's lack of 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 the verb 'update' and resource 'ad set' with specific settings mentioned (frequency caps and budgets). It distinguishes from siblings like 'create_adset' by focusing on updates, but doesn't explicitly contrast with other update tools like 'update_ad' or 'update_campaign' beyond the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'update_ad' or 'update_campaign'. The description mentions what parameters can be updated but provides no context about prerequisites, dependencies, or when this specific update operation is appropriate versus other update operations 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.
update_campaignA
Update an existing campaign in a Meta Ads account.
Args:
campaign_id: Meta Ads campaign ID
access_token: Meta API access token (optional - will use cached token if not provided)
name: New campaign name
status: New campaign status (e.g., 'ACTIVE', 'PAUSED')
special_ad_categories: List of special ad categories if applicable
daily_budget: New daily budget in account currency (in cents) as a string.
Set to empty string "" to remove the daily budget.
lifetime_budget: New lifetime budget in account currency (in cents) as a string.
Set to empty string "" to remove the lifetime budget.
bid_strategy: New bid strategy
bid_cap: New bid cap in account currency (in cents) as a string
spend_cap: New spending limit for the campaign in account currency (in cents) as a string
campaign_budget_optimization: Enable/disable campaign budget optimization
objective: New campaign objective (Note: May not always be updatable)
use_adset_level_budgets: If True, removes campaign-level budgets to switch to ad set level budgets
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| access_token | No | ||
| name | No | ||
| status | No | ||
| special_ad_categories | No | ||
| daily_budget | No | ||
| lifetime_budget | No | ||
| bid_strategy | No | ||
| bid_cap | No | ||
| spend_cap | No | ||
| campaign_budget_optimization | No | ||
| objective | No | ||
| use_adset_level_budgets | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It implies mutation ('update') but doesn't disclose behavioral traits like required permissions, rate limits, idempotency, or error handling. It does add some context about optional parameters and budget removal, but lacks comprehensive behavioral disclosure for a complex 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 appropriately sized for 13 parameters, using a clear 'Args:' section with bullet-like formatting. It's front-loaded with the core purpose, though some explanations could be more concise (e.g., repetitive 'in account currency' phrases). Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 parameters, mutation operation, no annotations) and the presence of an output schema, the description is reasonably complete. It thoroughly documents parameters and hints at behavioral aspects (e.g., optional token caching, update constraints). However, it lacks explicit guidance on usage context and full behavioral transparency.
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 description adds significant semantic value beyond the input schema, which has 0% description coverage. It explains each parameter's purpose, format (e.g., 'in cents as a string'), special cases (e.g., empty string to remove budgets), and constraints (e.g., 'may not always be updatable' for objective). This fully compensates for the schema's lack of 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 the tool's purpose: 'Update an existing campaign in a Meta Ads account.' It specifies the verb ('update') and resource ('campaign'), but doesn't explicitly differentiate it from sibling tools like 'update_ad' or 'update_adset', which would require mentioning it's specifically for campaigns rather than ads or adsets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, constraints, or compare it to sibling tools like 'create_campaign' or 'update_adset'. The agent must infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_ad_imageA
Upload an image to use in Meta Ads creatives.
Args:
account_id: Meta Ads account ID (format: act_XXXXXXXXX)
access_token: Meta API access token (optional - will use cached token if not provided)
file: Data URL or raw base64 string of the image (e.g., "data:image/png;base64,iVBORw0KG...")
image_url: Direct URL to an image to fetch and upload
name: Optional name for the image (default: filename)
Returns:
JSON response with image details including hash for creative creation
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| access_token | No | ||
| file | No | ||
| image_url | No | ||
| name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 input formats (data URL/base64/file URL), optional token behavior with caching fallback, and the return format including the hash for creative creation. This goes beyond basic visibility, though it doesn't mention rate limits or conflicts when both file and image_url are provided.
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 concise and well-structured, using a clear Args/Returns format. The example data URL is valuable without being verbose. 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 description covers all parameters and the return's purpose, and an output schema exists. However, it doesn't specify the relationship between 'file' and 'image_url' (whether at least one is required, or what happens if both are provided). This is a notable gap for a tool whose sole purpose is uploading an image.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does so thoroughly: account_id format (act_XXXXXXXXX), access_token caching behavior, file data URL/base64 formats with example, image_url semantics, and name default. Each parameter gets meaningful guidance beyond the schema's bare titles.
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 (upload), resource (image), and purpose (use in Meta Ads creatives), distinguishing it from read-oriented sibling tools like get_ad_image and get_ad_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 usage by noting the return includes 'hash for creative creation,' situating it in the creative-creation workflow. However, it does not explicitly name alternatives or state when not to use it, so usage guidance is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
33 tool updates
v1.0.0- First observed
create_ad - First observed
create_ad_creative - First observed
create_adset - First observed
create_budget_schedule - First observed
create_campaign - First observed
estimate_audience_size - First observed
fetch - First observed
get_account_info - First observed
get_account_pages - First observed
get_ad_accounts - First observed
get_ad_creatives - First observed
get_ad_details - First observed
get_ad_image - First observed
get_ads - First observed
get_adset_details - First observed
get_adsets - First observed
get_campaign_details - First observed
get_campaigns - First observed
get_insights - First observed
get_interest_suggestions - First observed
get_login_link - First observed
search - First observed
search_ads_archive - First observed
search_behaviors - First observed
search_demographics - First observed
search_geo_locations - First observed
search_interests - First observed
search_pages_by_name - First observed
update_ad - First observed
update_ad_creative - First observed
update_adset - First observed
update_campaign - First observed
upload_ad_image
TDQS
Scored across 33 tools
Most tools have distinct purposes with clear boundaries between resource types (ads, ad sets, campaigns, creatives) and actions (create, get, update, search). However, some potential confusion exists between 'get_ad_details' and 'get_ad_creatives', and between 'search' and 'search_ads_archive', as their descriptions overlap slightly in scope.
Tool names follow a highly consistent verb_noun pattern throughout, with clear conventions: create_*, get_*, update_*, search_*, estimate_*, fetch, upload_*. All tools use snake_case consistently, making the naming scheme predictable and easy to understand.
With 33 tools, this is a large set that feels heavy for typical MCP usage. While Meta Ads is a complex domain, many tools could potentially be consolidated (e.g., multiple get_* tools for different resource types). The count borders on overwhelming for agents to navigate efficiently.
The tool surface provides comprehensive coverage of the Meta Ads domain, including full CRUD operations for all major resources (campaigns, ad sets, ads, creatives), targeting research tools, insights retrieval, authentication helpers, and image management. No obvious gaps exist for core advertising workflows.
Related MCP Connectors
Facebook / Meta Ads automation with AI: analyze performance, test creatives, optimize spend.
AI marketing agent for paid social: Meta ads campaigns, ad creative generation, lead delivery.
- mcpOAuthio.autoady.www
Run Meta ads from your AI assistant: briefings, drop diagnosis, winners, budgets, receipts.
60+ Meta Ads tools for AI agents: audits, campaign management, audiences and CAPI tracking.