Skip to main content
Glama

Server Details

Adsap is a Meta and Google Ads automation platform, with a web app and an AI copilot for Claude, ChatGPT and Perplexity.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

Score is being calculated.

Available Tools

93 tools
adsap_analyze_websiteAnalyze WebsiteAInspect

Fetch and analyze a website URL to extract business context, tracking scripts (Meta Pixel, GTM, GA4, TikTok), product/pricing signals, value proposition, social proof, and landing page quality. Results are stored for cross-session persistence. Use as the first step in onboarding to understand a user's business.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesWebsite URL to analyze. Must include protocol (https://).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It discloses that the tool fetches an external URL, analyzes it, and stores results for cross-session persistence. This is meaningful behavioral context beyond the schema, though it does not address potential failures, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words. The description front-loads the core action and outputs, then adds storage behavior and usage guidance. Every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what it does, what it extracts, storage behavior, and when to use it. With no output schema, it does not detail the exact return format, but the listed extraction categories and persistence note give an agent enough context to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'url' parameter is already described with the protocol requirement. The tool description adds no additional parameter meaning beyond referring to a website URL, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-plus-resource structure: 'Fetch and analyze a website URL,' and enumerates concrete outputs (tracking scripts, product/pricing signals, value proposition, social proof, landing page quality). This clearly distinguishes it from the many creation and retrieval sibling tools.

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

Usage Guidelines4/5

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

The description gives explicit context: 'Use as the first step in onboarding to understand a user's business.' It does not state alternative tools or when not to use it, but no sibling tool appears to compete with this website analysis purpose, so the guidance is clear enough.

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

adsap_create_adCreate AdAInspect

Create a Meta ad (image/video) in an ad set. Defaults to PAUSED. ALWAYS call with dry_run: true first: it validates and renders a launch review card where the user confirms, creates (paused) and activates in-card — after it renders, reply with ONE short sentence and stop; do not call the real create from chat unless the user explicitly asks in a new message and the card's activity log shows nothing was created there. For App promotion (OUTCOME_APP_PROMOTION) ad sets: set link_url to the app's store URL (same as the ad set's promoted_object.object_store_url) and call_to_action to INSTALL_MOBILE_APP (or USE_MOBILE_APP/DOWNLOAD); the promoted app binding comes from the ad set.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
statusNo
dry_runNoValidate only, no creation
ad_formatYes
ad_set_idYes
ad_account_idYes
creative_specYes
idempotency_keyNo

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the burden of behavioral disclosure. It reveals that the tool defaults to PAUSED, that dry_run renders a confirmation card, that real creation is deferred until explicit user request, and that app promotion requires specific link_url and call_to_action settings. It also explains the promoted app binding comes from the ad set. This is highly transparent for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient. It front-loads the primary action, then delivers critical workflow instructions and app promotion specifics. Each sentence serves a purpose, though the second sentence is long and packs multiple clauses. It could be more structured, but there is no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (nested creative_spec, many required fields, low schema coverage), the description is not fully complete. It covers the most critical aspects—the dry_run workflow and app promotion requirements—but does not explain the full creative_spec structure or how to source required IDs like ad_set_id or page_id. An agent could still be uncertain about constructing a valid request beyond the highlighted patterns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 13%, so the description must compensate. It adds meaning for dry_run (validate and render card), link_url and call_to_action (for app promotion), and status (defaults to PAUSED). However, it does not explain many other parameters, particularly within creative_spec (e.g., page_id, headlines, primary_texts) or how to obtain required IDs. The description adds value for critical parameters but leaves many undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Create a Meta ad (image/video) in an ad set.' This distinguishes it from siblings like adsap_create_ad_from_ig_post (which creates from an IG post) and adsap_create_ad_sets (which creates ad sets). It also notes the default status (PAUSED), adding specificity. The purpose is unambiguous and differentiated.

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

Usage Guidelines5/5

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

The description gives explicit, actionable usage guidance: 'ALWAYS call with dry_run: true first' and details the entire workflow—validates, renders a review card, user confirms, creates paused, activates in-card. It also states when not to call the real create ('do not call the real create from chat unless the user explicitly asks in a new message'). This is exemplary usage direction, going beyond simple 'when to use' to prescribe the exact invocation pattern.

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

adsap_create_ad_from_ig_postCreate Ad from Instagram Post (use existing post)AInspect

Turn an existing Instagram post, video, or reel into an ad inside an EXISTING ad set — Meta Ads Manager's "Use existing post". The ad inherits the ad set's budget, targeting, and schedule (no new budget is created). It is ALWAYS created PAUSED and never spends until you activate it (adsap_set_entity_status with action: "activate"). This does NOT create a campaign or ad set — pick an existing ad set with adsap_list_ad_sets first, get the post id from adsap_list_ig_media, and the Instagram account id from adsap_list_meta_assets. dry_run defaults to TRUE: call once to preview the plan, then again with dry_run: false to create. Images, videos, and reels all work.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_nameNoOptional name for the ad. Defaults to "IG post <ig_media_id>".
dry_runNoTRUE (default) = preview the plan (what ad + creative WOULD be created) without creating anything. Set false to actually create the ad. The ad is ALWAYS created PAUSED — it never spends until you activate it.
page_idNoOptional Facebook Page id override. Normally resolved automatically from the Instagram account; only set this if auto-resolution can't find the linked page.
ad_set_idYesThe EXISTING ad set to add the ad to. The ad inherits this ad set's budget, targeting, and schedule — no new budget is set. Get it from adsap_list_ad_sets.
ig_media_idYesThe Instagram post / video / reel to promote. Get it from adsap_list_ig_media (the `id` field).
ad_account_idYesact_<digits>. The ad account that owns the ad set and the Instagram account.
ig_account_idYesThe Instagram account that owns the post. Used to resolve the ad's Facebook Page + Instagram identity. Get it from adsap_list_meta_assets (asset_type: "instagram_accounts").
call_to_action_typeNoOptional call-to-action button enum (e.g. SHOP_NOW, LEARN_MORE, SIGN_UP). Omit to promote the post as-is with no added button.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries full responsibility and does so thoroughly. It discloses that ads are always created paused, never spend until activated, inherit budget/targeting/schedule, do not create new entities, and that dry_run defaults to true with a clear preview-then-create flow. This is far beyond minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured: the core operation is front-loaded, followed by inheritance behavior, paused-by-default safety, prerequisites, dry_run sequencing, and supported media types. Every sentence earns its place and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description covers prerequisites, side effects, activation path, dry-run behavior, and exclusions. An agent has enough information to successfully select and call this tool, including how to prepare required parameters and avoid accidentally spending budget.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers 100% of parameters, so the baseline is 3. The description adds meaningful workflow context by naming the exact list tools to resolve ad_set_id, ig_media_id, and ig_account_id, and explains the inheritance behavior that affects how parameters should be interpreted. This pushes it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Turn an existing Instagram post, video, or reel into an ad') and names the exact resource ('inside an EXISTING ad set'), clearly distinguishing it from adsap_create_ad. It also explicitly states what the tool does not do: it does not create a campaign or ad set.

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

Usage Guidelines5/5

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

The description gives an explicit workflow: pick an existing ad set with adsap_list_ad_sets, get the post id from adsap_list_ig_media, and get the Instagram account id from adsap_list_meta_assets. It also clarifies when to use dry_run twice and references adsap_set_entity_status for activation, leaving little to inference.

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

adsap_create_ad_setsCreate Ad Sets (batch)AInspect

Create one or more Meta ad sets under an existing campaign. Supports batch creation (max 20). Ad sets are created PAUSED by default. Leads campaigns take three destinations: ON_AD (Instant Forms), WEBSITE, and WEBSITE_AND_LEAD_FORM (Website and Instant Forms: OFFSITE_CONVERSIONS + pixel, ads then carry a link and a lead form). Not supported yet (say so and point the user to Meta Ads Manager, never substitute another destination): messaging ad sets (Messenger, WhatsApp, Instagram Direct), calls, event responses, reminders, shop destinations. ALWAYS call with dry_run: true first: it validates and renders a launch review card where the user confirms, creates (paused) and activates in-card — after it renders, reply with ONE short sentence and stop; do not call the real create from chat unless the user explicitly asks in a new message and the card's activity log shows nothing was created there. Prerequisites: call list_meta_assets for pages/pixels/Instagram accounts, list_pixel_events for conversion events. For App promotion (OUTCOME_APP_PROMOTION) campaigns: each ad set requires promoted_object.application_id + object_store_url, optimization_goal APP_INSTALLS (or OFFSITE_CONVERSIONS with custom_event_type for app-event optimization), and the promoted app must be in Live mode and advertisable by the ad account; OS targeting (user_os) is derived automatically from the store URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_setsYesArray of ad set definitions. Max 20 per call.
dry_runNoWhen true, validates without creating. Default false.
campaign_idYesParent campaign ID. Call list_campaigns first if needed.
ad_account_idNoTarget ad account. Defaults to user's primary account.
idempotency_keyNoUnique key to prevent duplicate creation from retries.
campaign_objectiveNoParent campaign's objective. Pass it (e.g. from adsap_create_campaign's response) when the campaign was created recently and may not be cached yet. If omitted, resolved from cache; an unresolvable objective fails with guidance.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and delivers: ad sets are created PAUSED by default, dry_run renders a launch review card and disallows the real create from chat unless conditions are met, and unsupported destinations must be redirected to Meta Ads Manager. It also discloses App promotion constraints such as Live mode, advertisability, and auto-derived user_os.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but every sentence carries an actionable constraint: max 20, paused default, destination matrix, unsupported destinations, dry_run-first protocol, prereuisites, and App promotion rules. It is front-loaded with the core action and contains no filler or schema restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex batch-creation endpoint with no annotations and no output schema, the description covers all operational essentials: batch cap, default state, destination matrix, unsupported list, mandatory dry_run flow, prerequisites, and App promotion specifics. The only minor gap is an explicit description of the real-create return payload, though the card/activity-log workflow mitigates it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds workflow-level meaning beyond the schema: ALWAYS call with dry_run true first, the App-promotion promoted_object + optimization_goal requirements, and unsupported destination handling. It does not repeat the schema's already-complete field documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: create one or more Meta ad sets under an existing campaign, with a batch max of 20. This clearly distinguishes it from sibling tools like adsap_create_campaign and adsap_create_ad by anchoring on 'ad sets' and 'existing campaign'.

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

Usage Guidelines5/5

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

Offers explicit usage rules: prerequisites (list_meta_assets, list_pixel_events), a mandatory dry_run-first workflow with a precise stop-after-render instruction, and a clear list of unsupported destinations with the directive never to substitute. Also prescribes App-promotion-specific requirements.

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

adsap_create_campaignCreate CampaignAInspect

Create Meta campaign. Defaults to PAUSED — only set ACTIVE when explicitly requested. For Catalog or Collection ads, set advantage_catalog_ads: true + catalog_id (OUTCOME_SALES only): Meta binds the catalog at the CAMPAIGN level, so a plain sales campaign cannot host those formats and the ad create will fail later. The ad set needs no catalog fields, and the product set is chosen per ad. ALWAYS call with dry_run: true first: it validates and renders a launch review card where the user confirms, creates (paused) and activates in-card — after it renders, reply with ONE short sentence and stop. Do not call the real create from chat unless the user explicitly asks in a new message and the card's activity log shows nothing was created there.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
statusNoPAUSED
dry_runNoValidate only, no creation
objectiveYes
spend_capNoIn cents
stop_timeNoRequired with lifetime_budget
catalog_idNoMeta product catalog id to bind to the campaign. Required when advantage_catalog_ads is true, ignored otherwise. Get ids from adsap_list_catalogs. The product SET is chosen later per ad, not here.
start_timeNoRequired with lifetime_budget
buying_typeNoAUCTION
bid_strategyNoCampaign-level bid strategy. Only applied under CBO (campaign_budget_optimization: true) or when share_budget_with_ad_sets is true (budget sharing requires a campaign bid strategy — Meta error 4834005); ignored for plain ad-set-budget campaigns. Cap and ROAS values are set per ad set via adsap_create_ad_sets (bid_amount / roas_target), not at the campaign level. Defaults to LOWEST_COST_WITHOUT_CAP.
daily_budgetNoIn cents. Mutually exclusive with lifetime_budget.
ad_account_idYes
idempotency_keyNo
lifetime_budgetNoIn cents. Mutually exclusive with daily_budget.
promoted_objectNoOUTCOME_APP_PROMOTION + iOS apps ONLY: campaign-level app binding for iOS/SKAdNetwork campaigns (is_skadnetwork_attribution is set automatically). Meta treats any campaign with a campaign-level promoted_object as an iOS-14 SKAN campaign — Android apps are rejected there (2446632), so for Android pass the app on the ad set instead; Android values here are ignored. The app must be in Live mode and advertisable by the ad account.
advantage_catalog_adsNoEnable Advantage+ Catalog Ads (catalog-based advertising). OUTCOME_SALES only, and requires catalog_id. REQUIRED for any campaign that will host Catalog or Collection ads: Meta binds the catalog at the CAMPAIGN level, so a plain sales campaign cannot host them. Mirrors the web UI's Advantage+ Catalog Ads switch.
special_ad_categoriesNoMeta Special Ad Category. Required for ads about financial products and services (FINANCIAL_PRODUCTS_SERVICES; CREDIT is the retired name), employment, housing, social issues/elections/politics, or online gambling and gaming. Housing, employment and financial categories lock ad set targeting to 18-65+, all genders and a 15 mi / 25 km radius floor; the other two only confine ad set locations to special_ad_category_country. ONLINE_GAMBLING_AND_GAMING also needs Meta's gambling authorization on the ad account.
share_budget_with_ad_setsNoCampaign-level toggle for Meta's "Share some of your budget with other ad sets" (is_adset_budget_sharing_enabled). Only valid on ABO campaigns (no campaign-level budget) whose ad sets use DAILY budgets; rejected on CBO campaigns (Meta error 4834002). Worth considering for ABO campaigns with multiple ad sets. Defaults to false (off) when omitted.
special_ad_category_countryNoISO country codes, one or several. Required when special_ad_categories is set; ad sets under the campaign must target inside this list.
campaign_budget_optimizationNoEnable CBO

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full disclosure burden, and it meets it admirably. It reveals the default PAUSED state, the dry-run validation and launch-review-card flow, the user-confirmation requirement, the catalog-binding behavior at the campaign level, and the conversational stop rule after the card renders. This is highly transparent about how the tool actually behaves and what side effects or UI steps to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then packs dense, non-obvious guidance into a compact block. Every sentence earns its place: the default status, the catalog-ads constraint, the dry-run card workflow, and the stop-and-wait rule. For a tool with 20 parameters and no annotations, this level of focused detail is appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity, the absence of annotations, and the lack of an output schema, the description covers the most decision-critical context: the interactive launch flow, the defaulting behavior, and the catalog requirement. It does not describe the exact shape or contents of the launch-review card or the real-create response, but the schema absorbs most parameter-level detail. A small but non-fatal gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 70%, so much parameter-level detail already exists. The description adds valuable cross-parameter semantics: the PAUSED default and ACTIVE exception, the requirement to pair advantage_catalog_ads with catalog_id for Catalog/Collection ads, the fact that the ad set needs no catalog fields while the product set is chosen at the ad level, and the dry_run-first workflow. This goes beyond what individual schema descriptions convey, though it does not comment on all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Create Meta campaign' — a specific verb, platform, and resource — making it immediately clear what the tool does. It also distinguishes itself from Google campaign siblings by saying 'Meta', and from adsap_create_ad and adsap_create_ad_sets by naming the campaign resource. The added context about defaulting to PAUSED reinforces the core behavior.

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

Usage Guidelines4/5

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

It gives explicit operational directives: ALWAYS call with dry_run: true first, rely on the rendered launch review card, and do not call the real create from chat unless the user explicitly asks in a new message and the card's activity log shows nothing was created. These are strong when-to-use and when-not-to-use instructions. However, it never names sibling tools like adsap_create_ad_sets or adsap_create_ad as the alternatives for creating ad sets or ads, so the versus-alternatives guidance is only implicit.

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

adsap_get_account_activitiesGet Account ActivitiesAInspect

Retrieve change log for a Meta ad account: budget changes, status toggles, ad creation/deletion, billing events, policy actions. Essential for correlating performance drops with specific modifications (e.g. CPA spiked after a budget increase). The filter scans the ENTIRE days_back window (paginated), then returns the newest limit matching events; summary.window_truncated=true means the account had more activity than could be scanned and the OLDEST part of the window may be incomplete. VOCABULARY: Meta's changelog uses legacy object names — responses translate them (campaign/ad_set/ad; raw Meta value kept in object_type_raw), but extra_data is passed through UNTRANSLATED, so inside extra_data 'campaign' means AD SET and 'adgroup' means AD (e.g. extra_data.campaign_id on a create_ad event is the ad's parent AD SET id, not a campaign id).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax events returned AFTER filtering, newest first. Default 100, max 500.
days_backNoDays of history. Default 7, max 30.
ad_account_idYesMust include act_ prefix.
event_type_filterNoFilter by event types, applied across the whole days_back window. Default: all.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the descrription carries the full burden and delivvers rich behavioral context: paginated scanning across the entire days_back window, newest-first return, the window_truncaed flag semantics including which end of the window may be incomplete, and the legacy-vocabulary translation behavior with raw values preserved in object_type_raw. It also warns that extra_data is passed through untranslated, with a concrete exammple.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but every sentence earns its place: purpose, use case, truncaion warning, then a clearly delimited VOCABULARY section. The length is justifed by the genuinely dangerous interretation trap it previents, and the critical warnings are grouped in an easily scannable structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the descrription covers the key operational facts an agent needs: what events are returned, the ordering, the truncaion flag semantics, and the vocabulary mapping that could otherwise cause silent misanalysis. The absence of a full response-shape listing is acceptable given the descrription already surfaces every high-risk behavioral detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, setting a baseline of 3. The descrription adds genuine value beyond the schema by explaining how limit and days_back interact (scans the whole window, then returns the newest `limit` matches) and by clarifying the meaning of a returned field (extra_data.campaign_id on a create_ad event). This goes beyond the schema's per-parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Retrieve) plus a precise resource (change log for a Meta ad account) and enumerates the event categories (budget changes, status toggles, ad creation/deletion, billing, policy). The 'Meta' qualifier cleanly distingushes it from the sibling adsap_google_get_account_activities, and 'change log' distingushes it from get_account_summary/health.

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

Usage Guidelines4/5

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

Provides a concrete, actionable use case: correlating performance drops with specific modifications (CPA spiked after a budge increase). This tells an agent when the tool is the right choice, though it doesn't explicitly name alternatives or state when not to use it.

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

adsap_get_account_healthGet Account HealthAInspect

Comprehensive health check on a Meta ad account. Returns scorecard covering: account status, payment health, Business Manager verification, Pixel health, connected assets, ad volume limits, attribution consistency. Foundation for audits and readiness checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesMust include act_ prefix.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It does state that the tool 'returns a scorecard' and lists the health dimensions, implying a read-only diagnostic. However, it does not explicitly say it makes no changes, mention required permissions, or describe account-access expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core purpose, and uses a scannable list of health dimensions. It is efficient without being sparse, although the enumerated list is slightly long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter health check with no output schema, the description gives enough context: what the tool returns, which areas it covers, and when it is useful. It could mention permissions or explicit read-only behavior, but the core invocation context is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the single ad_account_id parameter, including the act_ prefix requirement. The description adds no additional parameter semantics beyond restating that it concerns a Meta ad account.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: a comprehensive health check on a Meta ad account that returns a scorecard. It enumerates the covered areas (account status, payment health, Pixel health, etc.), which clearly differentiates it from sibling tools like get_account_summary or get_pixel_health.

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

Usage Guidelines4/5

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

The description gives clear use context by positioning the tool as a 'foundation for audits and readiness checks.' It does not explicitly list exclusions or alternatives, but the intended scenario is evident.

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

adsap_get_account_summaryGet Account SummaryAInspect

Structural snapshot of a Meta ad account: campaign counts by status/objective, ad set counts, active ad count, budget allocation, top spending campaigns (last 30d), disapproved ads. Provides the big picture before detailed audit.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesMust include act_ prefix.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It frames the operation as a 'structural snapshot' and lists read-only aggregate contents, which reasonably implies no mutation, and it adds a 30-day time window. However, it does not explicitly state read-only behavior, permission requirements, or any other operational characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first enumerates the summary contents in a compact list, and the second states the intended use case. It avoids repeating schema information and is front-loaded with the most useful detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no annotations and no output schema, the description covers what the agent can expect to receive and when to use it. The exact return format is not described, but the content list and the schema's parameter documentation are sufficient for tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the only parameter, ad_account_id, is already documented with the requirement to include the 'act_' prefix. The description adds no additional parameter-level meaning, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (Meta ad account) and specifies the exact contents of the summary: campaign counts by status/objective, ad set counts, active ad count, budget allocation, top spending campaigns, and disapproved ads. It is clear and specific, though it does not explicitly differentiate itself from sibling getters like adsap_get_account_health.

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

Usage Guidelines4/5

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

The description gives clear usage context: use this tool to get the 'big picture before detailed audit.' It implies the tool is for high-level orientation rather than deep analysis, but it does not name alternatives or state when not to use it.

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

adsap_get_ad_library_snapshotShow Ad Library AdAInspect

Show what an Ad Library ad ACTUALLY LOOKS LIKE (creative, copy, page name), in a SELF-CONTAINED card. Video ads PLAY in the card. Use this after adsap_search_ad_library whenever the user wants to SEE a competitor's ad rather than read its text: pass the ad's id from the search results. One ad per call, takes about 10 seconds. This is public ad-transparency data, not your own ads (for those use adsap_get_ad_preview). It renders the ad exactly as the Ad Library shows it, so it works only for ads that search returned in the first place.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYesThe Ad Library ad id to render, taken from an adsap_search_ad_library result's `id` field (also shown as 'Library ID' on the ad itself). Numeric.
ad_account_idYesYour ad account ID (act_xxx) — the same one used for the adsap_search_ad_library call. Anchors the workspace ownership check and the Meta budget.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the ~10 second latency, the one-ad-per-call constraint, the exact rendering behavior, and the precondition that it only works for ads the search already returned. It does not explicitly say 'read-only', but the verb 'Show' and the framing as public transparency data make this clear enough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is slightly longer than minimal but every sentence earns its place: it front-loads the core purpose, then covers video playback, usage timing, performance, sibling distinction, and a precondition. The all-caps emphasis is stylistic noise, but the structure is logical and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description tells the agent what the result looks like (card with creative, copy, page name; playable video), where the input id comes from, how long the call takes, the single-call constraint, and when to use an alternative. Nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers both parameters at 100% with detailed descriptions, so the baseline is 3. The description reinforces the workflow ('pass the ad's id from the search results') and mentions 'One ad per call', but these are largely redundant with the schema or are usage constraints rather than new parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Show what an Ad Library ad ACTUALLY LOOKS LIKE') and names the concrete deliverables: creative, copy, page name, and a self-contained card with playable video. It also clearly distinguishes itself from siblings, notably adsap_search_ad_library (read text vs. see) and adsap_get_ad_preview (competitor vs. own ads).

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

Usage Guidelines5/5

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

Explicit usage guidance is present: 'Use this after adsap_search_ad_library whenever the user wants to SEE a competitor's ad rather than read its text' and 'for those use adsap_get_ad_preview' for own ads. It also states the prerequisite (ad id from search results) and the single-ad-per-call limit, leaving no ambiguity about when to invoke it.

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

adsap_get_ad_previewGet Ad PreviewAInspect

Render a pixel-accurate visual preview of an existing Meta ad (real Meta render; video ads also get an animated clip in the interactive card). The card is SELF-CONTAINED: Facebook Feed + Instagram Reels tabs and an 'All placements on Meta' button are built in. AFTER THE CARD RENDERS, reply with ONE short confirmation sentence and stop. NEVER mention, list, or offer any other placement (no 'Desktop Feed', 'Stories', 'right column', etc.) and never describe the card's tabs or buttons — the user can see them. Only if the user themselves asks about another placement: answer that the card's 'All placements on Meta' button opens every placement in Ads Manager, and only pass a non-default ad_format when the user explicitly names one.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYesThe ID of the existing ad to render a preview for.
ad_formatNoPlacement to render. Use MOBILE_FEED_STANDARD (default) or INSTAGRAM_REELS — the two the interactive card presents. Other values exist only for when the user explicitly names that placement; otherwise direct them to the card's 'All placements on Meta' button.MOBILE_FEED_STANDARD
ad_account_idYesAd account ID (act_xxx). Required — scopes the request to the workspace that owns this ad account.
include_video_sourceNoAlso resolve the ad's raw video file URL (2 extra Meta reads, page-token lane). Default false — the bare file is NOT the preview experience (no ad chrome, placement-customized assets differ); kept for data/debug use. The upcoming animated placement preview replaces it (scope doc §8b).

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full disclosure burden and delivers: it reveals the output form (interactive card with Facebook Feed + Instagram Reels tabs), the animated clip behavior for video ads, and the expected agent behavior after rendering. The schema complements this by disclosing that include_video_source costs '2 extra Meta reads'. No annotation contradiction exists since no annotations are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core function, then a compact sequence of behavioral rules. Every sentence earns its place given the need to encode post-call agent behavior, though it is denser than strictly necessary and slightly repetitive about the 'All placements on Meta' button.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description covers the output experience, interaction rules, parameter selection conditions, and side effects. An agent has everything needed to invoke it correctly and behave appropriately before and after rendering.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema entries are unusually rich — ad_format explains which enum values the card presents and when to deviate, include_video_source discloses cost and intent, ad_account_id explains the act_xxx scoping. The main description adds only the reinforcing rule about non-default ad_format, which largely duplicates the schema. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb ('Render') and resource ('an existing Meta ad'), and characterizes the output precisely ('pixel-accurate visual preview', 'real Meta render'). It distinguishes itself from related siblings like adsap_get_preview_clip by emphasizing the real Meta render and the self-contained interactive card rather than a bare clip.

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

Usage Guidelines5/5

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

Exceptionally prescriptive: it specifies the exact post-call behavior ('AFTER THE CARD RENDERS, reply with ONE short confirmation sentence and stop'), explicit prohibitions ('NEVER mention, list, or offer any other placement... never describe the card's tabs or buttons'), and a conditional rule for ad_format ('only pass a non-default ad_format when the user explicitly names one'). It also provides an alternative path — directing the user to the card's 'All placements on Meta' button — rather than enumerating placements.

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

adsap_get_ad_review_statusGet Ad Review StatusAInspect

Check review and policy status of all active (optionally paused) ads in an account. Returns aggregate counts by review status and details for problematic ads only (disapproved, with issues, pending). Useful in audits to surface policy violations and delivery blockers.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesMust include act_ prefix.
include_pausedNoAlso check paused ads. Default false.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does meaningful work: it discloses the scope (all active, optionally paused), the aggregation behavior (counts by review status), and the filtering behavior (details only for disapproved/with issues/pending). It does not cover error behavior or exact payload structure, but the core operational behavior is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler: scope, output shape, and use case. The most important decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given only two simple parameters and no output schema, the description supplies the essential context that is missing from structured fields: output style, filtering behavior, and audit use case. It leaves minor gaps such as exact count field names and pagination, but it is sufficient for a competent agent to select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds a little meaning by mapping include_paused to 'optionally paused' and ad_account_id to account scoping, but it does not materially extend the parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific operation (check review and policy status), a specific resource (ads in an account), and the exact output scope (aggregate counts plus details for problematic ads only). This clearly differentiates it from siblings like adsap_get_ad_status, which presumably covers general ad status rather than review/policy status.

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

Usage Guidelines4/5

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

States a concrete use case: 'Useful in audits to surface policy violations and delivery blockers.' It does not name sibling alternatives or exclusions explicitly, but the review/policy focus and audit purpose provide clear context for when to call it.

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

adsap_get_ad_sheet_schemaGet Ad Sheet SchemaAInspect

Retrieve column schema, constraints, and dependencies for an ad sheet — use it to read or explain a sheet's structure. Sheets are read-only over MCP; rows are created and edited in the ADSAP web app.

ParametersJSON Schema
NameRequiredDescriptionDefault
sheet_idYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It discloses an important behavioral trait: 'Sheets are read-only over MCP,' preventing inappropriate write attempts. It also states what will be returned (column schema, constraints, dependencies), though it does not detail output format or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core purpose, and contains no filler or redundant restatement of the tool name. Every clause adds useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only schema getter with no output schema, the description covers the main essentials: what it retrieves, when to use it, and its read-only nature. It omits how to discover sheet_id and the exact return structure, but these are minor gaps for a tool of this simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented sheet_id parameter. It only refers to 'an ad sheet,' adding no guidance on the expected format of sheet_id or how to obtain it (e.g., via list_ad_sheets). The parameter name is self-explanatory to some degree, but the description does not add meaningful semantic value beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action and resource: 'Retrieve column schema, constraints, and dependencies for an ad sheet.' It also clarifies the purpose as reading or explaining a sheet's structure, which clearly distinguishes it from mutation-oriented siblings like update_entity or create_ad.

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

Usage Guidelines4/5

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

The description explicitly says when to use it: 'use it to read or explain a sheet's structure.' It also sets a boundary by noting that 'rows are created and edited in the ADSAP web app,' indicating this tool is not for editing. It does not name a specific sibling alternative like list_ad_sheets for finding sheet_id, but the usage context is clear.

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

adsap_get_ad_statusGet Ad StatusAInspect

Check the current delivery, review, and effective status of a single Meta ad. Returns live data directly from Meta (no cache). Includes parent ad set and campaign statuses, review feedback if disapproved, any active issues, and a human-readable delivery summary. Use this to monitor ads after creation or diagnose delivery problems.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYes
ad_account_idYesAd account ID (act_xxx). Required — scopes the request to the workspace that owns this ad account.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that data is live and uncached, what categories of information are included (parent statuses, review feedback, issues, delivery summary), and that feedback is conditional on disapproval. It doesn't cover auth or error behavior, but for a read-only status check this is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first states the core purpose, the second details return content and freshness, the third gives the use case. The description is front-loaded and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the return value at a useful level: parent ad set and campaign statuses, review feedback, active issues, and a human-readable summary. It could be more precise about exact result fields or error cases, but for a simple two-parameter read tool it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: ad_account_id is documented but ad_id is not. The description doesn't explain how to obtain or format ad_id, nor does it add meaning beyond the parameter name. The phrase 'single Meta ad' names the resource but provides no additional parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Check'), resource ('a single Meta ad'), and the exact dimensions of status covered (delivery, review, effective). It clearly separates this from sibling tools like get_ad_review_status by emphasizing the broader status scope plus parent statuses and issues.

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

Usage Guidelines4/5

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

Explicitly states when to use the tool: 'monitor ads after creation or diagnose delivery problems.' It does not name alternatives or exclusions, but the use context is clear enough for an agent to select it over most siblings.

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

adsap_get_catalog_data_sourcesGet Catalog Data SourcesAInspect

List all data sources connected to a Meta product catalog — product feeds, Batch API, partner integrations (Shopify/WooCommerce), smart pixel, website crawling — live from Meta. Matches the 'Data Sources' tab in Commerce Manager. Use to see how a catalog's products get ingested.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoPagination cursor from a previous response's meta.paging_after.
limitNoMax data sources to return. Default 25, max 100.
catalog_idYesMeta catalog ID (numeric). From adsap_list_catalogs (catalogs[].catalog_id).
ad_account_idYesAd account ID (act_xxx) that owns the catalog. Required — scopes the request and anchors the budget check.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description bears the transparency burden. It discloses the operation as a live read-only listing ('List all... live from Meta') and scopes what is included with concrete source categories. It could add a explicit note about pagination or response shape, but for a simple read endpoint the disclosure is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, all informative: primary purpose with examples, UI mapping, and use case. There is no repetition of the title or schema and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is strong for a tool with no output schema and no annotations: it tells the agent what is returned conceptually and why to call it, while the schema fully covers required parameters and pagination. It doesn't describe exact result fields, but that is a minor gap for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter already has a description and the tool description adds no parameter-level detail. Baseline 3 applies because the description doesn't need to compensate for schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a specific resource ('data sources connected to a Meta product catalog'), then enumerates the source types (product feeds, Batch API, Shopify/WooCommerce, smart pixel, website crawling). This makes it clearly distinct from sibling catalog tools like get_catalog_details or get_catalog_diagnostics without needing to inspect their schemas.

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

Usage Guidelines4/5

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

'Use to see how a catalog's products get ingested' and the Commerce Manager Data Sources tab reference give clear context for when to call it. It doesn't explicitly state when not to use it or name alternative tools, so it stops short of a 5.

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

adsap_get_catalog_detailsGet Catalog DetailsAInspect

Get a Meta product catalog's metadata — name, vertical, total product count, and owning business — live from Meta. Use as a first step before drilling into a catalog's products, diagnostics, or data sources.

ParametersJSON Schema
NameRequiredDescriptionDefault
catalog_idYesMeta catalog ID (numeric). From adsap_list_catalogs (catalogs[].catalog_id).
ad_account_idYesAd account ID (act_xxx) that owns the catalog. Required — scopes the request and anchors the budget check.

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that the data is fetched 'live from Meta' and enumerates the metadata fields, which is useful. However, it does not mention any side effects (though it is clearly read-only), authentication requirements beyond the ad account ID, potential error conditions, or rate limits. For a read operation this is adequate but not richly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences with zero wasted words. The core purpose and output fields are front-loaded in the first sentence, and the usage context follows in the second. It is concise and immediately actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple metadata-fetch tool with only two required parameters and full schema coverage, the description covers the essential context: what it returns, that it's live, and when to use it. It doesn't describe the exact return structure, but since no output schema exists and the tool is straightforward, this is a minor gap. Overall, it is complete enough for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already provides strong semantics: catalog_id specifies it's numeric and sourced from adsap_list_catalogs, and ad_account_id explains it's required, scopes the request, and anchors the budget check. The description adds no additional parameter detail beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and a clear resource ('Meta product catalog's metadata') with explicit fields ('name, vertical, total product count, and owning business'). It also differentiates from siblings by positioning itself as a first-step overview before drilling into products, diagnostics, or data sources, which is distinct from tools like adsap_get_catalog_data_sources or adsap_get_catalog_diagnostics.

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

Usage Guidelines4/5

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

The description explicitly says 'Use as a first step before drilling into a catalog's products, diagnostics, or data sources,' giving clear guidance on when to invoke it. It doesn't mention explicit exclusions or alternatives by name, but the context makes the intended usage unambiguous. A minor gap is not stating when NOT to use it, but the guidance is sufficient.

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

adsap_get_catalog_diagnosticsGet Catalog DiagnosticsAInspect

Get data-quality diagnostics for a Meta product catalog — errors and warnings that can block products from ads (broken images, missing required fields, policy violations) — live from Meta. An empty list means no issues detected. Use when products aren't showing in ads or the user asks about catalog health.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax diagnostics to return. Default 25, max 100.
catalog_idYesMeta catalog ID (numeric). From adsap_list_catalogs (catalogs[].catalog_id).
ad_account_idYesAd account ID (act_xxx) that owns the catalog. Required — scopes the request and anchors the budget check.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It adds useful behavioral details: data is fetched 'live from Meta' and an empty list means no issues detected. However, it does not discuss auth requirements, rate limits, or explicitly confirm read-only behavior (though implied by 'get'). This is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose with examples, empty-list semantics, and usage guidance. It is front-loaded with the core action and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only diagnostics tool, the description covers the essential context: what it does, when to use it, and how to interpret an empty result. It lacks output structure details, but the schema handles parameter limits and the tool is low-risk. With no annotations, it could be more thorough, but it is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters (limit default/max, catalog_id source from adsap_list_catalogs, ad_account_id scoping). The description adds no parameter-specific meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource combination: 'Get data-quality diagnostics for a Meta product catalog' with concrete examples (broken images, missing fields, policy violations). It is clearly distinct from sibling tools like get_catalog_details or get_product_details, which focus on data rather than diagnostics.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use guidance: 'Use when products aren't showing in ads or the user asks about catalog health.' This is clear context, but it does not mention alternatives or specify when not to use the tool, so it falls short of a 5.

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

adsap_get_creative_performanceGet Creative PerformanceAInspect

Ranked creative performance analysis with fatigue detection. Returns Hook Rate (3s plays/impressions), Hold Rate (15s/3s), ad relevance diagnostics, and fatigue classification (healthy/watch/fatigued) per ad. Fatigue based on frequency, CPA decay, Hook Rate decline.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax ads to return. Default 50, max 100.
sort_byNoSort order. Default: spend.
ad_account_idYesMust include act_ prefix.
include_pausedNoInclude paused ads. Default false.
date_range_daysNoAnalysis window in days. Default 30, max 90.
include_asset_breakdownNoFetch asset-level breakdown for dynamic creatives. Default false.

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full disclosure burden, and it delivers real value: exact metric definitions and the fatigue algorithm basis (frequency, CPA decay, Hook Rate decline). It omits explicit read-only status, pagination, and failure behavior, but for a 'get_' tool with this much output detail, the transparency is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with zero filler: core purpose is front-loaded, the second sentence enumerates return metrics with formulas, and the third explains fatigue logic. Every sentence earns its place and the structure is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description correctly shoulders the burden of defining return semantics — metric formulas, classification values, and the fatigue basis are all present. It lacks response shape and ranking-order details, but for a read-only analysis tool the coverage is solid.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters (ad_account_id, limit, sort_by, date_range_days, include_paused, include_asset_breakdown) are already documented by the schema. The description adds no parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource ('creative performance analysis') and a concrete verb ('Returns'), then defines a distinctive metric set with formulas (Hook Rate = 3s plays/impressions, Hold Rate = 15s/3s) and fatigue classification values. The unique output vocabulary (healthy/watch/fatigued, ad relevance diagnostics) differentiates this from any sibling without opening another schema.

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

Usage Guidelines3/5

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

The use case is implied by the unique metric names — an agent can infer this tool covers creative-level fatigue analysis. However, it never explicitly states when to use it over siblings like adsap_get_insights, adsap_get_insights_breakdown, or adsap_get_account_health, and no alternative or exclusion conditions are mentioned.

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

adsap_get_custom_audience_adsGet Custom Audience AdsAInspect

List the ads that use/target a given custom audience (live from Meta) — each with its ad set and campaign id. Use BEFORE deleting an audience (deleting auto-pauses the ad sets that use it — an empty list means it's safe), or to answer 'where is this audience used?'. Group results by adset_id for the ad-set view. Get the custom_audience_id from adsap_list_custom_audiences.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoPagination cursor from a previous response's meta.paging_after, to fetch the next page.
limitNoMax ads to return per page. Default 25, max 100.
ad_account_idYesAd account ID (act_xxx) the audience belongs to. Required — scopes the request and anchors the Meta budget check.
custom_audience_idYesCustom audience ID (numeric). Get it from adsap_list_custom_audiences.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses that the data is live from Meta, that the result is only safe if empty before deletion, and notes that deleting an audience auto-pauses dependent ad sets. It could go further on rate limits or explicit non-mutation guarantees, but the 'List' verb and deletion context make the read-only nature clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences carry purpose, output shape, use cases, a safety implication, and a grouping tip. There is no filler, and the primary purpose is front-loaded before the usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description explains the return fields, the safety condition, and where to get the required ID. Pagination behavior is left to the schema, which documents it well. A brief note on the overall response format would push this to a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description points to adsap_list_custom_audiences as the source for custom_audience_id, but the schema already says this. It adds no substantial parameter-level meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List the ads that use/target a given custom audience' and specifies the key output fields (ad set and campaign id). It clearly distinguishes this from the many sibling list/get tools by tying the result to a custom audience and adding 'live from Meta.'

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

Usage Guidelines4/5

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

The description gives explicit use cases: use before deleting an audience, and to answer 'where is this audience used?'. It even clarifies that an empty list means deletion is safe. It does not explicitly name alternative tools to avoid, so it falls just short of a 5.

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

adsap_get_delivery_estimateGet Delivery EstimateAInspect

Get Meta's delivery estimate for a proposed audience and optimization configuration. Returns estimated daily reach, outcome ranges, audience size assessment (too_narrow/narrow/moderate/broad/very_broad). Use during onboarding to validate strategies or in audits to check targeting breadth.

ParametersJSON Schema
NameRequiredDescriptionDefault
daily_budgetNoDaily budget in cents. If provided, estimates are budget-constrained.
ad_account_idYesMust include act_ prefix.
targeting_specYesTargeting specification. Must include at least countries.
promoted_objectNoRequired for conversion goals. E.g. { pixel_id: '123', custom_event_type: 'Purchase' }
optimization_goalYesOptimization goal for the estimate.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It transparently describes the return values (estimated daily reach, outcome ranges, audience size assessment) and implies a non-mutating read operation through 'Get' and 'Returns.' It does not discuss auth or rate limits, but for an estimation tool these are less critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose, return values, use contexts. No fluff, no repetition, and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description adequately covers what the caller gets back. Combined with a fully documented input schema, the agent has enough to invoke the tool correctly without opening schemas further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, so the schema already documents all parameters. The description adds only a high-level summary ('proposed audience and optimization configuration') and does not clarify parameter nuances beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Get Meta's delivery estimate') and clearly differentiates it from sibling tools like adsap_get_insights or adsap_get_pixel_stats by stating it returns delivery estimates and audience size assessment. This makes the tool's purpose unmistakable.

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

Usage Guidelines4/5

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

It explicitly states when to use it: 'during onboarding to validate strategies or in audits to check targeting breadth.' It does not name alternatives or exclusions, but the context is clear enough for an agent to select it appropriately.

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

adsap_get_import_statusGet Creative Import StatusAInspect

Check progress of a Meta historical-asset import started with adsap_import_account_creatives: status, phase (images then videos), imported/skipped/failed counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesImport job id returned by adsap_import_account_creatives.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description must carry behavioral disclosure. It does more than restate the title: it reveals that the import has a phase ordering ('images then videos') and that counts are reported as imported/skipped/failed. This gives useful behavioral detail beyond the bare tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states the action, the originating async operation, and the returned status components. Every phrase contributes information, with no filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter status tool with no output schema, the description is complete: it names the required input provenance, the operation being monitored, and what the result contains. The agent has enough information to call it correctly immediately after an import is started.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully documents `job_id` as an import job id returned by `adsap_import_account_creatives` (100% coverage), so the description does not need to add much. It reinforces the connection to the import tool, but provides no new parameter-level semantics beyond the schema, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Check progress of a Meta historical-asset import') and names the exact resource and producing tool (`adsap_import_account_creatives`). It also itemizes what the status includes, which clearly distinguishes it from generic status/upload tools like `adsap_get_upload_status`.

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

Usage Guidelines4/5

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

The description clearly indicates this tool is for checking progress of imports started with `adsap_import_account_creatives`, giving the agent the relevant context. It does not mention explicit exclusions or alternative status tools, but for a single-purpose status check the usage context is clear enough.

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

adsap_get_insightsGet InsightsAInspect

Retrieve aggregated spend and performance metrics for accounts, campaigns, ad sets, or ads over a date range. Served from ADSAP's insights cache and automatically refreshed live from Meta when the cache is missing or stale (>6h) — no dashboard visit required. Results / cost_per_result are objective-aware at every level (result_type per row names what a result is; 'multiple' when children mix; reach and ad recall fetched live). Parent filters campaign_ids (on adset/ad rows) and adset_ids (on ad rows) narrow the set server-side — sort, limit and summary then describe the filtered set; rows expose adset_id / campaign_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
date_toNoYYYY-MM-DD. Required if no date_preset.
metricsNoAny of: spend, impressions, clicks, link_clicks, outbound_clicks, conversions, purchase_conversions, lead_conversions, add_to_cart_conversions, conversion_value, purchase_value, video_views (=75% completion), video_thruplay, video_p25, video_p50, video_p75, video_p95, video_p100, lpv (landing page views), post_engagement, video_3s (3-sec plays), contact, checkout, registration, app_install, app_activation, subscribe, start_trial, view_content, add_payment_info, submit_application, add_to_wishlist, search, schedule, donate, find_location, customize_product, app_purchase, app_add_to_cart, app_initiate_checkout, app_add_payment_info, app_complete_registration, app_content_view, app_search, app_add_to_wishlist, app_level_achieved, app_achievement_unlocked, app_tutorial_completion, app_spent_credits, app_rate, subscribe_value (conversion value), start_trial_value (conversion value), ctr (link CTR), ctr_all, cpc (cost/link click), cpc_all, cpm, cost_per_conversion, purchase_roas, aov, conversion_rate, hook_rate, hold_rate, lpv_rate, cost_per_lpv, cost_per_lead, cost_per_atc, cost_per_thruplay, cost_per_post_engagement, cost_per_purchase, cost_per_subscribe, cost_per_start_trial, cost_per_view_content, cost_per_add_payment_info, cost_per_submit_application, cost_per_add_to_wishlist, cost_per_search, cost_per_schedule, cost_per_donate, cost_per_find_location, cost_per_customize_product, outbound_ctr, quality_ranking (ad level only, latest text value), engagement_rate_ranking (ad level only, latest text value), conversion_rate_ranking (ad level only, latest text value), results (objective-aware count at every level; the type is in result_type per row ('multiple' when children mix, then results is null and results_breakdown lists each type); reach / ad recall are fetched live per range), cost_per_result (spend/results (reach: per 1,000 people reached, Meta convention)). Also accepts custom-conversion refs: cc_<id> (count), cc_<id>_value (conversion value), cost_per_cc_<id> (spend/count), where <id> is the numeric custom conversion id from adsap_list_custom_conversions. Defaults to spend, impressions, link_clicks, ctr, cpc, cpm, results, cost_per_result, purchase_roas.
sort_byNo
group_byNo'entity': one aggregated row per campaign/ad set/ad across the whole date range (ratios correctly weighted from summed raws) — use for ranked tables. Omit for per-entity-per-day rows. Not valid with entity_type='account' (account is already a rollup and returns per-day rows).
sort_dirNo
adset_idsNoParent filter: keep only the ads in these ad sets (entity_type ad; to pick ad sets themselves use entity_ids). Composes with entity_ids and campaign_ids. Max 50.
date_fromNoYYYY-MM-DD. Required if no date_preset.
cache_modeNocache_only (never hit Meta) | cache_then_refresh (default — auto-refresh from Meta when cache is missing or stale) | force_refresh (always refresh from Meta first)
entity_idsNoFilter to specific IDs. Max 50.
date_presetNoRequired if no date_from/date_to
entity_typeYes
campaign_idsNoParent filter: keep only the ad sets / ads whose ad set belongs to one of these campaigns (entity_type adset or ad; to pick campaigns themselves use entity_ids). Mapping comes from the cached insight rows themselves (campaign_id stored with every ad-set / ad row, so deleted or archived ad sets stay linked) with the ad-set metadata cache (hourly) as fallback. Composes with entity_ids and adset_ids. Max 50.
ad_account_idYes
live_ad_recallersNoDeprecated: awareness results (reach, estimated ad recallers) are fetched live automatically wherever a row's result_type is a people count. Kept for compatibility: when true, estimated_ad_recallers is also attached to every row of the page (adds one Meta call).

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so well. It discloses that data is served from a cache, automatically refreshed from Meta when stale (>6h), that no dashboard visit is required, that results and cost_per_result are objective-aware, that reach and ad recall are fetched live, and that parent filters narrow the set server-side before sort/limit/summary. These are meaningful behavioral traits beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured: main purpose, caching/refresh behavior, metric semantics, then filter/ordering behavior. Each sentence earns its place and is front-loaded with the core action. For a tool with 16 parameters, this length is justified and information-dense without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is thorough for a complex tool with no annotations and no output schema. It covers caching, live refresh, objective-aware results, result_type behavior, and filter composition. Gaps remain: output structure, pagination via cursor, and the per-day vs per-entity row behavior for account-level queries are not described, though some are in the schema. Overall, it is near-complete but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63%, so the baseline is around 3, but the description adds valuable parameter semantics: it explains how campaign_ids and adset_ids act as parent filters, that rows expose adset_id/campaign_id, and that sort/limit/summary describe the filtered set. It also clarifies result_type semantics for rows. However, it does not compensate for undocumented parameters like cursor, sort_by, or date_to formatting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Retrieve aggregated spend and performance metrics for accounts, campaigns, ad sets, or ads over a date range.' This is unambiguous about what the tool does. However, it does not explicitly differentiate from the closely named sibling adsap_get_insights_breakdown, so the distinction is implied rather than stated.

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

Usage Guidelines4/5

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

The first sentence provides clear context for when to use the tool: when aggregated metrics are needed for any of four entity types over a date range. It also explains behavior like caching and live refresh, but it does not explicitly mention alternatives such as adsap_get_insights_breakdown or state when not to use this tool. Clear context with no exclusions, but no explicit alternative routing.

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

adsap_get_insights_breakdownGet Insights BreakdownAInspect

Live Meta API call: get spend and performance metrics sliced by demographic or placement dimensions (age, gender, platform, country). Not cached.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 50, max 200
date_toNoYYYY-MM-DD. Required if no date_preset.
metricsNoAny of: spend, impressions, clicks, link_clicks, outbound_clicks, conversions, purchase_conversions, lead_conversions, add_to_cart_conversions, conversion_value, purchase_value, video_views (=75% completion), video_thruplay, video_p25, video_p50, video_p75, video_p95, video_p100, lpv (landing page views), post_engagement, video_3s (3-sec plays), contact, checkout, registration, app_install, app_activation, subscribe, start_trial, view_content, add_payment_info, submit_application, add_to_wishlist, search, schedule, donate, find_location, customize_product, app_purchase, app_add_to_cart, app_initiate_checkout, app_add_payment_info, app_complete_registration, app_content_view, app_search, app_add_to_wishlist, app_level_achieved, app_achievement_unlocked, app_tutorial_completion, app_spent_credits, app_rate, subscribe_value (conversion value), start_trial_value (conversion value), ctr (link CTR), ctr_all, cpc (cost/link click), cpc_all, cpm, cost_per_conversion, purchase_roas, aov, conversion_rate, hook_rate, hold_rate, lpv_rate, cost_per_lpv, cost_per_lead, cost_per_atc, cost_per_thruplay, cost_per_post_engagement, cost_per_purchase, cost_per_subscribe, cost_per_start_trial, cost_per_view_content, cost_per_add_payment_info, cost_per_submit_application, cost_per_add_to_wishlist, cost_per_search, cost_per_schedule, cost_per_donate, cost_per_find_location, cost_per_customize_product, outbound_ctr. Defaults to spend, impressions, link_clicks, ctr, cpc, cpm, results, cost_per_result, purchase_roas.
sort_byNo
group_byNoSecondary grouping by entity level
sort_dirNo
date_fromNoYYYY-MM-DD. Required if no date_preset.
entity_idsNoFilter to specific IDs
date_presetNoRequired if no date_from/date_to
entity_typeYes
ad_account_idYesMust include act_ prefix
breakdown_dimensionsYesOne or more dimensions to slice results by. Options: age (13-17, 18-24, 25-34, 35-44, 45-54, 55-64, 65+), gender (male/female/unknown), country (ISO codes), region, publisher_platform (facebook/instagram/messenger/audience_network), platform_position (feed/story/reels/etc), device_platform (mobile/desktop), impression_device. Max 2 dimensions recommended — Meta rejects some combinations.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It provides useful behavioral context by stating 'Live Meta API call' and 'Not cached', which informs the agent that results are fresh but may be slow or subject to API failures. However, it does not disclose other significant behaviors like rate limits, pagination, or potential large result sizes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that front-loads the purpose and scope. Every word earns its place without repetition or fluff. The 'Not cached' warning is a useful, distinct addition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives enough to understand the core function, but with 12 parameters and no output schema, more guidance would help—such as what the response looks like, pagination expectations, or a note about common breakdown combinations (e.g., max 2 dimensions). The schema covers parameter definitions but not the overall call context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the schema already documents most parameters in detail. The description adds no extra meaning beyond the schema; it just mentions 'spend and performance metrics' and example dimension values, which are already listed in the parameter descriptions. It does not compensate for the remaining undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('get spend and performance metrics'), a resource ('Meta API call'), and the key distinguishing feature ('sliced by demographic or placement dimensions'). It immediately differentiates this tool from the sibling adsap_get_insights without requiring schema inspection.

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

Usage Guidelines3/5

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

The phrase 'sliced by demographic or placement dimensions' implies when to use this tool (when breakdowns are needed), but it never explicitly names the alternative or states any exclusion condition. The agent must infer the choice based on the name and sibling list rather than being explicitly guided.

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

adsap_get_instant_formGet Instant FormAInspect

Read ONE Meta Instant Form in full: questions, intro, privacy policy and custom disclaimer, thank-you screen, tracking parameters, status and lead count. The form comes back in the same shape adsap_manage_instant_form takes, so use it to explain a form to the user or to prepare a duplicate. To LIST a Page's forms use adsap_list_meta_assets (asset_type instant_forms). warnings name anything the form uses that Adsap cannot recreate (e.g. conditional logic).

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesNumeric id of the form, from adsap_list_meta_assets (asset_type instant_forms).
page_idYesNumeric id of the Facebook Page that owns the form.
ad_account_idYesMeta ad account (act_...) the Page is connected to.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It clearly states it is a read operation ('Read ONE Meta Instant Form') and adds a valuable behavioral detail: 'warnings name anything the form uses that Adsap cannot recreate (e.g. conditional logic)'. It also mentions the return shape matches another tool, giving the agent a sense of the response structure. It doesn't cover error conditions or auth, but for a simple read that's acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with what the tool reads and then immediately routing to the listing sibling. Every sentence earns its place: content scope, use cases, and an explicit alternative. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description is complete: it states what is returned, how to obtain the form_id, and how to differentiate from listing. The mention of warnings and the shape reference to adsap_manage_instant_form provide sufficient context for correct invocation. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and all three parameters are clearly described in the schema. The description adds no extra parameter details beyond what the schema provides, but it does reinforce the source of form_id ('from adsap_list_meta_assets'). This meets the baseline for complete schema coverage without adding redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read'), a specific resource ('ONE Meta Instant Form'), and enumerates the content returned (questions, intro, privacy policy, etc.). It explicitly differentiates from listing via adsap_list_meta_assets and references the shape of adsap_manage_instant_form, so an agent can distinguish it without inspecting the schema.

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

Usage Guidelines5/5

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

It gives explicit use cases: 'explain a form to the user or to prepare a duplicate' and explicitly directs listing to 'adsap_list_meta_assets (asset_type instant_forms)'. This provides clear when-to-use and when-not-to-use guidance with the alternative named.

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

adsap_get_pixel_detailsGet Pixel DetailsAInspect

Get a Meta pixel's configuration details (live from Meta) — whether automatic advanced matching is enabled and which customer-info fields it matches on (em/ph/fn/...), the approximate event match rate (match_rate_approx; -1 = not enough data yet), first-party cookie status, data-use setting, last fired time, and owning business. Use to audit pixel setup / event match quality before optimizing campaigns, or to check a pixel is alive (last_fired_time). Get the pixel_id from adsap_list_meta_assets (asset_type:"pixels"). Complements adsap_get_pixel_stats (event volume) and adsap_get_pixel_health (catalog-ads readiness).

ParametersJSON Schema
NameRequiredDescriptionDefault
pixel_idYesMeta pixel / dataset ID (numeric). Get it from adsap_list_meta_assets (asset_type:"pixels").
ad_account_idYesAd account ID (act_xxx) the pixel belongs to. Required — scopes the request and anchors the Meta budget check.

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden — and it handles this well. It discloses that data is fetched 'live from Meta' (not cached), explains the match_rate_approx sentinel value (-1 = not enough data yet), and enumerates returned fields. For a read-only audit tool, the disclosed behaviors are sufficient, though it doesn't cover error conditions 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense with no filler; it front-loads the core purpose and field list before moving to usage and sibling differentiation. It is longer than average but every clause earns its place given the absence of an output schema that would otherwise document return fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description compensates by enumerating the returned configuration fields and their semantics inline. It covers the primary use cases, sourcing of required inputs, and sibling relationships. Minor gaps (e.g., what 'data-use setting' values look like, error behavior) are acceptable for this read-audit tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (pixel_id and ad_account_id) are already well-documented in the schema. The description references getting pixel_id from a sibling tool but adds no parameter-specific meaning beyond the schema. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Get a Meta pixel's configuration details') and enumerates the exact fields returned (automatic advanced matching, matched customer-info fields, match_rate_approx, first-party cookie status, data-use setting, last fired time, owning business). It also explicitly distinguishes itself from sibling tools by naming adsap_get_pixel_stats and adsap_get_pixel_health as complements, so an agent can clearly tell it apart.

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

Usage Guidelines4/5

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

States explicit when-to-use scenarios: 'Use to audit pixel setup / event match quality before optimizing campaigns, or to check a pixel is alive (last_fired_time).' It also instructs where to source the pixel_id (from adsap_list_meta_assets) and names complementary siblings. It lacks explicit when-not-to-use exclusions, but the guidance is clear and actionable.

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

adsap_get_pixel_healthGet Pixel HealthAInspect

Get Dynamic/Advantage+ catalog-ads readiness health checks for a Meta pixel (live from Meta) — whether the pixel is set up correctly to power dynamic/catalog ads: event-source match rate against catalogs, missing DPA parameters, iOS 14.5+ (AEM) setup, and more. Each check returns pass/fail. Use to diagnose why catalog/Advantage+ ads under-deliver or why events aren't matching products, before launching. Get the pixel_id from adsap_list_meta_assets (asset_type:"pixels"). Complements adsap_get_pixel_stats (event volume).

ParametersJSON Schema
NameRequiredDescriptionDefault
pixel_idYesMeta pixel / dataset ID (numeric). Get it from adsap_list_meta_assets (asset_type:"pixels").
ad_account_idYesAd account ID (act_xxx) the pixel belongs to. Required — scopes the request and anchors the Meta budget check.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations are absent, so the description carries the full burden. It discloses that the check is 'live from Meta' (real-time) and that each check returns pass/fail, which sets expectations for output. It also implies a read-only diagnostic operation by describing 'health checks' and 'diagnose'—no mutation is suggested. However, it does not explicitly state that no data is modified, and it doesn't mention potential failure modes or rate limits. Given the absence of annotations, this is a strong but not perfect disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is slightly long but every sentence earns its place: it states the purpose, lists specific checks, provides usage context, names a complementary tool, and gives parameter sourcing guidance. The most critical information (what it does and when to use) is front-loaded. It avoids fluff and is well-organized, though it could be tightened by removing the trailing 'and more' clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description explains that each check returns pass/fail, which is sufficient for an agent to understand the result shape. It covers the source of the pixel_id, the diagnostic purpose, and the complementary sibling. It does not mention error cases or permissions, but these are likely handled generically across tools. The description is complete enough for an agent to select and invoke this tool correctly in most scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for both parameters (pixel_id and ad_account_id). The description adds extra value beyond the schema by telling the agent where to source the pixel_id ('Get it from adsap_list_meta_assets') and explaining that ad_account_id 'scopes the request and anchors the Meta budget check.' This enhances the agent's understanding without redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Get'), names the exact resource (Dynamic/Advantage+ catalog-ads readiness health checks for a Meta pixel), and enumerates concrete checks (event-source match rate, missing DPA parameters, iOS 14.5+ AEM setup). It clearly distinguishes itself from siblings by naming its complementary tool (adsap_get_pixel_stats) and explicitly stating it's a diagnostic for catalog/Advantage+ ads, unlike adsap_get_pixel_details or adsap_get_pixel_stats.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance: 'Use to diagnose why catalog/Advantage+ ads under-deliver or why events aren't matching products, before launching.' It also names the sibling that complements it (adsap_get_pixel_stats for event volume), and instructs how to obtain the pixel_id (from adsap_list_meta_assets with asset_type:"pixels"). This leaves no ambiguity about when and how to invoke it.

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

adsap_get_pixel_statsGet Pixel StatsAInspect

Get event volume for a Meta pixel / dataset (live from Meta) — how many of each event type (PageView, Purchase, Lead, CompleteRegistration, …) the pixel has received. Use to confirm a pixel is firing and see which conversion signals it's receiving before building a conversion-optimized ad set. Get the pixel_id from adsap_list_meta_assets (asset_type:"pixels").

ParametersJSON Schema
NameRequiredDescriptionDefault
end_timeNoOptional window end as a Unix timestamp (seconds).
pixel_idYesMeta pixel / dataset ID (numeric). Get it from adsap_list_meta_assets (asset_type:"pixels").
start_timeNoOptional window start as a Unix timestamp (seconds). Omit for Meta's default recent window.
ad_account_idYesAd account ID (act_xxx) the pixel belongs to. Required — scopes the request and anchors the Meta budget check.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does disclose that the data is 'live from Meta' (fresh, not cached) and implies a read-only operation via 'Get event volume.' It does not mention latency, auth requirements, or error conditions, but for a low-risk read tool this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states what the tool returns, the second states the use case and how to get pixel_id. It is front-loaded with purpose, contains no filler, and every sentence contributes distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains what the tool computes (event volume by type), when to use it (pixel firing / conversion signal check), and how to obtain the key input (pixel_id from adsap_list_meta_assets). The input schema fully documents parameters, so the missing exact output structure and error behavior are minor for this read-only analytics tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for all four parameters, so the baseline is 3. The description reinforces that pixel_id comes from adsap_list_meta_assets, but that duplicates the schema text and adds no new meaning for end_time, start_time, or ad_account_id. Thus it meets but does not exceed the schema-driven baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific verb and resource: 'Get event volume for a Meta pixel / dataset' and enumerates event types like PageView, Purchase, Lead. It distinguishes itself from sibling tools such as adsap_get_pixel_details and adsap_get_pixel_health by focusing on event counts, so an agent can identify the right tool without opening schemas.

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

Usage Guidelines4/5

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

The description gives an explicit when-to-use: 'Use to confirm a pixel is firing and see which conversion signals it's receiving before building a conversion-optimized ad set.' It also points to adsap_list_meta_assets as the source for pixel_id. However, it does not state when not to use this tool or mention alternative analytics tools, stopping short of full 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.

adsap_get_preview_clipGet Animated Preview ClipAInspect

Fetch the animated placement-preview clip (recorded video of the real Meta preview) for an ad+placement previously rendered with adsap_get_ad_preview. Returns a signed URL when ready, or status 'pending' while the background recording is still in progress. Storage-only — costs no Meta API budget.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYesThe ad whose preview clip to fetch.
ad_formatYesThe placement the clip was rendered for.
ad_account_idYesAd account ID (act_xxx) that owns the ad.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description correctly carries the burden. It discloses the asynchronous behavior ('pending' while background recording is in progress), the eventual output (signed URL), and the cost profile ('Storage-only — costs no Meta API budget'). It does not cover error cases(such as TTL expiration or failure states), but the key behavioral traits are surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each adding distinct value: purpose (fetch clip after rendering), return states (signed URL vs pending), and cost/storage semantics. The key constraint is front-loaded; no filler exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a simple three-parameter polling tool: it states prerequisite, expected return states, and cost characteristics. The absence of an output schema means some return-format detail would help, but the description already covers the essential 'pending vs ready' contract, so no critical guidance is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the input schema fully documents all three parameters. The description adds no detail beyond the schema (e.g., it doesn clarify format of ad_account_id or how ad_format maps to placements). Baseline 3 is appropriate because the schema already does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Fetch') and resource ('animated placement-preview clip') and ties it to its render sibling ('previously rendered with adsap_get_ad_preview'). This makes its purpose unambiguous and distinguishes it from the many get/list siblings within the toolset.

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

Usage Guidelines4/5

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

The prerequisite is explicit: the clip must have been previously rendered with adsap_get_ad_preview. The 'pending' status also implies it is used as a poll for an async background recording. It could have gone further and explicitly said 'use adsap_get_ad_preview when you want a static preview,' but the naming and prerequisite make the usage context clear.

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

adsap_get_product_detailsGet Product DetailsAInspect

Fetch the full details of one catalog product by its numeric Meta product ID (FBID) — live from Meta. Returns name, description, price, availability, condition, image, URL, brand, and category. For a merchant SKU (alphanumeric retailer_id like 'ABC-001'), use adsap_search_catalog_products with retailer_id instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYesMeta product ID / FBID (numeric, e.g. 25702814896017049). NOT the merchant retailer_id/SKU — for those use adsap_search_catalog_products.
ad_account_idYesAd account ID (act_xxx) that owns the catalog. Required — scopes the request and anchors the Meta budget check.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It adds useful behavioral context ('live from Meta') and lists the returned fields, but it does not disclose error behavior, permission/access requirements, or explicitly confirm read-only behavior beyond the word 'fetch.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with the core purpose front-loaded, followed by a compact list of returned fields and a routing pointer. No filler, no redundant restatement of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no output schema, it names the data source, the selector, the returned fields, and the alternative for SKUs. It only omits minor edge-case details such as not-found/error behavior, which are not essential for selecting and invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds the FBID-vs-retailer_id distinction and the 'live from Meta' idea, but the input schema already documents numeric FBID, the non-SKU constraint, and ad_account_id's scoping/budget-check role.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Fetch'), resource ('full details of one catalog product'), and the exact lookup key (numeric Meta product ID / FBID). It also disambiguates this tool from the sibling search tool by explicitly contrasting FBID vs retailer_id/SKU.

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

Usage Guidelines5/5

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

Explicitly tells the agent when not to use this tool: for a merchant SKU (retailer_id), use adsap_search_catalog_products with retailer_id instead. This gives a clear routing rule between two otherwise similar catalog tools.

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

adsap_get_product_set_productsGet Product Set ProductsAInspect

List the products inside a Meta catalog product set (live from Meta). Use after adsap_list_catalogs to inspect exactly which products a product set contains before building a catalog, DPA, or collection ad. Returns product id, retailer_id, name, availability, price, image, and a pagination cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoPagination cursor from a previous response's meta.paging_after, to fetch the next page.
limitNoMax products to return. Default 25, max 100.
ad_account_idYesAd account ID (act_xxx) that owns the catalog. Required — scopes the request to the workspace and anchors the Meta budget check.
product_set_idYesMeta product set ID (numeric). Get it from adsap_list_catalogs (product_sets[].product_set_id).

TDQS

A4.2/5.0
Behavior4/5

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

No annotations exist, so the description carries the full burden. It discloses that the call is live ('live from Meta'), lists the returned fields, and mentions the pagination cursor. This gives the agent a solid behavioral picture, though error handling and rate-limit implications are not covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the core behavior, the recommended usage, and the return fields. The most important information is front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list-style tool with no output schema, the description covers the key return fields and pagination, and provides the proper calling context. It does not describe the exact response envelope or edge cases like empty product sets, but the schema plus description are sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters in detail, including how to obtain product_set_id. The description does not repeat parameter semantics, which is appropriate; it only adds context that the response contains a pagination cursor tied to the 'after' parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('List') and resource ('products inside a Meta catalog product set'), with the added 'live from Meta' qualifier. It clearly separates this tool from siblings like adsap_search_catalog_products or adsap_get_product_details by focusing on product set membership enumeration.

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

Usage Guidelines4/5

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

Explicitly tells the agent to use it after adsap_list_catalogs and before building a catalog, DPA, or collection ad. This is clear workflow guidance, though it does not mention alternative tools for cases like searching products by query.

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

adsap_get_recommendationsGet RecommendationsAInspect

Verified recommendations AND alerts computed by ADSAP's daily/weekly checks from the client's own data. Returns them as TWO separate arrays that must never be merged or described as one list. alerts = something broke or changed and needs attention now: the account stopped spending (zero_spend_yesterday), a campaign is spending with no conversions (zero_results_with_spend), conversion tracking went silent (tracking_collapse), a switched-on ad or campaign stopped delivering (zero_delivery_active_entity), an unusual week-over-week swing (wow_anomaly). findings = recommendations, clear actions worth taking: under-delivering ads (starved_ad), money-losing ads (losing_ad), weak launches (weak_launch), wearing-out ads (creative_fatigue), wasted Google search terms/themes, keyword promotion candidates. When both are present lead with the alerts, they are the urgent half. Includes evidence numbers, money at risk, and the latest weekly account summary. Omit account_id for a whole-workspace view across all reachable accounts. Explain each item in plain language from its evidence; suggest the action, never promise results. Weekly summaries with summary_source "ai" are AI-written: when relaying one, label it "AI Generated".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNoactive
platformNo
account_idNoMeta act_... or bare 10-digit Google Ads customer id. Omit for all reachable accounts in the workspace.
include_dismissedNo

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and exceeds it: it discloses the two-array structure that must never be merged, enumerates all alert/finding types, specifies ordering priority, describes returned contents (evidence numbers, money at risk, weekly summary), and gives presentation rules ('suggest the action, never promise results', label AI summaries). This is rich, actionable behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place: the critical two-array constraint is front-loaded, followed by item taxonomies, ordering rule, contents, account_id behavior, and response language guidance. Density is justified by the complexity of the output contract.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and 5 parameters, the description fully covers output shape, item semantics, ordering, included fields, and how to phrase the response. The un-documented parameters are simple enums/defaults, so nothing an agent needs to invoke the tool correctly is materially missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (20%, only account_id documented), and the description adds no new parameter meaning beyond repeating the account_id omission guidance already in the schema. However, the remaining parameters (limit, status, platform, include_dismissed) are largely self-explanatory through their types, enums, and defaults, so the gap is a clear but not severe shortfall.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('Verified recommendations AND alerts computed by ADSAP's daily/weekly checks') and immediately distinguishes the two output arrays (alerts vs findings) with concrete item types. This clearly separates it from the many sibling get_* tools, which focus on raw metrics, health, or assets.

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

Usage Guidelines4/5

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

The description gives clear context on when the data is relevant (daily/weekly checks from the client's own data) and explicit handling guidance ('When both are present lead with the alerts', 'Omit account_id for a whole-workspace view'). It does not explicitly name alternatives or state when-not-to-use, but the unique recommendations/alerts scope makes the intended use clear.

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

adsap_get_upload_statusGet Upload StatusBInspect

Check status of an async video upload. Returns processing state and creative_asset_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that it returns processing state and creative_asset_id, but it does not clarify whether this is a read-only poll, how long uploads may remain in processing, what error conditions might occur, or whether the returned creative_asset_id is always present only after processing completes. This is a meaningful gap for an async status tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states the action and resource, and the second sentence states the return value. This is appropriately sized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple one-parameter polling tool, but with no output schema and no annotations, the description is thin. It lacks guidance on when the status is 'complete', how to interpret states, how to obtain job_id, and whether the creative_asset_id is production-ready. A minimal viable description for an async poller should include at least the status values or a pointer to the upload tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It names no parameter details beyond the schema's job_id definition. Since there is only one parameter, a UUID, the schema already conveys the basic meaning. The description adds the context that job_id refers to an async upload job, but it does not explain how to obtain the job_id or how it relates to sibling upload tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Check') with a clear resource ('status of an async video upload') and distinguishes this status-check operation from other status tools by naming the async video upload context and the returned 'creative_asset_id'. It clearly tells an agent what this tool does.

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

Usage Guidelines3/5

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

The description implies the tool should be used after initiating an async video upload, by mentioning 'async video upload' and 'Returns processing state'. However, it does not provide explicit when-to-use guidance or name alternatives like adsap_get_import_status or adsap_get_ad_review_status, so the agent must infer the exact workflow context.

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

adsap_google_create_ad_groupAdd Ad Group to Google CampaignAInspect

Add an ad group to an EXISTING Google Ads campaign (Search, Display or Demand Gen) in ONE atomic request: the ad group, optional keywords (Search only) and optionally one ad. This is the only tool that adds structure to an already-created campaign — the create-campaign tools always build a fresh campaign. Declare channel to match the campaign's type (SEARCH -> 'search', DISPLAY -> 'display', DEMAND_GEN -> 'demand_gen' — from adsap_google_list_campaigns); the workflow verifies the campaign exists and rejects mismatches (PMax uses asset groups and is NOT supported; App/Shopping ad groups are also unsupported). SAFETY: if the parent campaign is ACTIVE the new ad group is created PAUSED by default so it never starts spending unreviewed — pass ad_group.status 'ENABLED' to override; if the campaign is PAUSED the ad group is created ENABLED (the campaign gates serving). Per channel: SEARCH — ad_group.keywords [{text, match_type EXACT|PHRASE|BROAD}] (optional but the group gets no traffic without them) and an optional responsive search ad (3-15 headlines max 30 chars w/ optional pinned_field, 2-4 descriptions max 90, final_url, path1/path2). DISPLAY — optional optimized_targeting flag and an optional responsive display ad (same shape as adsap_google_create_display_campaign's ad: >=1 landscape AND >=1 square image asset id, 1-5 headlines, exactly 1 long_headline, 1-5 descriptions, business_name, final_url). DEMAND_GEN — geo is REQUIRED at the AD GROUP level (ad_group.geo.location_ids; unlike Search/Display where geo is campaign-level and cannot be set here), plus optional language_ids, channel controls (ad_group.channels.strategy or .selected) and an optional 'multi_asset' image ad or 'video_responsive' YouTube ad (same shapes as adsap_google_create_demand_gen_campaign). An ad group created WITHOUT an ad will not serve until an ad is added. EXISTING-GROUP MODE: pass ad_group_id INSTEAD of ad_group to add ONE responsive search ad to an ad group that already exists (Search only; ad becomes required; ad.status defaults to PAUSED — pass ENABLED to create it serving; the workflow verifies the group exists, is not removed, and belongs to campaign_id). Use dry_run: true first — Google validates the whole chain without creating anything. ad_account_id is the bare 10-digit customer ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
adNoOptional — omit to create the ad group without an ad (it will not serve until one is added).
channelYesMust match the campaign's advertising channel type. The workflow verifies and rejects mismatches.
dry_runNo
ad_groupNoCREATE MODE: the new ad group to create. Mutually exclusive with ad_group_id — exactly one of the two is required.
ad_group_idNoEXISTING-GROUP MODE: numeric id of an EXISTING ad group (from the campaign's ad group list) — the tool then ONLY creates one responsive search ad inside it (search only; `ad` required). Mutually exclusive with ad_group.
campaign_idYesNumeric id of the EXISTING campaign to add the ad group to (from adsap_google_list_campaigns).
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and delivers extensively: atomicity, safe PAUSED defaults, ENABLED override behavior based on campaign status, the fact that a group without an ad will not serve, dry_run validation semantics, and verification that the campaign/ad group exists. This is exemplary transparency for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but the length is justified by three channel variants and two operation modes. The core purpose is front-loaded in the first sentence, and the content is organized into clear labeled clusters: channel rules, SAFETY defaults, per-channel requirements, EXISTING-GROUP MODE, and dry_run. Slightly dense, but every portion earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a highly complex tool with no output schema and no annotations, the description is remarkably complete: it covers required inputs, defaults, valid modes, unsupported campaign types, cross-parameter constraints, and safe invocation via dry_run. An agent has enough context to call the tool correctly across all supported channels.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema coverage is high at 86%, the description adds substantial meaning: mutual exclusivity of ad_group vs ad_group_id, channel-specific field requirements, geo being required at ad group level for Demand Gen, keyword optionality with the warning that Search gets no traffic without them, and ad shape variants per channel. It goes well beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: add an ad group to an EXISTING Google Ads campaign, and clarifies it covers Search, Display, or Demand Gen. It explicitly distinguishes itself from create-campaign tools, so an agent can immediately tell it apart from adsap_google_create_search_campaign and similar siblings.

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

Usage Guidelines5/5

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

The description states exactly when to use this tool: to add structure to an already-created campaign, and when not to: PMax, App, and Shopping are unsupported. It also names the alternative context via EXISTING-GROUP MODE and points to adsap_google_list_campaigns for IDs, leaving no ambiguity about selection.

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

adsap_google_create_app_campaignCreate Google App CampaignAInspect

Create a complete Google App campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED — activate later with adsap_google_set_entity_status), location + language targeting, an ad group, and the app ad. App campaigns promote a mobile app across Google Search, Google Play, YouTube, Discover and the Display Network — Google mixes the ad from your text (and optional media) automatically. The ad links to the app's store listing AUTOMATICALLY: there is no URL input, ever. Any PUBLIC store app id works (no app ownership or Play/Firebase link is required to create): Android app_id is the package name (e.g. com.example.app), iOS app_id is the numeric App Store id (e.g. 570060128) with app_store 'apple_app_store'. v1 optimizes INSTALLS at your target_cpi (target cost per install, plain number in the account currency); Google recommends a daily_budget of roughly 50x target_cpi — lower is allowed but slows learning (a warning says so). Text: 2-5 headlines (max 30 chars) + 1-5 descriptions (max 90). Optional media: image_asset_ids / video_asset_ids from adsap_google_upload_asset (images 1.91:1, 4:5 or 1:1 up to 5MB; videos are YouTube assets 10-60s) — text-only is fully valid. In-app-action, value, engagement and pre-registration goals are NOT supported in v1. If the account has no conversion tracking a warning is returned — relay it (Android installs normally auto-track once a Google Play link exists). Use dry_run: true first — Google validates the whole chain without creating anything; show the plan, get confirmation, then execute. ad_account_id is the bare 10-digit customer ID. For website campaigns use adsap_google_create_search_campaign / adsap_google_create_pmax_campaign; for Meta app ads use adsap_create_campaign with an app objective.

ParametersJSON Schema
NameRequiredDescriptionDefault
adYes
geoYes
dry_runNo
ad_groupNo
campaignYes
language_idsNoLanguage constant ids (e.g. 1000 = English, 1010 = French). Campaign-level; omit to target all languages.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral disclosure burden and does so thoroughly. It discloses that campaigns are 'ALWAYS created PAUSED', that the ad links to the store listing automatically with no URL input, that no app ownership is required, that v1 only optimizes for INSTALLS, and that missing conversion tracking returns a warning. It also calls out the 50x target_cpi budget recommendation and the dry_run validation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: core behavior, targeting, budget semantics, text constraints, media options, unsupported goals, warnings, dry-run workflow, and sibling routing. The most decision-critical facts are front-loaded ('ONE atomic request', 'ALWAYS created PAUSED', 'no URL input, ever').

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of this tool and the absence of annotations and output schema, the description is remarkably complete. It covers prerequisites, required and optional inputs, validation behavior, unsupported features, warnings to relay, and exact alternatives. An agent has all context needed to select, invoke, and sequence this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 29%, so the description must compensate — and it does. It explains app_id formats for Android and iOS, clarifies target_cpi and daily_budget are plain numbers in account currency rather than micros, points media asset IDs to adsap_google_upload_asset, references adsap_google_search_geo_targets for location IDs, and specifies that ad_account_id is a bare 10-digit customer ID. This adds substantial meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create a complete Google App campaign in ONE atomic request' and enumerates exactly what is included (budget, campaign, targeting, ad group, ad). It also differentiates from sibling tools by clarifying that this is for Google App campaigns with app_link auto-generated, and explicitly names alternatives for website and Meta campaigns.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'App campaigns promote a mobile app across Google Search, Google Play, YouTube, Discover and the Display Network.' It also provides clear exclusions and alternatives: 'For website campaigns use adsap_google_create_search_campaign / adsap_google_create_pmax_campaign; for Meta app ads use adsap_create_campaign with an app objective.' The recommended dry_run-first workflow is also actionable guidance.

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

adsap_google_create_demand_gen_campaignCreate Google Ads Demand Gen CampaignAInspect

Create a complete Google Ads Demand Gen campaign (YouTube, Discover, Gmail, Maps and the Google Display Network) in ONE atomic request: budget, campaign (ALWAYS created PAUSED — activate later with adsap_google_set_entity_status), a typeless ad group with channel controls, ad-group-level location/language targeting, and ONE ad. Use dry_run: true first — Google validates the whole chain without creating anything; show the plan, get confirmation, then execute. Two ad types (ad.ad_type): 'multi_asset' = image ad (1-5 headlines <=30 chars, 1-5 descriptions <=90, business name <=25, 1-5 logos, at least one landscape 1.91:1 or square 1:1 image from adsap_google_upload_asset, optional portrait 4:5 and tall-portrait 9:16, combined images <=20); 'video_responsive' = YouTube video ad (1-5 YouTube video ids, 1-5 headlines <=40, 1-5 long headlines <=90 REQUIRED, 1-5 descriptions <=90, 1-5 logos). Daily budget minimum is 5 (Google enforces a 5 USD local-currency-equivalent floor for Demand Gen). Channels: default ALL_CHANNELS; or channels.selected booleans (youtube_in_stream/youtube_in_feed/youtube_shorts/discover/gmail/display/maps — display: true is how you reach the Google Display Network). bidding_strategy 'auto' picks maximize_conversions when the account has conversion tracking, else maximize clicks; target_roas needs conversion history (Google rejects otherwise). ad_account_id is the bare 10-digit customer ID. For Search use adsap_google_create_search_campaign, for Performance Max adsap_google_create_pmax_campaign; for Meta use adsap_create_campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
adYes
geoYes
dry_runNo
ad_groupNo
campaignYes
language_idsNoLanguage constant ids (default ['1000'] = English).
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden, and it delivers: ALWAYS created PAUSED, dry_run validates the whole chain without creating anything, atomic request semantics, bidding_strategy 'auto' resolves based on conversion tracking, target_roas requires conversion history, and budget has a hard floor. This goes well beyond what the name or schema convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every clause carries essential operational information. It is front-loaded with the atomic create and PAUSED behavior, then proceeds logically through dry_run, ad types, budget, channels, bidding, account ID, and alternatives. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's high complexity, nested objects, seven parameters, and no output schema, the description covers all important invocation decisions: what the tool creates, how to validate safely, per-type ad requirements, channel selection semantics, bidding behavior, budget floor, and sibling routing. An agent can correctly select and call this tool with very little left to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 29%, so the description must compensate, and it does extensively: ad types with exact asset counts and dimensions, required long headlines for video_responsive, budget not in micros, channel booleans, bare 10-digit ad_account_id, dry_run meaning, and geo targeting at ad-group level. The prose explains constraints and relationships the schema only hints at.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a very specific verb and resource: create a complete Google Ads Demand Gen campaign in one atomic request, enumerating exact surfaces (YouTube, Discover, Gmail, Maps, Display). It also distinguishes itself from siblings at the end ('For Search use adsap_google_create_search_campaign, for Performance Max use adsap_google_create_pmax_campaign; for Meta use adsap_create_campaign'), so the agent can tell it apart from nearby campaign-creation tools.

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

Usage Guidelines5/5

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

It tells the agent when to use this tool vs alternatives (Search, PMax, Meta), and gives a mandatory invocation workflow: run dry_run: true first, show the plan, get confirmation, then execute. It also warns that campaigns are ALWAYS created PAUSED and should be activated later with a named sibling tool, which is concrete, actionable guidance.

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

adsap_google_create_display_campaignCreate Google Display CampaignAInspect

Create a classic standalone Google Display campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED — activate later with adsap_google_set_entity_status), location + language targeting, a Display ad group, and a responsive display ad. IMPORTANT CONTEXT to relay when relevant: Google is migrating standalone Display INTO Demand Gen (every response carries a heads-up; this campaign type will eventually be auto-migrated) — for new builds consider adsap_google_create_demand_gen_campaign with channels.selected.display: true instead; this tool exists for classic account-structure parity and full Display bid control. The ad REQUIRES BOTH image classes: at least one landscape image (1.91:1, min 600x314) AND at least one square image (1:1, min 300x300) — combined max 15 — plus 1-5 headlines (max 30 chars), EXACTLY ONE long_headline (max 90), 1-5 descriptions (max 90), business_name (max 25) and final_url. Optional: square logos (1:1, min 128x128) and landscape logos (4:1, min 512x128) combined max 5, up to 5 YouTube video assets, call_to_action_text (max 30). All image/video inputs are ASSET ids from adsap_google_upload_asset. Bidding: 'auto' picks Maximize Clicks (works without conversion tracking); 'manual_cpc' requires cpc_bid; 'maximize_conversions' (no target attached — Display rejects that combination); 'target_cpa' (standalone, needs target_cpa, no conversion-history requirement); 'target_roas' HAS a conversion-history eligibility gate (Google rejects it on accounts without enough conversions — relay that plainly if it fails). Use dry_run: true first — Google validates the whole chain without creating anything; show the plan, get confirmation, then execute. ad_account_id is the bare 10-digit customer ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
adYes
geoYes
dry_runNo
ad_groupNo
campaignYes
language_idsNoLanguage constant ids (e.g. 1000 = English). Campaign-level; omit to target all languages.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so thoroughly: campaign is ALWAYS created paused, the request is atomic, dry_run validates without creating, Display is being migrated into Demand Gen, and every response carries a heads-up. Bidding constraints and eligibility gates are explicitly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and organized into scope, context, ad requirements, bidding, and workflow. It is dense and necessary for the tool's complexity, though it partially repeats constraints already present in the schema and uses emphatic formatting that adds length without much semantic value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a highly nested campaign-creation tool with no output schema, this covers all critical preconditions: asset provenance, mandatory image classes, bidding eligibility, dry-run validation, and relationship to sibling tools. An agent has enough to retrieve the right inputs and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 29%, and the description compensates by clarifying budget units (plain number, not micros/cents), that image/video fields are asset IDs from adsap_google_upload_asset, image size/aspect requirements, exact long_headline count, bid-strategy pairings, and the bare 10-digit ad_account_id format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and resource: creates a classic standalone Google Display campaign as one atomic request encompassing budget, campaign, targeting, ad group, and ad. It explicitly differentiates this from Demand Gen by naming the sibling and the account-parity rationale.

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

Usage Guidelines5/5

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

Tells the agent that for new builds it should consider adsap_google_create_demand_gen_campaign instead, and that this tool is for classic account-structure parity and full Display bid control. It also prescribes the workflow of dry_run first, then execution, and directs activation to adsap_google_set_entity_status.

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

adsap_google_create_pmax_campaignCreate Google Ads Performance Max CampaignAInspect

Create a complete Google Ads Performance Max campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED — activate later with adsap_google_set_entity_status), location/language targeting, and one asset group with text assets plus images previously created via adsap_google_upload_asset. Use dry_run: true first — Google validates the whole chain without creating anything; show the plan, get confirmation, then execute. Asset-group minimums (enforced): 3-15 headlines (<=30 chars), 1-5 long headlines (<=90), 2-5 descriptions (<=90, at least one <=60), business name (<=25), 1-5 logo images (1:1, min 128x128), 1-20 landscape images (1.91:1, min 600x314), 1-20 square images (1:1, min 300x300). Video is optional — without one, Google may auto-generate video from your assets. bidding_strategy 'auto' resolves to maximize_conversions with a conversion-tracking preflight warning when the account has no conversion actions. retail: true attaches the account's ACTIVE Merchant Center link (fails cleanly if none). ad_account_id is the bare 10-digit customer ID. For Search campaigns use adsap_google_create_search_campaign; for Meta use adsap_create_campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
geoYes
retailNotrue = retail PMax: reads the account's ACTIVE Merchant Center link and attaches shopping_setting.merchant_id (fails with a clear error if no active link).
dry_runNo
signalsNo
campaignYes
asset_groupYes
language_idsNoLanguage constant ids (default ['1000'] = English).
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so thoroughly: atomic creation, ALWAYS paused, dry-run semantics, enforced asset minimums, optional video auto-generation, auto bidding resolution with a preflight warning, retail Merchant Center behavior, and ad_account_id format. It discloses far more than a generic create statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place: core behavior and safety workflow first, then enforced constraints, then sibling disambiguation. It is front-loaded and avoids filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested tool with no annotations and no output schema, this is exceptionally complete: it covers prerequisites, validation flow, creation-time behavior, constraints, failure modes, and alternatives. An agent has what it needs to call the tool correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38%, but the description compensates for the most decision-critical parameters: dry_run, bidding_strategy auto resolution, retail merchant link attachment, ad_account_id format, and image dimension eligibility. It does not narrate every nested field, but the schema itself documents those with detailed descriptions, so the combination is strong.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Create a complete Google Ads Performance Max campaign in ONE atomic request') and enumerates the bundled components: budget, campaign, targeting, and one asset group. It also routes away from siblings by explicitly naming adsap_google_create_search_campaign for Search and adsap_create_campaign for Meta.

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

Usage Guidelines5/5

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

It gives a concrete workflow: run with dry_run: true first, show the validation plan, get confirmation, then execute. It also names prerequisites (images via adsap_google_upload_asset), the post-create activation step via adsap_google_set_entity_status, and the correct sibling tools for Search and Meta campaigns.

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

adsap_google_create_search_campaignCreate Google Ads Search CampaignAInspect

Create a complete Google Ads Search campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED — activate later with adsap_google_set_entity_status), location/language targeting, ad group, keywords, and a responsive search ad. Use dry_run: true first — Google validates the whole operation chain without creating anything; show the plan, get confirmation, then execute. Location ids come from adsap_google_search_geo_targets. bidding_strategy 'auto' (default) resolves via a conversion-tracking preflight — maximize_conversions when the account has conversion actions, otherwise target_spend (Maximize Clicks) with an explanatory warning — and can always be overridden explicitly. ad_account_id is the bare 10-digit customer ID. For Meta campaigns use adsap_create_campaign instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
geoYes
rsaYes
dry_runNo
ad_groupYes
campaignYes
language_idsNoLanguage constant ids. No default. Google removes language targeting from Search campaigns in late September 2026 (ads then match on the language of the ad itself). Omit this field for Search; if Google rejects language criteria the server retries the create without them and returns a warning (plan.language_targeting_dropped).
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full disclosure burden. It reveals critical behavioral facts beyond the name and schema: atomicity, ALWAYS created PAUSED, dry_run validates without creating, bidding_strategy 'auto' resolves via conversion-tracking preflight, and language targeting may be dropped by Google with a server retry and warning. This is far more transparent than typical tool definitions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: purpose, atomicity, dry-run workflow, paused-by-default, bidding behavior, location source, ID format, and sibling routing. It is appropriately front-loaded with the core action and critical caveats before operational details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-object create tool with no output schema and no annotations, the description covers workflow, dry-run, activation, data source, bidding override, asset automation constraints, and language-targeting caveat. It could briefly state what the successful response contains in non-dry-run mode, but the available context is otherwise unusually complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low at 29%, but the description compensates well for key parameters: ad_account_id is a bare 10-digit customer ID, bidding_strategy includes default resolution logic, dry_run semantics are explained, and location IDs are sourced from a specific sibling tool. Some nested parameters like ad_group, rsa, and geo are left mostly to the schema, which prevents a 5, but the most consequential parameters get meaningfully enriched.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Create a complete Google Ads Search campaign in ONE atomic request'. The scope is precisely defined and the description distinguishes it from the Meta path by saying 'For Meta campaigns use adsap_create_campaign instead', and the word 'Search' differentiates it from sibling Google campaign creators like display, PMax, or Shopping.

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

Usage Guidelines5/5

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

Provides explicit when-to-use and how-to-use guidance: dry_run: true first, then confirm and execute; campaigns are always paused and activated later with adsap_google_set_entity_status; location IDs come from adsap_google_search_geo_targets; and the Meta alternative is named. This gives the agent a complete decision and invocation sequence.

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

adsap_google_create_shopping_campaignCreate Google Shopping CampaignAInspect

Create a complete standard Google Shopping campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED — activate later with adsap_google_set_entity_status), location targeting, a Shopping ad group, the product ad, and an 'All products' listing group. Product data, images and landing pages come from the linked Merchant Center — there are NO creative inputs. REQUIRES an ACTIVE Merchant Center link on the account (clean NO_MERCHANT_LINK error if none; merchant_id is auto-resolved when exactly one link exists). Use dry_run: true first — Google validates the whole chain without creating anything; show the plan, get confirmation, then execute. campaign_priority (0-2) only arbitrates between the account's OWN standard Shopping campaigns — a retail Performance Max campaign ALWAYS outranks standard Shopping for the same products; say so when the account also runs retail PMax. feed_label (from adsap_google_list_feed_labels) restricts the campaign to one Merchant Center feed label; omit to advertise all feeds. Language targeting does not exist for Shopping (ad language follows the product feed). bidding_strategy: 'auto' picks Maximize Clicks; 'manual_cpc' REQUIRES cpc_bid and gives full bid control (the classic reason to prefer standard Shopping over PMax); 'target_roas' needs conversion history (~15 conversions/30 days). ad_account_id is the bare 10-digit customer ID. For Performance Max (incl. retail) use adsap_google_create_pmax_campaign; for Meta catalog ads use adsap_create_campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
geoYes
dry_runNo
ad_groupNo
campaignYes
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A5/5.0
Behavior5/5

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

With zero annotations, the description carries full responsibility for behavioral disclosure. It reveals the campaign is always created PAUSED, that a Merchant Center link is required (with a clean error if absent), that merchant_id auto-resolves when exactly one link exists, that dry_run validates without creating, and that campaign_priority only arbitrates within the account's own standard Shopping campaigns. It even notes that language targeting does not exist for Shopping. This is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place. It front-loads the core creation scope, then flows naturally into prerequisites, dry_run workflow, bidding nuances, and sibling alternatives. The information is dense but structured logically, making it easy for an agent to parse and act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with five parameters, nested objects, no output schema, and no annotations, this description covers essential context: the atomic one-shot nature, the always-paused behavior, the Merchant Center prerequisite, the dry_run flow, bidding strategy constraints, feed label handling, and explicit sibling comparisons. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds crucial meaning beyond the schema: ad_account_id must be a bare 10-digit ID, daily_budget is in plain currency not micros, bidding_strategy 'auto' means Maximize Clicks while 'manual_cpc' requires cpc_bidcher, feed_label must match exactly and is case-sensitive, and campaign_priority's interactions with PMax are explained. With schema coverage at only 20%, this compensating detail is vital for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Create a complete standard Google Shopping campaign in ONE atomic request.' It then enumerates the exact components (budget, campaign, ad group, product ad, listing group), and distinguishes itself from PMax and Meta catalog siblings by naming them explicitly. This is a model of purpose clarity.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use and when-not-to-use guidance: it instructs to dry_run first DB, says to use adsap_google_create_pmax_campaign for PMax and adsap_create_campaign for Meta catalog ads, and explains the trade-offs between bidding strategies (manual_cpc as the reason to prefer Shopping over PMax). This is far beyond minimum viability.

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

adsap_google_get_account_activitiesGet Google Account ActivitiesAInspect

Change history for a Google Ads account: who changed what, and when. Returns recent account edits (campaign/ad group/ad/keyword/budget changes) with the editor's email, the surface used (web UI vs API), the operation (CREATE/UPDATE/REMOVE) and the exact fields changed. Google keeps this log for 30 days only — for older history point the user at the Google Ads UI (Tools > Change history). Changes can lag up to ~3 minutes. ad_account_id is the bare 10-digit customer ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax change events returned, newest first.
days_backNoHow many days of history to fetch (1-28, default 7). Google hard-caps the change log at 30 days.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
resource_type_filterNoRestrict to specific changed-resource types (e.g. ["CAMPAIGN","CAMPAIGN_BUDGET"]). Omit for all.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does so well: it discloses the returned data shape, the 30-day retention limit, propagation lag, and ID format. It does not explicitly state read-only behavior or auth requirements, but the read-only nature is strongly implied by 'change history' and 'Returns'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, opening with the core purpose before adding qualification details. Each sentence contributes a distinct fact: return fields, retention window, lag, and ID format, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-oriented tool with no output schema and no annotations, the description covers the essential return values, retention limits, latency, and required ID format. Pagination or response envelope details are not mentioned, but that is a minor gap given the moderate complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema. The description mainly reinforces the ad_account_id bare-ID constraint and the 30-day cap rather than adding new parameter semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States it returns Google Ads account change history: who changed what, when, with editor email, surface, operation, and changed fields. The Google Ads scoping and 10-digit customer ID clearly distinguish it from the sibling adsap_get_account_activities.

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

Usage Guidelines4/5

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

Clearly frames the tool for recent account edits and explicitly warns that history is only retained for 30 days, directing older lookups to the Google Ads UI. It also flags the ~3-minute lag. It does not explicitly contrast with sibling tools, but the Google-specific context is enough.

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

adsap_google_get_conversion_breakdownGoogle Conversions by ActionAInspect

Break a Google Ads account's conversions down BY CONVERSION ACTION (Purchase vs Lead vs Sign-up vs phone call...) instead of one lumped total. The Google twin of Meta custom-conversion reporting, and the tool to reach for when the user asks which conversions the account is actually getting, whether a specific action is firing, or why All conversions is far above Conversions. Returns per action: name, category, all_conversions (+ value), conversions (+ value, primary-for-goal actions only, the ones bidding optimizes toward), view-through conversions, and each action's share of the total. level 'account' gives one row per action; level 'campaign' splits it per campaign. Google does NOT report cost split by conversion action, so there is no spend or CPA column here (use adsap_google_get_insights for cost). ad_account_id is the bare 10-digit customer ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNo'account' = one row per conversion action for the whole account (default). 'campaign' = one row per campaign x conversion action. Passing campaign_id implies 'campaign'.account
limitNoMax rows returned, ordered by all_conversions descending. Rows are (campaigns x conversion actions) aggregated over the whole range, so the default covers almost every account.
date_toNoCustom range end, YYYY-MM-DD. Use with date_from.
date_fromNoCustom range start, YYYY-MM-DD. Use with date_to.
campaign_idNoRestrict to one campaign (numeric id from adsap_google_list_campaigns). Forces campaign level.
date_presetNoDate range preset (default last_30d). Ignored when date_from/date_to are set.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It clearly explains what the tool returns per action, how the level parameter changes row granularity, and the key Google limitation that cost is not split by conversion action. It stops short of explicitly stating auth requirements or error behavior, but the read-oriented wording and return-column breakdown make the tool's behavior clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and every sentence earns its place: user-intent triggers, returned fields, level semantics, the no-cost limitation, and the ID format. Despite its length, it is tightly structured and avoids redundant repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description is thorough: it defines the expected output columns, explains both levels, calls out the missing cost dimension, and directs users to the sibling tool for that data. No essential call-time ambiguity remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningfully beyond the schema. It clarifies that ad_account_id is a bare 10-digit customer ID, that rows are ordered by all_conversions descending, that campaign_id forces campaign level, and why there is no spend/CPA column. This gives an agent practical calling context the schema alone does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource, 'Break a Google Ads account's conversions down BY CONVERSION ACTION', and gives concrete examples (Purchase vs Lead vs Sign-up vs phone call). It also distinguishes itself from the lumped-total view and from adsap_google_get_insights by explicitly noting what it does not include.

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

Usage Guidelines5/5

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

It explicitly states when to use the tool: when the user asks which conversions the account is getting, whether a specific action is firing, or why All conversions is far above Conversions. It also names the alternative tool for cost/CPA data, giving an agent clear selection criteria.

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

adsap_google_get_insightsGet Google Ads InsightsAInspect

Get Google Ads performance insights for an account, at campaign, ad-group, or keyword level (cache-first with auto-refresh from Google). Returns an account summary with previous-period comparison, a sortable per-entity table, and an optional daily timeseries. Metrics on both the summary and every row: cost, impressions, clicks, conversions, conversions_value + derived roas/ctr/cpc/cpm/cost_per_conversion/cvr; all_conversions, all_conversions_value, cost_per_all_conversion, view_through_conversions, cross_device_conversions (all_* counts EVERY conversion action, conversions counts only the ones included in bidding); engagements, engagement_rate, interactions, interaction_rate; video_views (TrueView/YouTube), video_view_rate, avg_cpv, video_p25/p50/p75/p100_rate; youtube_comments, youtube_likes, youtube_shares (v25 social engagement on Shorts ads on YouTube — 0 outside YouTube/Shorts delivery); and the competitive set search_impression_share, search_lost_is_budget, search_lost_is_rank, top_impression_pct, abs_top_impression_pct. The competitive metrics are Search-network only and read 0 for Display/PMax/Video delivery. search_lost_is_budget is CAMPAIGN LEVEL ONLY (the Google API does not report it for ad groups or keywords) so the key is ABSENT at the other levels rather than 0; at campaign level impression share plus the two lost shares add up to 100%. quality_score (1-10, null when Google reports none) appears only at keyword level. When Google capped most days in range, meta.share_metrics_note is set and rows carry search_share_is_approximate: report those three share figures as estimates. ad_account_id is the bare 10-digit customer ID from adsap_google_list_ad_accounts. Keyword-level row ids are ":" — pass them as-is to adsap_google_set_entity_status / adsap_google_update_entity (entity_type keyword). Only entities with impressions in range appear (PMax has no ad groups/keywords by design). Note: Google reports plain Clicks/CTR/CPC (no Meta-style link-click split). For Meta insights use adsap_get_insights.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoAggregation level of the table rows (default campaign). ad_group and keyword ride the same cached sync — no extra API budget.campaign
limitNoEntity-table page size.
cursorNo
date_toNoCustom range end, YYYY-MM-DD. Use with date_from.
refreshNoForce a refresh from the Google Ads API even if the cache is fresh. Spends Google API budget.
sort_dirNodesc
date_fromNoCustom range start, YYYY-MM-DD. Use with date_to.
date_presetNoDate range preset (default last_7d). Ignored when date_from/date_to are set.
sort_columnNoEntity-table sort column.cost
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts).
include_timeseriesNoAlso return a per-day timeseries for the current range (for trend questions / charts).

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so thoroughly: cache-first with auto-refresh, previous-period comparison, only entities with impressions appearing, PMax lacking ad groups/keywords, Search-network-only competitive metrics reading 0 elsewhere, search_lost_is_budget being campaign-level-only with the key ABSENT elsewhere, quality_score being keyword-only with nulls, and the approximate-share note when Google caps days.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but nearly every sentence earns its place by adding metric semantics, level-specific caveats, or routing guidance. It is front-loaded with the core purpose and return shape; however, the dense wall-of-text format with semicolon-heavy metric lists reduces scannability and could benefit from bullets or structured sections.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, yet the description covers the return structure, the metrics on summary and rows, per-level availability, id formats and downstream usage, and the Meta alternative. The only minor omission is explicit cursor/pagination semantics, but limit/cursor are already in the schema and the tool is otherwise fully specified 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (82%), but the description meaningfully exceeds the schema: it explains that ad_group/keyword levels share the cached sync with no extra API budget, that refresh spends Google API budget, the exact source of ad_account_id, the distinction between conversions and all_conversions, and the level-specific availability of quality_score and competitive metrics. This is far beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb-resource pair: "Get Google Ads performance insights for an account, at campaign, ad-group, or keyword level." It names concrete return components (account summary, previous-period comparison, sortable per-entity table, optional timeseries) and explicitly distinguishes the closest sibling by saying "For Meta insights use adsap_get_insights."

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

Usage Guidelines5/5

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

It explicitly tells when to use the alternative (Meta insights via adsap_get_insights), explains the cache-first behavior and that refresh="Spends Google API budget", notes that ad_group/keyword levels "ride the same cached sync — no extra API budget," and tells where the ad_account_id comes from and how keyword ids should be passed onward. This is explicit when/when-not/alternative guidance.

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

adsap_google_keyword_ideasGet Google Ads Keyword IdeasAInspect

Get keyword suggestions with search volume from Google Keyword Planner for a Google Search campaign. Seed with keywords and/or a landing-page URL; returns keyword ideas with average monthly searches, competition and top-of-page bid range (in the account's currency). Pass geo_target_ids (from adsap_google_search_geo_targets) and language_id so volumes match the campaign's targeting. Feed chosen texts into adsap_google_create_search_campaign ad_group.keywords. ad_account_id is the bare 10-digit Google Ads customer ID. Google-only — Meta has no keyword-planner analog.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoLanding-page URL to extract ideas from (http/https). Combines with keywords when both are given.
keywordsNoSeed keywords, e.g. ['running shoes', 'trail sneakers']. Max 10. At least one of keywords/url is required.
page_sizeNo
page_tokenNoPagination token from a previous call's meta.next_page_token.
language_idNoLanguage constant id (default 1000 = English).1000
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
geo_target_idsNoGeo target constant ids to scope volumes (from adsap_google_search_geo_targets). Max 10; omit for worldwide.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full transparency burden. It discloses the return contents (average monthly searches, competition, top-of-page bid range in account currency) and the account-id formatting requirement. It does not mention pagination behavior or potential rate limits, but for a read-style research tool the disclosure is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core function appears in the first sentence, followed by return value, usage guidance, account-id clarification, and platform exclusion. Every sentence adds actionable information with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with no output schema, the description covers the key inputs (keywords/URL, geo, language, ad_account_id) and output fields. It misses explicit pagination guidance and any mention of page_size limits, though these are encoded in the schema. The workflow pointer to the campaign-creation tool helps complete the context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (86%), so the baseline is 3, but the description adds meaning beyond the schema: it explains why geo_target_ids and language_id matter (volume consistency), clarifies ad_account_id format, and connects output to adsap_google_create_search_campaign.ad_group.keywords. It also reinforces the keywords/URL combination without repeating exact schema rules.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') plus a precise resource ('keyword suggestions with search volume from Google Keyword Planner') and ties it to a Google Search campaign context. It clearly distinguishes itself from Meta's world with the explicit 'Google-only — Meta has no keyword-planner analog.'

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

Usage Guidelines4/5

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

The description explains how to use the tool: seed with keywords and/or a URL, pass geo_target_ids and language_id for target-matching volumes, and feed outputs into adsap_google_create_search_campaign. It also gives an exclusion ('Google-only — Meta has no keyword-planner analog'), though it doesn't explicitly name a competing sibling or state 'use this instead of X.'

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

adsap_google_list_ad_accountsList Google Ads AccountsAInspect

List Google Ads accounts linked in this workspace. Returns the bare 10-digit customer ID (use it as ad_account_id for adsap_google_list_campaigns / adsap_google_get_insights), name, currency, timezone, status. Use to pick a Google Ads account; ask the user if several. For Meta accounts use adsap_list_ad_accounts instead. PLATFORM RULE: when the user's question does not name a platform, call this ALONGSIDE adsap_list_ad_accounts so Google accounts are never silently omitted from account resolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It conveys that this is a read-only listing operation, specifies the output shape, and explains that the returned customer ID should be reused as ad_account_id in downstream tools. It does not cover pagination or empty/error behavior, but the core behavior is clearly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: action+scope, return fields, selection behavior, Meta alternative, and the critical platform rule. It is front-loaded with the core purpose and wastes no words, even though the PLATFORM RULE section is typographically emphatic.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema or annotations, the description supplies most of the contract: output fields, downstream ID reuse, user interaction rule, and cross-platform routing. It falls just short of complete because it omits limit/cursor pagination semantics and what to do when zero accounts are returned, but for typical invocation it is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to explain limit and cursor. It does not mention either parameter, leaving an agent to infer limit only from numeric bounds/default and cursor as an opaque string. The description adds no parameter-level meaning beyond what the raw schema already shows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'List Google Ads accounts linked in this workspace' and details the returned fields (10-digit customer ID, name, currency, timezone, status). It clearly distinguishes itself from adsap_list_ad_accounts for Meta accounts, so an agent can tell the tools apart.

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

Usage Guidelines5/5

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

It explicitly says when to use this tool (to pick a Google Ads account, ask the user if several), names the alternative for Meta accounts (adsap_list_ad_accounts), and provides a platform rule to call it alongside the Meta tool when no platform is named. This is exemplary routing guidance.

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

adsap_google_list_ad_templatesList Google Campaign TemplatesAInspect

List saved Google campaign templates (wizard-saved setups per channel: budget, bidding, geo, languages, ad text, extensions, asset picks). The payload mirrors the wizard fields; feed it back to a user as a starting point or compare setups. Portable templates apply to any account; account-bound ones (asset ids) only to their customer_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
channelNoFilter to one campaign channel.
customer_idNoWhen set, returns portable templates PLUS this account's bound ones (and pins the workspace check to it).

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that templates are saved/wizard-created and explains the portable vs. account-bound scoping, but it does not explicitly state that this is a read-only operation, nor does it describe the response or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three focused sentences with no filler. Each sentence adds distinct value: what the tool lists, how the payload can be used, and the portability distinction between template types.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no output schema and no annotations, the description should more fully explain the return shape and pagination semantics. It covers the domain content well, but an agent still lacks a concrete sense of the response structure and how cursor/limit drive paging.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, so the description partially compensates: it clarifies customer_id behavior (portable plus bound templates) and mentions channel-level organization. However, cursor is never explained, and limit has only schema constraints with no semantic description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List saved Google campaign templates.' It also explains the template contents and distinguishes these as wizard-saved Google templates, which separates them from the non-Google adsap_list_ad_templates sibling.

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

Usage Guidelines3/5

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

The description gives a downstream use case ('feed it back to a user as a starting point or compare setups') but does not state when to choose this tool over alternatives like adsap_google_manage_ad_template or adsap_list_ad_templates. No explicit when-not-to-use or sibling differentiation is provided.

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

adsap_google_list_audiencesList Google Ads AudiencesAInspect

List a Google Ads account's audiences: both Audience resources (reusable segment+demographic combinations — these are the ids that adsap_google_create_pmax_campaign / adsap_google_create_demand_gen_campaign audience_ids inputs expect) and UserLists (remarketing lists / segments, with approximate sizes). Use to resolve audience NAMES to ids before creating PMax or Demand Gen campaigns with audience signals, or to review what remarketing lists exist. ad_account_id is the bare 10-digit customer ID. For Meta audiences use adsap_list_custom_audiences.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.4/5.0
Behavior4/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It clearly explains what the tool returns (Audience resources and UserLists with approximate sizes), what those IDs are used for, and what format ad_account_id must take. It does not cover pagination or rate limits, but for a read-only list operation the behavioral disclosure is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: it defines the two output categories, explains the relationship to campaign creation tools, gives the primary use cases, clarifies the parameter format, and names the sibling tool for the Meta case. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description reasonably explains what will be returned: Audience resources, UserLists, and approximate sizes. It also covers the only input parameter and the use cases. It could add more detail about the exact response shape, but the description gives an agent enough context to call the tool correctly and interpret the result at a high level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents ad_account_id as a bare 10-digit customer ID with no dashes or act_ prefix. The description mostly repeats this, adding only the helpful hint that the ID comes from adsap_google_list_ad_accounts. This is a small increment above the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List a Google Ads account's audiences'), and distinguishes two audience types: Audience resources and UserLists. It also ties the result to use in adsap_google_create_pmax_campaign / adsap_google_create_demand_gen_campaign, which differentiates it from siblings like adsap_list_custom_audiences.

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

Usage Guidelines5/5

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

The description explicitly says when to use the tool: resolving audience names to IDs before creating PMax or Demand Gen campaigns, or reviewing existing remarketing lists. It also names the Meta equivalent (adsap_list_custom_audiences) as the alternative, leaving no ambiguity about which tool to select.

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

adsap_google_list_campaignsList Google Ads CampaignsAInspect

List Google Ads campaigns in a Google Ads account (cache-first; auto-refreshes from Google when the cache is missing or older than 1 hour). Returns status, channel type (SEARCH, PERFORMANCE_MAX, ...), bidding strategy, daily budget. ad_account_id is the bare 10-digit Google Ads customer ID from adsap_google_list_ad_accounts. For Meta campaigns use adsap_list_campaigns instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
refreshNoForce a refresh from the Google Ads API even if the cache is fresh. Spends Google API budget — use only when the user needs up-to-the-minute data.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
status_filterNoALL

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It goes beyond the schema by disclosing cache-first behavior with a 1-hour auto-refresh and listing the returned fields. It could mention error conditions or pagination behavior, but it provides meaningful context for a read-only listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three focused sentences with no filler. It front-loads the core action and cache behavior, then adds return fields, parameter source, and the Meta alternative. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a basic call: it explains the core purpose, cache behavior, return fields, and ad_account_id source. However, with no output schema and five parameters, it omits pagination mechanics, status_filter meaning, and any API-budget or error context. It is not fully complete for sophisticated use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, so the description needs to compensate for the undocumented parameters. It enriches ad_account_id by pointing to the sibling tool, but it does not explain limit, cursor, or status_filter semantics. Pagination and filtering behavior are left entirely to the schema's bare names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List Google Ads campaigns in a Google Ads account.' It also names the returned fields and explicitly differentiates itself from the Meta tool adsap_list_campaigns, so an agent can distinguish it from siblings.

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

Usage Guidelines5/5

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

The description explicitly says 'For Meta campaigns use adsap_list_campaigns instead,' and tells the agent that ad_account_id comes from adsap_google_list_ad_accounts. It also explains the cache-first behavior, which helps the agent decide when the call will hit Google's API.

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

adsap_google_list_conversion_actionsList Google Conversion ActionsAInspect

List a Google Ads account's conversion actions (name, type, category, status, primary-for-goal, counting type, origin). Use BEFORE creating campaigns with conversion-based bidding: Maximize Conversions / target_cpa need at least one ENABLED primary conversion action, and target_roas additionally needs conversion VALUE history — zero enabled actions means those bidding modes will fail or a Search campaign will silently fall back. Also the first stop when a user asks why conversions aren't tracking. ad_account_id is the bare 10-digit customer ID. For Meta pixels/conversions use adsap_get_pixel_details / adsap_list_custom_conversions.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
include_removedNoAlso list REMOVED conversion actions (default false).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations are absent, so the description carries the behavioral burden. It discloses the downstream consequence of empty results (bidding failure/silent fallback) and clarifies the expected ID format ('bare 10-digit customer ID'). It doesn't cover pagination or rate limits, but for a read-only list tool the provided context is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is slightly longer than absolutely necessary, but it is front-loaded with the core purpose and every sentence adds value: usage timing, consequences, diagnostic role, parameter clarification, and sibling alternatives. The information density is high with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description lists the returned fields and covers prerequisites, failure modes, and alternative tools. It gives an agent everything needed to decide when to call it and how to interpret a zero-result scenario. No critical selection or invocation context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: both ad_account_id and include_removed have clear descriptions. The tool description only restates the ID format and adds no new parameter-level meaning. Baseline 3 is appropriate because the schema already documents the parameters fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair: 'List a Google Ads account's conversion actions' and enumerates the exact fields returned (name, type, category, status, etc.). It also contrasts itself with Meta conversion tools by naming adsap_get_pixel_details and adsap_list_custom_conversions, so an agent can distinguish it from sibling tools without opening schemas.

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

Usage Guidelines5/5

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

Explicitly says when to use it ('BEFORE creating campaigns with conversion-based bidding') and what failure modes occur if zero enabled actions exist ('bidding modes will fail or a Search campaign will silently fall back'). It also names the Meta alternatives for pixels/conversions, providing clear when-not guidance.

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

adsap_google_list_creative_assetsList Google Creative AssetsAInspect

List the creative assets already in a Google Ads account's library: IMAGE (with dimensions + which PMax/Demand Gen image slots each fits), YOUTUBE_VIDEO (video id + title) and TEXT assets. Google assets are account-scoped, immutable and cannot be deleted — to stop one serving, remove its LINK from the campaign (adsap_google_manage_extension for extension links; asset-group edits ship later). Pass usage_for_asset_id to see WHERE one asset is used (campaign / ad-group / PMax asset-group / account-level links AND inside ads) — the pre-flight for 'can I stop using this?'. Asset ids feed the *_asset_ids inputs of the PMax / Demand Gen / Display / App create tools, so re-using an existing image needs no re-upload. ad_account_id is the bare 10-digit customer ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax assets returned (newest first).
searchNoCase-insensitive substring filter on asset name / video title / text content (applied after fetch).
asset_typeNoRestrict to one asset type. Omit for all three (IMAGE, YOUTUBE_VIDEO, TEXT).
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
usage_for_asset_idNoReturn where THIS asset is used (campaign / ad-group / asset-group / account links + inside ads) instead of the asset list.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral disclosure burden and does so thoroughly: assets are account-scoped, immutable, and cannot be deleted; stopping serving requires removing links; usage_for_asset_id returns usage in campaigns, ad groups, PMax asset groups, account-level links, and inside ads. This adds rich context well beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than two sentences, but every sentence earns its place: output breakdown, immutability and deletion constraint, removal path, usage pre-flight, integration with create tools, and ad_account_id format. The purpose is front-loaded and the structure flows logically from what the tool does to how to use it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description covers the full invocation context: scope, output categories, immutability, deletion restrictions, usage lookup, reuse in create tools, filtering semantics, and ID formatting. An agent has enough information to select and correctly invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning: ad_account_id is specified as a bare 10-digit customer ID from adsap_google_list_ad_accounts, usage_for_asset_id is explained as returning usage locations instead of the list, and asset_type omission is clarified as returning all three types. These additions justify a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: lists Google Ads account library creative assets, enumerating IMAGE, YOUTUBE_VIDEO, and TEXT with details such as dimensions, slot fit, video id, and title. It distinguishes itself from the generic sibling adsap_list_creative_assets by explicitly scoping to a Google Ads account and describing Google-specific output semantics.

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

Usage Guidelines4/5

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

Gives clear context on when to use the tool: as a pre-flight via usage_for_asset_id to decide whether an asset can stop serving, and as a source of asset ids for create tools. It names adsap_google_manage_extension as the alternative for removing extension links and notes asset-group edits are pending, though it does not explicitly contrast against the generic list tool.

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

adsap_google_list_extensionsList Google Ads ExtensionsAInspect

List the extensions (sitelinks, callouts, structured snippets, call, promotion, price, image/AD_IMAGE) linked to Google Ads campaigns AND at account level (rows with level 'account' + campaign_id null serve with all eligible campaigns; manage them via adsap_google_manage_extension level 'account'). Optionally filter to one campaign_id (campaign links only) and/or one field_type. Rows with source AUTOMATICALLY_CREATED are Google-automated extensions (treat as read-mostly — editing or unlinking them is usually not what the user wants). Feeds adsap_google_manage_extension (use the returned asset_id for link/unlink/update_asset; image assets are never updatable). No performance metrics in v1 — asset performance is a later phase. ad_account_id is the bare 10-digit Google Ads customer ID. Meta has no extensions analog.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
field_typeNoFilter to one extension type. Omit for all seven (SITELINK, CALLOUT, STRUCTURED_SNIPPET, CALL, PROMOTION, PRICE, AD_IMAGE).
campaign_idNoFilter to one campaign. Omit for all campaigns.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries full behavioral burden and meets it well. It discloses account-level row semantics, the read-mostly nature of Google-automated extensions, the absence of performance metrics in v1, the fact that image assets are never updatable, and the exact ad_account_id format. These are meaningful behavioral details beyond what the schema alone provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place, covering filters, account-level behavior, automated extensions, downstream use, and platform context. The first sentence is somewhat heavy with parentheses, but overall the text is well-structured and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is close to complete: it explains what is listed, how filtering works, what the account-level rows mean, when mutation is appropriate, and which identifier format to use. It could add more about the exact return row shape or pagination, but the limit schema and asset_id mention cover the main invocation concerns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the baseline is already solid. The description adds valuable semantics: campaign_id filters campaign links only, ad_account_id must be a bare 10-digit Google Ads customer ID, and field_type maps to the seven named extension types. It does not discuss limit, but the schema's default/min/max are sufficient for that parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb-resource-scope statement: 'List the extensions ... linked to Google Ads campaigns AND at account level.' It names all seven extension types and explicitly references the managing sibling tool, making it obvious that this is the read/list counterpart to adsap_google_manage_extension rather than a mutation tool.

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

Usage Guidelines4/5

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

It states optional filters ('Optionally filter to one campaign_id ... and/or one field_type'), clarifies that account-level rows with campaign_id null apply to all eligible campaigns, and warns against editing AUTOMATICALLY_CREATED extensions. It also routes modification use cases to adsap_google_manage_extension, though it does not use explicit 'use this when' phrasing.

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

adsap_google_list_feed_labelsList Merchant Center Feed LabelsAInspect

List the distinct Merchant Center feed labels visible to a Google Ads account (from the products synced via its Merchant Center link). Use before adsap_google_create_shopping_campaign when the user wants to restrict a standard Shopping campaign to one feed — pass a returned feed_label EXACTLY as-is (case-sensitive). An empty list usually means no Merchant Center link, no products submitted yet, or the product sync (which can lag a fresh link by hours) has not landed — say which is likely and note that omitting feed_label targets all feeds. ad_account_id is the bare 10-digit customer ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden, and it does well: it explains the sync lag on a fresh link, interprets an empty list (no link, no products, or pending sync), and tells the agent to say which is likely. It also flags case-sensitivity of returned labels. It doesn't describe the return payload shape or pagination, but for a list tool that's a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description packs purpose, usage guidance, edge-case interpretation, and parameter note into a few efficient sentences, front-loading the main purpose. It is longer than minimal but every sentence earns its place by adding actionable guidance rather than fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only list tool with 100% schema coverage and no output schema, the description covers the essential context: when to use it, how to interpret results, and the parameter format. The main omission is the exact return structure, but it's reasonably inferable for a label-list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% — ad_account_id is fully documented in the schema ('Bare 10-digit Google Ads customer ID... No dashes, no act_ prefix'). The description repeats 'ad_account_id is the bare 10-digit customer ID', confirming but not adding meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the distinct Merchant Center feed labels') and scopes it to products synced via the Merchant Center link. The description also ties it to the shopping-campaign workflow, which distinguishes it from the many sibling list tools like adsap_google_list_ad_accounts or adsap_google_list_campaigns.

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

Usage Guidelines4/5

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

Explicitly says to use it 'before adsap_google_create_shopping_campaign when the user wants to restrict a standard Shopping campaign to one feed' and instructs to pass the returned feed_label exactly as-is. It implies the alternative (omitting feed_label targets all feeds) and names the condition, but does not explicitly name a sibling alternative tool for when you don't need feed labels.

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

adsap_google_manage_ad_templateGoogle: Manage Campaign Template (create / update / delete)AInspect

Create, update, or delete a saved Google campaign template (the wizard-saved setups adsap_google_list_ad_templates reads: budget, bidding, geo, languages, ad text, extensions, asset picks — per channel: search, pmax, demand_gen, shopping, app, display). Every write is validated against the exact wizard shape for the channel, so chat-written templates always load cleanly in the ADSAP web wizards. Update: pass payload_patch to merge top-level fields (null removes a field) and/or name to rename. Templates whose payload carries uploaded asset ids are account-bound and need customer_id; without asset ids they are portable across accounts. dry_run defaults TRUE: preview, confirm with the user, then call again with dry_run:false. Templates are launch presets only — deleting one never touches live campaigns.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoTemplate name. Required for create; optional rename on update.
actionYes"create" a new template, "update" an existing one (rename and/or patch its payload), or "delete" one permanently.
channelNoRequired for create. The campaign channel the template belongs to (a template never changes channel).
dry_runNoTRUE (default) = preview only: shows the validated payload / merged result that would be stored. Set false to apply.
payloadNoRequired for create: the full wizard-shaped payload for the channel (same camelCase fields adsap_google_list_ad_templates returns — read an existing template of that channel to see the shape). Validated against the wizard schema; invalid shapes are rejected with field detail.
customer_idNoRequired when the payload carries uploaded asset ids (slotAssets/imageAssets/videoAssets) — those only exist in one account, so the template gets bound to it. Omit for portable (no-asset) templates.
template_idNoRequired for update/delete. The template id from adsap_google_list_ad_templates.
payload_patchNoUpdate only: TOP-LEVEL merge into the stored payload. Only the keys you pass change; pass null as a value to REMOVE that key. The merged result is re-validated as a whole.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It discloses the dry_run default TRUE and the required two-call confirm-then-apply flow, the null-removes-field merge semantics for payload_patch, the account-binding behavior for asset-bearing payloads, the validation against the exact wizard shape, and the non-destructive relationship to live campaigns. This is exactly the kind of behavioral context an agent needs beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized: the first sentence establishes the core purpose, the middle sentences cover update semantics and account-binding, and the final sentences cover the dry_run workflow and the safety guarantee. Every sentence earns its place, though the length is at the upper edge of what an agent can parse quickly. The structure front-loads the most important scoping information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation tool with no annotations and no output schema, the description is remarkably complete. It covers the create/update/delete modes, the channel constraint, the validation behavior, the dry_run workflow, the customer_id requirement, the merge semantics, and the safety boundary with live campaigns. An agent has everything needed to call this tool correctly and to know what will happen before and after the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, and the description adds meaningful semantics on top: it explains the dry_run two-call workflow, the top-level merge semantics of payload_patch (null removes a field), the account-bound vs portable distinction for customer_id, and the fact that a template never changes channel. The only minor gap is that the description doesn't spell out that action is the sole required parameter, but the schema already does that clearly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb phrase — 'Create, update, or delete a saved Google campaign template' — and immediately distinguishes the resource from the sibling reader adsap_google_list_ad_templates. It enumerates the per-channel wizard content (budget, bidding, geo, languages, ad text, extensions, asset picks) and the six channels, so an agent can tell exactly what this tool manages and how it differs from nearby create-campaign tools.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: it names the sibling reader (adsap_google_list_ad_templates) as the source of template shapes and IDs, explains the dry_run default workflow ('preview, confirm with the user, then call again with dry_run:false'), and states the account-bound vs portable distinction that determines when customer_id is required. It also clarifies that templates are launch presets only and deleting one never touches live campaigns, which prevents a dangerous misuse.

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

adsap_google_manage_extensionManage Google Ads ExtensionsAInspect

Manage Google Ads extensions (sitelinks, callouts, structured snippets, call, promotion, price) at CAMPAIGN level (default) or ACCOUNT level (level: 'account' — the link serves with ALL eligible campaigns; all six types accepted, probe-confirmed). Ops: 'create_and_link' creates new extension assets and links them to a campaign in one atomic call (max 20); 'link' attaches EXISTING assets to a campaign; 'unlink' detaches them from that campaign — this is how you stop an extension serving there, because Google Ads assets cannot be deleted; 'update_asset' edits an existing asset — WARNING: assets are account-scoped, so an update changes the extension EVERYWHERE it is linked, not just one campaign. Image extensions: bytes go through adsap_google_upload_asset first, then op 'link' with field_type AD_IMAGE — BUT Google allowlist-gates AD_IMAGE links via API (most accounts get UNSUPPORTED_FIELD_TYPE; not something ADSAP can fix), and image assets are never content-mutable. Promotion/price also link to PMax campaigns; AD_IMAGE does not. Use adsap_google_list_extensions first to see what exists (asset ids, field types). Use dry_run: true first for create — Google validates everything without changing anything. All-or-nothing: on error nothing is applied. ad_account_id is the bare 10-digit Google Ads customer ID. Meta has no extensions analog.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
typeNoupdate_asset only: the asset's extension type — selects which of the flat per-type fields below apply. Image assets are NOT updatable.
levelNoWhere the link lives: 'campaign' (default, requires campaign_id) or 'account' (no campaign_id — the extension serves with all eligible campaigns; unlink at the same level to stop it). Ignored for update_asset.campaign
linksNolink / unlink only: 1-20 existing (asset_id, field_type) pairs to attach to / detach from the campaign.
headerNoupdate_asset (structured_snippet): new header (fixed Google vocabulary).
valuesNoupdate_asset (structured_snippet): new full set of 3-10 values (replaces the existing set).
dry_runNo
asset_idNoupdate_asset only: the existing asset to edit (from adsap_google_list_extensions).
end_dateNoupdate_asset (promotion): new serving end date.
occasionNoupdate_asset (promotion): new occasion.
final_urlNoupdate_asset (sitelink/promotion): new destination URL.
link_textNoupdate_asset (sitelink): new display text (1-25 chars).
extensionsNocreate_and_link only: 1-20 new extensions to create and link to the campaign, discriminated on `type`.
price_typeNoupdate_asset (price): new price table type.
start_dateNoupdate_asset (promotion): new serving start date.
campaign_idNoNumeric Google Ads campaign id. Required for create_and_link / link / unlink at level 'campaign'; must be OMITTED at level 'account'; ignored for update_asset.
percent_offNoupdate_asset (promotion): new percent discount (20 = 20% off). Mutually exclusive with money_amount_off.
callout_textNoupdate_asset (callout): new callout text (1-25 chars).
country_codeNoupdate_asset (call): new 2-letter country code.
description1Noupdate_asset (sitelink): new first description (set BOTH descriptions or NEITHER).
description2Noupdate_asset (sitelink): new second description (set BOTH descriptions or NEITHER).
phone_numberNoupdate_asset (call): new phone number.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
language_codeNoupdate_asset (promotion/price): new BCP 47 language tag.
promotion_codeNoupdate_asset (promotion): new promo code. Mutually exclusive with orders_over_amount.
price_offeringsNoupdate_asset (price): new FULL set of 3-8 rows (replaces the existing set).
price_qualifierNoupdate_asset (price): new qualifier (FROM / UP_TO / AVERAGE).
final_mobile_urlNoupdate_asset (sitelink/promotion): new mobile destination URL.
money_amount_offNoupdate_asset (promotion): new fixed discount. Mutually exclusive with percent_off.
promotion_targetNoupdate_asset (promotion): new promotion target.
orders_over_amountNoupdate_asset (promotion): new minimum order value. Mutually exclusive with promotion_code.
redemption_end_dateNoupdate_asset (promotion): new redemption window end.
redemption_start_dateNoupdate_asset (promotion): new redemption window start.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full disclosure burden and does so exceptionally: atomic create_and_link, account-scoped update side effects, Google's AD_IMAGE allowlist gate, non-mutability of image assets, and all-or-nothing error semantics are all stated explicitly. This goes far beyond a generic 'manage' statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but information-dense; every sentence earns its place, and the most decision-relevant facts (scope, ops, account-scoped update warning, AD_IMAGE gating) are front-loaded. The length is proportionate to the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers operations, levels, prerequisites, constraints, and failure modes thoroughly. The only notable omission is the response/return format, and there is no output schema to fill that gap — minor for a mutation tool against otherwise excellent coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 94%, so the schema already documents most fields. The description adds genuine meaning beyond it by explaining op behavior, the level distinction, the 20-item cap, asset-id provenance, and the bare 10-digit ad_account_id format — slightly redundant with schema in places but clearly additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (Google Ads extensions), enumerates all six supported types, the campaign/account scope, and the four operations. It clearly distinguishes itself from sibling tools like adsap_google_list_extensions and adsap_google_upload_asset without merely restating the title.

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

Usage Guidelines5/5

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

Explicitly instructs the agent to call adsap_google_list_extensions first, route image bytes through adsap_google_upload_asset, and use dry_run:true before create. It also explains that unlink is the only way to stop an extension serving since assets cannot be deleted — strong when-to-use and prerequisite guidance.

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

adsap_google_manage_keywordsManage Google Ads KeywordsAInspect

Manage Google Ads Search keywords AFTER creation. op 'add': add up to 100 keywords (and/or ad-group negatives via negative: true) to an EXISTING ad group — atomic batch, per-keyword optional cpc_bid. op 'add_negative': add campaign-LEVEL negative keywords (block queries across every ad group in the campaign). op 'replace': change one keyword's text and/or match type ATOMICALLY (Google keyword text/match type are immutable, so this is remove + re-add in one request — the keyword gets a NEW id and its performance history restarts; status and bid carry over). op 'remove': remove one ad-group keyword/negative (keyword_id) or one campaign negative (campaign_negative_id). Ids are composite ":" — ad-group keyword ids come from adsap_google_get_insights level keyword; created ids are returned by the add ops. Always dry_run: true first. For pause/enable use adsap_google_set_entity_status; for per-keyword bid changes alone use adsap_google_update_entity with updates.cpc_bid.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
dry_runNo
keywordsNoops 'add' / 'add_negative': the keywords to create. For add_negative, cpc_bid/negative are not allowed (campaign keywords are negative by definition).
keyword_idNoops 'replace' / 'remove': the ad-group keyword as "<ad_group_id>:<criterion_id>".
ad_group_idNoop 'add' only: the EXISTING ad group to add keywords/negatives to.
campaign_idNoop 'add_negative' only: the campaign to add campaign-level negatives to.
replace_withNoop 'replace' only: the replacement keyword.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
campaign_negative_idNoop 'remove' only: a campaign-level negative as "<campaign_id>:<criterion_id>" (ids returned by op 'add_negative').

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden, and it discloses high-impact behavior: atomic batch adds, atomic replace because Google text/match type are immutable, new id and performance-history reset on replace, status/bid carryover, and campaign-level negative scope. It also explains the composite ID format and where IDs come from.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but well structured; each sentence covers an operation, a constraint, or a sibling-routing decision. The op labels make it scannable, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no annotations and no output schema, the description gives enough to invoke correctly: per-op semantics, parameter applicability, ID provenance, side effects, and alternatives. It even tells the agent to run dry_run first, which compensates for the absent safety annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (78%) and the schema already documents fields such as cpc_bid currency and match-type enum. The description adds operation-level meaning beyond the schema: it specifies which parameters apply per op, explains that add is atomic, and tells the agent where keyword IDs come from and that add ops return created IDs. A small gap remains for the dry_run return behavior despite the 'always dry_run first' instruction.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact resource (Google Ads Search keywords) and operation family ('Manage ... AFTER creation'), then enumerates four explicit operations (add, add_negative, replace, remove) with concrete effects. It differentiates from siblings by naming the tools for pause/enable and bid-only changes, so an agent can select it correctly.

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

Usage Guidelines5/5

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

It gives explicit routing: use this for keyword lifecycle operations after creation; pause/enable should go to adsap_google_set_entity_status and standalone bid changes to adsap_google_update_entity. It also tells the agent to 'Always dry_run: true first' and ties each operation to its required parameter (ad_group_id, campaign_id, keyword_id, campaign_negative_id).

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

adsap_google_manage_targetingManage Google Ads TargetingAInspect

Manage a Google Ads campaign or ad group's targeting AFTER creation: GEO, LANGUAGE and AUDIENCES. op 'add' at campaign level (default): up to 100 locations (negative: true = exclude) and/or 50 languages, OR up to 50 audiences (audiences cannot combine with geo/languages in one call — separate calls). op 'add' at ad-group level (level: 'ad_group' + ad_group_id): audiences only. AUDIENCES: pass user_list_id items (audience segments from adsap_google_list_audiences) — campaign-level TARGETING works on Search/Shopping only; campaign-level EXCLUSION (negative: true) also on Display/Performance Max; ad-group level (target or exclude) on Search/Display/Shopping. DEMAND GEN is different: pass audience_id items (Audience resources) on the AD GROUP — nothing at campaign level. Video supports no audience edits. The same user list cannot be attached at BOTH campaign and ad-group level. 'mode' ('targeting' = narrow delivery to the audiences | 'observation' = full reach, bid adjustments only) sets the audience targeting setting — combinable with the audience add or standalone; Google's default with NO mode set is TARGETING, so pass mode: 'observation' for Search/Shopping unless the user explicitly wants to narrow reach. op 'remove': remove ONE criterion by composite id ":" (level 'campaign' → campaign criterion, 'ad_group' → ad-group criterion). Geo/language criterion ids EQUAL their constant ids (France on campaign 123 = "123:2250"); AUDIENCE criterion ids are Google-internal — capture them from the add response (created_criteria[].entity_id). Criteria are immutable: to change one, remove it and add the replacement. Always dry_run: true first. For campaign negative KEYWORDS use adsap_google_manage_keywords op 'add_negative'.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
modeNoAudience targeting setting: 'targeting' narrows delivery to the attached audiences; 'observation' keeps full reach (bid adjustments only). Combinable with an audience add, or standalone.
levelNoWhere the criteria live. Default 'campaign'. 'ad_group' = audience adds on an ad group (pass ad_group_id), or removes of ad-group criteria.
dry_runNo
audiencesNoop 'add': audiences to attach or exclude. Cannot be combined with geo_targets/languages in the same call.
languagesNoop 'add': language constant ids (e.g. 1000 = English, 1002 = French). No language criteria on a campaign = all languages. NOT for Search campaigns: Google removes Search language targeting in late September 2026 (Google rejects the add with OPERATION_NOT_PERMITTED_FOR_CONTEXT; Search ads match on the language of the ad itself). Still valid on Display and Performance Max (non-Search channels).
ad_group_idNoop 'add' with level 'ad_group': the EXISTING ad group to attach audiences to.
campaign_idNoop 'add' at campaign level: the EXISTING campaign to add targeting to.
geo_targetsNoop 'add': locations to target (or exclude via negative: true). Resolve names to ids with adsap_google_search_geo_targets first.
criterion_idNoop 'remove' only: the criterion as "<parent_id>:<criterion_id>" — campaign id for level 'campaign', ad group id for level 'ad_group'. Geo/language/audience criteria only — campaign negative keywords are removed via adsap_google_manage_keywords.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full disclosure burden and succeeds. It reveals critical behavioral traits: criteria are immutable and must be removed then re-added, geo/language criterion ids equal constant ids while audience criterion ids must be captured from the add response, Google's default mode is targeting when no mode is set, and dry_run should always be true first. These go far beyond any schema and fully inform the agent of side effects and response expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense with no filler. Every sentence adds a distinct constraint, example, or routing rule. The most important scoping statement is front-loaded, and dense clauses like 'GEO, LANGUAGE and AUDIENCES' are immediately followed by operation-specific rules. This is justified complexity for an 11-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with no output schema, the description covers all invocation-critical aspects: ops, levels, combination constraints, product-type restrictions, Demand Gen exceptions, removal id mechanics, immutability, dry-run guidance, and sibling routing. It even references the add response field created_criteria[].entity_id, giving the agent the information needed to capture audience criterion ids for later removes. Nothing necessary for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema description coverage is high (82%), the description adds substantial meaning beyond the schema: the difference between user_list_id and audience_id (Demand Gen), the composite criterion_id format '<parent_id>:<criterion_id>', the rule that audiences cannot combine with geo/languages in one call, and the fix for search-language targeting deprecation. It also ties parameters to sibling tools like adsap_google_list_audiences and adsap_google_search_geo_targets, making parameter values reliably discoverable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair ('Manage a Google Ads campaign or ad group's targeting AFTER creation') and names the exact scope: GEO, LANGUAGE, and AUDIENCES. It clearly distinguishes itself from the sibling adsap_google_manage_keywords by explicitly routing campaign negative keywords to that tool, so an agent can select the right tool without opening schemas.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: after campaign creation, for add/remove of geo/language/audience criteria, and with channel-specific rules (Search/Shopping, Display, Performance Max, Demand Gen, Video). It also provides an explicit when-not-to-use by stating 'Video supports no audience edits' and directing campaign negative keyword removal to adsap_google_manage_keywords op 'add_negative'.

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

adsap_google_search_geo_targetsSearch Google Ads Geo TargetsAInspect

Find Google Ads geo target constants by location name (city, region, country, postal area) for Search campaign location targeting. Returns id, name, target type, country, reach and parent locations for each match — the id is exactly what adsap_google_create_search_campaign expects in geo.location_ids. Up to 25 names per call; pass country_code to disambiguate (e.g. Paris FR vs Paris TX). For Meta geo targeting use adsap_search_geo_locations instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoDisplay-language locale for the returned names (default 'en').
country_codeNoOptional 2-letter ISO country code to scope the search — recommended for ambiguous city names.
location_namesYesLocation names to resolve, e.g. ['Paris', 'Lyon']. Max 25 per call.

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It covers output fields, the downstream use of id, the 25-name limit, and ambiguity handling. It does not mention possible edge cases like no-match behavior or rate limits, but for a lookup tool the disclosed behavior is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The purpose is front-loaded, the key output detail is placed prominently, and each sentence contributes either operational guidance or sibling differentiation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description compensates well by naming the return fields, clarifying the id's downstream role, specifying the input cap, and giving disambiguation advice. This is complete enough for an agent 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema by explaining that country_code disambiguates cases like Paris FR vs Paris TX and by clarifying that the returned id is consumed by adsap_google_create_search_campaign. This extra operational meaning justifies a score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb ('Find') and clearly identifies the resource: Google Ads geo target constants by location name for Search campaign location targeting. It explicitly distinguishes itself from the Meta geo targeting sibling, so an agent can tell them apart without inspecting schemas.

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

Usage Guidelines5/5

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

It states the exact use case (Search campaign location targeting), explains how the returned id feeds into adsap_google_create_search_campaign, and explicitly directs Meta geo targeting users to adsap_search_geo_locations. It also gives concrete guidance on when to use country_code to disambiguate ambiguous names.

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

adsap_google_search_termsGet Google Search Terms ReportAInspect

Search terms report for a Google Ads account: the REAL user queries that triggered Search (and Shopping) ads, with impressions/clicks/cost/conversions per term. The classic optimization read — find irrelevant queries burning budget (candidates for negative keywords) and high-converting queries worth adding as exact keywords. The same term can appear once per ad group (implicit segmentation — not duplicates). Terms with zero impressions in range are omitted by Google. ad_account_id is the bare 10-digit customer ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax terms returned, ordered by cost descending.
date_toNoCustom range end, YYYY-MM-DD. Use with date_from.
date_fromNoCustom range start, YYYY-MM-DD. Use with date_to.
campaign_idNoRestrict to one campaign (numeric id from adsap_google_list_campaigns).
date_presetNoDate range preset (default last_30d). Ignored when date_from/date_to are set.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden and does so well: it explains that terms are deduplicated per ad group (implicit segmentation), that zero-impression terms are omitted by Google, and that ad_account_id must be a bare 10-digit ID. This meaningfully discloses quirks an agent would otherwise not know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: the core definition, the optimization use case, deduplication behavior, Google's omission quirk, and the account ID format. It is dense but well organized and front-loads the most important identification details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a report tool with no output schema: it names the metrics, explains result segmentation and omission behavior, and documents the key parameter constraint. It could explicitly state the return wrapper/type, but an agent has enough context to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters thoroughly. The description adds modest value by reinforcing ad_account_id format and explaining segmentation/omission behavior tied to the data, but it does not substantially expand per-parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: fetching the search terms report for a Google Ads account. It clearly distinguishes the data type ('REAL user queries') from other report/insight tools and explains what metrics are included, so an agent can understand exactly what this tool returns.

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

Usage Guidelines4/5

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

The description provides strong context for when to use it: the 'classic optimization read' for finding irrelevant queries to negate and high-converting queries to add as exact keywords. It does not explicitly name sibling alternatives or exclusion conditions, but the use case guidance is concrete enough to guide selection.

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

adsap_google_set_entity_statusPause or Activate Google Ads EntitiesAInspect

Pause or reactivate one or more Google Ads campaigns, ad groups, ads, or keywords (max 20 per call). Use dry_run: true to preview the change (current vs new status, validated by Google) without applying anything. Only set action to 'activate' when the user has explicitly requested to resume or enable. Keyword ids are composite ":" (as returned by adsap_google_get_insights level keyword). ad_account_id is the bare 10-digit Google Ads customer ID. For Meta entities use adsap_set_entity_status instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
dry_runNo
entity_idsYes
entity_typeYesGoogle Ads vocabulary: the middle level is ad_group (not adset). keyword targets one ad-group criterion.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and provides useful detail: dry_run shows current vs new status validated by Google without applying anything, and calls are capped at 20 entities. It does not disclose potential downstream effects like delivery/billing impact or authentication prerequisites, so it stops short of a perfect score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: core function, dry_run, activation policy, id format, account id format, and sibling routing. The description front-loads the main purpose and avoids fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers all required parameters, tricky id formats, dry_run semantics, and alternative routing. It is missing an explicit statement of what a successful non-dry_run call returns and where to get IDs for campaign, ad_group, and ad entities.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, so the description must compensate, and it does: it explains composite keyword ids ('<ad_group_id>:<criterion_id>'), the bare 10-digit ad_account_id format, the dry_run behavior, and the max entity count. However, it leaves the '~' variant in the id pattern unexplained and does not specify how to source campaign/ad_group/ad ids.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Pause or reactivate') tied to a precise resource set ('Google Ads campaigns, ad groups, ads, or keywords') and a max of 20 per call. It also distinguishes itself from the Meta-oriented sibling by explicitly directing Meta entities to adsap_set_entity_status.

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

Usage Guidelines5/5

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

The description explicitly says to use adsap_set_entity_status for Meta entities, establishes when 'activate' is appropriate ('only when the user has explicitly requested to resume or enable'), and instructs using dry_run to preview changes without applying them. This gives clear when-to-use and when-not-to-use guidance.

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

adsap_google_update_entityUpdate Google Ads EntityAInspect

Edit an existing Google Ads campaign, ad group, ad, or keyword: change status (PAUSED/ACTIVE), rename (campaign/ad group), set a campaign's daily budget (in account currency, e.g. 12.50), change a campaign's BIDDING scheme/targets (updates.bidding — swap scheme or edit tCPA/tROAS/ceiling; portfolio strategies rejected), edit ASSET AUTOMATION opt-ins (updates.asset_automation — campaign level on PMax/Search, ad level on Demand Gen ads), or set a keyword's max CPC (updates.cpc_bid — Manual CPC campaigns only, ignored under automated bidding). Keyword TEXT is immutable — use adsap_google_manage_keywords op 'replace' to change it; keyword entity_id is ":" from adsap_google_get_insights level keyword. Put ONLY the fields you want to change in updates. Use dry_run: true to preview the diff (current vs new, validated by Google without applying). ad_account_id is the bare 10-digit Google Ads customer ID. For Meta entities use adsap_update_entity instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
updatesYesOnly the fields you want to change. At least one is required.
entity_idYes
entity_typeYesGoogle Ads vocabulary: the middle level is ad_group (not adset). keyword targets one ad-group criterion.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.8/5.0
Behavior5/5

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

No annotations exist, so the description carries the full burden — and it delivers. It discloses rejection behaviors (portfolio strategies, asset-automation conflicts, ROAS eligibility gates), silent ignores (cpc_bid under automated bidding), side effects (shared budget affects every campaign using it), and semantic mappings (ACTIVE → ENABLED, dry_run validated by Google without applying). Far beyond what any schema could convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: the opening sentence states scope and capabilities, followed by immutability constraints, usage pattern, dry_run tip, id format, and sibling routing. The opening sentence is a long parenthetical-heavy run-on, but every clause carries operational weight (channel whitelists, rejections, currency formats), making the length proportionate to a tool with 4 entity types and 6 nested update fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Remarkably complete for a complex tool with zero annotations and no output schema: covers all entity types, all update sub-fields with constraints, dry_run semantics, composite id formats, and routing to alternatives. Minor gap: it doesn't describe what a non-dry_run invocation returns, which would help an agent set expectations after the update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 60% schema coverage, the description picks up the slack. It adds critical meaning: daily_budget is 'NOT micros, NOT cents', cpc_bid is 'only used on Manual CPC... silently ignored under automated bidding... rejected on negative keywords', and entity_id gets a format spec ('<ad_group_id>:<criterion_id>' from adsap_google_get_insights) that the schema's regex alone does not provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Edit') + resource ('existing Google Ads campaign, ad group, ad, or keyword') and enumerates the editable attributes (status, name, budget, bidding, asset automation, cpc bid). Explicitly distingushes itself from siblings: keyword TEXT is immutable and routes to adsap_google_manage_keywords, and Meta entities route to adsap_update_entity.

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

Usage Guidelines5/5

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

Gives explicit when-not guidance: keyword text cannot be changed here, portfolio-strategy campaigns are rejected, cpc_bid only applies to Manual CPC campaigns. Names alternatives with conditions (adsap_google_manage_keywords for replace, adsap_update_entity for Meta) and prescribes the usage pattern: put only changed fields in updates and use dry_run to preview Google's validation.

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

adsap_google_upload_assetUpload Google Ads AssetsAInspect

Create Google Ads assets (images from the ADSAP creative library, text, YouTube videos) in one atomic request — the building blocks for adsap_google_create_pmax_campaign. Image assets report width/height and eligible_field_types so you know which PMax slot (landscape 1.91:1, square 1:1, portrait 4:5, logo) each image can fill; pass the returned asset_id values to the PMax create tool. Use dry_run: true to validate without creating. ad_account_id is the bare 10-digit customer ID. For Meta creative uploads use adsap_upload_creative instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetsYesUp to 20 assets per request, all-or-nothing.
dry_runNo
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden. It discloses atomicity, dry_run behavior, failure-fast behavior for aspect-ratio mismatches, and the AI-generated attestation irreversibility. It does not cover rate limits or authentication, but for a creation tool this is adequate coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but each sentence earns its place: purpose, output hints, dry_run guidance, ID format, and a sibling pointer. It is front-loaded with the primary action and does not wander into unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex (three asset types, atomic semantics, output behavior). The description covers the key aspects: what it creates, how to validate, what the response includes for images, and the relationship to PMax. It does not explicitly describe the full return format for all asset types, but the mention of asset_id and the schema coverage are sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67% (2 of 3 top-level params), and the nested assets have thorough descriptions. The description adds the dry_run purpose and reiterates the ad_account_id format, but these are mostly redundant with the schema. It does not substantially enhance understanding of the parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Create Google Ads assets (images, text, YouTube videos)' in an atomic request. It clearly differentiates from siblings by naming the alternative for Meta uploads (adsap_upload_creative) and ties itself to the PMax campaign tool as its building block. An agent can immediately understand what this tool does and how it fits the broader workflow.

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

Usage Guidelines5/5

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

Explicitly says when to use this tool (for Google PMax asset creation) and when not (for Meta use adsap_upload_creative). It also provides the dry_run validation pattern and clarifies the ad_account_id format. The guidance is unambiguous and actionable.

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

adsap_google_upload_videoUpload Video to YouTubeAInspect

Upload a video FILE (MP4 in the ADSAP creative library) to YouTube for use in Google Ads video slots, and get back a YouTube video asset. Use this when the user has a video file but NO YouTube channel — the video goes to a Google-managed 'ad storage' YouTube channel owned by the ad account, stays UNLISTED, and never appears on any public channel. If the user already has the video on YouTube, skip this tool and pass the YouTube id/asset directly to the campaign tool instead. TWO STEPS, always: (1) action 'upload' with the storage_path of the file — returns upload_resource_name immediately; (2) action 'status' with that upload_resource_name — YouTube processing usually takes a few MINUTES, so poll every ~30s; while it is still processing you get state UPLOADED and still_processing: true, and once it reaches PROCESSED the tool mints the video asset automatically and returns asset_id + video_id. Feed the result into a video slot: adsap_google_create_demand_gen_campaign uses the VIDEO ID (ad.youtube_video_ids), while adsap_google_create_display_campaign (youtube_video_asset_ids) and adsap_google_create_app_campaign (video_asset_ids) use the ASSET ID. The video title CANNOT be changed after upload (Google marks it immutable) — set it correctly on the upload call. Max 256 MB. ad_account_id is the bare 10-digit customer ID. For Meta video uploads use adsap_upload_creative instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes'upload' pushes the file to YouTube; 'status' polls processing and mints the asset once PROCESSED.
job_idNostatus only: alternative handle returned by the upload call.
dry_runNoupload only: validate the file (exists, size, title) without uploading anything to YouTube.
video_titleNoOptional YouTube title (defaults to the file name). IMMUTABLE after upload — there is no rename.
storage_pathNoupload: object path of the MP4 inside the bucket — must be under YOUR user prefix ({user_id}/...), cross-user paths are rejected. status: may be used INSTEAD of upload_resource_name to recover the job if the upload response was lost.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
storage_bucketNoupload only: ADSAP creative-library storage bucket holding the video file.temp-uploads
is_ai_generatedNoupload only: set true ONLY when the user says the video is AI generated — writes Google's advertiser AI attestation (synthetic_content_info) on the minted asset, which cannot be fully unset later. Omitted = no attestation written.
video_descriptionNoOptional YouTube description. Also immutable after upload.
upload_resource_nameNostatus only: the value returned by the upload call (customers/{cid}/youTubeVideoUploads/{id}).

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries full behavioral disclosure. It reveals that videos land on a Google-managed 'ad storage' channel, stay UNLISTED, never appear publicly, take minutes to process, require polling every ~30s, produce intermediate UPLOADED state with still_processing:true, auto-mint the asset at PROCESSED, and that title/description are immutable after upload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place. It front-loads the core purpose, then covers when-to-use, the two-step lifecycle, downstream tool routing, and constraints without filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 10 parameters, no annotations, and no output schema, the description is remarkably complete: it explains the polling cadence, state transitions, max file size, bare 10-digit ad_account_id format, AI-attestation side effects, and how the returned asset IDs feed into specific adjacent campaign tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds workflow semantics beyond the field docs: the mandatory two-action sequence (upload then status), how storage_path can recover a lost upload in status mode, which campaign tool uses video_id versus asset_id, and the immutability consequences that make video_title critical on the upload call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: uploading an MP4 video FILE from the ADSAP library to YouTube for Google Ads video slots, returning a YouTube video asset. It distinguishes itself from Meta uploads and from passing an existing YouTube ID directly to a campaign tool.

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

Usage Guidelines5/5

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

Explicitly states when to use: when the user has a video file but NO YouTube channel. It also gives the alternative path — if the video is already on YouTube, skip this tool and pass the ID/asset directly — and names adsap_upload_creative for Meta video uploads.

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

adsap_import_account_creativesImport Meta Account CreativesAInspect

Import ALL historical creative assets (images + videos) that already exist in a Meta ad account into the ADSAP Creative Library. Runs in the background (minutes for large accounts); check progress with adsap_get_import_status. Already-imported assets are skipped (content-hash dedup for images, video_id for videos), and after the first full import a daily sync picks up new assets automatically. Assets stay on Meta — the library stores metadata + a thumbnail, and imported assets are immediately reusable in new ads.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesMeta ad account to import historical creatives from (act_ prefix).

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so well. It discloses async execution, deduplication behavior, automatic daily sync, storage semantics (metadata + thumbnail, not full assets), and that assets remain on Meta. This gives an agent a clear picture of side effects and 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four dense sentences with no filler. It front-loads the core action and scope, then efficiently covers execution mode, progress tracking, deduplication, sync behavior, storage implications, and reusability. Every clause adds useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter async import tool, the description covers trigger, background execution, progress checking, deduplication, post-import sync, storage behavior, and downstream use. The only minor gap is that it never explicitly states what the initial call returns (e.g., an import job ID), though pointing to adsap_get_import_status is a useful substitute.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, ad_account_id, is already fully documented in the schema with a pattern and description. The tool description does not add parameter-level detail, but with 100% schema coverage the baseline of 3 applies; no additional compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Import ALL historical creative assets (images + videos) that already exist in a Meta ad account into the ADSAP Creative Library.' It clearly identifies source, destination, asset scope, and differentiates this bulk import from sibling tools like adsap_upload_creative or adsap_list_creative_assets.

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

Usage Guidelines4/5

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

The description gives clear usage context: it runs in the background, users should check progress via adsap_get_import_status, and after the first full import a daily sync handles new assets. It does not explicitly contrast with manual upload tools or state when not to use it, but the guidance is strong enough for an agent to know when this bulk import is appropriate.

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

adsap_list_ad_accountsList Ad AccountsAInspect

List Meta ad accounts the user manages. Returns status, currency, timezone. Use to pick an account. PLATFORM RULE: when the user's question does not name a platform ('my ads', 'my accounts', 'how did my ads do'), this list is NOT the whole picture — ALSO call adsap_google_list_ad_accounts and present both platforms' accounts together, or explicitly say you are only covering Meta. Never let a platform-unspecified question silently become Meta-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
status_filterNoALL

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the returned fields (status, currency, timezone) and the platform-scope limitation, which is useful. However, it does not disclose pagination behavior, whether the list is ordered, or what happens when the user has no accounts. The description adds some behavioral context but not a full picture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core purpose is in the first sentence, and the platform rule is clearly separated. The PLATFORM RULE is somewhat long but earns its place because it prevents a common silent failure. No wasted words, though the rule could be slightly tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no required parameters and no output schema, the description covers the essential context: what it returns, why to use it, and the critical cross-platform caveat. It does not describe pagination or error cases, but those are minor for this tool's complexity. The platform rule is the most important contextual element and it is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it does not explain any of the three parameters (limit, cursor, status_filter). The description only mentions the returned fields, not how to filter or paginate. The schema itself provides defaults and enums, so the parameters are partially self-documenting, but the description adds no parameter-level meaning. Baseline 3 is appropriate because the schema carries the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a specific resource ('Meta ad accounts the user manages'), and the key returned fields (status, currency, timezone). It also explicitly distinguishes this from the Google sibling by naming the platform, so an agent can tell it apart from adsap_google_list_ad_accounts without opening the schema.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance ('Use to pick an account') and, more importantly, a PLATFORM RULE that tells the agent when this tool alone is insufficient: if the user's question does not name a platform, the agent must also call adsap_google_list_ad_accounts and present both platforms together, or explicitly state it is only covering Meta. This is strong routing guidance with a clear alternative and a clear exclusion condition.

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

adsap_list_ad_setsList Ad SetsAInspect

List ad sets for a campaign. Returns targeting, budget, optimization, schedule, and delivery status. Renders an interactive card where the user can TICK rows to select ad sets; the current selection is recorded in the card's widget context. When the user refers to a ticked/chosen ad set ('this one', 'the one I picked'), READ the widget context first — never claim you cannot see in-card ticks without reading it. A selected ad set's id goes straight into adsap_create_ad / adsap_create_ad_from_ig_post.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
campaign_idYes
ad_account_idNo
status_filterNoALL

TDQS

A3.6/5.0
Behavior4/5

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 renders an interactive card, records selections in widget context, and instructs the agent to read that context before claiming inability. It also hints at downstream usage. This goes beyond a typical list operation, though it does not mention safety or side effects (likely read-only).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the core purpose, and includes relevant behavioral context. It is efficient and avoids redundancy, though the second sentence is dense with instructions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given five parameters, no annotations, and no output schema, the description is incomplete. It omits parameter semantics (except implied campaign_id), pagination behavior, and return format details. The interactive card behavior is covered, but an agent would still lack essential usage details for optional parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 only implies the required campaign_id via 'for a campaign' but does not explain limit, cursor, ad_account_id, or status_filter. The description adds no parameter detail beyond the schema, leaving these parameters underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists ad sets for a campaign and specifies the returned fields (targeting, budget, optimization, schedule, delivery status). This is specific and unambiguous, and the name alone distinguishes it from sibling list tools.

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

Usage Guidelines3/5

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

The description explains the interactive card selection mechanism and how to handle ticked selections (read widget context, use selected id for create tools), but it does not explicitly contrast with alternatives or state when to prefer this tool over other listing tools. The context is useful but not a full usage guide.

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

adsap_list_ad_sheetsList Ad SheetsCInspect

List bulk ad creation sheets for an ad account. Sheets contain rows of ad configurations.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
ad_account_idNo

TDQS

C2.7/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden. It only says 'List' which implies read-only, but it does not disclose pagination behavior via limit/cursor, whether ad_account_id is required or how it scopes results, or any details about the response. The added note about sheet contents is about the resource, not the tool's runtime behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences. The first states the core action and scope, and the second adds a useful clarification of what ad sheets are. There is no fluff or redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has three optional parameters and no output schema or annotations. An agent needs at least pagination context and the role of ad_account_id to invoke it correctly in varied situations. The current description, while clear on purpose, is too sparse to be fully actionable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description provides no information about the three parameters (limit, cursor, ad_account_id). Since the schema itself supplies no descriptions and the description does not compensate, all parameter semantics are left to the agent to guess.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'List bulk ad creation sheets for an ad account.' It also explains what sheets are ('rows of ad configurations'), which clarifies the object. It doesn't explicitly contrast with siblings like list_ad_sets or get_ad_sheet_schema, but the term 'bulk ad creation sheets' is distinctive enough to avoid major confusion.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives such as list_ad_sets, list_ad_templates, or get_ad_sheet_schema. The description merely implies the obvious case of listing ad sheets, with no context or exclusions.

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

adsap_list_ad_templatesList Ad TemplatesBInspect

List saved ad templates. Pass template_id to creation tools to auto-fill copy, identity, and enhancement presets.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
ad_account_idNo

TDQS

B3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does state the operation is a read-only list, but it says nothing about pagination via cursor/limit, account scoping via ad_account_id, or what fields a template includes. The downstream template_id note is helpful but does not cover the tool's own behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The primary operation is front-loaded, and the second sentence adds relevant usage context without repeating schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool, the description captures the core purpose and downstream use, but with no output schema, no annotations, and undocumented parameters, the agent is left without guidance on pagination, account scoping, or expected return shape. It is minimally viable but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no meaning for the three input parameters: limit, cursor, and ad_account_id. It mentions template_id, which is not an input parameter of this tool, so it fails to compensate for the schema's lack of documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List saved ad templates.' It is clear about what the tool returns. However, it does not distinguish this tool from sibling adsap_google_list_ad_templates, aside from the name prefix, so it stops short of a 5.

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

Usage Guidelines3/5

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

The description gives useful downstream guidance: pass the resulting template_id to creation tools to auto-fill presets. This implies when the tool is useful, but it does not explicitly say when to prefer this over alternative list tools, nor does it mention the Google-specific sibling.

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

adsap_list_appsList Advertisable AppsAInspect

List the apps an ad account can promote — use to pick application_id + object_store_url for App promotion (OUTCOME_APP_PROMOTION) campaigns/ad sets. Serves from the workspace cache (no Meta API call); pass refresh:true to re-sync live from Meta. Note: apps in Development mode appear in this list but Meta refuses to promote them (3858107) — the app must be in Live mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoForce a live re-sync from Meta, bypassing the cache. Default false = serve from the workspace cache (0 Meta API calls).
ad_account_idYesAd account ID (act_xxx). Required — scopes the request to the workspace that owns this account.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses that the default path serves from cache with zero Meta API calls, that refresh:true triggers a live re-sync, and that Development-mode apps will appear but Meta refuses to promote them (3858107). This is strong behavioral disclosure, though it doesn't cover error/return edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: purpose and output usage first, then cache/refresh behavior, then a critical caveat. Every sentence earns its place and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter list tool with no output schema, the description is nearly complete: it names required context, explains the cache behavior, and warns about the Live-mode requirement. It doesn't fully describe the return shape or pagination, but the expected output is strongly implied by the stated use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented. The description reinforces the refresh behavior and explains what the output should be used for, but it doesn't add substantial new parameter-level meaning beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'List the apps an ad account can promote.' It immediately states the agent-facing purpose—picking application_id and object_store_url for OUTCOME_APP_PROMOTION campaigns/ad sets—which clearly distinguishes it from sibling list tools.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: when preparing App promotion campaigns/ad sets and needing application_id plus object_store_url. It also explains the cache-vs-refresh decision. It doesn't name explicit alternatives or when-not-to-use cases, but no sibling is a close substitute, so the guidance is sufficient.

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

adsap_list_automation_rulesList Automation RulesAInspect

List the automation rules on one ad account, and optionally what they have done. Each rule shows its conditions, whether it only reports (mode 'notify') or turns things off (mode 'auto_act'), and its guardrails: the spend floor it will not act below, its per-entity cooldown, how many recent days it ignores for conversion-based numbers, and whether it skips entities still in their learning phase. With include_activity true you also get recent evaluations: 'acted' means it was turned off, 'would_have_acted' means the rule matched but did not act (either it only reports, or the account-wide execute switch is off), and 'skipped' with a reason means a guardrail stopped it. Explain a rule in plain language and always mention its guardrails, since they are what makes it safe.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesMeta act_... or bare 10-digit Google Ads customer id.
enabled_onlyNo
activity_limitNo
include_activityNo

TDQS

A4.3/5.0
Behavior5/5

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

No annotations are provided, so this description carries the full responsibility. It discloses mode 'notify' vs 'auto_act', the guardrails (spend floor, per-entity cooldown, learning phase skip), and the meaning of 'acted', 'would_have_acted', and 'skipped' with reasons. It also surfaces the account-wide execute switch as a cause of non-action, which goes well beyond annotation-level info.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core list action is front-loaded, followed by dense but relevant details on output contents and evaluation statuses. The final sentence is an agent-facing presentation directive that adds value, but the paragraph is long enough that it could be structured more tersely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description effectively substitutes by enumerating returned fields, guardrails, and evalution status meanings. It leaves enabled_only and activity_limit semantics to the schema, but those parameters are simple and have defaults and ranges, so the gap is not crippling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema describes only account_id (25% coverage), so the description must compensate. It does add real meaning for include_activity by explaining the returned evaluation semantics. However enabled_only and activity_limit are never described in prose; their meaning is left to inference from their names and schema defaults. That partial compensation deserves a middle score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a concrete verb 'List' and resource 'automation rules on one ad account', then details exactly what each rule contains (conditions, mode, guardrails). The read-only listing intent is unambiguous and clearly distinct from the sibling manage_automation_rule, which implies mutation.

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

Usage Guidelines4/5

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

It clearly conveys when it is appropriate: when you need to inspect automation rules or explain their behavior and guardrails, optionally including recent evaluations. It does not explicitly name an alternative or state when-not to use it, so it stops short of a 5.

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

adsap_list_campaignsList CampaignsAInspect

List Meta campaigns in an ad account. Returns budget, schedule, objective. Renders an interactive card where the user can TICK rows to select campaigns; the current selection is recorded in the card's widget context. When the user refers to a ticked/chosen campaign, READ the widget context first — never claim you cannot see in-card ticks without reading it.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
ad_account_idNo
status_filterNoALL
objective_filterNo

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It openly states the returned fields and, more importantly, discloses the interactive card behavior, tick selection, widget context storage, and the required agent behavior of reading the widget context before claiming inability to see ticks. It leaves some behaviors unspecified (e.g., pagination/cursor semantics), but the unusual interaction behavior is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, followed by the behaviorally important card/tick instruction. Every sentence earns its place; there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the operational gist and the interactive selection behavior, which is valuable. However, with no output schema, no annotations, and zero parameter documentation, the description is not fully complete for an agent trying to supply parameters correctly or understand pagination behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description explains none of the five parameters. It does not define ad_account_id, limit, cursor, status_filter, or objective_filter semantics. An agent receiving this description would have to guess how to populate the filters and how pagination works.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List Meta campaigns in an ad account.' It names the returned fields (budget, schedule, objective), clearly distinguishing itself from sibling tools like adsap_google_list_campaigns and adsap_list_ad_sets.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: listing Meta campaigns within an ad account. It does not explicitly name alternative tools or exclusion conditions, but the resource and platform are clear enough for an agent to select it correctly among the many list/ad tools.

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

adsap_list_catalogsList CatalogsAInspect

List Meta product catalogs and their product sets for an ad account — use to pick a catalog + product set when building catalog, DPA, or collection ads. Serves from the workspace cache (no Meta API call). Pass refresh:true to force a live re-sync from Meta when the cached list may be stale.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoForce a live re-sync from Meta, bypassing the cache. Default false = serve from the workspace cache (0 Meta API calls). Use when the cached catalog/product-set list may be out of date.
ad_account_idYesAd account ID (act_xxx). Required — scopes the request to the workspace that owns this account.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It clearly discloses that the tool serves from the workspace cache (no Meta API call) and that refresh:true forces a live re-sync, which is critical behavioral context beyond the schema. This effectively communicates the operation's side effects and performance characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero redundancy. The first sentence states the action and use case; the second explains cache behavior and refresh. Information is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool without an output schema, the description covers purpose, use case, and cache/refresh behavior. It does not describe the return format or error handling, but those are inferable for a list operation. The description is complete enough for an agent to call it correctly in the intended scenario.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (ad_account_id and refresh) are fully documented in the schema. The description reinforces the refresh semantics and ad_account_id scoping but does not add new information beyond what the schema already provides. Baseline 3 is appropriate given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: lists Meta product catalogs and their product sets for an ad account. Clearly distinguishes from sibling list tools (e.g., adsap_list_ad_accounts) and catalog-specific tools (adsap_get_catalog_details) by its explicit purpose. The use case for building catalog, DPA, or collection ads adds specificity.

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

Usage Guidelines4/5

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

Provides a clear context for when to use the tool ('use to pick a catalog + product set when building catalog, DPA, or collection ads') and explains the cache/refresh behavior. It does not explicitly name alternative tools or state when not to use it, but the use case is unambiguous enough for an agent to select it appropriately.

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

adsap_list_creative_assetsList Creative AssetsCInspect

List uploaded Meta creative images and videos in the ad account asset library.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
type_filterNoALL
ad_account_idNo

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of disclosing behavior, but it only says 'List' and gives the resource scope. It does not mention pagination behavior, output shape, whether an ad account ID is required, or any auth/rate-limit considerations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single 15-word sentence with no filler and front-loads the action and resource. Every word adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters, no annotations, and no output schema, this description is far from complete. It omits pagination/cursor usage, filter semantics, and the shape of the returned asset list, leaving an agent to guess at invocation and expected results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover 0% of the 4 parameters, so the free-text description must compensate. It weakly hints at type_filter via 'images and videos' and at ad_account_id via 'ad account asset library', but it does not explain limit, cursor, type_filter, or ad_account_id semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb ('List') and names a specific resource: uploaded Meta creative images and videos in the ad account asset library. It is distinguishable from the Google sibling by the 'Meta' qualifier, but it does not explicitly contrast itself with closely named tools like adsap_list_meta_assets.

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

Usage Guidelines2/5

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

The description provides no guidance on when to choose this tool over alternatives such as adsap_list_meta_assets, adsap_get_creative_performance, or adsap_google_list_creative_assets. There are no usage conditions, exclusions, or prerequisite notes.

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

adsap_list_custom_audiencesList Custom AudiencesAInspect

List custom audiences and saved audiences in a Meta ad account. Returns audience type (website retargeting, customer list, lookalike, engagement), size, freshness, staleness flags. Essential for auditing audience strategy — detecting missing retargeting, stale seeds, untapped lookalikes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 50, max 200.
cursorNoPagination cursor from previous response.
type_filterNoFilter by audience type. Default: ALL.
ad_account_idYesMust include act_ prefix.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the return fields (type, size, freshness, staleness), which adds value beyond the schema. However, it does not explicitly state that the operation is read-only, nor does it mention pagination behavior or any permissions. For a simple list tool this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The first sentence packs the verb, resource, and return fields; the second gives the intended use case. Content is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 100% schema coverage and no output schema, the description covers the essential return fields and intended use case. It does not mention pagination, but the cursor parameter in the schema hints at it. This is a minor gap for an otherwise complete definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and all four parameters have descriptive schema text, including the required act_ prefix and the type_filter enum. The description adds no parameter-level detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), resource ('custom audiences and saved audiences in a Meta ad account'), and the key return fields (audience type, size, freshness, staleness). This clearly differentiates it from sibling tools like adsap_get_custom_audience_ads or adsap_manage_custom_audience.

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

Usage Guidelines4/5

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

Provides a clear use case: 'auditing audience strategy — detecting missing retargeting, stale seeds, untapped lookalikes.' This tells an agent when to use the tool, though it does not explicitly name exclusions or alternatives.

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

adsap_list_custom_conversionsList Custom ConversionsAInspect

List an ad account's custom conversions (live from Meta) — the CAPI/pixel conversion definitions used as optimization or attribution events (e.g. 'Purchase over $50', a specific URL rule). Returns id, name, event type, creation time, and rule. Use to look up a custom conversion id before building a sales/leads ad set, or to audit which conversions exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoPagination cursor from a previous response's meta.paging_after, to fetch the next page.
limitNoMax custom conversions to return per page. Default 25, max 100.
ad_account_idYesAd account ID (act_xxx) to list custom conversions for. Required — scopes the request and anchors the Meta budget check.

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that the data is 'live from Meta' (indicating freshness) and lists the return fields (id, name, event type, creation time, rule). However, it does not disclose pagination behavior beyond what the schema describes, nor does it mention potential rate limits or error conditions. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise—three sentences—and front-loads the primary action and resource. It efficiently conveys purpose, context, and use cases without repetition or filler. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three parameters and no output schema or annotations, the description is fairly complete. It covers the purpose, the type of data, return fields, and common use cases. It omits explicit mention of pagination (though the 'after' parameter in schema hints at it) and rate limits, but these are not critical for basic invocation. Overall, it provides enough context for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter-specific details beyond what the schema already provides; it only references the action and return fields. It doesn't clarify parameter syntax or edge cases, so it earns the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List an ad account's custom conversions'), the specific resource, and adds context on what custom conversions are ('CAPI/pixel conversion definitions used as optimization or attribution events') with an example. It also lists the returned fields, distinguishing it from sibling list tools by focusing on the exact entity type.

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

Usage Guidelines4/5

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

The description gives explicit use cases: 'Use to look up a custom conversion id before building a sales/leads ad set, or to audit which conversions exist.' This clearly indicates when to invoke the tool. It does not explicitly name alternative tools or state when not to use it, but the use cases are specific enough to guide an agent.

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

adsap_list_drive_filesList Google Drive FilesBInspect

Browse Google Drive for creative image/video files to upload to Meta.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
folder_idNo
folder_pathNoe.g. 'Creatives/Q4/Videos'. folder_id takes priority if both set.
type_filterNo
search_queryNoSearch by name. Overrides folder_id/folder_path.

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It indicates a browse/read-style operation and a file type focus, but it doesn't explain filter precedence, search overrides, limit behavior, folder semantics, or output shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clean sentence with no filler, and it front-loads the core purpose. However, it is closer to a purpose tagline than a structured tool spec.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderately paramterized tool with five optional inputs, no annotations, and no output schema, the description is too thin. It leaves agents without useful guidance on parameter interactions, filter behavior, and what a successful result looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, so the description should compensate. It does not explain limit, folder_id, or type_filter beyond the vague 'image/video' hint, leaving three of five parameters underdocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Browse'), a clear resource ('Google Drive'), the relevant content type ('creative image/video files'), and the downstream purpose ('upload to Meta'). This distinguishes it from sibling tools like adsap_list_dropbox_files and adsap_list_creative_assets.

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

Usage Guidelines3/5

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

The description implies the tool is for finding Google Drive creatives before a Meta upload, giving some context for when to use it. However, it does not explicitly state when not to use it or mention alternatives such as adsap_list_dropbox_files or adsap_list_creative_assets.

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

adsap_list_dropbox_filesList Dropbox FilesAInspect

Browse Dropbox for creative image/video files to upload to Meta. Returns each file's dropbox_path, which adsap_upload_creative accepts directly.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
folder_pathNoDropbox folder to list, e.g. '/Creatives/Q4'. Omit for the root folder.
type_filterNo
search_queryNoSearch Dropbox by filename. If folder_path is also set, the search is scoped to that folder.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full behavioral burden. It discloses the read-only nature ('Browse') and the output (dropbox_path), but it does not mention pagination, rate limits, authentication, or whether the returned files are filtered by default. The phrase 'creative image/video files' could imply a filter, but the schema has a type_filter parameter allowing ALL, so the default behavior is ambiguous. More disclosure 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. The first sentence states the purpose and scope, the second states the output and integration. Information is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a listing tool with 4 optional parameters and no output schema, the description provides the essential purpose and the key output field (dropbox_path). However, it does not explain pagination, sorting, default filters, or error behavior. Given the absence of annotations and an output schema, more context would be needed for an agent to use the tool correctly in all scenarios. The integration hint is helpful but not sufficient for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (folder_path and search_query have descriptions, limit and type_filter do not). The tool description does not add parameter-specific meaning beyond what the schema already provides. It only mentions the output path and its use in uploads, which is not parameter-related. Since coverage is partial but not zero, a baseline of 3 is appropriate, but the description could have compensated for the missing parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Browse', the resource 'Dropbox', and the purpose 'creative image/video files to upload to Meta'. It also explicitly mentions the output (dropbox_path) and its compatibility with the sibling tool adsap_upload_creative, which distinguishes it from other listing tools like adsap_list_drive_files or adsap_list_creative_assets.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool (when you need Dropbox files for Meta uploads) and even names the integration point (adsap_upload_creative). However, it does not explicitly exclude alternatives like Google Drive or Meta assets, leaving some inference to the agent. Still, the purpose and the mention of the downstream tool offer strong guidance.

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

adsap_list_experimentsList ExperimentsAInspect

List an ad account's Meta experiments / ad studies (live from Meta) — A/B split tests and conversion-lift studies, with type, status timestamps (start/end/canceled/observation-end), and description. Use to audit which experiments exist or ran, before analyzing results in Ads Manager. Read-only: experiments can only be CREATED in Meta Ads Manager (the public API does not support creation), so use this to inspect, not to set up tests.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoPagination cursor from a previous response's meta.paging_after, to fetch the next page.
limitNoMax experiments to return per page. Default 25, max 100.
ad_account_idYesAd account ID (act_xxx) to list experiments for. Required — scopes the request and anchors the Meta budget check.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool is read-only, pulls data live from Meta, and that the API cannot create experiments. This is strong behavioral context for a list tool, though pagination and rate-limit behavior are not mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler. The purpose and resource are front-loaded, and every sentence adds meaningful information about scope, usage, or behavioral constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description enumerates key returned fields (type, status timestamps, description) and clarifies the data source. The parameters are fully documented in the schema. Slightly more detail about pagination and defaults in the description would improve completeness, but the schema already covers it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter already documented in the input schema. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific verb 'List' and resource 'Meta experiments / ad studies', and enumerates the included data (A/B split tests, conversion-lift studies, type, status timestamps, description). This clearly distinguishes it from sibling list_* tools, none of which target Meta experiments.

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

Usage Guidelines4/5

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

Explicitly states when to use it: to audit which experiments exist or ran before analyzing results in Ads Manager. It also clarifies that creation is not supported via the public API and must happen in Meta Ads Manager, effectively ruling out use for setup. However, it does not name a specific sibling alternative.

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

adsap_list_ig_mediaList Instagram MediaAInspect

List an Instagram account's recent media/posts (live from Meta) — the posts, reels, and stories that can be promoted. Use after adsap_list_meta_assets (asset_type:"instagram_accounts") to pick a post to boost or to reference existing organic content. Returns each media item's id, type (IMAGE/VIDEO/CAROUSEL_ALBUM), placement (media_product_type: FEED/STORY/REELS), image/thumbnail URL, permalink, caption, timestamp, and like/comment counts, plus a pagination cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoPagination cursor from a previous response's meta.paging_after, to fetch the next page.
limitNoMax media items to return per page. Default 25, max 25 (Meta's per-page cap for IG media).
ad_account_idYesAd account ID (act_xxx) the Instagram account is linked to. Required — scopes the request to the workspace and anchors the Meta budget check.
ig_account_idYesInstagram account ID (numeric) whose media to list. Get it from adsap_list_meta_assets (asset_type:"instagram_accounts" -> instagram_user_id / id).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden and does so meaningfully: it labels the data as 'live from Meta,' specifies that results are media eligible for promotion, and names the returned fields including a pagination cursor. It stops short of stating side-effect/auth/error behavior, but 'List' and the return-value detail make the read-only nature clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences with the main purpose front-loaded. The detail on return fields and pagination is valuable because there is no output schema, and no sentence is redundant with the input schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema or annotations, the description includes a full return-field inventory and pagination cursor, plus a clear prerequisite call and sourcing instructions for ig_account_id. An agent can understand what to expect and what to supply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 4 parameters are already documented in the schema (100% coverage), so the description does not need to re-explain them. It adds workflow context by pointing to adsap_list_meta_assets for sourcing ig_account_id, but otherwise the schema carries the parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise action ('List an Instagram account's recent media/posts') and enumerates the content types (posts, reels, stories). It also distinguishes itself from the sibling list_meta_assets by framing this as the follow-up step for selecting promotable organic content.

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

Usage Guidelines4/5

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

Explicitly tells the agent to call this after adsap_list_meta_assets (asset_type:"instagram_accounts") and gives the purpose: picking a post to boost or referencing organic content. It does not list when-not-to-use cases, but the sequencing is strong enough to guide correct invocation.

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

adsap_list_meta_assetsList Meta AssetsAInspect

List Meta pages, Instagram accounts, pixels, or forms for ad creation. Served from ADSAP's asset cache and automatically synced live from Meta when the cache is empty for the requested account.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
asset_typeYes
ad_account_idNo

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does disclose a non-obvious trait: data is served from ADSAP's cache and live-synced from Meta only when the cache is empty. It does not cover output shape or pagination, but the cache/sync behavior is meaningful and transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two direct sentences with no filler. The resource scope is front-loaded, and the cache/sync behavior is added in a single secondary sentence that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a list tool, covering purpose, resource types, and data source, but it leaves cursor/limit mechanics and the return payload unspecified, especially since there is no output schema and no annotations to fill those gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the parameters. It loosely maps to asset_type by listing asset kinds and references the requested account for ad_account_id, but it adds no meaningful explanation for limit, cursor, or ad_account_id beyond what the schema already shows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States precisely that the tool lists Meta assets for ad creation, enumerating concrete resource kinds: pages, Instagram accounts, pixels, and forms. The resource list distinguishes it from many adsap_list_* siblings, though it does not explicitly name an alternative tool.

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

Usage Guidelines3/5

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

The phrase 'for ad creation' implies when this tool should be used, but the description gives no explicit when-not-to-use guidance and names no sibling alternatives. Usage context is present, but routing is left mostly to inference.

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

adsap_list_pixel_eventsList Pixel EventsBInspect

List conversion events for a Meta pixel for ad set optimization.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
pixel_idYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral disclosure burden. It indicates a list/read operation but does not mention pagination behavior via cursor/limit, response shape, or any side effects—gaps an agent must resolve elsewhere.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. Every word contributes to purpose or context, 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.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is too thin. It omits pagination expectations, return value structure, and explicit relationship to sibling tools, leaving an agent to guess at response behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only contextualizes the overall resource rather than explaining individual parameters. pixel_id is implied by 'Meta pixel,' but limit and cursor receive no semantic clarification beyond the schema's type/default/min/max information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List'), names the resource ('conversion events for a Meta pixel'), and states the purpose ('for ad set optimization'). This clearly distinguishes it from sibling tools like get_pixel_details or list_custom_conversions.

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

Usage Guidelines3/5

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

The phrase 'for ad set optimization' implies when the tool is useful, but it does not explicitly state when to prefer it over alternatives such as adsap_get_pixel_stats or adsap_list_custom_conversions. There is no exclusion guidance.

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

adsap_manage_ad_templateManage Ad Template (create / update / delete)AInspect

Create, update, or delete a saved Meta ad template (copy, CTA, destination URL, page/Instagram identity, pixel, catalog refs, enhancement toggles, site links). Completes the pair with adsap_list_ad_templates (read). Update is a PARTIAL PATCH — only the fields you pass change; the copy arrays (primary_texts/headlines/descriptions) and sitelinks replace their whole list. Enhancement toggles use the same toggle keys adsap_list_ad_templates returns in enhancement_flags. dry_run defaults TRUE: call once to preview the exact writes, confirm with the user, then call again with dry_run:false. Deleting a template does NOT touch launched ads; draft ad-sheet rows that still reference it are unlinked (the preview reports how many).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoTemplate name. Required for create.
actionYes"create" a new template, "update" an existing one (partial patch — only fields you pass change), or "delete" one permanently.
dry_runNoTRUE (default) = preview only: shows exactly what would be written (and, for delete, how many draft ad-sheet rows still reference the template and would be unlinked). Set false to apply.
pixel_idNo
headlinesNoUp to 5 headlines. REPLACES all 5 slots.
sitelinksNoSite links shown under the ad. REPLACES the whole list; [] clears.
cta_buttonNoCall-to-action button (Meta enum, e.g. SHOP_NOW, LEARN_MORE, NO_BUTTON). Pass null to clear.
pixel_nameNo
descriptionNoOptional template description. Pass null to clear.
template_idNoRequired for update/delete. The template id from adsap_list_ad_templates.
descriptionsNoUp to 5 descriptions. REPLACES all 5 slots.
display_linkNoDisplay link shown on the ad. Pass null to clear.
enhancementsNoPartial patch of enhancement toggles keyed by toggle_key (the enhancement_flags keys returned by adsap_list_ad_templates, e.g. image_touchups, video_uncrop, carousel_enhance_cta, catalog_biz_ai, collection_hide_price, flexible_advantage_plus_creative). Only the keys you pass change. Unknown keys are rejected with the valid list.
instagram_idNo
ad_account_idNoRequired for create: act_<digits>, the Meta ad account the template belongs to. Ignored on update/delete (a template cannot move accounts).
primary_textsNoUp to 5 primary texts. REPLACES all 5 slots (pass the complete list you want to keep; [] clears all).
instagram_nameNo
url_parametersNoURL parameters (e.g. utm_source=...). Pass null to clear.
catalog_feed_idNoCatalog product feed id (Catalog format). Pass null to clear.
url_destinationNoDestination URL. Pass null to clear.
facebook_page_idNo
facebook_page_nameNo
partner_instagram_idNo
catalog_product_set_idNoCatalog product set id. Pass null to clear.
partner_instagram_nameNo
partner_facebook_page_idNo
partner_facebook_page_nameNo

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It discloses partial patch, replace arrays, dry_run default, delete unlink behavior, and enhancement toggle keying. No contradictions and rich behavioral context that goes beyond what a schema would reveal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph that front-loads purpose and then packs critical behavioral details. Every sentence contributes: scope, differentiation, patch semantics, dry_run pattern, and delete side-effects. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 27-param mutation tool with no annotations and no output schema, this description covers the major pitfalls: replace vs patch, dry_run flow, delete consequences, and enhancement toggle keys. It could mention error handling or exact return format, but given the tool's scope, it is quite complete. The reference to the list tool for IDs and toggle keys is helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63%, so description adds significant value by explaining the semantics of arrays (replace whole list), dry_run (preview vs apply), action enum (partial patch), and template_id requirement. It doesn't individually describe all 27 params but the key complex behaviors are covered, compensating well for the moderate schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Create, update, or delete a saved Meta ad template'. Explicitly names the sibling read tool (adsap_list_ad_templates) and distinguishes from Google counterpart via 'Meta'. An agent can immediately know what this does and how it differs from the list tool and the Google variant.

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

Usage Guidelines5/5

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

Provides clear when/how: partial patch semantics, array replacement behavior, dry_run default true with a two-call pattern (preview then apply), and delete side-effects (doesn't touch launched ads, unlinks draft rows). These are actionable guidelines that an agent can follow without guessing.

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

adsap_manage_automation_ruleManage Automation RuleAInspect

Create, change, switch on/off or delete an automation rule for one ad account. A rule checks the account every day and, when every condition is true, either just reports it (mode 'notify') or turns the entity off (mode 'auto_act'). ALWAYS call with dry_run true first, read the parsed rule back to the user in plain language including its guardrails, and only call again with dry_run false after they explicitly confirm: a rule mis-parsed from a sentence can switch off a client's live spending. min_spend is REQUIRED and cannot be zero-ed away by design, because a rule with no spend floor fires on noise. Conditions are combined with AND. Cost-per-conversion, return-on-spend and conversion-count conditions automatically ignore the most recent day or two, because conversions take time to be counted. On Meta a rule never acts on something still in its learning phase or changed in the last 2 days. Google supports campaign and ad_set levels only.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
nameNo
levelNo
actionYes
dry_runNoTRUE previews without writing. Always preview first.
rule_idNoRequired for update, enable, disable and delete.
min_spendNoRequired on create. The entity must have spent at least this much before the rule may act.
account_idYesMeta act_... or bare 10-digit Google Ads customer id.
conditionsNo
entity_idsNoLimit the rule to these specific entities. Omit to watch every entity at that level in the account.
cooldown_hoursNoDefault 24.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It explains the daily evaluation cadence, the AND-combination of conditions, the mandatory min_spend guardrail, the automatic ignoring of recent days for conversion-based metrics, and Meta's learning-phase protection. These are non-obvious behaviors that an agent must know to avoid misfiring on live spending.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but each sentence earns its place. It front-loads the purpose and the critical safety protocol, then provides guardrail and platform constraints. No fluff or repetition. It is longer than typical, but the complexity of the tool justifies the length. The structure flows logically from what→when→how.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 11 parameters, nested conditions, and no output schema, the description covers the essential behavioral and safety context. It explains the daily check, modes, guardrails, AND logic, recency handling, and platform differences. It does not describe the return format, but since there is no output schema, that omission is acceptable. An agent could call this tool correctly with the information provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 55%, so the description must compensate. It adds meaning for several critical parameters: mode (notify vs auto_act), min_spend (required, cannot be zeroed), conditions (AND semantics, conversion-metric recency exclusion), level (Google restriction), and dry_run (must preview first). It also clarifies account_id formats. However, some parameters like cooldown_hours and entity_ids are only minimally addressed, leaving gaps that the schema partially covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb+resource: 'Create, change, switch on/off or delete an automation rule for one ad account.' It precisely enumerates the supported actions (create, update, enable, disable, delete) and specifies the scope (one ad account). This distinguishes it from sibling tools like adsap_list_automation_rules, which only lists rules, and other adsap_manage_* tools that target different entities.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance with a mandatory safety protocol: 'ALWAYS call with dry_run true first, read the parsed rule back to the user in plain language including its guardrails, and only call again with dry_run false after they explicitly confirm.' It also gives platform-specific constraints (Google supports campaign and ad_set levels only) and explains the two modes (notify vs auto_act). No alternative tool is named, but the usage context is unambiguous.

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

adsap_manage_custom_audienceManage Custom Audience (create / update / delete)AInspect

Create, update, or delete a RULE-BASED custom audience: Website (pixel/site visitors), Engagement (Instagram/Facebook engagers), Lookalike (people similar to an existing audience), or App (mobile app users). Completes the pair with adsap_list_custom_audiences (read). For create, pick an audience_type and pass a rule (or lookalike fields). dry_run defaults TRUE: call once to preview, then again with dry_run:false to apply. Delete is PERMANENT and auto-pauses any ad sets using the audience — the dry_run preview lists them first. NOTE: this covers rule-based audiences only; uploading a customer list (hashed emails/phones) is NOT supported here. The account must accept Meta's Custom Audience Terms of Service once before any audience can be created (Meta returns an accept URL if not).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRequired for action=create. The audience name shown in Ads Manager.
ruleNoRequired for create when audience_type is website/engagement/app (NOT lookalike). A JSON-ENCODED STRING (not an object). Structure: {"inclusions":{"operator":"or","rules":[<rule>]}} (optional top-level "exclusions" with the same shape). Each <rule>: {"event_sources":[{"type":"<TYPE>","id":"<ID>"}],"retention_seconds":<n>,"filter":{"operator":"and","filters":[...]},"template":"<TEMPLATE>"}. WEBSITE: type "pixel" (id from adsap_list_meta_assets pixels). All visitors → template "ALL_VISITORS" + filter {"field":"url","operator":"i_contains","value":""}. Specific pages → template "VISITORS_BY_URL" + filter {"field":"url","operator":"i_contains","value":"<keyword>"}. Standard events → template "VISITORS_BY_URL" + filter {"field":"event","operator":"eq","value":"Purchase"/"AddToCart"/"Lead"/...}. ENGAGEMENT (Instagram): type "ig_business" (id = Instagram account id from adsap_list_meta_assets), filter {"field":"event","operator":"=","value":"ig_business_profile_all"} (all engagers). APP: type "app" (app id), template "MACA_APP_LAUNCHED_USERS" + filter {"field":"event","operator":"=","value":"fb_mobile_activate_app"}. retention_seconds = how long to keep members (max 15552000 = 180 days; 2592000 = 30 days).
ratioNoLookalike only. Share of the population to match, 0.01 (1%, closest/smallest) to 0.20 (20%, broadest/largest). Defaults to 0.01.
actionYesWhat to do: "create" a new rule-based audience, "update" an existing one's name/description/rule, or "delete" one permanently.
dry_runNoTRUE (default) = preview only, nothing is written. For delete, the preview also lists which ad sets would be auto-paused. Set false to actually create/update/delete.
prefillNoOptional (website/engagement/app create). TRUE backfills the audience with historical data. Defaults to Meta's default (true).
descriptionNoOptional description for the audience (create or update).
ad_account_idYesact_<digits>. The ad account that owns (or will own) the custom audience. Used for ownership, workspace resolution, and Meta API budget.
audience_typeNoRequired for action=create. "website" = pixel/site visitors (WCA), "engagement" = people who engaged with your Instagram/Facebook (ECA), "lookalike" = people similar to an existing audience (LAL), "app" = mobile app users (MACA).
lookalike_countryNoLookalike only. ISO country code (e.g. "US", "FR", "GB"). DEPRECATED BY META (v26 / all versions from 2026-09-01): the API silently ignores it and creates a countryless parent lookalike — delivery locations come from the ad sets that use the audience. Still accepted for backward compatibility; Meta returns a deprecation warning.
custom_audience_idNoRequired for action=update and action=delete. The numeric id of the existing custom audience. Get it from adsap_list_custom_audiences.
origin_audience_idNoRequired for create when audience_type=lookalike. The numeric id of the SEED audience to model on (a WEBSITE/ENGAGEMENT/APP/CUSTOM audience — NOT another lookalike). Get it from adsap_list_custom_audiences.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it excels: dry_run defaults to true and the two-call pattern is explicit, delete is described as PERMANENT with auto-pausing of ad sets and a preview listing them, and the lookalike_country deprecation (silently ignored) is disclosed. The TOS acceptance requirement adds an operational caveat. This is far beyond the minimum.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but justified by the tool's complexity (12 params, four audience types, a destructive delete path). It is front-loaded with the core action and types, then dry_run, then critical warnings, then exclusions. Each sentence provides distinct value, though it could be tightened slightly without losing content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description covers the essential operational context: required actions, dry_run semantics, destructive consequences, TOS prerequisite, and unsupported case. It does not describe the response/return format for create/update previews, but the lack of an output schema makes this a minor gap rather than a critical omission for a management tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The main description adds general guidance (e.g., rule vs lookalike fields, dry_run behavior) but the detailed parameter semantics are already in the schema descriptions. It does not meaningfully extend beyond the schema for individual parameters, and the rule-construction details live in the schema, not the tool description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-resource pair: create, update, or delete rule-based custom audiences, and enumerates the four supported types (Website, Engagement, Lookalike, App). It clearly differentiates from the sibling adsap_list_custom_audiences by positioning this as the write counterpart and explicitly excludes customer-list uploads, leaving no ambiguity about scope.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: it names the read sibling for lookups, states what is NOT supported (hashed customer lists), and instructs on the dry_run workflow (preview first, then apply). It also flags the Meta TOS prerequisite and the deprecation of lookalike_country, helping the agent decide when and how to invoke the tool correctly.

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

adsap_manage_instant_formManage Instant Form (create / duplicate / archive)AInspect

Create, duplicate, archive or reactivate a Meta Instant Form: the lead form people fill in without leaving Facebook or Instagram. Use it when the user wants a lead ad and has no suitable form yet, or wants a changed version of an existing form. IMPORTANT: Meta never lets a form be edited or deleted once created, only archived, so dry_run defaults TRUE: call once to preview (free, creates nothing), show the user the summary, then call again with dry_run:false after they confirm. To 'edit' a form, duplicate it with the changed sections and archive the old one. Before create, ask the user for their privacy policy link (Meta requires it) and never invent one. Not supported because Meta reserves them to its own interface or they are not built yet: conditional logic, appointment scheduling, store locator, national ID questions, gated file downloads. The returned form_id goes into creative_spec.leadgen_form_id of adsap_create_ad, on an ad set whose conversion location is Instant Forms (or Website and Instant Forms) and that promotes the SAME Page. List a Page's forms with adsap_list_meta_assets (asset_type instant_forms).

ParametersJSON Schema
NameRequiredDescriptionDefault
formNocreate: the whole form (name, questions, privacy_policy and thank_you are required). duplicate: a NEW name plus only the sections to replace; a section you send replaces the whole section, everything else is copied as is.
actionYescreate a new form; duplicate an existing one with changes (the only way to 'edit', since Meta never lets a form be modified); archive (hide it and block it from new ads); reactivate an archived form.
dry_runNoDefault true = preview: checks everything with Meta and creates nothing. Call again with false only after the user confirms. A created form can NEVER be edited or deleted, only archived.
form_idNoRequired for duplicate, archive and reactivate.
page_idNoNumeric id of the Facebook Page that owns the form. A form belongs to ONE Page and only works in ads that run for that Page.
ad_account_idYesMeta ad account (act_...) the Page is connected to. Used for access checks.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full disclosure burden and meets it: it warns that Meta never allows forms to be edited or deleted, explains that dry_run=true creates nothing and is free, and explicitly says to never invent a privacy policy link. This is exactly the kind of side-effect and constraint information an agent needs before invoking a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but each sentence carries essential operational guidance: purpose, invocation timing, irreversibility, privacy policy requirement, unsupported features, and downstream integration. It is well-structured, starting with the core action and important warning before more detailed notes, which is appropriate for a tool with nested schema and multiple actions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the full lifecycle: preconditions (privacy policy), dry-run preview, create/duplicate-as-edit/archive/reactivate, unsupported features, and integration with adsap_create_ad and adsap_list_meta_assets. Since the input schema already documents parameters in depth and the description supplies the workflow glue, nothing critical is missing even without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by explaining the practical role of key parameters: dry_run defaults true for preview and the returned form_id plugs into creative_spec.leadgen_form_id of adsap_create_ad. This integration context helps the agent chain calls correctly rather than just knowing parameter types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource combination ('Create, duplicate, archive or reactivate a Meta Instant Form') and defines what an Instant Form is. It distinguishes itself from siblings by explicitly pointing to adsap_list_meta_assets for listing forms and adsap_create_ad for consuming the returned form_id. No ambiguity about what the tool does.

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

Usage Guidelines5/5

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

The description gives explicit usage conditions ('Use it when the user wants a lead ad and has no suitable form yet, or wants a changed version') and names the sibling for listing forms. It also details the two-call dry_run workflow, instructs the agent to request a privacy policy link, and lists unsupported feature categories so the agent knows when to avoid this tool.

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

adsap_manage_onboarding_planManage Onboarding PlanAInspect

Create, read, update, or delete a structured onboarding plan for a Meta ad account. Persisted in Supabase for cross-session continuity. After gathering business context (via adsap_analyze_website + adsap_get_account_health), use this to store a recommended setup plan with actionable steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesCRUD operation.
plan_idNoOptional. The plan is found by ad_account_id alone. Only pass a plan_id (UUID) previously returned by this tool. Never pass the ad account id here.
step_updatesNoFor update: update specific step statuses.
ad_account_idYesThe ad account this plan is for. Must include act_ prefix.
update_fieldsNoFor update: partial update object. Allowed keys: recommended_steps, recommended_structure, targeting_recommendations, budget_allocation, status.
idempotency_keyNoRetry safety. Auto-generated server-side from request content if absent. Ignored for read action.
business_contextNoRequired for create. Company info gathered by Claude.
budget_allocationNoBudget split recommendation.
recommended_stepsNoRequired for create. Array of step objects with step_id, order, category, title, description, status, priority, depends_on, meta_tool, notes.
recommended_structureNoCampaign hierarchy recommendation.
targeting_recommendationsNoAudience strategy.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context beyond the schema by noting persistence in Supabase for cross-session continuity and by framing the tool as a store for recommended setup plans. However, it does not disclose destructive delete behavior, update semantics, permissions, or return/output behavior, which matters for a CRUD tool with no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences and every sentence earns its place: the first states scope, the second explains persistence, and the third gives workflow placement. It is front-loaded with the core verb and resource, though it is slightly more prose-heavy than the tightest possible definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter CRUD tool with no output schema, the description provides the essential workflow cue and persistence rationale, but it leaves return values, action-specific behavior, and delete/update consequences under-explained. The schema covers parameter semantics well, but the description alone is not fully complete for such a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 11 parameters, including required-for-create flags and CRUD action enums. The description adds workflow-level context around business_context and recommended_steps but does not add parameter-level meaning beyond what the schema provides, matching the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb set ('Create, read, update, or delete') applied to a specific resource ('structured onboarding plan for a Meta ad account') and adds uniqueness via Supabase persistence and the prerequisite workflow. It is easily distinguishable from the many sibling get/list/manage tools because it targets onboarding-plan storage rather than ad entities or external data.

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

Usage Guidelines4/5

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

The description explicitly says when to use the tool: after gathering business context via adsap_analyze_website and adsap_get_account_health, then use this tool to store the recommended setup plan. It provides clear workflow context but does not state when not to use it or name alternative tools for the same job, so it stops short of a 5.

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

adsap_pingPing ADSAP ServerA
Read-onlyIdempotent
Inspect

Verify ADSAP MCP server connectivity and API key. Also reports the caller's Google Ads connection state (token status + linked accounts in this workspace).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior, lowering the description's burden. The description adds useful behavioral context beyond annotations by specifying what the tool reports: token status and linked accounts in the workspace.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, with the primary purpose front-loaded and the secondary reporting behavior stated immediately after. No filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless health-check tool, the description plus annotations are sufficient for an agent to know what the tool does, what it returns conceptually, and that it is safe to invoke. No output schema is present, but the description adequately conveys the informational nature of the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema is fully described at 100% coverage, so there is no parameter ambiguity to resolve. Per the rubric, a zero-parameter tool earns a baseline 4 because there is nothing additional the description needs to add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Verify') and clearly names the resource ('ADSAP MCP server connectivity and API key'), while also adding the secondary purpose of reporting Google Ads connection state. This clearly differentiates it from the many sibling tools that retrieve or mutate advertising data.

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

Usage Guidelines4/5

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

The description establishes clear context: use this tool to check server connectivity, API key validity, and the caller's Google Ads connection state. It doesn't explicitly state when not to use it or name alternatives, but its singular health-check role is unambiguous given the sibling list.

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

adsap_replace_ad_creativeReplace Ad Creative (edit ad content)AInspect

DESTRUCTIVE. Edit the CONTENT of an existing Meta ad: primary text, headline, description, CTA, destination link, display link, UTM url_tags, and the image/video itself. Meta creatives are immutable, so this builds a NEW creative and repoints the ad: the ad keeps its id but gets a new creative_id and the old creative is orphaned. Editing a live/spending ad can reset its social proof (likes/comments/shares) and restart the learning phase. Text fields are ARRAYS — send the COMPLETE set with your edits applied; entries you don't change are preserved verbatim. Media swaps use creative-library assets only and are like-for-like (image->image, video->video); for multi-image ads (square + vertical) use the media array, one entry per slot. ALWAYS call with dry_run: true first — the dry-run returns the before/after diff AND the current media slots (use those to build a media swap) — then dry_run: false to apply.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYesThe Meta AD id to edit (the ad, not the creative). The ad keeps this id; only its creative is replaced.
dry_runNotrue = preview the before->after diff without writing anything. ALWAYS run dry_run: true first.
ad_account_idYesact_<digits>.
creative_specYesThe content fields to change. Text fields are ARRAYS — send the complete set with edits applied; unchanged entries are kept. Media swaps use creative-library assets only (image->image, video->video). At least one field is required.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral disclosure burden. It explicitly warns the tool is DESTRUCTIVE, explains the immutable-creative mechanism (new creative_id, orphaned old creative), discloses side effects on live ads (reset social proof, restart learning phase), and details array/media handling semantics. This is exceptionally transparent and goes beyond what annotations would typically provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: it front-loads the destructive warning, explains the immutable mechanism, lists side effects, covers text-array and media-swap rules, and gives the mandatory dry-run workflow. No fluff or repetition; the structure is logical and efficient for a tool with this complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tricky behavioral aspects thoroughly and provides step-by-step usage for dry_run, which is critical for correct invocation. However, there is no output schema and the description does not explicitly state what the tool returns when dry_run: false (e.g., success indication, new creative_id). Given the complexity and lack of output schema, this is a minor but notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has 100% parameter description coverage, and the description reinforces key semantics (arrays must be complete sets, media slots like-for-like, dry_run importance). It adds value beyond the schema by explaining the dry-run process for retrieving media slots and the ordering requirement for the media array. This is above the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Edit the CONTENT of an existing Meta ad') and enumerates exactly which fields are affected (primary text, headline, description, CTA, links, media). It also distinguishes itself from sibling create tools by explaining the immutable-creative mechanism and that the ad id is preserved. This clearly differentiates it from adsap_create_ad and similar tools.

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

Usage Guidelines4/5

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

The description gives clear procedural guidance ('ALWAYS call with dry_run: true first') and explains when the tool is appropriate (editing existing ad content). However, it does not explicitly name alternatives for other ad modifications (e.g., budget changes via update_entity) or state when not to use this tool. The context is present but exclusions are implicit rather than stated.

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

adsap_search_ad_librarySearch Meta Ad LibraryAInspect

Search Meta's public Ad Library for ads (competitor research / ad transparency). Find the ads a competitor page is currently running, or ads matching a keyword, in given countries. Returns each ad's page, creative text, platforms, delivery dates, a public Ad Library permalink, and a pagination cursor. Read-only public data (not your own account's ads — use adsap_list_campaigns/adsap_get_insights for that). COVERAGE CEILING (Meta's rule, not ADSAP's): the public Ad Library API returns ordinary commercial ads ONLY where they reached the EU or UK. Ads that never reached the EU/UK are returned only when they are political or social-issue ads. So a US-only (or any non-EU/UK) commercial search returns zero results however it is phrased, and that empty result is NOT evidence the advertiser is inactive. Never promise non-EU/UK competitor research from this tool; point the user at the public Ad Library website for those markets.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoPagination cursor from a previous response's meta.paging_after, to fetch the next page.
limitNoMax ads to return per page. Default 25, max 50 (Meta's cap).
ad_typeNoCategory of ads. Default ALL (all commercial ads). Use POLITICAL_AND_ISSUE_ADS etc. for the special transparency categories.
page_idsNoFacebook Page IDs to restrict the search to (returns only ads run by these pages). Provide this and/or search_terms.
countriesYesISO-2 country codes the ads reached, e.g. ["FR"], ["GB","DE"]. Required by Meta (ad_reached_countries). For ordinary commercial ads, only EU/UK countries can return results (see the coverage ceiling in the tool description); non-EU/UK codes return zero unless ad_type is POLITICAL_AND_ISSUE_ADS.
search_termsNoKeyword/phrase to match in ad creative text. Provide this and/or page_ids.
ad_account_idYesYour ad account ID (act_xxx). Required — Meta only serves Ad Library results to callers with an active ad account; also anchors the workspace ownership check + Meta budget.
ad_active_statusNoFilter by whether the ad is currently running. Default ACTIVE (what a competitor is running now). Use ALL to include stopped ads.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It fully discloses the read-only nature, the public-data scope, the EU/UK coverage limitation, the return fields (page, creative text, platforms, delivery dates, permalink, pagination cursor), and the meaning of empty results. It also explicitly warns against overpromising, which is critical behavioral context an agent needs to avoid misleading users.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph but well-structured: purpose first, then return details, then the coverage ceiling and its implications. It is slightly long but every sentence carries necessary information, especially the coverage warning. It is front-loaded with the main purpose and distinguishes siblings early. It earns a 4 rather than 5 because a bit more trimming could make it punchier, but it is far from verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters, no output schema, and no annotations, the description is remarkably complete. It covers what the tool returns, pagination, the coverage ceiling, and alternatives. It also addresses edge cases (non-EU/UK results) and provides guidance on interpreting empty results. Nothing an agent needs to invoke it correctly or manage user expectations is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra meaning beyond the schema: it reiterates the coverage ceiling for countries and why ad_account_id is required, but these are already in the schema descriptions. It does not introduce new parameter semantics, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair ('Search Meta's public Ad Library for ads') and immediately states the two use cases: competitor research and ad transparency. It distinguishes itself from related tools by explicitly naming adsap_list_campaigns/adsap_get_insights as the alternatives for the caller's own ads. The coverage-ceiling note further clarifies the tool's exact scope, leaving no ambiguity about what it does or does not do.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use and when-not-to-use guidance. It states 'not your own account's ads — use adsap_list_campaigns/adsap_get_insights for that' and warns against promising non-EU/UK competitor research, pointing users to the public Ad Library website for those markets. It also explains the coverage ceiling as Meta's rule, so an agent knows when to expect zero results and how to interpret them.

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

adsap_search_behaviorsSearch Targeting BehaviorsBInspect

Search Meta behavior targeting by keyword/category. Returns IDs for use in targeting.behaviors.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoKeyword filter. Omit for all.
categoryNoALL
ad_account_idNo

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It does disclose that this is a search operation and that it returns IDs, which is useful context. However, it does not mention result format, pagination, error behavior, or clarify whether the operation is strictly read-only beyond what 'Search' implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The key action is front-loaded, and the second sentence adds the practical purpose of the returned IDs. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations, no output schema, and four parameters, the description is too thin to fully guide invocation. It omits the meaning of ad_account_id, does not distinguish this search from related targeting searches, and gives no sense of what the response contains beyond IDs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description should compensate for undocumented parameters. It mentions keyword/category, which maps to query and category, but ad_account_id and limit are left unexplained beyond the schema's structural constraints. The description adds little over the schema for the query parameter and nothing for the other parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Search Meta behavior targeting by keyword/category' and explains the result ('Returns IDs for use in targeting.behaviors'). It is distinct enough from siblings like adsap_search_interests because it names behavior targeting, but it does not explicitly differentiate itself from those alternatives.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the many sibling search tools such as adsap_search_interests or adsap_search_geo_locations. The description implies the tool is for looking up behavior targeting IDs, but it offers no exclusions, prerequisites, or alternative routing.

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

adsap_search_catalog_productsSearch Catalog ProductsAInspect

Search or list the products in a Meta product catalog (live from Meta). Optionally narrow with a JSON filter rule (e.g. availability, brand, price) or look up a specific SKU via retailer_id. Returns matching products plus the TOTAL match count — use it before building a product set to preview how many products a filter resolves to.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoPagination cursor from a previous response's meta.paging_after, to fetch the next page.
limitNoMax sample products to return. Default 20, max 100. (The TOTAL count is always returned in meta.total_count regardless of this.)
filterNoOptional JSON-encoded Meta catalog filter rule. Examples: {"availability":{"eq":"in stock"}} · {"brand":{"eq":"Yellowpop"}} · {"price":{"lte":"30000"}} (price in minor units). Omit to list all products.
catalog_idYesMeta catalog ID (numeric). Get it from adsap_list_catalogs (catalogs[].catalog_id).
retailer_idNoConvenience SKU lookup — the merchant retailer_id/SKU (e.g. ABC-001). Builds a retailer_id filter for you. Ignored if `filter` is also provided.
ad_account_idYesAd account ID (act_xxx) that owns the catalog. Required — scopes the request and anchors the Meta budget check.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden, and it delivers useful traits: results are live from Meta, the total match count is always returned, and retailer_id is a convenience that builds a filter. It clearly signals a read/search operation with no destructive side effects, though it does not discuss pagination or rate limits directly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: the action and live source are front-loaded, the filtering and SKU options are summarized, and the return value plus use case are stated. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with no output schema, the description covers the main return value (products + total count), the core entry points (filter or retailer_id), and the motivating use case (preview before building a product set). Pagination details are left to the schema, and no formal output structure is described, but the missing pieces are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the schema already documents every parameter in detail. The description adds a little context around total count, filter use cases, and retailer_id as an SKU lookup, but most parameter meaning comes from the schema itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Search or list the products in a Meta product catalog'), clarifies it is live data, and differentiates the tool by emphasizing filter/SKU lookup plus the total match count. The 'use it before building a product set' phrasing separates it from related catalog and product-set tools.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: to preview how many products a filter resolves to before building a product set, and to search or list live catalog products. It does not explicitly name alternative tools or state when not to use it, but the use case is specific enough to guide selection among siblings.

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

adsap_search_geo_locationsSearch Geo LocationsBInspect

Search Meta city/region location keys for targeting. Country ISO codes do NOT need lookup — use directly in targeting.countries.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
country_codeNoISO alpha-2 to narrow results
location_typesNo

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description must carry the burden of behavioral disclosure. It states the tool searches and returns location keys but does not disclose return format, pagination, error behavior, or any side effects. The only added nuance is the country-code note, which is insufficient for a search tool that may have rate limits or data constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the country-code note is a valuable addition. It is compact and front-loaded with purpose. A slight deduction because adding a little more detail on parameters or output would not hurt.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters and no output schema or annotations, the description is minimal. It does not explain what a valid query looks like, what location_types values are allowed (though defaults are given), or what the return structure is. An agent would need to infer these from sibling patterns or trial-and-error, so completeness is low.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% (country_code has a description), and the tool description does not clarify the remaining parameters (query, limit, location_types). The country-code note does not address parameter usage. The description adds no value to parameter understanding beyond the schema's single description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches Meta city/region location keys for ad targeting, a specific verb-resource combination. It distinguishes from Google's geo-search sibling by specifying 'Meta', and the country-code note prevents misuse. This unambiguously defines the tool's function.

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

Usage Guidelines3/5

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

The description provides one implicit usage rule (do not use for country ISO codes) but does not explicitly state when to prefer this over other search tools like adsap_search_interests or adsap_google_search_geo_targets. The Meta qualifier hints at platform differentiation but no alternatives are named. Guidance is present but minimal.

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

adsap_search_interestsSearch Targeting InterestsAInspect

Search Meta interest targeting by keyword. Returns IDs for use in targeting.interests.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
ad_account_idNo

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the output format (IDs) and their intended use, but does not state whether the operation is read-only, whether pagination exists, or any rate limits or authentication requirements. The disclosure is minimal but not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no redundant words. It front-loads the primary action and immediately conveys the output's purpose, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with only 3 parameters (1 required) and no output schema, the description covers the main goal and return value but omits parameter explanations and any potential constraints (e.g., pagination, account context). It is adequate for a simple tool but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the tool description must compensate. It only mentions 'keyword', which maps to the query parameter, but provides no explanation of the 'limit' or 'ad_account_id' parameters. The agent is left to guess their semantics, especially ad_account_id which appears optional but has no documented purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Search'), resource ('Meta interest targeting'), and method ('by keyword'). It also clarifies the output's purpose ('Returns IDs for use in targeting.interests'). This clearly distinguishes it from sibling tools like adsap_search_behaviors and adsap_search_geo_locations, which target different audiences.

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

Usage Guidelines3/5

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

The description implies the tool is for finding interest targeting IDs, but it does not explicitly state when to use this tool versus alternatives. There is no mention of exclusion criteria or references to sibling search tools, leaving the agent to infer from the name alone.

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

adsap_set_entity_statusPause or Activate EntitiesAInspect

Pause or reactivate one or more Meta campaigns, ad sets, or ads in batch (max 50). Use dry_run: true to preview what would change without making any modifications. Only set action to 'activate' when the user has explicitly requested to resume or reactivate.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
dry_runNo
entity_idsYes
entity_typeYes
ad_account_idYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It usefully discloses that dry_run previews changes without making modifications and warns against activating without explicit user intent. It does not cover authentication, side effects, or failure behavior, but the key behavioral guardrails are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the core operation in the first, dry_run behavior in the second, and the activation guardrail in the third. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description plus schema provide enough to invoke the tool correctly for a batch status change, including batch limits and the dry_run option. However, because there is no output schema and no annotation, the description does not explain what the tool returns, what errors may occur, or what partial-failure behavior is expected. This is a notable gap for a mutating tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies entity_ids ('one or more... max 50'), entity_type ('campaigns, ad sets, or ads'), action ('pause' vs 'activate'), and dry_run semantics. ad_account_id is the only parameter not explained, though it is relatively self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Pause or reactivate'), a clear resource ('Meta campaigns, ad sets, or ads'), and a batch capability. It also distinguishes itself from siblings like adsap_google_set_entity_status by explicitly scoping to Meta entities.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool (pausing/reactivating Meta entities in batch) and provides an important guardrail: only use 'activate' when the user explicitly requested resume/reactivation. It does not explicitly name alternatives or exclusions, but the context is strong.

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

adsap_update_entityUpdate EntityAInspect

Edit an existing Meta campaign, ad set, or ad: change name, status (PAUSED/ACTIVE), budget, schedule, or ad-set targeting. Put ONLY the fields you want to change in updates. Use dry_run: true to preview the diff (current vs new) without applying anything. Budgets are in cents and apply to campaign (CBO) or ad set (ABO) only; targeting applies to ad sets only.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
updatesYesOnly the fields you want to change. At least one is required.
entity_idYes
entity_typeYes
ad_account_idYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and adds useful behavioral context: dry_run previews the diff without applying, updates are partial, budgets are in cents, and targeting is ad-set-only. It stops short of stating permissions, immediate application of changes, or error behavior, but it is substantially transparent for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler, front-loaded with the core purpose and then the most decision-relevant usage rules. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters and no output schema or annotations, the description adequately covers what to send, how to use dry_run safely, and key constraints. It does not describe the success response format or explicit error handling, but that is a minor gap given the rest of the context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%, but the description compensates by defining the `updates` object semantics, dry_run behavior, budget units and placement rules, status values, and targeting scope. This adds meaning beyond the bare schema properties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Edit'), a precise resource ('existing Meta campaign, ad set, or ad'), and enumerates the mutable fields. This clearly separates it from create tools and from Google update tools by naming Meta explicitly.

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

Usage Guidelines4/5

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

Gives clear operational context: only changed fields should go in `updates`, dry_run previews without applying, and budgets/targeting have entity-type restrictions. It does not explicitly name alternative tools for exclusion, but the 'existing' wording and field list imply when it should be used over creation tools.

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

adsap_upload_creativeUpload CreativeAInspect

Upload image/video from Google Drive or Dropbox to a Meta ad account. Provide exactly one of drive_file_id / dropbox_path. Set pair:true on each file of a suffix-named square/vertical set to auto-group them. Videos are async — check with adsap_get_upload_status when complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDefaults to the source filename
pairNoSet true on EACH file of a square/vertical (+optional landscape) set whose filenames share a base name with matching suffixes (e.g. promo_feed.jpg + promo_story.jpg) to auto-group them for multi-placement ads. Pairing happens server-side when the partner file lands, in any order.
typeNoAuto-detected if omitted
labelsNoADSAP-only tags, not in Meta
dropbox_pathNoFrom adsap_list_dropbox_files (its dropbox_path field, e.g. '/creatives/ad.jpg'). Provide exactly one of drive_file_id / dropbox_path.
ad_account_idYes
drive_file_idNoFrom adsap_list_drive_files. Provide exactly one of drive_file_id / dropbox_path.
idempotency_keyNo

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses key behaviors: async video processing, auto-grouping via pair, and auto-detection of type. However, it omits other behavioral traits like what the response contains, whether uploads are idempotent (despite an idempotency_key parameter), or any permission requirements. It's adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with zero fluff. It front-loads the purpose, then immediately gives the most critical constraint (exactly one source), then the pairing and async notes. Every sentence earns its place; no redundancy with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 params, async behavior, pairing), the description covers the essentials: source selection, pairing, and async status check. It does not mention the return value (no output schema, so not required) or idempotency semantics, but for an upload tool this is a solid level of completeness. It could be more thorough about what happens after upload (e.g., returns an ID) but that is not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75% (6/8 params described), so baseline is 3. The description adds meaningful extra semantics beyond the schema: it explains the exactly-one constraint, elaborates on the pair grouping behavior, and notes that type is auto-detected if omitted. This compensates for the two undocumented parameters (ad_account_id, idempotency_key) partially, but those are fairly self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Upload image/video from Google Drive or Dropbox to a Meta ad account') with a specific verb and resource. It distinguishes this from siblings like adsap_google_upload_asset or adsap_import_account_creatives by specifying the source (Drive/Dropbox) and destination (Meta ad account), making its unique purpose unambiguous.

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

Usage Guidelines4/5

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

It provides explicit usage constraints: 'Provide exactly one of drive_file_id / dropbox_path' and instructs on the async nature ('Videos are async — check with adsap_get_upload_status when complete'). It also explains the pairing behavior. It does not explicitly list when not to use this tool versus alternatives, but the constraints are clear enough for an agent to decide.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 93 tool updates
    • First observedadsap_analyze_website
    • First observedadsap_create_ad
    • First observedadsap_create_ad_from_ig_post
    • First observedadsap_create_ad_sets
    • First observedadsap_create_campaign
    • First observedadsap_get_account_activities
    • First observedadsap_get_account_health
    • First observedadsap_get_account_summary
    • First observedadsap_get_ad_library_snapshot
    • First observedadsap_get_ad_preview
    • First observedadsap_get_ad_review_status
    • First observedadsap_get_ad_sheet_schema
    • First observedadsap_get_ad_status
    • First observedadsap_get_catalog_data_sources
    • First observedadsap_get_catalog_details
    • First observedadsap_get_catalog_diagnostics
    • First observedadsap_get_creative_performance
    • First observedadsap_get_custom_audience_ads
    • First observedadsap_get_delivery_estimate
    • First observedadsap_get_import_status
    • First observedadsap_get_insights
    • First observedadsap_get_insights_breakdown
    • First observedadsap_get_instant_form
    • First observedadsap_get_pixel_details
    • First observedadsap_get_pixel_health
    • First observedadsap_get_pixel_stats
    • First observedadsap_get_preview_clip
    • First observedadsap_get_product_details
    • First observedadsap_get_product_set_products
    • First observedadsap_get_recommendations
    • First observedadsap_get_upload_status
    • First observedadsap_google_create_ad_group
    • First observedadsap_google_create_app_campaign
    • First observedadsap_google_create_demand_gen_campaign
    • First observedadsap_google_create_display_campaign
    • First observedadsap_google_create_pmax_campaign
    • First observedadsap_google_create_search_campaign
    • First observedadsap_google_create_shopping_campaign
    • First observedadsap_google_get_account_activities
    • First observedadsap_google_get_conversion_breakdown
    • First observedadsap_google_get_insights
    • First observedadsap_google_keyword_ideas
    • First observedadsap_google_list_ad_accounts
    • First observedadsap_google_list_ad_templates
    • First observedadsap_google_list_audiences
    • First observedadsap_google_list_campaigns
    • First observedadsap_google_list_conversion_actions
    • First observedadsap_google_list_creative_assets
    • First observedadsap_google_list_extensions
    • First observedadsap_google_list_feed_labels
    • First observedadsap_google_manage_ad_template
    • First observedadsap_google_manage_extension
    • First observedadsap_google_manage_keywords
    • First observedadsap_google_manage_targeting
    • First observedadsap_google_search_geo_targets
    • First observedadsap_google_search_terms
    • First observedadsap_google_set_entity_status
    • First observedadsap_google_update_entity
    • First observedadsap_google_upload_asset
    • First observedadsap_google_upload_video
    • First observedadsap_import_account_creatives
    • First observedadsap_list_ad_accounts
    • First observedadsap_list_ad_sets
    • First observedadsap_list_ad_sheets
    • First observedadsap_list_ad_templates
    • First observedadsap_list_apps
    • First observedadsap_list_automation_rules
    • First observedadsap_list_campaigns
    • First observedadsap_list_catalogs
    • First observedadsap_list_creative_assets
    • First observedadsap_list_custom_audiences
    • First observedadsap_list_custom_conversions
    • First observedadsap_list_drive_files
    • First observedadsap_list_dropbox_files
    • First observedadsap_list_experiments
    • First observedadsap_list_ig_media
    • First observedadsap_list_meta_assets
    • First observedadsap_list_pixel_events
    • First observedadsap_manage_ad_template
    • First observedadsap_manage_automation_rule
    • First observedadsap_manage_custom_audience
    • First observedadsap_manage_instant_form
    • First observedadsap_manage_onboarding_plan
    • First observedadsap_ping
    • First observedadsap_replace_ad_creative
    • First observedadsap_search_ad_library
    • First observedadsap_search_behaviors
    • First observedadsap_search_catalog_products
    • First observedadsap_search_geo_locations
    • First observedadsap_search_interests
    • First observedadsap_set_entity_status
    • First observedadsap_update_entity
    • First observedadsap_upload_creative

Publisher details

Operator
Adsap (To Better Digital SASU) · Publisher source
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
Needs an Adsap account (a Free plan exists, no card required) and your own Meta or Google Ads account connected in Adsap. Sign-in is by OAuth. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Connects Google Ads, Meta Ads, and LinkedIn Ads to AI assistants, enabling natural language ad campaign management, reporting, and optimization across platforms.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to create, analyze, and optimize ad campaigns across Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Amazon Ads, and ChatGPT Ads through natural language using 400+ tools.
    93
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Adsroid MCP connects Claude, ChatGPT, Cursor, or any MCP-compatible client directly to your advertising and marketing accounts, Google Ads, Meta Ads, Microsoft Ads, TikTok Ads, LinkedIn Ads, Google Search Console, Google Analytics 4, and HubSpot, through a single endpoint.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources