Skip to main content
Glama

Metadata MCP Connector

Server Details

Connect Metadata to AI assistants for B2B advertising performance reports, audience planning, brand-aware creative, and campaign launch-readiness checks. Uses secure OAuth with an existing Metadata account and appropriate connected-channel permissions. Hosted Streamable HTTP endpoint maintained by Metadata Inc.

Ownership verified
Status
Healthy
Uptime
99.9% over 42 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

C2.9/5.0

Scored across 176 tools

Disambiguation2/5

The set contains several near-duplicate families: three G2 audience creators, six+ audience-creation tools (firmographic, technographic, Bombora, LinkedIn/Facebook native criteria, CSV uploads, retargeting, segment-based), and multiple read tools for audiences (list_audiences, get_audience_details, get_deep_audience_details, get_matched_audiences). Reporting is similarly crowded (account_level_stats, account_funnel_reports, deep_funnel_stats, performance_metrics, experiment_performance_stats, demographic_country_stats, website_engagement_stats). Descriptions do provide guidance and prerequisites, but an agent must read long text to pick correctly.

Naming Consistency3/5

The dominant convention is snake_case verb_noun (create_campaign, archive_ad, list_segments), which is readable. However, verbs are inconsistent for the same read operation (get_*, fetch_creative_details, retrieve_target_group_by_id), several tools combine two verbs (create_update_image_ad, add_and_edit_campaign_elements), and channel-specific names use differing orders (create_google_sitelink_extension vs create_update_google_ads_ad).

Tool Count1/5

176 tools is an extreme surface far beyond what an agent can navigate reliably, driven by per-channel-per-extension permutations (16 near-identical create_google_*/create_microsoft_* extension tools) and per-audience-type creators. Many of these could be consolidated into parameterized tools.

Completeness4/5

Coverage across campaigns, ads, audiences, creatives, keywords, negative lists, budget groups, extensions, UTMs, integrations, and reporting is broad and covers most lifecycle operations (create/read/archive/unarchive, plus pause/restart). Minor gaps exist: campaigns only archive/unarchive rather than delete, and get_converted_leads is referenced by get_converted_leads_summary but is not present in the surface.

Available Tools

176 tools
account_funnel_reportsGet Account Funnel Stage ReportsC
Read-only
Inspect

Account-level funnel performance across stages.

NameRequiredDescriptionDefault
pageNoPage number for pagination (0-based)
sizeNoResults per page from 1 to 100; default 15. Use successive zero-based page values and response pagination metadata for more results.
sortNoSort criteria. Examples: 'impressions,desc' (default), 'engagement,desc', 'conversions,desc'impressions,desc
typeNoReport type. Currently only SOCIAL is supportedSOCIAL
endDateYesEnd date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Example: '2025-12-31T23:59:59.999Z'
reportTabYesFunnel stage to analyze. Options: REACHED (default), ENGAGED, CONVERTED, MQL, OPPS, WONREACHED
startDateYesStart date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Example: '2025-01-01T00:00:00.000Z'

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no behavior beyond that: no mention of pagination defaults, result limits, date-range semantics, or what a stage report contains.

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

Conciseness3/5

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

It is a single short sentence with no wasted words, but it is under-specified rather than concise. It offers no front-loaded scope, constraints, or routing information that would earn the brevity.

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 7-parameter, 3-required reporting tool with pagination and stage selection, the description omits how results are scoped and paged, and gives no guidance on the default REACHED tab versus other funnel stages. Annotations and the schema fill part of the gap, but the definition remains thin for a tool an agent must invoke with correct dates and tab.

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%, including pagination, sort syntax, enum meanings, and ISO-8601 date examples, so the schema carries the full parameter burden. The description contributes nothing about parameters; baseline 3 applies.

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

Purpose3/5

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

The description names the resource ('Account-level funnel performance') and implies a stage breakdown ('across stages'), which matches the reportTab parameter. However it never distinguishes this tool from close siblings such as deep_funnel_stats, account_level_stats, or account_list_performance, so an agent cannot tell from the text which funnel-reporting tool to pick.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool, when to prefer a sibling, or any prerequisite. The only hint is the phrase 'across stages', which the schema already encodes via the reportTab enum.

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

account_level_statsGet Account-Level StatisticsC
Read-only
Inspect

Account-level statistics and channel breakdown for a timeframe.

NameRequiredDescriptionDefault
endDateNoEnd date for custom date range in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Must be used together with startDate. Do NOT provide timeframe when using this. Example: 2025-09-30T00:00:00.000Z
startDateNoStart date for custom date range in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Must be used together with endDate. Do NOT provide timeframe when using this. Example: 2025-07-01T00:00:00.000Z
timeframeNoTimeframe for data aggregation. MONTH=monthly breakdown, QUARTER=quarterly breakdown, WEEK=weekly breakdown, YEAR=yearly breakdown. DO NOT use this parameter when providing startDate and endDate.

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only that results include a channel breakdown, and says nothing about aggregation behavior or what happens with no params. Adds modest value beyond annotations.

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?

A single short sentence with the resource front-loaded and no filler. Brevity is good, though it comes at the cost of substance rather than from tight editing of rich content.

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 stats tool with no required parameters and no output schema, the agent needs to know the default timeframe, the grain of the 'channel breakdown', and how this differs from sibling reporting tools. None of that is present, leaving the definition insufficient to call with confidence.

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 fully documents startDate/endDate/timeframe, including the mutual exclusivity rule. The description adds nothing about parameters, which is acceptable at this coverage level. (Note: the schema text mentions MONTH but the enum omits it, an inconsistency the description does not resolve.)

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

Purpose3/5

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

'Account-level statistics and channel breakdown for a timeframe' is largely a restatement of the title, with 'channel breakdown' the only new information. It does not distinguish this tool from the many sibling stats tools (performance_metrics, deep_funnel_stats, demographic_country_stats, account_funnel_reports).

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

Usage Guidelines2/5

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

No guidance on when to use this versus other analytics tools, and no explanation of the default behavior when timeframe/startDate/endDate are all omitted (all params optional). The agent must infer selection 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.

account_list_performanceGet Account List PerformanceC
Read-only
Inspect

Account list information with engagement metrics and statistics.

NameRequiredDescriptionDefault
pageNoPage number for pagination (0-based). Example: page=0 for the first page.
sizeNoResults per page from 1 to 100; default 25. Use successive zero-based page values and response pagination metadata for more results.
sortNoSorting criteria. Examples: 'triggeredAmount,desc', 'engagedAccounts,desc', 'influencedAmount,desc'. Format: field,direction where direction is 'asc' or 'desc'.
endDateNoEnd date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Example: 2025-01-31T23:59:59.999Z. Optional for custom date ranges.
channelsNoComma-separated channel names (e.g., 'LINKEDIN,FACEBOOK,INSTAGRAM,GOOGLE_ADS'). Leave empty for all channels.
startDateNoStart date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Example: 2025-01-01T00:00:00.000Z. Optional for custom date ranges.

TDQS

C2.1/5.0
Behavior2/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: it doesn't say whether results are paginated (they are, per schema), whether there is a default date window, whether an empty date range returns all-time data, or what the metrics represent.

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

Conciseness3/5

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

It is a single short, front-loaded sentence with no filler, which is structurally fine. However, the brevity comes at the cost of content — the one sentence conveys almost nothing actionable, so it is under-specified rather than efficiently concise.

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

Completeness2/5

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

With six optional parameters, no output schema, and no annotation detail beyond read-only, the description should explain the returned metrics and default time window. It does neither, leaving the agent to infer behavior entirely from the schema.

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 parameter docs are genuinely good (pagination examples, ISO 8601 format, sort field syntax, channel list format). The description contributes no additional parameter meaning, so the baseline 3 applies.

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

Purpose2/5

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

The description reads as a restatement of the title: 'Account list information with engagement metrics and statistics' names a resource but no verb/action and no scope. It also fails to distinguish this tool from near-siblings like get_abm_account_lists, account_level_stats, or account_funnel_reports, so an agent cannot tell which one returns what.

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

Usage Guidelines1/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, when not to, or which alternative to prefer. With several account- and performance-oriented siblings in the list, the absence of any routing signal is a real selection hazard.

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

add_and_edit_campaign_elementsAdd & Edit Campaign ElementsA
Destructive
Inspect

Add audiences, ads, offers, or targeting and edit supported settings of a Precision Optimization campaign. Returns the updated configuration and per-operation results or errors. Campaign structure and current platform state constrain which edits are permitted. LinkedIn ads can be added as named Metadata platform ad groups (ads.groups) when the user asks for them. CRITICAL: PARTIAL EDITS ONLY. Only campaignId is required. Supply other fields only for the user's requested changes, never by copying the whole campaign read result. A budget-group-only move uses campaign_data={"campaignId": 12345, "budgetGroup": "Destination"}. Omit name, startDate, endDate and channel blocks unless the user also requested those edits. Campaign-level startDate/endDate writes apply to every channel, including switched-off channels, so replaying a campaign's aggregate dates can overwrite distinct channel dates. On a draft, sending one date keeps the other as saved; when the saved one cannot stay (a start date already passed, an end before the new start, channels saved with different dates) nothing changes and errors says which date to ask the user for. For a budget-only move, read the campaign before and after and verify each channel's startDate/endDate and enabled state are unchanged, alongside the new budget group. The handler returns budget_move_verification for a completed move without date or channel edits. verified=true confirms every channel's identity, dates and switch state and the destination group. verified=false also populates errors: stop further moves and report the changed fields or incomplete readback, even when success=true because the budget group already changed. No schedule rollback is attempted. Do not report dates preserved without that readback; report any mismatch explicitly.

NameRequiredDescriptionDefault
campaign_dataYesCampaign data with fields to edit and/or elements to add

TDQS

A4.1/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and openWorldHint=true, but the description goes well beyond them: campaign-level dates overwrite every channel including switched-off ones, draft date writes are partial and can fail entirely, and budget_move_verification returns verified=false with errors even when success=true because the budget group already changed. It also states 'No schedule rollback is attempted', which is exactly the irreversibility an agent needs before calling.

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

Conciseness3/5

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

Purpose and the partial-edit rule are front-loaded, but the back half drifts into a dense procedural block on budget-move verification and readback reporting, with mid-sentence line breaks that hurt scanning. Several sentences restate the same irreversibility idea ('No schedule rollback is attempted', 'Do not report dates preserved without that readback'), so it is longer than it needs to be.

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 deeply nested campaign_data object with no output schema, the description covers return shape ('updated configuration and per-operation results or errors') and the budget_move_verification field, plus the date-write constraints. It omits prerequisites — permissions, whether the campaign must be a draft or launched for each edit class, and what a per-operation error looks like.

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 baseline is 3, but the description adds real semantics on top: a concrete payload example ({"campaignId": 12345, "budgetGroup": "Destination"}) and the rule that only campaignId is required while other fields are additive partial edits. It does not explain channel-block precedence or how google/reddit/linkedin blocks interact, which the schema only partly covers.

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 opening sentence names a specific verb set (add/edit) and resource (audiences, ads, offers, targeting, settings on a Precision Optimization campaign), plus the return value. It scopes itself to Precision Optimization campaigns, which implicitly separates it from add_and_edit_native_campaign_elements, but it never states that contrast explicitly, so an agent must infer the boundary.

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

Usage Guidelines4/5

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

Strong intra-tool guidance: 'CRITICAL: PARTIAL EDITS ONLY', omit name/startDate/endDate/channel blocks unless requested, and a worked budget-group-only payload. What's missing is sibling routing — nothing tells the agent when to prefer add_and_edit_native_campaign_elements, update_reddit_channel_settings, or the remove_* tools instead of this one.

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

add_and_edit_native_campaign_elementsAdd & Edit Campaign Elements — Native / Channel-First (N×N×N)A
Destructive
Inspect

Add or edit channel containers and campaign-level settings of a Channel First campaign. Returns the updated configuration and per-operation results or errors. Search-channel containers can combine keyword groups, audiences, ads, and offers subject to platform validation. CRITICAL: PARTIAL EDITS ONLY. Only campaignId is required. Supply other fields only for the user's requested changes, never by copying the whole campaign read result. A budget-group-only move uses campaign_data={"campaignId": 12345, "budgetGroup": "Destination"}. Omit name, startDate, endDate and channel blocks unless the user also requested those edits. Campaign-level startDate/endDate writes apply to every channel, including switched-off channels, so replaying a campaign's aggregate dates can overwrite distinct channel dates. On a draft, sending one date keeps the other as saved; when the saved one cannot stay (a start date already passed, an end before the new start, channels saved with different dates) nothing changes and errors says which date to ask the user for. For a budget-only move, read the campaign before and after and verify each channel's startDate/endDate and enabled state are unchanged, alongside the new budget group. The handler returns budget_move_verification for a completed move without date or channel edits. verified=true confirms every channel's identity, dates and switch state and the destination group. verified=false also populates errors: stop further moves and report the changed fields or incomplete readback, even when success=true because the budget group already changed. No schedule rollback is attempted. Do not report dates preserved without that readback; report any mismatch explicitly.

NameRequiredDescriptionDefault
campaign_dataYesNative (N×N×N) campaign edit payload: campaignId + optional campaign-level fields + per-channel `containers[]` (append) and optional `target_groups[]`.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already flag destructive=true and openWorld=true, but the description goes far beyond them: it warns that campaign-level startDate/endDate writes hit every channel including switched-off ones, explains draft date-coexistence rules and the no-change-plus-errors fallback, and documents the budget_move_verification contract including that verified=false must halt further moves even when success=true. It also states plainly that no schedule rollback is attempted.

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?

Purpose is front-loaded in one sentence, then a CRITICAL block, then the budget-move workflow — a sensible order for a mutation tool. It is long and the verification paragraph repeats itself slightly ('Do not report dates preserved without that readback; report any mismatch explicitly'), costing a point.

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 single top-level payload with a deeply nested, platform-specific schema and no output schema, the description covers the risky parts an agent cannot infer: partial-edit discipline, cross-channel date overwrite, draft behavior, and the verification/errors readback. Prerequisites like channel connection and audience resolution are carried by the schema fields.

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% and the nested fields are richly documented, so the baseline is 3; the description still adds value with a concrete payload example (campaign_data={"campaignId": 12345, "budgetGroup": "Destination"}) and the partial-edit contract that governs how the whole object is populated. That is meaning beyond the schema's field-by-field docs.

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

Purpose4/5

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

States a specific verb pair (add or edit) and a specific resource (channel containers + campaign-level settings of a Channel First / native campaign), so the agent knows exactly what changes. It does not distinguish itself from the sibling add_and_edit_campaign_elements (the non-native counterpart), which an agent would need to choose between.

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?

Strong when/how guidance: 'PARTIAL EDITS ONLY', 'Supply other fields only for the user's requested changes, never by copying the whole campaign read result', and the explicit omission rule for name/startDate/endDate/channel blocks. It also prescribes the read-before/read-after workflow for a budget-group-only move. It stops short of naming an alternative tool for the non-native case.

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

add_extensions_to_native_campaignAdd Extensions to Native-Structure CampaignAInspect

Attach existing library extensions (sitelinks, callouts, etc.) to a native-structure Google Ads / Microsoft Ads campaign, so they actually serve when the campaign launches.

NameRequiredDescriptionDefault
channelYesSearch channel. Ad extensions are a search-channel-only concept.
campaign_idYesThe wizard campaign id.
extension_idsYesInternal library extension ids from list_extensions. These are the `id` field, NOT `externalId` (the ad platform's own id).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the mutation surface is known. The description adds the useful behavioral fact that attached extensions are what will actually serve at launch, but says nothing about duplicate handling, whether it appends or replaces existing attachments, or failure modes for invalid extension ids/channel mismatches.

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?

One sentence, front-loaded with verb and resource, with the downstream effect ('so they actually serve') as the payoff. No filler or restated title text.

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 3-parameter attach operation with full annotation and schema coverage and no output schema, the description covers enough to call it correctly. The only material gap is append-vs-replace/duplicate semantics, which matters for repeat invocations.

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 is unusually explicit — it distinguishes internal library ids from externalId and explains that extensions are a search-channel-only concept. The description adds no parameter-level detail beyond that, so baseline 3 applies.

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

Purpose5/5

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

Names a specific verb (attach) and resource (existing library extensions such as sitelinks/callouts) scoped to native-structure Google Ads / Microsoft Ads campaigns. The qualifier 'existing library extensions' implicitly separates it from the create_google_*_extension / create_microsoft_*_extension siblings, and 'native-structure campaign' separates it from generic campaign element 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?

Usage is only implied: 'so they actually serve when the campaign launches' hints at pre-launch setup, but there is no explicit when-to-use, prerequisite ordering (e.g., list_extensions / create_*_extension must run first), or pointer to remove_extensions_from_native_campaign as the inverse operation. The extension_ids schema note partially compensates by pointing at list_extensions.

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

add_keywords_to_negative_listsAdd Keywords to Negative ListsBInspect

Add keywords to one or more existing Google Ads negative keyword lists.

NameRequiredDescriptionDefault
channelNoAd channel scope. Both search channels are supported. These are PER-CHANNEL resources: GOOGLE_ADS and MICROSOFT_ADS hold separate sets, and one is invisible to the other. Defaults to GOOGLE_ADS when the user does not say which.GOOGLE_ADS
keywordsYesKeywords to add to every list in negativeListIds. Each item is either a plain string or {text, match_type}.
match_typeNoDefault match type, used when an item is a plain string or an object that omits match_type. Default PHRASE.PHRASE
negativeListIdsYesIDs of the existing negative keyword lists to extend (from list_negative_keywords_list).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, and the description's 'add' is consistent with an additive, non-destructive mutation. Beyond that it adds nothing: no statement about duplicate handling, whether existing lists are modified in place, or what happens when a keyword already exists. No contradiction, but no extra behavioral context either.

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?

A single well-formed sentence with the resource and target front-loaded and no filler. It is arguably too terse for a mutation tool, but nothing in it is wasted.

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

Completeness3/5

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

With four parameters, full schema coverage, and annotations covering the safety profile, the description is just barely sufficient. It omits the Microsoft channel the schema supports, does not say the keywords are appended to every listed ID in one call, and gives no duplicate/return behavior — gaps an agent would need to open the schema to close.

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 explains channel scoping, the string-vs-{text, match_type} item shapes, the match_type override/default, and where negativeListIds come from. The description's only parameter-adjacent signal is 'one or more', which merely restates minItems, so baseline 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?

States a specific verb and resource ('Add keywords') and a clear target ('one or more existing ... negative keyword lists'), which distinguishes it from create_negative_keywords_list and remove_keywords_from_negative_list. Minor flaw: it scopes the tool to 'Google Ads' while the schema exposes a MICROSOFT_ADS channel, so the stated scope is narrower than actual behavior.

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?

'existing' implies the lists must already exist and that create_negative_keywords_list is the wrong choice for new lists, and 'one or more' hints at batch use. But there is no explicit when-to-use guidance versus siblings such as add_negative_keyword_lists_to_live_campaigns, and no mention of prerequisites or the need to resolve IDs first (that pointer lives only in the schema).

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

add_negative_keyword_lists_to_live_campaignsAdd Negative Keyword Lists to Live CampaignsAInspect

Attach existing Google Ads negative keyword lists to campaigns that are ALREADY LAUNCHED. a live edit that syncs through to Google.

NameRequiredDescriptionDefault
modeNo'add' (default) merges with the lists already on the campaign. 'replace' makes the campaign's negative lists exactly the ones requested, detaching the rest — only for an explicit user request.add
channelNoAd channel scope. Only GOOGLE_ADS is supported — the platform's live-edit endpoint is Google-only.GOOGLE_ADS
listIdsNoIDs of existing negative keyword lists to attach, as returned by list_negative_keywords_list. Can be combined with listNames.
listNamesNoNames of existing negative keyword lists to attach. Matched exactly (case-insensitive) against the account library; an unmatched name is reported, never substituted.
campaignIdsYesWizard campaign ids of the LIVE (already launched) campaigns to update. Pass every campaign the user named in one call. Draft campaigns are skipped with a reason.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the safety class is known. The phrase 'a live edit that syncs through to Google' adds genuinely useful context beyond the annotations: the mutation propagates to the external ad platform and is not contained locally. It doesn't discuss the replace-mode detachment risk, but the schema covers that.

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

Conciseness5/5

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

Two short sentences with zero filler; the scope constraint ('ALREADY LAUNCHED') is front-loaded in the first sentence. The lowercase sentence fragment 'a live edit that syncs through to Google' is stylistically loose but earns its place by conveying the live-sync behavior.

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 full annotations, a fully documented schema and no output schema, the description supplies purpose, scope and live-propagation behavior. The only gap is what happens on partial success (draft skips, unmatched names), which is handled in schema field text rather than the description.

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%, including detailed enum semantics for mode and matching behavior for listNames, so the schema carries all parameter meaning. The description adds nothing about any of the five parameters, making baseline 3 the correct score.

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

Purpose4/5

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

States a specific verb and resource ('Attach existing Google Ads negative keyword lists to campaigns') and scopes it to already-launched campaigns, which cleanly separates it from create_negative_keywords_list and add_keywords_to_negative_lists. It stops short of naming any sibling, so the differentiation is inferred rather than explicit.

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 establishes the condition 'campaigns that are ALREADY LAUNCHED' and implies draft campaigns are out of scope, giving the agent usable context. It never states when not to use this tool or points at an alternative for drafts or for creating new lists, leaving routing to inference.

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

archive_adArchive AdB
Destructive
Inspect

Archive (soft-delete) one or more ads on the Metadata platform.

NameRequiredDescriptionDefault
idsYesAd id(s) to archive. At least one integer required; pass multiple to archive in bulk.

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is covered. The description does add one genuinely useful piece of context not in the annotations, namely that this is a soft-delete, but it omits what soft-delete implies operationally (recoverability via unarchive_ad, effect on live delivery, whether dependent entities are touched).

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 the verb, scope, and the crucial soft-delete qualifier; nothing is wasted or buried.

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

Completeness3/5

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

With annotations covering safety and a fully described single parameter, the core is covered. However, the description never mentions that archiving is reversible through unarchive_ad or what archiving does to ads in live campaigns, leaving an agent to infer the recovery path.

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 ids parameter is fully documented, including bulk usage and the minimum-one constraint. The description only echoes the plural/bulk aspect already stated in the schema, so baseline 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 a specific verb (Archive) and resource (ads) and clarifies the semantics as a soft-delete, which distinguishes it from a hard delete. It does not acknowledge the sibling unarchive_ad, so it stops short of full sibling differentiation.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to archive versus when to use unarchive_ad, nor on prerequisites such as campaign state or permissions. The intended use is only weakly implied by the verb itself.

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

archive_audienceArchive AudienceA
Destructive
Inspect

Archive a custom audience by ID. Returns the platform operation result or an error. Archived audiences are no longer available for new targeting.

NameRequiredDescriptionDefault
audience_nameNoThe name of the custom audience to archive. If provided without custom_audience_id, the tool will search for the audience by name to resolve the ID.
custom_audience_idNoThe numeric ID of the custom audience to archive.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already mark this as destructive and not read-only. The description adds useful context by stating the consequence of archiving and that the call returns an operation result or error, though it does not discuss reversibility or unarchive_audience.

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, front-loaded with the action and followed immediately by return behavior and the key consequence. There is no redundant or filler language.

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

Completeness4/5

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

For a low-complexity destructive operation with rich schema descriptions and destructiveHint already present, the description covers the essential consequence and return behavior. It could be stronger by clarifying reversibility or pointing to unarchive_audience, but it is broadly 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%, and both parameters are documented there, including the name-resolution fallback. The description adds little beyond saying 'by ID,' so the baseline 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?

States a specific verb and resource: 'Archive a custom audience by ID.' It is clearly distinguishable from most siblings, but it does not explicitly contrast with the obvious reverse operation, unarchive_audience, and 'by ID' is slightly narrower than the schema's name-or-ID resolution.

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

Usage Guidelines3/5

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

The usage context is implied by the stated effect, that archived audiences are no longer available for new targeting. However, there is no explicit guidance on when to choose archival versus alternatives, nor on choosing the name parameter versus custom_audience_id beyond what the schema says.

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

archive_campaignsArchive CampaignsB
Destructive
Inspect

Archive one or more campaigns, with a result per campaign.

NameRequiredDescriptionDefault
campaign_idsYesThe ids of the campaigns to archive (1 to 50)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the mutating and irreversible-in-spirit nature is known. The description adds one genuinely useful behavioral fact — results are returned per campaign, implying partial success is possible — but stops short of stating whether the operation is atomic, what happens to campaigns already archived, or how failures are reported.

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; the trailing clause about per-campaign results is the one piece of non-obvious information and it is kept short. Nothing here could be cut without losing something.

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

Completeness3/5

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

With no output schema, the description's 'result per campaign' is the only hint about the response shape and it is thin — an agent still does not know the fields, whether failures appear per item, or whether re-archiving an archived campaign errors. For a destructive batch mutation, that leaves meaningful gaps even with annotations covering safety.

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?

Single parameter with 100% schema description coverage ('The ids of the campaigns to archive (1 to 50)', uniqueItems, minimum 1), so the schema carries the semantics. The description's 'one or more' is consistent but adds no constraint or format detail beyond it; baseline 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?

States a specific verb (archive) and resource (campaigns) plus batch scope (one or more). It does not distinguish itself from the closely related sibling unarchive_campaigns or the broader manage_campaign, so an agent must infer the routing itself.

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

Usage Guidelines2/5

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

No guidance on when to prefer this over manage_campaign or when to use the inverse unarchive_campaigns, and no preconditions (e.g. campaigns must be paused, must belong to the caller's account) are stated. The batch nature is implied by 'one or more' but nothing else is offered.

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

budget_group_performanceGet Budget Group PerformanceA
Read-only
Inspect

Read performance statistics for a budget group identified by name. The tool resolves the group ID internally and returns one page of experiment performance data with the available pagination metadata. Page size is capped at 100.

NameRequiredDescriptionDefault
pageNoPage number for pagination (0-based). Use for paginating through large result sets.
sizeNoResults per page from 1 to 100; default 10. Use successive zero-based page values and response pagination metadata for more results.
sortNoSort criteria for experiments. Format: field,field,direction. Examples: 'experimentId,name,asc', 'spent,desc', 'cpl,asc'experimentId,name,asc
endDateNoEnd date for analysis in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.SSSZ, e.g., '2025-12-15T23:59:59.999Z'). Optional - if not provided, no end date filter is applied.
startDateNoStart date for analysis in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.SSSZ, e.g., '2025-01-01T00:00:00.000Z'). Optional - if not provided, no start date filter is applied.
budget_group_nameYesName of the budget group to analyze (required). The tool will automatically look up the budget group ID. Example: 'Brand Awareness', 'ToFu', 'Lead Gen Q4'
excludeExperimentNameNoExperiment name to exclude from results. Useful for filtering out specific experiments from the analysis.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnly=true, destructive=false, openWorld=false, so the safety profile is covered. The description usefully adds that the group ID is resolved internally and that only one page of experiment-level data is returned, which is real behavioral context beyond structured fields. The page-size cap repeats the schema's maximum of 100, so it adds little.

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 zero filler. The identification mechanism and return shape are front-loaded, and the pagination limit is stated last where it belongs.

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 seven parameters but full schema coverage and no output schema, the description adequately conveys the return shape ('one page of experiment performance data with the available pagination metadata'). Minor residual gap: no hint about what happens when a budget group name is ambiguous or not found.

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 every parameter including page, size, sort, date range, and excludeExperimentName is already documented in the schema; the baseline of 3 applies. The description only reinforces that identification is by name and that results are paged, adding no format or semantics beyond the schema.

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

Purpose4/5

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

States a specific verb (read) and resource (performance statistics for a budget group), plus the key detail that the group is identified by name rather than ID. This distinguishes it from get_budget_group (group definition) and the generic performance_metrics/account_level_stats siblings, though it does not name any of them explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the read-performance framing and the note that the group ID is resolved internally, which tells the agent it doesn't need a lookup step first. There is no explicit when-to-use guidance versus get_budget_group, experiment_performance_stats, or account_level_stats, so the selection decision is left partly to inference.

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

check_campaign_launch_readinessCheck Campaign Launch ReadinessA
Read-only
Inspect

Check whether a draft campaign is ready to launch, per channel. Reads the campaign's real configuration from the platform and reports, for each ENABLED channel, whether it has the ads, audience, offer, budget AND a live channel connection it needs to go live - plus a specific list of blockers for anything missing. Enabled Facebook/Instagram video creatives need a saved Meta video_id in their creative; a later library upload does not repair a creative saved without one.

NameRequiredDescriptionDefault
campaign_idYesThe wizard campaign ID to check launch readiness for

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/non-destructive/closed-world, so the bar is lower, yet the description adds real value: it reads actual platform config, evaluates only ENABLED channels, and surfaces a non-obvious caveat that a later library upload does not repair a creative saved without a Meta video_id. It stops short of describing the exact blocker/report structure.

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-loads the core purpose in the first sentence and follows with the per-channel evaluation logic and a specific gotcha. The video_id caveat is dense but earns its place; no filler sentences.

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 one-param tool with no output schema, the description adequately covers inputs (wizard campaign), what it evaluates per enabled channel (ads, audience, offer, budget, connection), and outputs (blockers). The precise return shape is only loosely described, a minor gap.

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

Parameters3/5

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

With a single parameter at 100% schema coverage, the schema already documents campaign_id fully. The description adds only the 'draft campaign' framing, not new syntax or constraints, 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?

States a specific verb and resource ('Check whether a draft campaign is ready to launch, per channel') and clarifies it reads real platform config. An agent can distinguish it from launch_campaign (performs the launch) or get_campaign_by_wizard_id (fetches config) 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 Guidelines4/5

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

The pre-launch validation context is clear from 'ready to launch' and 'reports blockers,' strongly implying it is called before launch_campaign. However, it never explicitly names launch_campaign as the follow-up action or states exclusions, so the routing is implied rather than spelled out.

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

clear_default_ma_listClear Default Marketing Automation ListA
Destructive
Inspect

Clear the account’s default marketing-automation destination list for future campaign-channel creation. Existing channels retain their captured values. Returns status CLEARED with listId, provider, and name set to null, or an error.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description adds genuinely non-obvious blast-radius information: only the default pointer is cleared and existing channels keep their captured values. It also discloses the response shape (status CLEARED with listId, provider, and name nulled, or an error), which is unavailable elsewhere since there is no output 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?

Two sentences, zero filler. The action and its scope lead, followed immediately by the non-destructive detail about existing channels and the return 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?

With no input parameters and no output schema, the description carries the full load and does so: it covers effect scope, side-effect limits on existing channels, and the success/error response shape. Nothing an agent needs to invoke this safely is missing.

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 takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool is 4. The description correctly implies the target is the single account-level default rather than a caller-specified list.

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 (Clear) plus a precisely scoped resource (the account's default marketing-automation destination list for future campaign-channel creation). This distinguishes it from set_default_ma_list and get_default_ma_list by verb and effect without needing the schema.

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

Usage Guidelines3/5

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

The phrase 'for future campaign-channel creation' implies the context in which the default matters, and 'Existing channels retain their captured values' hints at what this does not affect. However, it never explicitly says when to call this versus set_default_ma_list or get_default_ma_list, nor does it state prerequisites or a when-not condition.

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

connect_channelConnect ChannelAInspect

Create an OAuth authorization URL for the selected advertising channel. Returns url and state for the account owner to complete the provider authorization flow; for LinkedIn it also returns next_step, because the user may still need to choose the ad account and campaign group after signing in. Returning the URL does not establish a connection; check it afterwards with get_integrations_status. External callers must supply acknowledge_data_access=true for the requested credential grant; otherwise the server refuses the call.

NameRequiredDescriptionDefault
channelYesThe channel to connect. Must be one of: linkedin, meta (for Facebook/Instagram), google, reddit, x (for Twitter)
acknowledge_data_accessNoSet true to confirm the person you are acting for asked to connect this channel. The response is an OAuth authorization URL that starts a credential grant into their Metadata account. Without this the call is refused.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: warns that returning the URL does not establish a connection, discloses the LinkedIn-specific extra next_step and why (account/campaign group selection after sign-in), and states the server refuses calls lacking acknowledge_data_access. Annotations only say readOnlyHint=false and openWorldHint=true, so this added detail is genuinely valuable.

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: what it does, what it returns and the LinkedIn caveat, then the connection-status caveat and the authorization precondition. Front-loaded and every sentence carries actionable 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?

With no output schema, the description still explains the return values (url, state, conditional next_step) and the out-of-band completion flow. The only remaining gap—channel enum aliasing—is fully covered by the 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 both parameters are already documented; the description still adds the consequence of omitting acknowledge_data_access ('the server refuses the call') and links it to the credential-grant semantics. It adds a little meaning beyond the schema without fully explaining channel enum aliasing (meta for Facebook/Instagram), which is left to 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?

States a specific verb and resource: 'Create an OAuth authorization URL for the selected advertising channel.' It is clearly distinguishable from sibling mutations like disconnect_channel and from the status-checking get_integrations_status, and it names the return payload (url, state).

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 explicit follow-up guidance ('check it afterwards with get_integrations_status') and a hard precondition for external callers (acknowledge_data_access=true). It does not explicitly contrast when to prefer this over disconnect_channel or other channel-connection paths, but the context is otherwise clear.

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

connect_crmConnect CRMAInspect

Create an OAuth authorization URL for the selected CRM. Returns a redirect URL for the account owner to complete the provider authorization flow. Returning the URL does not establish a connection. External callers must supply acknowledge_data_access=true for the requested credential grant; otherwise the server refuses the call.

NameRequiredDescriptionDefault
crmYesThe CRM system to connect. Must be one of: salesforce, hubspot
acknowledge_data_accessNoSet true to confirm the person you are acting for asked to connect this CRM. The response is an OAuth authorization URL that starts a credential grant into their Metadata account. Without this the call is refused.

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true), it discloses the key failure mode an agent would otherwise hit: a returned URL is not a live connection. It also states the server refuses the call without acknowledge_data_access and distinguishes external callers from others. Nothing contradicts the declared annotations.

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?

Four short sentences, front-loaded with the action and followed by the two things that most affect correct use (no connection established; acknowledgement required). The acknowledgement sentence slightly overlaps the schema text but carries the extra external-caller qualifier.

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 only two parameters, no output schema, and annotations covering the safety profile, the description supplies what an agent needs: the return artifact (a redirect URL), the fact it is not a completed connection, and the gating flag. It could go one step further and say the connection is only confirmed later (e.g. via get_integrations_status).

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 would be 3, but the description adds meaning not in the schema: the acknowledgement requirement applies specifically to external callers and gates a credential grant into the user's Metadata account. That clarifies who must pass the flag and why, rather than restating the field.

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?

Opens with a specific verb and artifact: 'Create an OAuth authorization URL for the selected CRM.' That clearly separates it from the many ad/audience creation siblings and from connect_channel, which it does not name. It stops short of explicit sibling differentiation but the purpose is unambiguous.

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

Usage Guidelines4/5

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

The line 'Returning the URL does not establish a connection' positions this as step one of a two-step authorization flow, which tells the agent not to treat the call as completing the connection. The conditional requirement for acknowledge_data_access is spelled out. It never names an alternative (e.g. connect_channel, after which get_integrations_status would be checked), so it lands just below the top score.

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

create_audience_from_segmentCreate Audience from SegmentAInspect

Create a dynamic Insights Retargeting audience from a saved Insights (Spotlight) segment: the companies matching the segment inside a lookback window, refreshed automatically as the journey data changes.

NameRequiredDescriptionDefault
nameYesName for the new audience. Unique and descriptive, e.g. 'Exclude: 200+ LinkedIn impressions, 90d'.
segment_idYesThe id of a READY segment from list_segments / create_segment.
audience_typeNocontacts (default): people at the matching accounts, multi-channel. accounts: the matching companies as a LinkedIn matched audience, LinkedIn only; use it for account-level LinkedIn exclusions.
lookback_windowYesDays the segment is evaluated over. Range 1 to 365. 30 for the last month, 90 for the last quarter.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare the write/safety profile (readOnly=false, destructive=false, openWorld=true). The description adds genuinely useful behavior beyond that: the audience is dynamic and 'refreshed automatically as the journey data changes', and it is scoped by a lookback window — key facts for an agent deciding whether a live-syncing audience is appropriate. It omits credit cost, rate limits, and what happens if the segment is not yet READY.

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 the action and resource first, then a colon introducing the mechanics. Every clause — dynamic, lookback window, auto-refresh — carries information the caller needs; nothing is padding.

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 non-destructive create tool with no output schema and fully documented parameters, the description covers what is produced, how it stays current, and how it is scoped. It stops short of saying what identifier is returned or whether segment readiness is validated at call time.

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, including the audience_type enum trade-off and the 1–365 lookback range. The description reinforces that lookback defines the evaluation window and the audience is company-derived, but adds no new syntax or format detail. Baseline 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?

States a specific verb and a precisely qualified resource: a dynamic Insights Retargeting audience built from a saved Insights (Spotlight) segment. That qualification separates it from the many other create_*audience siblings (firmographic, technographic, G2 intent, CSV upload), though no sibling is named explicitly.

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

Usage Guidelines3/5

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

Usage is implied by 'from a saved Insights (Spotlight) segment' — an agent can infer the prerequisite is an existing segment, and the schema reinforces this by requiring a READY segment id from list_segments / create_segment. However, the description names no alternatives (e.g. create_retargeting_audience, create_segment) and states no when-not conditions.

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

create_bombora_audienceCreate Bombora AudienceAInspect

Create Bombora buyer intent audiences on the Metadata platform. Creates B2B audiences based on buyer intent topics, company firmographics, contact attributes, and geographic targeting.

            IMPORTANT PREREQUISITE:
            Before using this tool, call get_intent_topics first to verify that Bombora topics are available.
            If get_intent_topics returns NO topics (empty list), Bombora is NOT available for this account —
            do NOT suggest or use this tool. Instead, recommend creating a firmographic audience
            (create_firmographic_audience) as the preferred alternative.
            Firmographic audiences are the default and most commonly used audience type.

            WHEN TO USE:
            - ONLY after get_intent_topics confirms that Bombora topics are available
            - Create targeted B2B audiences based on buyer intent signals using Bombora data
            - Target companies by industry, size, and employee count
            - Target contacts by seniority level and job function
            - Target specific buyer intent topics (e.g., Pardot, Salesforce)
            - Set geographic targeting and contact limits per company

            BUYER INTENT TOPICS:
            Use the get_intent_topics tool to retrieve available intent topics before creating the audience.
            Intent topics represent buyer interest areas such as:
            - CRM solutions (e.g., Pardot, Salesforce)
            - Marketing automation platforms
            - Analytics and BI tools
            - And many others based on available topics

            TARGETING OPTIONS:
            - Intent Topics: Use topic values from get_intent_topics (required for Bombora audience)
            - Industries: Use industry IDs. Examples:
              1=Defense & Space, 4=Computer Software, 6=Internet, 7=Semiconductors, 8=Telecommunications,
              11=Management Consulting, 12=Biotechnology, 41=Banking, 42=Insurance, 43=Financial Services,
              80=Marketing & Advertising, 96=Information Technology & Services
            - Employees: "FROM_1_TO_10", "FROM_10_TO_50", "FROM_50_TO_200", "FROM_200_TO_500", "FROM_500_TO_1000", "FROM_1000_TO_5000", "FROM_5000_TO_10000", "OVER_10000"
            - Job Function / Seniority / Job Title / Location: identical shape to the Firmographic + G2 tools (PRD-29704 — the old Bombora-specific names `function_ids` / `seniority_ids` / `countries` / `cities` were renamed to the canonical contact-criteria fields below so Max can transfer the same criteria across audience types).

            CONTACTS CRITERIA:

Use the following parameters to filter and target specific contacts within accounts:

GEOGRAPHIC TARGETING:

  • location_country_ids: Array of country IDs (e.g., [29] for Brazil, [229] for United States)

  • location_state_ids: Array of state IDs (e.g., [5] for California, [32] for New York)

JOB TITLES:

  • job_title_includes: Array of free text strings to include (e.g., ["Software Engineer", "Manager"])

  • job_title_excludes: Array of free text strings to exclude (e.g., ["Senior", "Lead"])

JOB FUNCTIONS: Valid job function IDs and their labels:

  • 1: Marketing, 2: Sales, 3: Customer Service, 4: Finance, 5: Human Resources, 6: Public Relations

  • 7: Media, 8: Design, 9: Engineering, 10: Operations, 11: Legal, 12: Education

  • 13: Health, 14: Real Estate, 15: Accounting, 16: Administrative, 17: Business Development

  • 18: Community and Social Services, 19: Consulting, 20: Entrepreneurship, 21: Information Technology

  • 22: Military and Protective Services, 23: Product Management, 24: Program and Project Management

  • 25: Purchasing, 26: Quality Assurance, 27: Research, 28: Trades

  • job_function_include_ids: Array of job function IDs to include (e.g., [9] for Engineering)

  • job_function_exclude_ids: Array of job function IDs to exclude

SENIORITY LEVELS: Valid seniority IDs and their labels:

  • 2: Manager, 3: Director, 4: VP, 5: CXO, 6: Unpaid, 7: Training

  • 8: Senior, 9: Owner, 10: Entry, 11: Partner

  • seniority_include_ids: Array of seniority level IDs to include (e.g., [10, 7] for Entry and Training)

  • seniority_exclude_ids: Array of seniority level IDs to exclude

CONTACT LIMITS:

  • contacts_per_company_limit: Maximum number of contacts to target per company (optional). Example: 20

USAGE NOTES:

  • All ID fields (countries, states, job functions, seniorities) use numeric IDs from the platform

  • Job titles are free text strings, not IDs

  • Use include parameters to specify which criteria to target

  • Use exclude parameters to filter out contacts matching specific criteria

  • Combine multiple criteria for precise targeting (e.g., Senior Engineers in California)

  • Criteria are combined with AND logic, so all conditions must be met

CONTACTS CRITERIA PARAMETERS(Usually after other initial audience parameters to be described next):

  • location_country_ids: Array of country IDs (optional)

  • location_state_ids: Array of state IDs (optional)

  • job_title_includes: Array of job title keywords to include (optional)

  • job_title_excludes: Array of job title keywords to exclude (optional)

  • job_function_include_ids: Array of job function IDs (optional)

  • job_function_exclude_ids: Array of job function IDs (optional)

  • seniority_include_ids: Array of seniority level IDs (optional)

  • seniority_exclude_ids: Array of seniority level IDs (optional)

  • contacts_per_company_limit: Maximum contacts per company (optional)

              Returns audience details with ID, size estimation, and creation status.
NameRequiredDescriptionDefault
nameYesAudience name (required)
topicsYesArray of buyer intent topics (required). Use get_intent_topics to retrieve available topics. Example: ['Pardot', 'Salesforce']
employeesNoEmployee count ranges for company targeting (optional). Valid values: 'FROM_1_TO_10', 'FROM_10_TO_50', 'FROM_50_TO_200', 'FROM_200_TO_500', 'FROM_500_TO_1000', 'FROM_1000_TO_5000', 'FROM_5000_TO_10000', 'OVER_10000'
industriesNoIndustry IDs for company targeting (optional). Valid range: 1-148. Example: [4, 96]
job_title_excludesNoFree text keywords for job titles to exclude (optional). Example: ['Senior', 'Lead']
job_title_includesNoFree text keywords for job titles to include (optional). Example: ['Software Engineer', 'Manager']
location_state_idsNoState IDs for geographic targeting (optional). Valid US State IDs: 1 (Alabama), 2 (Alaska), 3 (Arizona), 4 (Arkansas), 5 (California), 6 (Colorado), 7 (Connecticut), 8 (Delaware), 9 (Florida), 10 (Georgia), 11 (Hawaii), 12 (Idaho), 13 (Illinois), 14 (Indiana), 15 (Iowa), 16 (Kansas), 17 (Kentucky), 18 (Louisiana), 19 (Maine), 20 (Maryland), 21 (Massachusetts), 22 (Michigan), 23 (Minnesota), 24 (Mississippi), 25 (Missouri), 26 (Montana), 27 (Nebraska), 28 (Nevada), 29 (New Hampshire), 30 (New Jersey), 31 (New Mexico), 32 (New York), 33 (North Carolina), 34 (North Dakota), 35 (Ohio), 36 (Oklahoma), 37 (Oregon), 38 (Pennsylvania), 39 (Rhode Island), 40 (South Carolina), 41 (South Dakota), 42 (Tennessee), 43 (Texas), 44 (Utah), 45 (Vermont), 46 (Virginia), 47 (Washington), 48 (West Virginia), 49 (Wisconsin), 50 (Wyoming), 52 (District of Columbia). Example: [5] for California, [32] for New York
location_country_idsNoCountry IDs for geographic targeting (optional). Valid IDs: 1 (Afghanistan), 2 (Albania), 3 (Algeria), 4 (American Samoa), 5 (Andorra), 6 (Angola), 7 (Anguilla), 8 (Antarctica), 9 (Antigua and Barbuda), 10 (Argentina), 11 (Armenia), 12 (Aruba), 13 (Australia), 14 (Austria), 15 (Azerbaijan), 16 (Bahamas), 17 (Bahrain), 18 (Bangladesh), 19 (Barbados), 20 (Belarus), 21 (Belgium), 22 (Belize), 23 (Benin), 24 (Bermuda), 25 (Bhutan), 26 (Bolivia), 27 (Bosnia and Herzegovina), 28 (Botswana), 29 (Brazil), 30 (British Indian Ocean Territory), 31 (British Virgin Islands), 32 (Brunei), 33 (Bulgaria), 34 (Burkina Faso), 35 (Burundi), 36 (Cambodia), 37 (Cameroon), 38 (Canada), 39 (Cape Verde), 40 (Cayman Islands), 41 (Central African Republic), 42 (Chad), 43 (Chile), 44 (China), 45 (Christmas Island), 46 (Cocos Islands), 47 (Colombia), 48 (Comoros), 49 (Cook Islands), 50 (Costa Rica), 51 (Croatia), 53 (Curacao), 54 (Cyprus), 55 (Czech Republic), 56 (Democratic Republic of the Congo), 57 (Denmark), 58 (Djibouti), 59 (Dominica), 60 (Dominican Republic), 61 (East Timor), 62 (Ecuador), 63 (Egypt), 64 (El Salvador), 65 (Equatorial Guinea), 66 (Eritrea), 67 (Estonia), 68 (Ethiopia), 69 (Falkland Islands), 70 (Faroe Islands), 71 (Fiji), 72 (Finland), 73 (France), 74 (French Polynesia), 75 (Gabon), 76 (Gambia), 77 (Georgia), 78 (Germany), 79 (Ghana), 80 (Gibraltar), 81 (Greece), 82 (Greenland), 83 (Grenada), 84 (Guam), 85 (Guatemala), 86 (Guernsey), 87 (Guinea), 88 (Guinea-Bissau), 89 (Guyana), 90 (Haiti), 91 (Honduras), 92 (Hong Kong), 93 (Hungary), 94 (Iceland), 95 (India), 96 (Indonesia), 98 (Iraq), 99 (Ireland), 100 (Isle of Man), 101 (Israel), 102 (Italy), 103 (Ivory Coast), 104 (Jamaica), 105 (Japan), 106 (Jersey), 107 (Jordan), 108 (Kazakhstan), 109 (Kenya), 110 (Kiribati), 111 (Kosovo), 112 (Kuwait), 113 (Kyrgyzstan), 114 (Laos), 115 (Latvia), 116 (Lebanon), 117 (Lesotho), 118 (Liberia), 119 (Libya), 120 (Liechtenstein), 121 (Lithuania), 122 (Luxembourg), 123 (Macau), 124 (Macedonia), 125 (Madagascar), 126 (Malawi), 127 (Malaysia), 128 (Maldives), 129 (Mali), 130 (Malta), 131 (Marshall Islands), 132 (Mauritania), 133 (Mauritius), 134 (Mayotte), 135 (Mexico), 136 (Micronesia), 137 (Moldova), 138 (Monaco), 139 (Mongolia), 140 (Montenegro), 141 (Montserrat), 142 (Morocco), 143 (Mozambique), 144 (Myanmar), 145 (Namibia), 146 (Nauru), 147 (Nepal), 148 (Netherlands), 149 (Netherlands Antilles), 150 (New Caledonia), 151 (New Zealand), 152 (Nicaragua), 153 (Niger), 154 (Nigeria), 155 (Niue), 157 (Northern Mariana Islands), 158 (Norway), 159 (Oman), 160 (Pakistan), 161 (Palau), 162 (Palestine), 163 (Panama), 164 (Papua New Guinea), 165 (Paraguay), 166 (Peru), 167 (Philippines), 168 (Pitcairn), 169 (Poland), 170 (Portugal), 171 (Puerto Rico), 172 (Qatar), 173 (Republic of the Congo), 174 (Reunion), 175 (Romania), 176 (Russia), 177 (Rwanda), 178 (Saint Barthelemy), 179 (Saint Helena), 180 (Saint Kitts and Nevis), 181 (Saint Lucia), 182 (Saint Martin), 183 (Saint Pierre and Miquelon), 184 (Saint Vincent and the Grenadines), 185 (Samoa), 186 (San Marino), 187 (Sao Tome and Principe), 188 (Saudi Arabia), 189 (Senegal), 190 (Serbia), 191 (Seychelles), 192 (Sierra Leone), 193 (Singapore), 194 (Sint Maarten), 195 (Slovakia), 196 (Slovenia), 197 (Solomon Islands), 198 (Somalia), 199 (South Africa), 200 (South Korea), 201 (South Sudan), 202 (Spain), 203 (Sri Lanka), 205 (Suriname), 206 (Svalbard and Jan Mayen), 207 (Swaziland), 208 (Sweden), 209 (Switzerland), 211 (Taiwan), 212 (Tajikistan), 213 (Tanzania), 214 (Thailand), 215 (Togo), 216 (Tokelau), 217 (Tonga), 218 (Trinidad and Tobago), 219 (Tunisia), 220 (Turkey), 221 (Turkmenistan), 222 (Turks and Caicos Islands), 223 (Tuvalu), 224 (U.S. Virgin Islands), 225 (Uganda), 226 (Ukraine), 227 (United Arab Emirates), 228 (United Kingdom), 229 (United States), 230 (Uruguay), 231 (Uzbekistan), 232 (Vanuatu), 233 (Vatican), 234 (Venezuela), 235 (Vietnam), 236 (Wallis and Futuna), 237 (Western Sahara), 238 (Yemen), 239 (Zambia), 240 (Zimbabwe), 241 (Guadeloupe). Example: [29] for Brazil, [229] for United States
seniority_exclude_idsNoSeniority level IDs to exclude (optional). Valid IDs: 2-11 as listed above
seniority_include_idsNoSeniority level IDs to include (optional). Valid IDs: 2 (Manager), 3 (Director), 4 (VP), 5 (CXO), 6 (Unpaid), 7 (Training), 8 (Senior), 9 (Owner), 10 (Entry), 11 (Partner). Example: [10, 7] for Entry and Training
job_function_exclude_idsNoJob function IDs to exclude (optional). Valid IDs: 1-28 as listed above
job_function_include_idsNoJob function IDs to include (optional). Valid IDs: 1 (Marketing), 2 (Sales), 3 (Customer Service), 4 (Finance), 5 (HR), 6 (PR), 7 (Media), 8 (Design), 9 (Engineering), 10 (Operations), 11 (Legal), 12 (Education), 13 (Health), 14 (Real Estate), 15 (Accounting), 16 (Administrative), 17 (Business Development), 18 (Community Services), 19 (Consulting), 20 (Entrepreneurship), 21 (IT), 22 (Military Services), 23 (Product Management), 24 (Program/Project Management), 25 (Purchasing), 26 (QA), 27 (Research), 28 (Trades). Example: [9] for Engineering
contacts_per_company_limitNoMaximum number of contacts to target per company (optional). Example: 20

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only indicate readOnlyHint=false and destructiveHint=false, so the description carries the burden of explaining behavior. It adds valuable context: the dependency on get_intent_topics, AND logic across criteria, examples of include/exclude semantics, and the expected return content (ID, size estimation, creation status). It falls slightly short only because it does not discuss side effects or operational limits, though the annotations already establish this is a write but non-destructive operation.

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

Conciseness2/5

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

The description is not appropriately sized. It is very long and repetitive: the CONTACTS CRITERIA section appears twice with almost identical parameter lists, and several ID labels and examples are duplicated from the input schema. While the most important prerequisite is front-loaded, the redundant sections make the definition harder to scan than it should be.

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 13-parameter tool with no output schema, the description is remarkably complete: it covers prerequisites, when to use, when not to use, alternative tools, full valid value sets, examples, AND logic, and return information. An agent has enough context to decide whether to invoke it and how to fill its parameters 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?

Even though schema description coverage is 100%, the description adds substantial meaning beyond the schema: human-readable labels for industry, job function, and seniority IDs; concrete examples; include/exclude semantics; AND-combination logic; and the instruction to source topic values from get_intent_topics. This goes well beyond what the structured schema alone 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 clearly identifies the tool as creating Bombora buyer intent audiences on the Metadata platform, and further specifies that it targets B2B audiences by buyer intent topics, firmographics, contact attributes, and geography. This is a specific verb-resource pair that distinguishes it from sibling audience creation tools like create_firmographic_audience or create_g2_intent_*.

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 provides explicit when-to-use guidance, including a mandatory prerequisite: call get_intent_topics first, and if no topics are returned, do NOT use this tool. It also names the preferred alternative, create_firmographic_audience, making the decision boundary entirely clear.

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

create_budget_groupCreate or Update Budget GroupA
Destructive
Inspect

Create or update a budget group with its channel, metric, allocation, and budget settings. This can affect advertising spend and requires confirm_budget_impact=true for the supplied settings; otherwise returns requires_confirmation and proposed_changes without writing. An id selects an existing group for update. Data containing only id and monthlyCap changes the monthly cap alone: it preserves the group's saved optimization, dates, funnels and campaigns and returns budget_update_verification; report success only when verified is true, and stop without retrying when it is false. New groups default autoApplyBudget to false; explicit autoApplyBudget=true allows the platform to apply the configured budget automatically. On create, omitting autoPauseConfigurationId uses the account's default auto pause rule set; on update, omitting it keeps the current one, and a different rule set must be one listed by get_budget_group. Returns the group or a validation/platform error.

NameRequiredDescriptionDefault
dataYesBudget group configuration
confirm_budget_impactNoExplicit authorization for these spend changes. False returns a confirmation request without writing.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare destructive/openWorld, and the description adds real context beyond them: the spend-impact confirmation gate, the requires_confirmation non-writing path, and the budget_update_verification contract with an explicit 'stop without retrying when false' instruction. The only thing missing is more on the returned error/validation shape, which it summarizes in one clause.

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-loads the create/update contract and confirmation gate, and each paragraph carries operational meaning. It is dense but slightly overlong, with some overlap between the description and the already-documented autoPauseConfigurationId schema text.

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 destructive, open-world mutation with a nested 2-parameter schema, it covers creation, update, cap-only updates, confirmation, verification, and default resolution of the pause rule set, plus a one-line return summary. An agent has everything needed to call it and interpret the result.

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 baseline is 3; the description earns extra by explaining defaults and semantics not obvious from the schema, e.g. autoApplyBudget defaults to false and must be explicitly true for platform application, and autoPauseConfigurationId is defaulted on create but retained on update. It partially restates the schema's own field descriptions, which caps it below 5.

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 pair and resource ('Create or update a budget group') plus the fields it carries (channel, metric, allocation, budget settings). It explicitly distinguishes create from update via the presence of 'id', so an agent can route correctly 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?

Gives explicit conditions: an id selects an existing group for update, data with only id+monthlyCap is a cap-only update, and confirm_budget_impact=true is required or the call returns without writing. It also points to get_budget_group as the source for valid auto pause rule sets, naming the alternatives an agent needs.

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

create_campaignCreate Campaign — Precision Optimization (1×1×1)AInspect

Create a draft campaign using Precision Optimization (1x1x1), with a separate experiment for each configured audience, ad, and offer combination. Supports LinkedIn, Facebook, Instagram, Google Ads, Reddit, and Microsoft Ads. Ads are attached individually through ads.list; ads.groups creates named Metadata platform ad groups only when the user asks for them, each with at least two distinct compatible ads (the same ad type on LinkedIn) and a name of at most 50 characters. Returns the draft campaign and channel configuration or validation errors. This tool does not launch it.

NameRequiredDescriptionDefault
campaign_dataYesComplete campaign configuration data

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare that this is a non-read-only, non-destructive, closed-world write. The description adds genuinely new behavior beyond that: the 1x1x1 experiment fan-out (a side effect on campaign structure), how ads attach individually via ads.list versus named groups, and that failures surface as validation errors from the same call. It still leaves the silent-failure traps (channel-locked Lead Gen offers, platform default US location) to the schema rather than the description.

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

Conciseness4/5

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

Four sentences, front-loaded with the core behavior, then channel coverage, then the ad-group caveat, then the return/no-launch boundary. No filler, though the ad-group sentence is dense and packs several constraints into one run-on.

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 purpose, channel breadth, ad-attachment mechanics, return values ('draft campaign and channel configuration or validation errors'), and the launch boundary — which is enough given a very rich 100%-documented schema and no output schema. The gap is workflow ordering: it never says that ads, offers, and the budget group must exist first, nor points at launch_campaign or check_campaign_launch_readiness.

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 baseline is 3, and the description still adds value on top: it explains that ads are attached individually through ads.list, that ads.groups creates named Metadata platform ad groups rather than native platform groups, and that a group needs at least two distinct compatible ads (same ad type on LinkedIn) with a 50-character name cap. That is placement and constraint semantics, not a restatement of field names.

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

Purpose4/5

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

States a specific verb+resource and a distinctive structural fact: it creates a draft campaign using Precision Optimization (1x1x1) with one experiment per audience/ad/offer combination, and names the six supported channels. It also draws a hard boundary with 'This tool does not launch it.' It stops short of naming the sibling it competes with for alternative structures (create_native_structure_campaign), so an agent must still infer which structure tool to pick.

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

Usage Guidelines3/5

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

There is conditional guidance embedded ('ads.groups ... only when the user asks for them') and an implied two-step workflow because the tool explicitly refuses to launch. But no explicit when-to-use vs when-not statement, no mention of launch_campaign by name, and no routing rule against create_native_structure_campaign or add_and_edit_campaign_elements for existing campaigns.

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

create_csv_upload_linkedin_native_audienceCreate CSV Upload - LinkedIn Native AudienceCInspect

Create a CSV Upload - LinkedIn Native audience (platform customAudienceType=NATIVE_TARGETING_CSV).

NameRequiredDescriptionDefault
skillsNoFree-text professional skills (resolved to LinkedIn skill IDs). Example: ['HubSpot', 'Salesforce']
revenuesNoLinkedIn revenue ranges for audience targeting. Valid values: Under $1M, $1M-$10M, $10M-$100M, $100M-$1B, $1B+. Example: ['$1M-$10M', '$10M-$100M']
companiesNoInline map of company names to website URLs (optional). MUTUALLY EXCLUSIVE with `companies_source_csv_url`. Example: {"Acme Corp": "https://acme.com"}
employeesNoLinkedIn employee count ranges for audience targeting. Valid values: 1, 2-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, +10001. Example: ['201-500', '501-1000']
job_titlesNoFree-text job titles (resolved to LinkedIn job-title IDs). Example: ['Software Engineer', 'Product Manager']
audience_nameYesName for the new audience (required).
company_namesNoFree-text company names (resolved to LinkedIn company IDs). Example: ['Metadata', 'Google']
location_country_idsNoCountry IDs for geographic targeting (optional). Valid IDs: 1 (Afghanistan), 2 (Albania), 3 (Algeria), 4 (American Samoa), 5 (Andorra), 6 (Angola), 7 (Anguilla), 8 (Antarctica), 9 (Antigua and Barbuda), 10 (Argentina), 11 (Armenia), 12 (Aruba), 13 (Australia), 14 (Austria), 15 (Azerbaijan), 16 (Bahamas), 17 (Bahrain), 18 (Bangladesh), 19 (Barbados), 20 (Belarus), 21 (Belgium), 22 (Belize), 23 (Benin), 24 (Bermuda), 25 (Bhutan), 26 (Bolivia), 27 (Bosnia and Herzegovina), 28 (Botswana), 29 (Brazil), 30 (British Indian Ocean Territory), 31 (British Virgin Islands), 32 (Brunei), 33 (Bulgaria), 34 (Burkina Faso), 35 (Burundi), 36 (Cambodia), 37 (Cameroon), 38 (Canada), 39 (Cape Verde), 40 (Cayman Islands), 41 (Central African Republic), 42 (Chad), 43 (Chile), 44 (China), 45 (Christmas Island), 46 (Cocos Islands), 47 (Colombia), 48 (Comoros), 49 (Cook Islands), 50 (Costa Rica), 51 (Croatia), 53 (Curacao), 54 (Cyprus), 55 (Czech Republic), 56 (Democratic Republic of the Congo), 57 (Denmark), 58 (Djibouti), 59 (Dominica), 60 (Dominican Republic), 61 (East Timor), 62 (Ecuador), 63 (Egypt), 64 (El Salvador), 65 (Equatorial Guinea), 66 (Eritrea), 67 (Estonia), 68 (Ethiopia), 69 (Falkland Islands), 70 (Faroe Islands), 71 (Fiji), 72 (Finland), 73 (France), 74 (French Polynesia), 75 (Gabon), 76 (Gambia), 77 (Georgia), 78 (Germany), 79 (Ghana), 80 (Gibraltar), 81 (Greece), 82 (Greenland), 83 (Grenada), 84 (Guam), 85 (Guatemala), 86 (Guernsey), 87 (Guinea), 88 (Guinea-Bissau), 89 (Guyana), 90 (Haiti), 91 (Honduras), 92 (Hong Kong), 93 (Hungary), 94 (Iceland), 95 (India), 96 (Indonesia), 98 (Iraq), 99 (Ireland), 100 (Isle of Man), 101 (Israel), 102 (Italy), 103 (Ivory Coast), 104 (Jamaica), 105 (Japan), 106 (Jersey), 107 (Jordan), 108 (Kazakhstan), 109 (Kenya), 110 (Kiribati), 111 (Kosovo), 112 (Kuwait), 113 (Kyrgyzstan), 114 (Laos), 115 (Latvia), 116 (Lebanon), 117 (Lesotho), 118 (Liberia), 119 (Libya), 120 (Liechtenstein), 121 (Lithuania), 122 (Luxembourg), 123 (Macau), 124 (Macedonia), 125 (Madagascar), 126 (Malawi), 127 (Malaysia), 128 (Maldives), 129 (Mali), 130 (Malta), 131 (Marshall Islands), 132 (Mauritania), 133 (Mauritius), 134 (Mayotte), 135 (Mexico), 136 (Micronesia), 137 (Moldova), 138 (Monaco), 139 (Mongolia), 140 (Montenegro), 141 (Montserrat), 142 (Morocco), 143 (Mozambique), 144 (Myanmar), 145 (Namibia), 146 (Nauru), 147 (Nepal), 148 (Netherlands), 149 (Netherlands Antilles), 150 (New Caledonia), 151 (New Zealand), 152 (Nicaragua), 153 (Niger), 154 (Nigeria), 155 (Niue), 157 (Northern Mariana Islands), 158 (Norway), 159 (Oman), 160 (Pakistan), 161 (Palau), 162 (Palestine), 163 (Panama), 164 (Papua New Guinea), 165 (Paraguay), 166 (Peru), 167 (Philippines), 168 (Pitcairn), 169 (Poland), 170 (Portugal), 171 (Puerto Rico), 172 (Qatar), 173 (Republic of the Congo), 174 (Reunion), 175 (Romania), 176 (Russia), 177 (Rwanda), 178 (Saint Barthelemy), 179 (Saint Helena), 180 (Saint Kitts and Nevis), 181 (Saint Lucia), 182 (Saint Martin), 183 (Saint Pierre and Miquelon), 184 (Saint Vincent and the Grenadines), 185 (Samoa), 186 (San Marino), 187 (Sao Tome and Principe), 188 (Saudi Arabia), 189 (Senegal), 190 (Serbia), 191 (Seychelles), 192 (Sierra Leone), 193 (Singapore), 194 (Sint Maarten), 195 (Slovakia), 196 (Slovenia), 197 (Solomon Islands), 198 (Somalia), 199 (South Africa), 200 (South Korea), 201 (South Sudan), 202 (Spain), 203 (Sri Lanka), 205 (Suriname), 206 (Svalbard and Jan Mayen), 207 (Swaziland), 208 (Sweden), 209 (Switzerland), 211 (Taiwan), 212 (Tajikistan), 213 (Tanzania), 214 (Thailand), 215 (Togo), 216 (Tokelau), 217 (Tonga), 218 (Trinidad and Tobago), 219 (Tunisia), 220 (Turkey), 221 (Turkmenistan), 222 (Turks and Caicos Islands), 223 (Tuvalu), 224 (U.S. Virgin Islands), 225 (Uganda), 226 (Ukraine), 227 (United Arab Emirates), 228 (United Kingdom), 229 (United States), 230 (Uruguay), 231 (Uzbekistan), 232 (Vanuatu), 233 (Vatican), 234 (Venezuela), 235 (Vietnam), 236 (Wallis and Futuna), 237 (Western Sahara), 238 (Yemen), 239 (Zambia), 240 (Zimbabwe), 241 (Guadeloupe). Example: [29] for Brazil, [229] for United States
companies_source_csv_urlNoPublic URL of a CSV with header EXACTLY `companyname,companywebsite` (case-insensitive); only the `companywebsite` values are required, the name column may be empty. Use when the user attached a CSV to the chat — the URL comes via `AudienceBrief.attached_file_urls`. MUTUALLY EXCLUSIVE with `companies`.

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already indicate a non-readonly, open-world, non-destructive operation, so the description does not contradict them. However, the description adds almost no behavioral context beyond the platform type: it does not mention side effects, prerequisites, CSV URL requirements, or what happens during resolution of free-text fields.

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

Conciseness4/5

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

The description is a single front-loaded sentence with no filler. It is appropriately concise, though its extreme brevity contributes to gaps in usage and behavioral guidance.

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 complex audience-creation tool with nine parameters, nested objects, many related siblings, and no output schema, the description is too sparse. It does not explain workflow context, selection criteria among alternatives, or how the CSV upload pathway differs from other LinkedIn native audience creation methods.

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 parameter descriptions are highly detailed, including mutual exclusivity, enum-like allowed values, and CSV URL format. The tool description itself adds no parameter-level meaning, so the baseline of 3 is appropriate given that the schema carries the burden.

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 create action and names the resource as a LinkedIn Native CSV Upload audience, including the platform identifier `customAudienceType=NATIVE_TARGETING_CSV`. It distinguishes this audience type conceptually, but does not explicitly differentiate it from related siblings such as `create_linkedin_native_criteria_audience` or `upload_account_list_csv_audience`.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool instead of the many sibling audience-creation or CSV-upload tools. It merely states that the tool creates an audience, leaving the agent to infer selection criteria from the name and schema.

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

create_facebook_native_criteria_audienceCreate Facebook Native Criteria AudienceBInspect

Create a Facebook native criteria audience using Facebook-supported targeting criteria. Build audiences based on Facebook native industries, geographic location, job titles, interests, and age range.

NameRequiredDescriptionDefault
nameYesAudience name (required).
max_ageYesMaximum age for audience targeting. Must be between 21 and 65, and greater than or equal to min_age.
min_ageYesMinimum age for audience targeting. Must be between 21 and 65, and less than or equal to max_age.
countriesNoList of country names to target. Each must be a valid country name (e.g., ['United States', 'Brazil']). Resolved to platform country IDs before submission.
interestsNoFree-text interest strings for targeting. Example: ['Java', 'Python', 'Cloud Computing', 'Machine Learning']
industriesNoFacebook native industry categories for audience targeting. Valid values: Administrative Services, Architecture and Engineering, Arts, Entertainment, Sports and Media, Business and Finance, Business decision maker titles and interests, Cleaning and Maintenance Services, Community and Social Services, Computation and Mathematics, Construction and Extraction, Education and Libraries, Farming, Fishing and Forestry, Food and Restaurants, Government Employees (Global), Healthcare and Medical Services, Installation and Repair Services, IT and Technical Services, Large business-to-business enterprise employees (500+ employees), Legal Services, Life, Physical and Social Sciences, Management, Medium business-to-business enterprise employees (200 - 500 employees), Production, Sales, Small business-to-business enterprise employees (10-200 employees), Transportation and Moving. Example: ['IT and Technical Services', 'Sales']
job_titlesNoFree-text job title strings for targeting. Example: ['Software Engineer', 'Senior Developer', 'Product Owner']
estimate_onlyNoIf true, do NOT create the audience — only estimate its size and return the expected contact count. Use this when the user wants to preview Facebook audience size before committing. Defaults to false (audience is created).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the mutation and open-world profile is covered. The description adds only that criteria must be 'Facebook-supported', hinting at validation of unsupported values, but says nothing about whether creation is idempotent, how duplicate names are handled, or what is returned.

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 tight sentences with the core action front-loaded and no filler. Nothing is wasted, though the second sentence largely restates the categories already visible in the schema.

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 creation tool with no output schema, the definition omits anything about what the call returns (e.g., an audience identifier) or that a created audience still needs to be attached to a campaign. With 100% schema coverage and annotations present, the gaps are moderate rather than critical.

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 every parameter, including the enum-constrained countries and industries lists and the estimate_only preview flag, is already documented. The description's mapping of criteria categories to parameter concepts is mildly helpful but adds no syntax or format detail beyond the schema.

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

Purpose4/5

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

The description uses a specific verb+resource ('Create a Facebook native criteria audience') and enumerates the targeting dimensions it supports (industries, location, job titles, interests, age range). The 'Facebook' qualifier implicitly separates it from the LinkedIn counterpart, though it never names that sibling explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no exclusions or alternatives given, despite many sibling audience-creation tools (create_linkedin_native_criteria_audience, create_firmographic_audience, create_audience_from_segment, create_technographic_audience). An agent must infer from the name alone which creator fits a given request.

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

create_firmographic_audienceCreate Firmographic AudienceAInspect

Create B2B company firmographic audiences for targeted advertising campaigns. Build audiences based on company attributes (industry, size, revenue) and contact-level criteria.

            ESTIMATE-ONLY MODE:
            Pass estimate_only=true to preview audience size (companies + contacts) WITHOUT creating the audience.
            In this mode the tool returns expectedNumberOfCompanies,
            expectedNumberOfContacts, and cappedContactCount. Default is false (audience is created).

            PREFERRED AUDIENCE TYPE:
            This is the DEFAULT and most commonly used audience type on the Metadata platform.
            When the user asks to create an audience without specifying a type, prefer this tool.
            Only suggest Bombora audiences if get_intent_topics returns available topics.
            Only suggest G2 audiences if G2 is confirmed as connected via get_integrations_status
            and the user specifically requests G2 targeting.

            ALSO KNOWN AS: company audience, target companies, B2B audience, business targeting, account-based audience, ABM list, company targeting



            WHEN TO USE:
            - Default choice when the user wants to create a B2B audience
            - Create targeted B2B audiences for LinkedIn, Facebook campaigns
            - Target companies by industry, size, revenue
            - Target contacts by seniority level and job function
            - Set geographic targeting and contact limits per company

            TARGETING OPTIONS:
            - Industries: Use industry IDs. Examples:
              1=Defense & Space, 4=Computer Software, 6=Internet, 7=Semiconductors, 8=Telecommunications,
              11=Management Consulting, 12=Biotechnology, 41=Banking, 42=Insurance, 43=Financial Services,
              80=Marketing & Advertising, 96=Information Technology & Services, more values in detail in the input schema
            - Employees: "0 - 9", "10 - 49", "50 - 199", "200 - 499", "500 - 999", "1,000 - 4,999", "5,000 - 9,999", "10,000+"
            - Revenue: "$1M - $10M", "$10M - $50M", "$50M - $100M", "$100M - $200M", "$500M - $1B", "$1B+"

            CONTACTS CRITERIA:

Use the following parameters to filter and target specific contacts within accounts:

GEOGRAPHIC TARGETING:

  • location_country_ids: Array of country IDs (e.g., [29] for Brazil, [229] for United States)

  • location_state_ids: Array of state IDs (e.g., [5] for California, [32] for New York)

JOB TITLES:

  • job_title_includes: Array of free text strings to include (e.g., ["Software Engineer", "Manager"])

  • job_title_excludes: Array of free text strings to exclude (e.g., ["Senior", "Lead"])

JOB FUNCTIONS: Valid job function IDs and their labels:

  • 1: Marketing, 2: Sales, 3: Customer Service, 4: Finance, 5: Human Resources, 6: Public Relations

  • 7: Media, 8: Design, 9: Engineering, 10: Operations, 11: Legal, 12: Education

  • 13: Health, 14: Real Estate, 15: Accounting, 16: Administrative, 17: Business Development

  • 18: Community and Social Services, 19: Consulting, 20: Entrepreneurship, 21: Information Technology

  • 22: Military and Protective Services, 23: Product Management, 24: Program and Project Management

  • 25: Purchasing, 26: Quality Assurance, 27: Research, 28: Trades

  • job_function_include_ids: Array of job function IDs to include (e.g., [9] for Engineering)

  • job_function_exclude_ids: Array of job function IDs to exclude

SENIORITY LEVELS: Valid seniority IDs and their labels:

  • 2: Manager, 3: Director, 4: VP, 5: CXO, 6: Unpaid, 7: Training

  • 8: Senior, 9: Owner, 10: Entry, 11: Partner

  • seniority_include_ids: Array of seniority level IDs to include (e.g., [10, 7] for Entry and Training)

  • seniority_exclude_ids: Array of seniority level IDs to exclude

CONTACT LIMITS:

  • contacts_per_company_limit: Maximum number of contacts to target per company (optional). Example: 20

USAGE NOTES:

  • All ID fields (countries, states, job functions, seniorities) use numeric IDs from the platform

  • Job titles are free text strings, not IDs

  • Use include parameters to specify which criteria to target

  • Use exclude parameters to filter out contacts matching specific criteria

  • Combine multiple criteria for precise targeting (e.g., Senior Engineers in California)

  • Criteria are combined with AND logic, so all conditions must be met

CONTACTS CRITERIA PARAMETERS(Usually after other initial audience parameters to be described next):

  • location_country_ids: Array of country IDs (optional)

  • location_state_ids: Array of state IDs (optional)

  • job_title_includes: Array of job title keywords to include (optional)

  • job_title_excludes: Array of job title keywords to exclude (optional)

  • job_function_include_ids: Array of job function IDs (optional)

  • job_function_exclude_ids: Array of job function IDs (optional)

  • seniority_include_ids: Array of seniority level IDs (optional)

  • seniority_exclude_ids: Array of seniority level IDs (optional)

  • contacts_per_company_limit: Maximum contacts per company (optional)

              PARAMETERS:
              - name: Audience name (required) - **IMPORTANT: Name MUST NOT exceed 50 characters. This is a mandatory requirement.**
              - industries: Array of industry IDs (optional)
              - employees: Array of employee count ranges (optional)
              - revenue: Array of revenue ranges (optional)
    
              RETURNS:
              Audience details with ID, size estimation, and creation status.
    
              COMMON USE CASES:
              - Target software companies with 50-500 employees
              - Find companies in specific industries with revenue ranges
              - Build audiences with contact-level filtering (seniority, job function, location)
              - Combine firmographic and contact criteria for precise B2B targeting
    
              IMPORTANT NOTES:
              - **CRITICAL: Audience name MUST NOT exceed 50 characters - this is mandatory and will cause creation to fail if exceeded**
              - name is the only required parameter
              - All other parameters are optional for flexible audience creation
              - Contact criteria fields work the same as in G2 metadata dynamic audiences
              - Audience size depends on firmographic filters and applied contacts criteria
NameRequiredDescriptionDefault
nameYesAudience name (required)
revenueNoRevenue ranges. Valid enum values: LESS_THAN_1M ($0-$1M), FROM_1M_TO_10M ($1M-$10M), FROM_10M_TO_50M ($10M-$50M), FROM_50M_TO_100M ($50M-$100M), FROM_100M_TO_200M ($100M-$200M), FROM_200M_TO_500M ($200M-$500M), FROM_500M_TO_1000M ($500M-$1B), OVER_1000M ($1B+)
employeesNoEmployee count ranges. Valid enum values: LESS_THAN_10 (0-9), FROM_10_TO_50 (10-49), FROM_50_TO_200 (50-199), FROM_200_TO_500 (200-499), FROM_500_TO_1000 (500-999), FROM_1000_TO_5000 (1,000-4,999), FROM_5000_TO_10000 (5,000-9,999), OVER_10000 (10,000+)
industriesNoIndustry IDs for firmographic/technographic filtering (optional). Valid IDs: 1=Defense & Space, 3=Computer Hardware, 4=Computer Software, 5=Computer Networking, 6=Internet, 7=Semiconductors, 8=Telecommunications, 9=Law Practice, 10=Legal Services, 11=Management Consulting, 12=Biotechnology, 13=Medical Practice, 14=Hospital & Health Care, 15=Pharmaceuticals, 16=Veterinary, 17=Medical Device, 18=Cosmetics, 19=Apparel & Fashion, 20=Sporting Goods, 21=Tobacco, 22=Supermarkets, 23=Food Production, 24=Consumer Electronics, 25=Consumer Goods, 26=Furniture, 27=Retail, 28=Entertainment, 29=Gambling & Casinos, 30=Leisure, Travel & Tourism, 31=Hospitality, 32=Restaurants, 33=Sports, 34=Food & Beverages, 35=Motion Pictures & Film, 36=Broadcast Media, 37=Museums & Institutions, 38=Fine Art, 39=Performing Arts, 40=Recreational Facilities & Services, 41=Banking, 42=Insurance, 43=Financial Services, 44=Real Estate, 45=Investment Banking, 46=Investment Management, 47=Accounting, 48=Construction, 49=Building Materials, 50=Architecture & Planning, 51=Civil Engineering, 52=Aviation & Aerospace, 53=Automotive, 54=Chemicals, 55=Machinery, 56=Mining & Metals, 57=Oil & Energy, 58=Shipbuilding, 59=Utilities, 60=Textiles, 61=Paper & Forest Products, 62=Railroad Manufacture, 63=Farming, 64=Ranching, 65=Dairy, 66=Fishery, 67=Primary/Secondary Education, 68=Higher Education, 69=Education Management, 70=Research, 71=Military, 72=Legislative Office, 73=Judiciary, 74=International Affairs, 75=Government Administration, 76=Executive Office, 77=Law Enforcement, 78=Public Safety, 79=Public Policy, 80=Marketing & Advertising, 81=Newspapers, 82=Publishing, 83=Printing, 84=Information Services, 85=Libraries, 86=Environmental Services, 87=Package/Freight Delivery, 88=Individual & Family Services, 89=Religious Institutions, 90=Civic & Social Organization, 91=Consumer Services, 92=Transportation/Trucking/Railroad, 93=Warehousing, 94=Airlines/Aviation, 95=Maritime, 96=Information Technology & Services, 97=Market Research, 98=Public Relations & Communications, 99=Design, 100=Non-profit Organization Management, 101=Fundraising, 102=Program Development, 103=Writing & Editing, 104=Staffing & Recruiting, 105=Professional Training & Coaching, 106=Venture Capital & Private Equity, 107=Political Organization, 108=Translation & Localization, 109=Computer Games, 110=Events Services, 111=Arts & Crafts, 112=Electrical & Electronic Manufacturing, 113=Online Media, 114=Nanotechnology, 115=Music, 116=Logistics & Supply Chain, 117=Plastics, 118=Computer & Network Security, 119=Wireless, 120=Alternative Dispute Resolution, 121=Security & Investigations, 122=Facilities Services, 123=Outsourcing/Offshoring, 124=Health, Wellness & Fitness, 125=Alternative Medicine, 126=Media Production, 127=Animation, 128=Commercial Real Estate, 129=Capital Markets, 130=Think Tanks, 131=Philanthropy, 132=E-learning, 133=Wholesale, 134=Import & Export, 135=Mechanical Or Industrial Engineering, 136=Photography, 137=Human Resources, 138=Business Supplies & Equipment, 139=Mental Health Care, 140=Graphic Design, 141=International Trade & Development, 142=Wine & Spirits, 143=Luxury Goods & Jewelry, 144=Renewables & Environment, 145=Glass, Ceramics & Concrete, 146=Packaging & Containers, 147=Industrial Automation, 148=Government Relations. Example: [4, 96, 11] for Software, IT Services, Consulting
estimate_onlyNoIf true, do NOT create the audience — only estimate its size and return the counts. Use this when the user wants to preview how many companies/contacts match the criteria before committing. Defaults to false (audience is created).
job_title_excludesNoFree text keywords for job titles to exclude (optional). Example: ['Senior', 'Lead']
job_title_includesNoFree text keywords for job titles to include (optional). Example: ['Software Engineer', 'Manager']
location_state_idsNoState IDs for geographic targeting (optional). Valid US State IDs: 1 (Alabama), 2 (Alaska), 3 (Arizona), 4 (Arkansas), 5 (California), 6 (Colorado), 7 (Connecticut), 8 (Delaware), 9 (Florida), 10 (Georgia), 11 (Hawaii), 12 (Idaho), 13 (Illinois), 14 (Indiana), 15 (Iowa), 16 (Kansas), 17 (Kentucky), 18 (Louisiana), 19 (Maine), 20 (Maryland), 21 (Massachusetts), 22 (Michigan), 23 (Minnesota), 24 (Mississippi), 25 (Missouri), 26 (Montana), 27 (Nebraska), 28 (Nevada), 29 (New Hampshire), 30 (New Jersey), 31 (New Mexico), 32 (New York), 33 (North Carolina), 34 (North Dakota), 35 (Ohio), 36 (Oklahoma), 37 (Oregon), 38 (Pennsylvania), 39 (Rhode Island), 40 (South Carolina), 41 (South Dakota), 42 (Tennessee), 43 (Texas), 44 (Utah), 45 (Vermont), 46 (Virginia), 47 (Washington), 48 (West Virginia), 49 (Wisconsin), 50 (Wyoming), 52 (District of Columbia). Example: [5] for California, [32] for New York
location_country_idsNoCountry IDs for geographic targeting (optional). Valid IDs: 1 (Afghanistan), 2 (Albania), 3 (Algeria), 4 (American Samoa), 5 (Andorra), 6 (Angola), 7 (Anguilla), 8 (Antarctica), 9 (Antigua and Barbuda), 10 (Argentina), 11 (Armenia), 12 (Aruba), 13 (Australia), 14 (Austria), 15 (Azerbaijan), 16 (Bahamas), 17 (Bahrain), 18 (Bangladesh), 19 (Barbados), 20 (Belarus), 21 (Belgium), 22 (Belize), 23 (Benin), 24 (Bermuda), 25 (Bhutan), 26 (Bolivia), 27 (Bosnia and Herzegovina), 28 (Botswana), 29 (Brazil), 30 (British Indian Ocean Territory), 31 (British Virgin Islands), 32 (Brunei), 33 (Bulgaria), 34 (Burkina Faso), 35 (Burundi), 36 (Cambodia), 37 (Cameroon), 38 (Canada), 39 (Cape Verde), 40 (Cayman Islands), 41 (Central African Republic), 42 (Chad), 43 (Chile), 44 (China), 45 (Christmas Island), 46 (Cocos Islands), 47 (Colombia), 48 (Comoros), 49 (Cook Islands), 50 (Costa Rica), 51 (Croatia), 53 (Curacao), 54 (Cyprus), 55 (Czech Republic), 56 (Democratic Republic of the Congo), 57 (Denmark), 58 (Djibouti), 59 (Dominica), 60 (Dominican Republic), 61 (East Timor), 62 (Ecuador), 63 (Egypt), 64 (El Salvador), 65 (Equatorial Guinea), 66 (Eritrea), 67 (Estonia), 68 (Ethiopia), 69 (Falkland Islands), 70 (Faroe Islands), 71 (Fiji), 72 (Finland), 73 (France), 74 (French Polynesia), 75 (Gabon), 76 (Gambia), 77 (Georgia), 78 (Germany), 79 (Ghana), 80 (Gibraltar), 81 (Greece), 82 (Greenland), 83 (Grenada), 84 (Guam), 85 (Guatemala), 86 (Guernsey), 87 (Guinea), 88 (Guinea-Bissau), 89 (Guyana), 90 (Haiti), 91 (Honduras), 92 (Hong Kong), 93 (Hungary), 94 (Iceland), 95 (India), 96 (Indonesia), 98 (Iraq), 99 (Ireland), 100 (Isle of Man), 101 (Israel), 102 (Italy), 103 (Ivory Coast), 104 (Jamaica), 105 (Japan), 106 (Jersey), 107 (Jordan), 108 (Kazakhstan), 109 (Kenya), 110 (Kiribati), 111 (Kosovo), 112 (Kuwait), 113 (Kyrgyzstan), 114 (Laos), 115 (Latvia), 116 (Lebanon), 117 (Lesotho), 118 (Liberia), 119 (Libya), 120 (Liechtenstein), 121 (Lithuania), 122 (Luxembourg), 123 (Macau), 124 (Macedonia), 125 (Madagascar), 126 (Malawi), 127 (Malaysia), 128 (Maldives), 129 (Mali), 130 (Malta), 131 (Marshall Islands), 132 (Mauritania), 133 (Mauritius), 134 (Mayotte), 135 (Mexico), 136 (Micronesia), 137 (Moldova), 138 (Monaco), 139 (Mongolia), 140 (Montenegro), 141 (Montserrat), 142 (Morocco), 143 (Mozambique), 144 (Myanmar), 145 (Namibia), 146 (Nauru), 147 (Nepal), 148 (Netherlands), 149 (Netherlands Antilles), 150 (New Caledonia), 151 (New Zealand), 152 (Nicaragua), 153 (Niger), 154 (Nigeria), 155 (Niue), 157 (Northern Mariana Islands), 158 (Norway), 159 (Oman), 160 (Pakistan), 161 (Palau), 162 (Palestine), 163 (Panama), 164 (Papua New Guinea), 165 (Paraguay), 166 (Peru), 167 (Philippines), 168 (Pitcairn), 169 (Poland), 170 (Portugal), 171 (Puerto Rico), 172 (Qatar), 173 (Republic of the Congo), 174 (Reunion), 175 (Romania), 176 (Russia), 177 (Rwanda), 178 (Saint Barthelemy), 179 (Saint Helena), 180 (Saint Kitts and Nevis), 181 (Saint Lucia), 182 (Saint Martin), 183 (Saint Pierre and Miquelon), 184 (Saint Vincent and the Grenadines), 185 (Samoa), 186 (San Marino), 187 (Sao Tome and Principe), 188 (Saudi Arabia), 189 (Senegal), 190 (Serbia), 191 (Seychelles), 192 (Sierra Leone), 193 (Singapore), 194 (Sint Maarten), 195 (Slovakia), 196 (Slovenia), 197 (Solomon Islands), 198 (Somalia), 199 (South Africa), 200 (South Korea), 201 (South Sudan), 202 (Spain), 203 (Sri Lanka), 205 (Suriname), 206 (Svalbard and Jan Mayen), 207 (Swaziland), 208 (Sweden), 209 (Switzerland), 211 (Taiwan), 212 (Tajikistan), 213 (Tanzania), 214 (Thailand), 215 (Togo), 216 (Tokelau), 217 (Tonga), 218 (Trinidad and Tobago), 219 (Tunisia), 220 (Turkey), 221 (Turkmenistan), 222 (Turks and Caicos Islands), 223 (Tuvalu), 224 (U.S. Virgin Islands), 225 (Uganda), 226 (Ukraine), 227 (United Arab Emirates), 228 (United Kingdom), 229 (United States), 230 (Uruguay), 231 (Uzbekistan), 232 (Vanuatu), 233 (Vatican), 234 (Venezuela), 235 (Vietnam), 236 (Wallis and Futuna), 237 (Western Sahara), 238 (Yemen), 239 (Zambia), 240 (Zimbabwe), 241 (Guadeloupe). Example: [29] for Brazil, [229] for United States
seniority_exclude_idsNoSeniority level IDs to exclude (optional). Valid IDs: 2-11 as listed above
seniority_include_idsNoSeniority level IDs to include (optional). Valid IDs: 2 (Manager), 3 (Director), 4 (VP), 5 (CXO), 6 (Unpaid), 7 (Training), 8 (Senior), 9 (Owner), 10 (Entry), 11 (Partner). Example: [10, 7] for Entry and Training
job_function_exclude_idsNoJob function IDs to exclude (optional). Valid IDs: 1-28 as listed above
job_function_include_idsNoJob function IDs to include (optional). Valid IDs: 1 (Marketing), 2 (Sales), 3 (Customer Service), 4 (Finance), 5 (HR), 6 (PR), 7 (Media), 8 (Design), 9 (Engineering), 10 (Operations), 11 (Legal), 12 (Education), 13 (Health), 14 (Real Estate), 15 (Accounting), 16 (Administrative), 17 (Business Development), 18 (Community Services), 19 (Consulting), 20 (Entrepreneurship), 21 (IT), 22 (Military Services), 23 (Product Management), 24 (Program/Project Management), 25 (Purchasing), 26 (QA), 27 (Research), 28 (Trades). Example: [9] for Engineering
contacts_per_company_limitNoMaximum number of contacts to target per company (optional). Example: 20

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, and the description goes well beyond them: estimate_only=true previews counts (naming expectedNumberOfCompanies, expectedNumberOfContacts, cappedContactCount) without creating anything, criteria combine with AND logic, and the 50-character name limit will hard-fail creation. It does not cover permissions, idempotency, or whether re-creating with the same name collides, which keeps it short of a 5.

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

Conciseness2/5

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

The criteria parameter list is printed essentially three times (inline CONTACTS CRITERIA section, a full 'CONTACTS CRITERIA PARAMETERS' re-listing, then again under PARAMETERS), and the 50-character name warning appears three separate times. The signal is good but is buried in heavy duplication that bloats the definition.

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 14-parameter creation tool with no output schema, the description covers creation vs. estimate behavior, required vs. optional fields, ID-vs-free-text distinctions, and combination logic. Only the failure/error surface beyond the name-length rule and the shape of the created-audience response are left unaddressed.

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, and the description largely duplicates the schema's ID tables rather than adding to them. It adds some value with worked examples (Brazil=[29], Entry+Training=[10,7]), but it also presents revenue ranges as '$1M - $10M' style strings that do not match the schema's required enum values (FROM_1M_TO_10M), which risks misleading rather than clarifying.

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 B2B company firmographic audiences) plus the scope of criteria (company attributes and contact-level targeting). It explicitly names and contrasts the sibling alternatives create_bombora_audience and create_g2_intent_* tools, so an agent can pick it out of a very crowded sibling set without opening any 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?

Explicitly declares itself the DEFAULT audience type when no type is specified, and gives conditional routing rules for the alternatives ('only suggest Bombora if get_intent_topics returns topics', 'only suggest G2 if get_integrations_status confirms connection'). A WHEN TO USE block plus common use cases remove nearly all ambiguity about selection.

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

create_g2_intent_dynamic_audienceCreate G2 Intent (Dynamic) AudienceAInspect

Create a G2 Intent (Dynamic) audience (platform customAudienceType=DYNAMIC_G2_CONTACT).

            AUDIENCE TYPE (mirrors the UI's "Audience Type" dropdown):
              • UI label: "G2 Intent (Dynamic)"
              • Platform enum: DYNAMIC_G2_CONTACT
              • Refreshes daily as G2 intent signals update; uses generic contact criteria (not LinkedIn-native).

            PREREQUISITE:
              • G2 integration MUST be connected. If not, do NOT call this tool — recommend `create_firmographic_audience`.

            WHEN TO USE (exact user phrasing this tool should match):
              • "G2 Intent (Dynamic)" (without "LinkedIn Native")
              • "G2 intent dynamic audience"
              • "Dynamic G2 audience"
              • The user wants G2 intent that refreshes daily on Facebook/LinkedIn/other channels (not specifically LinkedIn-native).

            WHEN NOT TO USE:
              • If the user said "LinkedIn Native" → use `create_g2_intent_linkedin_native_dynamic_audience`.
              • If the user said "Static" → use `create_g2_intent_static_audience`.

            BUYING STAGES — REQUIRED BY THE PLATFORM:
              Same as the LinkedIn Native variant: ASK the user if missing. DO NOT default.

            CONTACTS CRITERIA:

Use the following parameters to filter and target specific contacts within accounts:

GEOGRAPHIC TARGETING:

  • location_country_ids: Array of country IDs (e.g., [29] for Brazil, [229] for United States)

  • location_state_ids: Array of state IDs (e.g., [5] for California, [32] for New York)

JOB TITLES:

  • job_title_includes: Array of free text strings to include (e.g., ["Software Engineer", "Manager"])

  • job_title_excludes: Array of free text strings to exclude (e.g., ["Senior", "Lead"])

JOB FUNCTIONS: Valid job function IDs and their labels:

  • 1: Marketing, 2: Sales, 3: Customer Service, 4: Finance, 5: Human Resources, 6: Public Relations

  • 7: Media, 8: Design, 9: Engineering, 10: Operations, 11: Legal, 12: Education

  • 13: Health, 14: Real Estate, 15: Accounting, 16: Administrative, 17: Business Development

  • 18: Community and Social Services, 19: Consulting, 20: Entrepreneurship, 21: Information Technology

  • 22: Military and Protective Services, 23: Product Management, 24: Program and Project Management

  • 25: Purchasing, 26: Quality Assurance, 27: Research, 28: Trades

  • job_function_include_ids: Array of job function IDs to include (e.g., [9] for Engineering)

  • job_function_exclude_ids: Array of job function IDs to exclude

SENIORITY LEVELS: Valid seniority IDs and their labels:

  • 2: Manager, 3: Director, 4: VP, 5: CXO, 6: Unpaid, 7: Training

  • 8: Senior, 9: Owner, 10: Entry, 11: Partner

  • seniority_include_ids: Array of seniority level IDs to include (e.g., [10, 7] for Entry and Training)

  • seniority_exclude_ids: Array of seniority level IDs to exclude

CONTACT LIMITS:

  • contacts_per_company_limit: Maximum number of contacts to target per company (optional). Example: 20

USAGE NOTES:

  • All ID fields (countries, states, job functions, seniorities) use numeric IDs from the platform

  • Job titles are free text strings, not IDs

  • Use include parameters to specify which criteria to target

  • Use exclude parameters to filter out contacts matching specific criteria

  • Combine multiple criteria for precise targeting (e.g., Senior Engineers in California)

  • Criteria are combined with AND logic, so all conditions must be met

CONTACTS CRITERIA PARAMETERS(Usually after other initial audience parameters to be described next):

  • location_country_ids: Array of country IDs (optional)

  • location_state_ids: Array of state IDs (optional)

  • job_title_includes: Array of job title keywords to include (optional)

  • job_title_excludes: Array of job title keywords to exclude (optional)

  • job_function_include_ids: Array of job function IDs (optional)

  • job_function_exclude_ids: Array of job function IDs (optional)

  • seniority_include_ids: Array of seniority level IDs (optional)

  • seniority_exclude_ids: Array of seniority level IDs (optional)

  • contacts_per_company_limit: Maximum contacts per company (optional)

              PARAMETERS:
                • name (required, ≤ 50 chars)
                • intent_days (required, 1-365)
                • buying_stages (REQUIRED by platform — ask if missing)
                • Contact criteria as in CONTACTS CRITERIA above.
    
              RETURNS: id, audience_id, audience_name, audience_type (DYNAMIC_G2_CONTACT), status, buying_stages, intent_days, counts.
NameRequiredDescriptionDefault
nameYesAudience name (required, max 50 characters).
intent_daysYesDays to look back for G2 intent signals (required, 1-365).
buying_stagesNoBuying stages to target. The platform REQUIRES at least one; if the user did not specify, ASK them before calling — do NOT default.
job_title_excludesNoFree text keywords for job titles to exclude (optional). Example: ['Senior', 'Lead']
job_title_includesNoFree text keywords for job titles to include (optional). Example: ['Software Engineer', 'Manager']
location_state_idsNoState IDs for geographic targeting (optional). Valid US State IDs: 1 (Alabama), 2 (Alaska), 3 (Arizona), 4 (Arkansas), 5 (California), 6 (Colorado), 7 (Connecticut), 8 (Delaware), 9 (Florida), 10 (Georgia), 11 (Hawaii), 12 (Idaho), 13 (Illinois), 14 (Indiana), 15 (Iowa), 16 (Kansas), 17 (Kentucky), 18 (Louisiana), 19 (Maine), 20 (Maryland), 21 (Massachusetts), 22 (Michigan), 23 (Minnesota), 24 (Mississippi), 25 (Missouri), 26 (Montana), 27 (Nebraska), 28 (Nevada), 29 (New Hampshire), 30 (New Jersey), 31 (New Mexico), 32 (New York), 33 (North Carolina), 34 (North Dakota), 35 (Ohio), 36 (Oklahoma), 37 (Oregon), 38 (Pennsylvania), 39 (Rhode Island), 40 (South Carolina), 41 (South Dakota), 42 (Tennessee), 43 (Texas), 44 (Utah), 45 (Vermont), 46 (Virginia), 47 (Washington), 48 (West Virginia), 49 (Wisconsin), 50 (Wyoming), 52 (District of Columbia). Example: [5] for California, [32] for New York
location_country_idsNoCountry IDs for geographic targeting (optional). Valid IDs: 1 (Afghanistan), 2 (Albania), 3 (Algeria), 4 (American Samoa), 5 (Andorra), 6 (Angola), 7 (Anguilla), 8 (Antarctica), 9 (Antigua and Barbuda), 10 (Argentina), 11 (Armenia), 12 (Aruba), 13 (Australia), 14 (Austria), 15 (Azerbaijan), 16 (Bahamas), 17 (Bahrain), 18 (Bangladesh), 19 (Barbados), 20 (Belarus), 21 (Belgium), 22 (Belize), 23 (Benin), 24 (Bermuda), 25 (Bhutan), 26 (Bolivia), 27 (Bosnia and Herzegovina), 28 (Botswana), 29 (Brazil), 30 (British Indian Ocean Territory), 31 (British Virgin Islands), 32 (Brunei), 33 (Bulgaria), 34 (Burkina Faso), 35 (Burundi), 36 (Cambodia), 37 (Cameroon), 38 (Canada), 39 (Cape Verde), 40 (Cayman Islands), 41 (Central African Republic), 42 (Chad), 43 (Chile), 44 (China), 45 (Christmas Island), 46 (Cocos Islands), 47 (Colombia), 48 (Comoros), 49 (Cook Islands), 50 (Costa Rica), 51 (Croatia), 53 (Curacao), 54 (Cyprus), 55 (Czech Republic), 56 (Democratic Republic of the Congo), 57 (Denmark), 58 (Djibouti), 59 (Dominica), 60 (Dominican Republic), 61 (East Timor), 62 (Ecuador), 63 (Egypt), 64 (El Salvador), 65 (Equatorial Guinea), 66 (Eritrea), 67 (Estonia), 68 (Ethiopia), 69 (Falkland Islands), 70 (Faroe Islands), 71 (Fiji), 72 (Finland), 73 (France), 74 (French Polynesia), 75 (Gabon), 76 (Gambia), 77 (Georgia), 78 (Germany), 79 (Ghana), 80 (Gibraltar), 81 (Greece), 82 (Greenland), 83 (Grenada), 84 (Guam), 85 (Guatemala), 86 (Guernsey), 87 (Guinea), 88 (Guinea-Bissau), 89 (Guyana), 90 (Haiti), 91 (Honduras), 92 (Hong Kong), 93 (Hungary), 94 (Iceland), 95 (India), 96 (Indonesia), 98 (Iraq), 99 (Ireland), 100 (Isle of Man), 101 (Israel), 102 (Italy), 103 (Ivory Coast), 104 (Jamaica), 105 (Japan), 106 (Jersey), 107 (Jordan), 108 (Kazakhstan), 109 (Kenya), 110 (Kiribati), 111 (Kosovo), 112 (Kuwait), 113 (Kyrgyzstan), 114 (Laos), 115 (Latvia), 116 (Lebanon), 117 (Lesotho), 118 (Liberia), 119 (Libya), 120 (Liechtenstein), 121 (Lithuania), 122 (Luxembourg), 123 (Macau), 124 (Macedonia), 125 (Madagascar), 126 (Malawi), 127 (Malaysia), 128 (Maldives), 129 (Mali), 130 (Malta), 131 (Marshall Islands), 132 (Mauritania), 133 (Mauritius), 134 (Mayotte), 135 (Mexico), 136 (Micronesia), 137 (Moldova), 138 (Monaco), 139 (Mongolia), 140 (Montenegro), 141 (Montserrat), 142 (Morocco), 143 (Mozambique), 144 (Myanmar), 145 (Namibia), 146 (Nauru), 147 (Nepal), 148 (Netherlands), 149 (Netherlands Antilles), 150 (New Caledonia), 151 (New Zealand), 152 (Nicaragua), 153 (Niger), 154 (Nigeria), 155 (Niue), 157 (Northern Mariana Islands), 158 (Norway), 159 (Oman), 160 (Pakistan), 161 (Palau), 162 (Palestine), 163 (Panama), 164 (Papua New Guinea), 165 (Paraguay), 166 (Peru), 167 (Philippines), 168 (Pitcairn), 169 (Poland), 170 (Portugal), 171 (Puerto Rico), 172 (Qatar), 173 (Republic of the Congo), 174 (Reunion), 175 (Romania), 176 (Russia), 177 (Rwanda), 178 (Saint Barthelemy), 179 (Saint Helena), 180 (Saint Kitts and Nevis), 181 (Saint Lucia), 182 (Saint Martin), 183 (Saint Pierre and Miquelon), 184 (Saint Vincent and the Grenadines), 185 (Samoa), 186 (San Marino), 187 (Sao Tome and Principe), 188 (Saudi Arabia), 189 (Senegal), 190 (Serbia), 191 (Seychelles), 192 (Sierra Leone), 193 (Singapore), 194 (Sint Maarten), 195 (Slovakia), 196 (Slovenia), 197 (Solomon Islands), 198 (Somalia), 199 (South Africa), 200 (South Korea), 201 (South Sudan), 202 (Spain), 203 (Sri Lanka), 205 (Suriname), 206 (Svalbard and Jan Mayen), 207 (Swaziland), 208 (Sweden), 209 (Switzerland), 211 (Taiwan), 212 (Tajikistan), 213 (Tanzania), 214 (Thailand), 215 (Togo), 216 (Tokelau), 217 (Tonga), 218 (Trinidad and Tobago), 219 (Tunisia), 220 (Turkey), 221 (Turkmenistan), 222 (Turks and Caicos Islands), 223 (Tuvalu), 224 (U.S. Virgin Islands), 225 (Uganda), 226 (Ukraine), 227 (United Arab Emirates), 228 (United Kingdom), 229 (United States), 230 (Uruguay), 231 (Uzbekistan), 232 (Vanuatu), 233 (Vatican), 234 (Venezuela), 235 (Vietnam), 236 (Wallis and Futuna), 237 (Western Sahara), 238 (Yemen), 239 (Zambia), 240 (Zimbabwe), 241 (Guadeloupe). Example: [29] for Brazil, [229] for United States
seniority_exclude_idsNoSeniority level IDs to exclude (optional). Valid IDs: 2-11 as listed above
seniority_include_idsNoSeniority level IDs to include (optional). Valid IDs: 2 (Manager), 3 (Director), 4 (VP), 5 (CXO), 6 (Unpaid), 7 (Training), 8 (Senior), 9 (Owner), 10 (Entry), 11 (Partner). Example: [10, 7] for Entry and Training
job_function_exclude_idsNoJob function IDs to exclude (optional). Valid IDs: 1-28 as listed above
job_function_include_idsNoJob function IDs to include (optional). Valid IDs: 1 (Marketing), 2 (Sales), 3 (Customer Service), 4 (Finance), 5 (HR), 6 (PR), 7 (Media), 8 (Design), 9 (Engineering), 10 (Operations), 11 (Legal), 12 (Education), 13 (Health), 14 (Real Estate), 15 (Accounting), 16 (Administrative), 17 (Business Development), 18 (Community Services), 19 (Consulting), 20 (Entrepreneurship), 21 (IT), 22 (Military Services), 23 (Product Management), 24 (Program/Project Management), 25 (Purchasing), 26 (QA), 27 (Research), 28 (Trades). Example: [9] for Engineering
contacts_per_company_limitNoMaximum number of contacts to target per company (optional). Example: 20

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate a non-read-only, non-destructive operation, and the description adds important behavioral context: it requires the G2 integration to be connected, warns not to call if missing, and specifies that buying_stages is mandatory by the platform and must be asked if missing (do not default). It also discloses the daily refresh behavior and return fields, going beyond the annotations.

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

Conciseness3/5

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

The description is well-structured with clear sections (PURPOSE, PREREQUISITE, WHEN TO USE, WHEN NOT TO USE, CONTACTS CRITERIA, PARAMETERS, RETURNS) but it is overly verbose. There is redundancy: the 'CONTACTS CRITERIA PARAMETERS' section repeats the parameter list that already appears in the earlier CONTACTS CRITERIA section and in the schema. This duplication could be trimmed without loss of 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?

Despite having no output schema, the description explicitly lists the return fields (id, audience_id, audience_name, audience_type, status, buying_stages, intent_days, counts). It covers all 12 parameters, explains prerequisites, platform requirements, and usage notes, making it fully complete 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.

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, but the description adds significant value by enumerating all valid job function IDs, seniority IDs, country IDs, and state IDs in a readable format, and by explaining usage notes (AND logic, free text vs IDs, include/exclude semantics). This goes beyond the schema's bare 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?

The description states a specific action ('Create a G2 Intent (Dynamic) audience') with the exact platform enum (DYNAMIC_G2_CONTACT) and distinguishes it from the LinkedIn Native and Static sibling tools by name. The purpose is unmistakable and clearly 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?

Explicit 'WHEN TO USE' and 'WHEN NOT TO USE' sections provide exact user phrasings and name the alternative tools (create_g2_intent_linkedin_native_dynamic_audience, create_g2_intent_static_audience). It also states a prerequisite (G2 integration must be connected) and instructs to recommend create_firmographic_audience if not, leaving no ambiguity.

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

create_g2_intent_linkedin_native_dynamic_audienceCreate G2 Intent - LinkedIn Native (Dynamic) AudienceBInspect

Create a G2 Intent - LinkedIn Native (Dynamic) audience (platform customAudienceType=DYNAMIC_G2).

NameRequiredDescriptionDefault
nameYesAudience name (required, max 50 characters).
skillsNoFree-text professional skills (resolved to LinkedIn skill IDs). Example: ['HubSpot', 'Salesforce', 'Python']
revenuesNoLinkedIn revenue ranges for audience targeting. Valid values: Under $1M, $1M-$10M, $10M-$100M, $100M-$1B, $1B+. Example: ['$1M-$10M', '$10M-$100M']
employeesNoLinkedIn employee count ranges for audience targeting. Valid values: 1, 2-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, +10001. Example: ['201-500', '501-1000']
job_titlesNoFree-text job titles (resolved to LinkedIn job-title IDs). Example: ['Software Engineer', 'Product Manager']
intent_daysYesDays to look back for G2 intent signals (required, 1-365).
buying_stagesNoBuying stages to target. The platform REQUIRES at least one; if the user did not specify, ASK them before calling — do NOT default.
company_namesNoFree-text company names to target (resolved server-side to LinkedIn company IDs). Example: ['Metadata', 'Google', 'Salesforce']
location_country_idsNoCountry IDs for geographic targeting (optional). Valid IDs: 1 (Afghanistan), 2 (Albania), 3 (Algeria), 4 (American Samoa), 5 (Andorra), 6 (Angola), 7 (Anguilla), 8 (Antarctica), 9 (Antigua and Barbuda), 10 (Argentina), 11 (Armenia), 12 (Aruba), 13 (Australia), 14 (Austria), 15 (Azerbaijan), 16 (Bahamas), 17 (Bahrain), 18 (Bangladesh), 19 (Barbados), 20 (Belarus), 21 (Belgium), 22 (Belize), 23 (Benin), 24 (Bermuda), 25 (Bhutan), 26 (Bolivia), 27 (Bosnia and Herzegovina), 28 (Botswana), 29 (Brazil), 30 (British Indian Ocean Territory), 31 (British Virgin Islands), 32 (Brunei), 33 (Bulgaria), 34 (Burkina Faso), 35 (Burundi), 36 (Cambodia), 37 (Cameroon), 38 (Canada), 39 (Cape Verde), 40 (Cayman Islands), 41 (Central African Republic), 42 (Chad), 43 (Chile), 44 (China), 45 (Christmas Island), 46 (Cocos Islands), 47 (Colombia), 48 (Comoros), 49 (Cook Islands), 50 (Costa Rica), 51 (Croatia), 53 (Curacao), 54 (Cyprus), 55 (Czech Republic), 56 (Democratic Republic of the Congo), 57 (Denmark), 58 (Djibouti), 59 (Dominica), 60 (Dominican Republic), 61 (East Timor), 62 (Ecuador), 63 (Egypt), 64 (El Salvador), 65 (Equatorial Guinea), 66 (Eritrea), 67 (Estonia), 68 (Ethiopia), 69 (Falkland Islands), 70 (Faroe Islands), 71 (Fiji), 72 (Finland), 73 (France), 74 (French Polynesia), 75 (Gabon), 76 (Gambia), 77 (Georgia), 78 (Germany), 79 (Ghana), 80 (Gibraltar), 81 (Greece), 82 (Greenland), 83 (Grenada), 84 (Guam), 85 (Guatemala), 86 (Guernsey), 87 (Guinea), 88 (Guinea-Bissau), 89 (Guyana), 90 (Haiti), 91 (Honduras), 92 (Hong Kong), 93 (Hungary), 94 (Iceland), 95 (India), 96 (Indonesia), 98 (Iraq), 99 (Ireland), 100 (Isle of Man), 101 (Israel), 102 (Italy), 103 (Ivory Coast), 104 (Jamaica), 105 (Japan), 106 (Jersey), 107 (Jordan), 108 (Kazakhstan), 109 (Kenya), 110 (Kiribati), 111 (Kosovo), 112 (Kuwait), 113 (Kyrgyzstan), 114 (Laos), 115 (Latvia), 116 (Lebanon), 117 (Lesotho), 118 (Liberia), 119 (Libya), 120 (Liechtenstein), 121 (Lithuania), 122 (Luxembourg), 123 (Macau), 124 (Macedonia), 125 (Madagascar), 126 (Malawi), 127 (Malaysia), 128 (Maldives), 129 (Mali), 130 (Malta), 131 (Marshall Islands), 132 (Mauritania), 133 (Mauritius), 134 (Mayotte), 135 (Mexico), 136 (Micronesia), 137 (Moldova), 138 (Monaco), 139 (Mongolia), 140 (Montenegro), 141 (Montserrat), 142 (Morocco), 143 (Mozambique), 144 (Myanmar), 145 (Namibia), 146 (Nauru), 147 (Nepal), 148 (Netherlands), 149 (Netherlands Antilles), 150 (New Caledonia), 151 (New Zealand), 152 (Nicaragua), 153 (Niger), 154 (Nigeria), 155 (Niue), 157 (Northern Mariana Islands), 158 (Norway), 159 (Oman), 160 (Pakistan), 161 (Palau), 162 (Palestine), 163 (Panama), 164 (Papua New Guinea), 165 (Paraguay), 166 (Peru), 167 (Philippines), 168 (Pitcairn), 169 (Poland), 170 (Portugal), 171 (Puerto Rico), 172 (Qatar), 173 (Republic of the Congo), 174 (Reunion), 175 (Romania), 176 (Russia), 177 (Rwanda), 178 (Saint Barthelemy), 179 (Saint Helena), 180 (Saint Kitts and Nevis), 181 (Saint Lucia), 182 (Saint Martin), 183 (Saint Pierre and Miquelon), 184 (Saint Vincent and the Grenadines), 185 (Samoa), 186 (San Marino), 187 (Sao Tome and Principe), 188 (Saudi Arabia), 189 (Senegal), 190 (Serbia), 191 (Seychelles), 192 (Sierra Leone), 193 (Singapore), 194 (Sint Maarten), 195 (Slovakia), 196 (Slovenia), 197 (Solomon Islands), 198 (Somalia), 199 (South Africa), 200 (South Korea), 201 (South Sudan), 202 (Spain), 203 (Sri Lanka), 205 (Suriname), 206 (Svalbard and Jan Mayen), 207 (Swaziland), 208 (Sweden), 209 (Switzerland), 211 (Taiwan), 212 (Tajikistan), 213 (Tanzania), 214 (Thailand), 215 (Togo), 216 (Tokelau), 217 (Tonga), 218 (Trinidad and Tobago), 219 (Tunisia), 220 (Turkey), 221 (Turkmenistan), 222 (Turks and Caicos Islands), 223 (Tuvalu), 224 (U.S. Virgin Islands), 225 (Uganda), 226 (Ukraine), 227 (United Arab Emirates), 228 (United Kingdom), 229 (United States), 230 (Uruguay), 231 (Uzbekistan), 232 (Vanuatu), 233 (Vatican), 234 (Venezuela), 235 (Vietnam), 236 (Wallis and Futuna), 237 (Western Sahara), 238 (Yemen), 239 (Zambia), 240 (Zimbabwe), 241 (Guadeloupe). Example: [29] for Brazil, [229] for United States

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=false, so the write/side-effect profile is covered structurally. The description adds only the platform type identifier; it says nothing about server-side resolution of free-text skills/titles/companies, credit consumption, or failure modes, which is notable for an open-world creation 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?

One sentence with zero filler and the key discriminator front-loaded. It is efficient, though for a nine-parameter creation tool the terseness shades into under-specification rather than pure conciseness.

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

Completeness2/5

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

For a nine-parameter, open-world creation tool sitting among several near-identical G2/native audience creators, the description does not say how the tool differs from siblings or what the created artifact is (an audience draft vs. a live, actuated audience). With no output schema, the agent gets no help on what comes back.

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 every parameter already carries documentation, including the 'ask the user, do not default' rule on `buying_stages`. The description adds no additional semantics, so baseline 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?

States a specific verb and resource ('Create a G2 Intent - LinkedIn Native (Dynamic) audience') and pins the platform discriminator with `customAudienceType=DYNAMIC_G2`. That distinguishes it from the non-native G2 intent siblings, though it does not explicitly name `create_g2_intent_dynamic_audience` or `create_g2_intent_static_audience` as the alternatives.

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

Usage Guidelines2/5

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

No statement of when to use this versus the two sibling G2 intent tools or the other native-audience creators. The agent has to infer from the name that 'LinkedIn Native' means a LinkedIn-side dynamic audience rather than a platform-side one.

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

create_g2_intent_static_audienceCreate G2 Intent (Static) AudienceAInspect

Create a G2 Intent (Static) audience (platform customAudienceType=G2_ABM_CONTACT).

            AUDIENCE TYPE (mirrors the UI's "Audience Type" dropdown):
              • UI label: "G2 Intent (Static)"
              • Platform enum: G2_ABM_CONTACT
              • SNAPSHOT at creation time — does NOT refresh daily.

            PREREQUISITE:
              • G2 integration MUST be connected.

            WHEN TO USE (exact user phrasing this tool should match):
              • "G2 Intent (Static)"
              • "Static G2 audience"
              • The user explicitly wants the static / snapshot variant rather than the daily-refreshing dynamic one.

            WHEN NOT TO USE:
              • If the user said "Dynamic" → use `create_g2_intent_dynamic_audience` or `create_g2_intent_linkedin_native_dynamic_audience`.

            BUYING STAGES — REQUIRED BY THE PLATFORM:
              ASK the user if missing. DO NOT default.

            CONTACTS CRITERIA:

Use the following parameters to filter and target specific contacts within accounts:

GEOGRAPHIC TARGETING:

  • location_country_ids: Array of country IDs (e.g., [29] for Brazil, [229] for United States)

  • location_state_ids: Array of state IDs (e.g., [5] for California, [32] for New York)

JOB TITLES:

  • job_title_includes: Array of free text strings to include (e.g., ["Software Engineer", "Manager"])

  • job_title_excludes: Array of free text strings to exclude (e.g., ["Senior", "Lead"])

JOB FUNCTIONS: Valid job function IDs and their labels:

  • 1: Marketing, 2: Sales, 3: Customer Service, 4: Finance, 5: Human Resources, 6: Public Relations

  • 7: Media, 8: Design, 9: Engineering, 10: Operations, 11: Legal, 12: Education

  • 13: Health, 14: Real Estate, 15: Accounting, 16: Administrative, 17: Business Development

  • 18: Community and Social Services, 19: Consulting, 20: Entrepreneurship, 21: Information Technology

  • 22: Military and Protective Services, 23: Product Management, 24: Program and Project Management

  • 25: Purchasing, 26: Quality Assurance, 27: Research, 28: Trades

  • job_function_include_ids: Array of job function IDs to include (e.g., [9] for Engineering)

  • job_function_exclude_ids: Array of job function IDs to exclude

SENIORITY LEVELS: Valid seniority IDs and their labels:

  • 2: Manager, 3: Director, 4: VP, 5: CXO, 6: Unpaid, 7: Training

  • 8: Senior, 9: Owner, 10: Entry, 11: Partner

  • seniority_include_ids: Array of seniority level IDs to include (e.g., [10, 7] for Entry and Training)

  • seniority_exclude_ids: Array of seniority level IDs to exclude

CONTACT LIMITS:

  • contacts_per_company_limit: Maximum number of contacts to target per company (optional). Example: 20

USAGE NOTES:

  • All ID fields (countries, states, job functions, seniorities) use numeric IDs from the platform

  • Job titles are free text strings, not IDs

  • Use include parameters to specify which criteria to target

  • Use exclude parameters to filter out contacts matching specific criteria

  • Combine multiple criteria for precise targeting (e.g., Senior Engineers in California)

  • Criteria are combined with AND logic, so all conditions must be met

CONTACTS CRITERIA PARAMETERS(Usually after other initial audience parameters to be described next):

  • location_country_ids: Array of country IDs (optional)

  • location_state_ids: Array of state IDs (optional)

  • job_title_includes: Array of job title keywords to include (optional)

  • job_title_excludes: Array of job title keywords to exclude (optional)

  • job_function_include_ids: Array of job function IDs (optional)

  • job_function_exclude_ids: Array of job function IDs (optional)

  • seniority_include_ids: Array of seniority level IDs (optional)

  • seniority_exclude_ids: Array of seniority level IDs (optional)

  • contacts_per_company_limit: Maximum contacts per company (optional)

              PARAMETERS:
                • name (required, ≤ 50 chars)
                • intent_days (required, 1-365)
                • buying_stages (REQUIRED — ask if missing)
                • Contact criteria as in CONTACTS CRITERIA above.
    
              RETURNS: id, audience_id, audience_name, audience_type (G2_ABM_CONTACT), status, buying_stages, intent_days, counts.
NameRequiredDescriptionDefault
nameYesAudience name (required, max 50 characters).
intent_daysYesDays to look back for G2 intent signals (required, 1-365).
buying_stagesNoBuying stages to target. The platform REQUIRES at least one; if the user did not specify, ASK them before calling — do NOT default.
job_title_excludesNoFree text keywords for job titles to exclude (optional). Example: ['Senior', 'Lead']
job_title_includesNoFree text keywords for job titles to include (optional). Example: ['Software Engineer', 'Manager']
location_state_idsNoState IDs for geographic targeting (optional). Valid US State IDs: 1 (Alabama), 2 (Alaska), 3 (Arizona), 4 (Arkansas), 5 (California), 6 (Colorado), 7 (Connecticut), 8 (Delaware), 9 (Florida), 10 (Georgia), 11 (Hawaii), 12 (Idaho), 13 (Illinois), 14 (Indiana), 15 (Iowa), 16 (Kansas), 17 (Kentucky), 18 (Louisiana), 19 (Maine), 20 (Maryland), 21 (Massachusetts), 22 (Michigan), 23 (Minnesota), 24 (Mississippi), 25 (Missouri), 26 (Montana), 27 (Nebraska), 28 (Nevada), 29 (New Hampshire), 30 (New Jersey), 31 (New Mexico), 32 (New York), 33 (North Carolina), 34 (North Dakota), 35 (Ohio), 36 (Oklahoma), 37 (Oregon), 38 (Pennsylvania), 39 (Rhode Island), 40 (South Carolina), 41 (South Dakota), 42 (Tennessee), 43 (Texas), 44 (Utah), 45 (Vermont), 46 (Virginia), 47 (Washington), 48 (West Virginia), 49 (Wisconsin), 50 (Wyoming), 52 (District of Columbia). Example: [5] for California, [32] for New York
location_country_idsNoCountry IDs for geographic targeting (optional). Valid IDs: 1 (Afghanistan), 2 (Albania), 3 (Algeria), 4 (American Samoa), 5 (Andorra), 6 (Angola), 7 (Anguilla), 8 (Antarctica), 9 (Antigua and Barbuda), 10 (Argentina), 11 (Armenia), 12 (Aruba), 13 (Australia), 14 (Austria), 15 (Azerbaijan), 16 (Bahamas), 17 (Bahrain), 18 (Bangladesh), 19 (Barbados), 20 (Belarus), 21 (Belgium), 22 (Belize), 23 (Benin), 24 (Bermuda), 25 (Bhutan), 26 (Bolivia), 27 (Bosnia and Herzegovina), 28 (Botswana), 29 (Brazil), 30 (British Indian Ocean Territory), 31 (British Virgin Islands), 32 (Brunei), 33 (Bulgaria), 34 (Burkina Faso), 35 (Burundi), 36 (Cambodia), 37 (Cameroon), 38 (Canada), 39 (Cape Verde), 40 (Cayman Islands), 41 (Central African Republic), 42 (Chad), 43 (Chile), 44 (China), 45 (Christmas Island), 46 (Cocos Islands), 47 (Colombia), 48 (Comoros), 49 (Cook Islands), 50 (Costa Rica), 51 (Croatia), 53 (Curacao), 54 (Cyprus), 55 (Czech Republic), 56 (Democratic Republic of the Congo), 57 (Denmark), 58 (Djibouti), 59 (Dominica), 60 (Dominican Republic), 61 (East Timor), 62 (Ecuador), 63 (Egypt), 64 (El Salvador), 65 (Equatorial Guinea), 66 (Eritrea), 67 (Estonia), 68 (Ethiopia), 69 (Falkland Islands), 70 (Faroe Islands), 71 (Fiji), 72 (Finland), 73 (France), 74 (French Polynesia), 75 (Gabon), 76 (Gambia), 77 (Georgia), 78 (Germany), 79 (Ghana), 80 (Gibraltar), 81 (Greece), 82 (Greenland), 83 (Grenada), 84 (Guam), 85 (Guatemala), 86 (Guernsey), 87 (Guinea), 88 (Guinea-Bissau), 89 (Guyana), 90 (Haiti), 91 (Honduras), 92 (Hong Kong), 93 (Hungary), 94 (Iceland), 95 (India), 96 (Indonesia), 98 (Iraq), 99 (Ireland), 100 (Isle of Man), 101 (Israel), 102 (Italy), 103 (Ivory Coast), 104 (Jamaica), 105 (Japan), 106 (Jersey), 107 (Jordan), 108 (Kazakhstan), 109 (Kenya), 110 (Kiribati), 111 (Kosovo), 112 (Kuwait), 113 (Kyrgyzstan), 114 (Laos), 115 (Latvia), 116 (Lebanon), 117 (Lesotho), 118 (Liberia), 119 (Libya), 120 (Liechtenstein), 121 (Lithuania), 122 (Luxembourg), 123 (Macau), 124 (Macedonia), 125 (Madagascar), 126 (Malawi), 127 (Malaysia), 128 (Maldives), 129 (Mali), 130 (Malta), 131 (Marshall Islands), 132 (Mauritania), 133 (Mauritius), 134 (Mayotte), 135 (Mexico), 136 (Micronesia), 137 (Moldova), 138 (Monaco), 139 (Mongolia), 140 (Montenegro), 141 (Montserrat), 142 (Morocco), 143 (Mozambique), 144 (Myanmar), 145 (Namibia), 146 (Nauru), 147 (Nepal), 148 (Netherlands), 149 (Netherlands Antilles), 150 (New Caledonia), 151 (New Zealand), 152 (Nicaragua), 153 (Niger), 154 (Nigeria), 155 (Niue), 157 (Northern Mariana Islands), 158 (Norway), 159 (Oman), 160 (Pakistan), 161 (Palau), 162 (Palestine), 163 (Panama), 164 (Papua New Guinea), 165 (Paraguay), 166 (Peru), 167 (Philippines), 168 (Pitcairn), 169 (Poland), 170 (Portugal), 171 (Puerto Rico), 172 (Qatar), 173 (Republic of the Congo), 174 (Reunion), 175 (Romania), 176 (Russia), 177 (Rwanda), 178 (Saint Barthelemy), 179 (Saint Helena), 180 (Saint Kitts and Nevis), 181 (Saint Lucia), 182 (Saint Martin), 183 (Saint Pierre and Miquelon), 184 (Saint Vincent and the Grenadines), 185 (Samoa), 186 (San Marino), 187 (Sao Tome and Principe), 188 (Saudi Arabia), 189 (Senegal), 190 (Serbia), 191 (Seychelles), 192 (Sierra Leone), 193 (Singapore), 194 (Sint Maarten), 195 (Slovakia), 196 (Slovenia), 197 (Solomon Islands), 198 (Somalia), 199 (South Africa), 200 (South Korea), 201 (South Sudan), 202 (Spain), 203 (Sri Lanka), 205 (Suriname), 206 (Svalbard and Jan Mayen), 207 (Swaziland), 208 (Sweden), 209 (Switzerland), 211 (Taiwan), 212 (Tajikistan), 213 (Tanzania), 214 (Thailand), 215 (Togo), 216 (Tokelau), 217 (Tonga), 218 (Trinidad and Tobago), 219 (Tunisia), 220 (Turkey), 221 (Turkmenistan), 222 (Turks and Caicos Islands), 223 (Tuvalu), 224 (U.S. Virgin Islands), 225 (Uganda), 226 (Ukraine), 227 (United Arab Emirates), 228 (United Kingdom), 229 (United States), 230 (Uruguay), 231 (Uzbekistan), 232 (Vanuatu), 233 (Vatican), 234 (Venezuela), 235 (Vietnam), 236 (Wallis and Futuna), 237 (Western Sahara), 238 (Yemen), 239 (Zambia), 240 (Zimbabwe), 241 (Guadeloupe). Example: [29] for Brazil, [229] for United States
seniority_exclude_idsNoSeniority level IDs to exclude (optional). Valid IDs: 2-11 as listed above
seniority_include_idsNoSeniority level IDs to include (optional). Valid IDs: 2 (Manager), 3 (Director), 4 (VP), 5 (CXO), 6 (Unpaid), 7 (Training), 8 (Senior), 9 (Owner), 10 (Entry), 11 (Partner). Example: [10, 7] for Entry and Training
job_function_exclude_idsNoJob function IDs to exclude (optional). Valid IDs: 1-28 as listed above
job_function_include_idsNoJob function IDs to include (optional). Valid IDs: 1 (Marketing), 2 (Sales), 3 (Customer Service), 4 (Finance), 5 (HR), 6 (PR), 7 (Media), 8 (Design), 9 (Engineering), 10 (Operations), 11 (Legal), 12 (Education), 13 (Health), 14 (Real Estate), 15 (Accounting), 16 (Administrative), 17 (Business Development), 18 (Community Services), 19 (Consulting), 20 (Entrepreneurship), 21 (IT), 22 (Military Services), 23 (Product Management), 24 (Program/Project Management), 25 (Purchasing), 26 (QA), 27 (Research), 28 (Trades). Example: [9] for Engineering
contacts_per_company_limitNoMaximum number of contacts to target per company (optional). Example: 20

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses that the audience is a snapshot at creation time and does not refresh daily, that the G2 integration must already be connected, and that the platform requires `buying_stages` with no defaulting. This gives the agent the non-obvious behavioral context needed for correct invocation.

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

Conciseness2/5

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

The description is heavily redundant: the CONTACTS CRITERIA section is followed by a nearly identical CONTACTS CRITERIA PARAMETERS section, and there is an internal author note ('Usually after other initial audience parameters to be described next') that is not useful to an AI agent. Although headings help, the duplication and unnecessary prose make it overly long and not appropriately sized.

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 12-parameter creation tool with no output schema, the description is very complete: it lists prerequisites, buying-stage requirements, all contact criteria semantics, usage notes, AND logic, and the exact return fields. The agent has enough context to decide when to call it, fill parameters correctly, and interpret the response.

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 the schema already covers all parameters, the description adds meaning by explaining include/exclude semantics, AND logic across criteria, numeric IDs versus free-text job titles, and examples like 'Senior Engineers in California'. It also clarifies that `buying_stages` is platform-required and must be requested from the user, which goes beyond the schema's static 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 opens with 'Create a G2 Intent (Static) audience' and gives the platform enum `customAudienceType=G2_ABM_CONTACT`, a specific verb and resource. It further differentiates from siblings by stating this is the snapshot variant that does not refresh daily and explicitly names `create_g2_intent_dynamic_audience` as the alternative.

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 provides an explicit 'WHEN TO USE' section with exact user phrasings like 'Static G2 audience' and a 'WHEN NOT TO USE' section naming the dynamic sibling tools. It also states the prerequisite that the G2 integration must be connected and instructs the agent to ask for `buying_stages` if missing rather than defaulting.

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

create_google_business_logo_extensionCreate Google Ads Business Logo Extension (BETA)AInspect

Create a business logo extension in the account’s Google Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
domain_nameNo
business_nameNo
image_library_idYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-destructive, open-world behavior, so the description adds genuine context: it discloses the return shape (result plus identifier) and that validation/platform errors can come back, and it clarifies the operation's scope ends at library creation. It omits account/permission requirements and what happens on duplicate logo creation.

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?

Three short sentences, front-loaded with the action, with the returning-behavior and scope-boundary statements each earning their place. 'Using the supplied fields' is the one filler phrase that adds nothing.

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?

No output schema exists, and the description correctly compensates by describing the return value and error outcome. However, for a mutation tool with three fully undocumented parameters and no annotation coverage of auth/rate limits, an agent still lacks enough to build a correct call.

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 carry parameter meaning, yet it only says 'using the supplied fields.' Nothing explains what image_library_id (the sole required param) refers to, nor how domain_name and business_name (maxLength 50/25) relate to the logo or whether they are optional.

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 (Create) plus a specific resource (business logo extension) and its location (the account's Google Ads asset library). It is clearly distinguishable from the many create_google_*_extension siblings and from create_microsoft_business_logo_extension via the platform and asset type named.

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 final sentence explicitly carves out the boundary: creating in the asset library is separate from attaching to a campaign, which routes the agent away from add_extensions_to_native_campaign. It does not name that sibling or state prerequisites/plan requirements, so it falls short of explicit 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.

create_google_callout_extensionCreate Google Ads Callout ExtensionAInspect

Create a callout extension in the account’s Google Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
callout_textYesCallout snippet. 1-25 characters.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds real value on behavior that annotations do not: it discloses the return shape ('extension result and available identifier') and the error classes ('validation/platform error'), plus the non-attaching scope. It stops short of mentioning account 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 short sentences, front-loaded with the action and target, followed by outcome and scope boundary. No filler and nothing repeated from 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 create tool with no output schema, the description covers what is created, where it lands, what comes back (result plus identifier), what failure looks like, and that attachment is out of scope — everything an agent needs to call it and interpret the response.

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?

There is only one parameter and schema coverage is 100%, with the schema already documenting the 1-25 character constraint on callout_text. The description adds nothing beyond 'using the supplied fields', 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 (Create), a specific resource (callout extension), and the precise target (the account's Google Ads asset library), which immediately separates it from create_microsoft_callout_extension and from the other Google extension types in the sibling list.

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 closing sentence 'Attaching the extension to a campaign is a separate operation' gives a clear boundary and implicitly routes the agent to the attach/add-extensions tooling for that follow-up step. It does not name that sibling tool or state prerequisites explicitly, so it falls short of a full 5.

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

create_google_image_extensionCreate Google Ads Image Extension (BETA)AInspect

Create a image extension in the account’s Google Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
display_textNo
destination_urlNo
alternative_textNo
image_library_idsYes1-20 image-library IDs.

TDQS

A4/5.0
Behavior4/5

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

The annotations already declare this is a mutation (readOnlyHint=false), open-world, and non-destructive. The description adds valuable behavioral context by stating that it returns the extension result and available identifier, or a validation/platform error, and that attaching is separate. It does not describe permissions or side effects in the asset library, so it is 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 tight sentences with no filler: it front-loads the creation action, then the return behavior, then the separate-attachment boundary. Every sentence contributes useful information.

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?

There is no output schema, and the description usefully explains the return value and error behavior. However, for a four-parameter mutation tool with only 25% parameter coverage, the description omits prerequisite details and parameter-level guidance that an agent may need to invoke it correctly.

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%, with image_library_ids documented but display_text, destination_url, and alternative_text left undocumented in both schema and description. The phrase 'using the supplied fields' adds no meaning, so the description fails to compensate for the low 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 verb and resource — creating an image extension in the Google Ads asset library — and clearly distinguishes this from attaching the extension to a campaign. The tool name and description are specific enough to separate it from sibling extension-creation tools such as create_google_sitelink_extension or create_microsoft_image_extension.

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 a useful usage boundary by noting that attaching the extension to a campaign is a separate operation, which tells the agent this tool only creates the asset. It does not explicitly name alternative tools or when to choose a different extension type, so it falls short of full 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.

create_google_lead_form_extensionCreate Google Ads Lead Form ExtensionAInspect

Create a lead form extension in the account’s Google Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
urlNoOptional thank-you-page URL.
headlineYes
descriptionNo
business_nameYes
privacy_policy_urlYes
call_to_action_typeYes
post_submit_headlineYes
post_submit_descriptionYes
call_to_action_descriptionYes
post_submit_call_to_action_typeYes
work_lead_form_user_input_typesNo
email_lead_form_user_input_typesYes
contact_lead_form_user_input_typesNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark this as a non-read-only, open-world, non-destructive mutation. The description adds useful operation-specific context: creation happens in the asset library, the response may include an identifier or a validation/platform error, and attachment is not performed. It omits auth/idempotency details but adds enough beyond annotations.

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, front-loaded with the action and scope; no redundant repetition. The separate-attachment note earns its place by preventing scope confusion.

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 high-level operation and return/error shape, which is important because there is no output schema. However, for a 13-parameter create tool with almost no schema descriptions, it leaves the agent dependent on field names and types for correct invocation, so it is not fully 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 description coverage is only 8% (only `url` is documented), and the description contributes nothing beyond 'using the supplied fields'. With 13 parameters and complex fields like `email_lead_form_user_input_types`, it does not compensate for the low 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 verb (Create) and resource (lead form extension) and locates it in the Google Ads asset library, which distinguishes it from the many sibling create_google_*_extension tools. An agent can identify the correct extension type 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 Guidelines4/5

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

It clarifies the important boundary with campaign attachment ('Attaching the extension to a campaign is a separate operation'), which is the most likely misuse. It does not explicitly name add_extensions_to_native_campaign or explain when to choose a lead form extension over other extension types, so it stops short of full alternative routing.

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

create_google_price_extensionCreate Google Ads Price ExtensionAInspect

Create a price extension in the account’s Google Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
price_offeringsYes3-8 price offerings.
price_qualifierYesPrice qualifier shown before the price.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only declare the generic mutation profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true); the description adds real value by describing the outcome surface — returns the extension result plus available identifier, or a validation/platform error. It does not mention permission requirements or platform-side quota behavior, which is the main remaining gap for an open-world write.

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?

Three short sentences, front-loaded with the action and scope, then the return behavior, then the scoping caveat. 'Using the supplied fields' is slightly redundant filler, but nothing else is wasted.

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 two-parameter create tool with a fully documented schema and no output schema, the description covers action, scope, return shape, error behavior, and the downstream attach step. Only permissions and roughly what the identifier looks like are unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, with the nested price_offerings cardinality (3-8) and the price_qualifier enum already documented in the schema. The description only says 'using the supplied fields' and adds no meaning about qualifier semantics or offering constraints, 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+resource ('Create a price extension') and pins the scope to the account's Google Ads asset library, which separates it from the many sibling extension creators at Microsoft and from the Google sitelink/callout/image variants. It also preempts the most likely confusion by saying attachment to a campaign is a separate operation.

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 for when this is the right call (building an asset-library extension) and explicitly carves out the follow-up step ('Attaching the extension to a campaign is a separate operation'), which steers the agent away from expecting campaign-level effect. No named alternative tool is offered, 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.

create_google_promotion_extensionCreate Google Ads Promotion ExtensionAInspect

Create a promotion extension in the account’s Google Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
urlYes
itemYes
end_dateYesISO-8601 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'". Future or present.
occasionYes
start_dateYesISO-8601 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'". Future or present.
details_typeYes
category_typeYes
details_amountNoThreshold USD amount; supply when details_type is ON_ORDERS_OVER.
category_amountNoUSD amount; supply when category_type is MONETARY or UP_TO_MONETARY.
category_percentNoPercent (≤100); supply when category_type is PERCENT or UP_TO_PERCENT.
details_promo_codeNoPromo code; supply when details_type is PROMO_CODE.

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish this as a non-read-only, non-destructive, open-world call; the description adds value beyond them by disclosing the return contract (extension result plus identifier) and the failure modes (validation or platform errors). It does not cover idempotency or what happens when a duplicate promotion already exists, which keeps it from a 5.

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 compact sentences, front-loaded with the action, with the return/error behavior and the attach caveat placed after. No redundant restatement of the title or name.

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?

There is no output schema, and the description does a reasonable job summarizing the return, but with 11 parameters and three enums governing conditional requirements, an agent still needs the schema to know which fields pair with which. Adequate rather than complete for a tool of this complexity.

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 description defers entirely to "the supplied fields" and adds no meaning for any of the 11 parameters. Schema coverage is 55% — the conditional fields (details_amount, category_amount, category_percent, details_promo_code) and the date format are documented in the schema, but the required enum fields and conditional pairings are left to the schema alone.

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 promotion extension in the account's Google Ads asset library") and scopes it correctly. It also explicitly distinguishes itself from the attach operation, which is the natural sibling confusion point alongside add_extensions_to_native_campaign.

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 closing sentence "Attaching the extension to a campaign is a separate operation" gives a real usage boundary and tells the agent this tool alone will not make the extension live. It stops short of naming the alternative tool or stating prerequisites (e.g., account permission, asset library existence), so not quite a 5.

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

create_google_structured_snippet_extensionCreate Google Ads Structured Snippet ExtensionAInspect

Create a structured snippet extension in the account’s Google Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
headerYesSnippet header. 1-25 characters.
valuesYes3-10 snippet values, each 1-25 characters.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare a non-destructive, open-world write, so safety is covered. The description adds outcome behavior beyond that: it returns the created extension result and available identifier, or surfaces a validation/platform error, which tells the agent what to expect on failure.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and scope, then the critical boundary condition. The only mildly redundant phrase is 'using the supplied fields', but it does no harm.

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 two-parameter creation tool with no output schema, the description covers what is created, where it lives, what comes back, and the fact that attachment is out of scope — 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.

Parameters3/5

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

Schema description coverage is 100% (header 1-25 chars, 3-10 values of 1-25 chars each), so the schema fully documents both required params. 'Using the supplied fields' adds nothing beyond it; baseline 3.

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 structured snippet extension') plus scope ('in the account's Google Ads asset library'), which separates it from the campaign-attachment sibling add_extensions_to_native_campaign and from other extension types.

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 routes the agent away from attaching the extension: 'Attaching the extension to a campaign is a separate operation.' That is a genuine when-not clause naming the follow-on step, though it doesn't name the specific sibling tool to use for attaching.

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

create_keywordsCreate KeywordsAInspect

Create one or more positive keywords in the Metadata platform library.

NameRequiredDescriptionDefault
keywordsYesArray of keyword strings to create. Example: ["goku", "ssj", "ssj1"]

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the write-but-non-destructive profile is covered. The description adds the useful 'positive keywords in the library' scoping, but says nothing about duplicate handling (whether existing keywords error, dedupe, or are silently skipped) or what the call 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?

One front-loaded sentence with zero waste; the scope qualifier ('positive', 'library') arrives before any would-be 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 single-parameter creation tool with full schema coverage, annotations, and no output schema, this is nearly sufficient. The one meaningful gap is duplicate/conflict behavior when creating keywords that already exist in the library.

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 single `keywords` array is fully documented with item semantics, example values, and the empty-string edge case. The description only adds 'one or more', which merely restates minItems: 1, so baseline 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?

States a specific verb and resource ('Create one or more positive keywords') and scopes it to the 'Metadata platform library', implicitly separating it from campaign-level and negative-keyword siblings. It doesn't name those siblings explicitly, so the differentiation is inferential 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 Guidelines3/5

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

Usage is only implied: the agent can infer this creates library-level keywords rather than attaching them to a campaign, but there is no explicit guidance on when to use this instead of add_keywords_to_negative_lists or add_and_edit_campaign_elements, and no prerequisites mentioned.

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

create_linkedin_engagement_retargeting_audienceCreate LinkedIn Engagement Retargeting AudienceCInspect

Create a LinkedIn Engagement Retargeting audience: people who already engaged with the advertiser's LinkedIn ads, company page, or website.

NameRequiredDescriptionDefault
nameYesName for the new audience. Prefer something that describes the rule (e.g. 'Video 50% viewers 90d') so it is recognisable later.
page_set_nameNoWEBSITE only: internal label for the URL rule set created on LinkedIn (e.g. 'Pricing and demo pages'). Required when source_platform is WEBSITE.
source_platformYesThe `engagementSourceType` chosen from get_linkedin_engagement_source_types — e.g. VIDEO_ADS, SINGLE_IMAGE_ADS, DOCUMENT_ADS, CONVERSATION_ADS, LEAD_GEN_FORMS, ORGANIZATION_PAGES, or WEBSITE. WEBSITE switches this tool to the URL-rule shape.
url_match_groupsNoWEBSITE only: OR-of-ANDs URL expression. The outer list is ORed, rules inside a group are ANDed. For a plain 'any of these pages' list, use one rule per group. Required when source_platform is WEBSITE.
engagement_triggerYesAn `engagementTrigger` listed for THAT source type (e.g. FIRST_QUARTILE for VIDEO_ADS, LEAD_FORM_SUBMIT for LEAD_GEN_FORMS, VISIT for WEBSITE). A trigger from a DIFFERENT source type is accepted without error and silently builds an audience that never populates, so take it from this source type's own trigger list.
lookback_window_daysYesHow far back engagement counts, and how long a member is retained. WEBSITE accepts 30/60/90/180 only; every other source type also accepts 365.
engagement_source_urnsNoLinkedIn URNs to retarget, taken verbatim from the `id` of each chosen search_linkedin_engagement_sources result. Required for every source type EXCEPT WEBSITE, and must be omitted for WEBSITE. Multiple URNs union their audiences.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is known. The description adds no behavioral context beyond that: it does not mention that this is a mutation that creates a persistent audience, that source/trigger pairs can silently produce a never-populating audience, or that WEBSITE switches the tool into a different URL-rule shape.

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 tight sentence with the resource and audience definition front-loaded. There is no filler text to trim.

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 7-parameter, 4-required creation tool with a dual WEBSITE vs non-WEBSITE shape and no output schema, one sentence is far too thin. The description should at minimum flag the WEBSITE branch, the required URN lookup for other source types, and the fact that a new persistent audience is created — none of which it does.

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?

With 100% schema description coverage across all 7 parameters, the schema already documents name, the WEBSITE-only fields, source_platform, engagement_trigger, lookback_window_days, and engagement_source_urns with helpful detail. The description adds no parameter-level meaning beyond what the schema provides, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb and resource ('Create a LinkedIn Engagement Retargeting audience') and clarifies the underlying population (people who engaged with ads, page, or website). It is clear about what is produced, but it never distinguishes this tool from close siblings such as create_retargeting_audience or create_linkedin_native_criteria_audience, leaving the agent to infer which retargeting constructor applies.

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 when-to-use, when-not-to-use, or alternative guidance. The description also omits the prerequisite discovery steps that the schema implies (consulting get_linkedin_engagement_source_types and search_linkedin_engagement_sources before calling), so an agent cannot tell from the description how this fits into the workflow.

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

create_linkedin_native_criteria_audienceCreate LinkedIn Native Criteria AudienceBInspect

Create a LinkedIn native criteria audience using LinkedIn-supported targeting criteria. Build audiences based on job titles, skills, company names, employee count ranges, revenue ranges, and geographic location.

NameRequiredDescriptionDefault
nameYesAudience name (required, must be shorter than 50 characters).
skillsNoFree-text skill strings for targeting. Example: ['HubSpot', 'Salesforce', 'Python']
revenuesNoLinkedIn revenue ranges for audience targeting. Valid values: Under $1M, $1M-$10M, $10M-$100M, $100M-$1B, $1B+. Example: ['$1M-$10M', '$10M-$100M']
employeesNoLinkedIn employee count ranges for audience targeting. Valid values: 1, 2-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, +10001. Example: ['201-500', '501-1000']
job_titlesNoFree-text job title strings for targeting. Example: ['Software Engineer', 'Product Manager']
company_namesNoFree-text company name strings for targeting. Example: ['Metadata', 'Google', 'Salesforce']
estimate_onlyNoIf true, do NOT create the audience — only estimate its size and return the expected contact count. Use this when the user wants to preview LinkedIn audience size before committing. Defaults to false (audience is created).
location_country_idsNoCountry IDs for geographic targeting (optional). Valid IDs: 1 (Afghanistan), 2 (Albania), 3 (Algeria), 4 (American Samoa), 5 (Andorra), 6 (Angola), 7 (Anguilla), 8 (Antarctica), 9 (Antigua and Barbuda), 10 (Argentina), 11 (Armenia), 12 (Aruba), 13 (Australia), 14 (Austria), 15 (Azerbaijan), 16 (Bahamas), 17 (Bahrain), 18 (Bangladesh), 19 (Barbados), 20 (Belarus), 21 (Belgium), 22 (Belize), 23 (Benin), 24 (Bermuda), 25 (Bhutan), 26 (Bolivia), 27 (Bosnia and Herzegovina), 28 (Botswana), 29 (Brazil), 30 (British Indian Ocean Territory), 31 (British Virgin Islands), 32 (Brunei), 33 (Bulgaria), 34 (Burkina Faso), 35 (Burundi), 36 (Cambodia), 37 (Cameroon), 38 (Canada), 39 (Cape Verde), 40 (Cayman Islands), 41 (Central African Republic), 42 (Chad), 43 (Chile), 44 (China), 45 (Christmas Island), 46 (Cocos Islands), 47 (Colombia), 48 (Comoros), 49 (Cook Islands), 50 (Costa Rica), 51 (Croatia), 53 (Curacao), 54 (Cyprus), 55 (Czech Republic), 56 (Democratic Republic of the Congo), 57 (Denmark), 58 (Djibouti), 59 (Dominica), 60 (Dominican Republic), 61 (East Timor), 62 (Ecuador), 63 (Egypt), 64 (El Salvador), 65 (Equatorial Guinea), 66 (Eritrea), 67 (Estonia), 68 (Ethiopia), 69 (Falkland Islands), 70 (Faroe Islands), 71 (Fiji), 72 (Finland), 73 (France), 74 (French Polynesia), 75 (Gabon), 76 (Gambia), 77 (Georgia), 78 (Germany), 79 (Ghana), 80 (Gibraltar), 81 (Greece), 82 (Greenland), 83 (Grenada), 84 (Guam), 85 (Guatemala), 86 (Guernsey), 87 (Guinea), 88 (Guinea-Bissau), 89 (Guyana), 90 (Haiti), 91 (Honduras), 92 (Hong Kong), 93 (Hungary), 94 (Iceland), 95 (India), 96 (Indonesia), 98 (Iraq), 99 (Ireland), 100 (Isle of Man), 101 (Israel), 102 (Italy), 103 (Ivory Coast), 104 (Jamaica), 105 (Japan), 106 (Jersey), 107 (Jordan), 108 (Kazakhstan), 109 (Kenya), 110 (Kiribati), 111 (Kosovo), 112 (Kuwait), 113 (Kyrgyzstan), 114 (Laos), 115 (Latvia), 116 (Lebanon), 117 (Lesotho), 118 (Liberia), 119 (Libya), 120 (Liechtenstein), 121 (Lithuania), 122 (Luxembourg), 123 (Macau), 124 (Macedonia), 125 (Madagascar), 126 (Malawi), 127 (Malaysia), 128 (Maldives), 129 (Mali), 130 (Malta), 131 (Marshall Islands), 132 (Mauritania), 133 (Mauritius), 134 (Mayotte), 135 (Mexico), 136 (Micronesia), 137 (Moldova), 138 (Monaco), 139 (Mongolia), 140 (Montenegro), 141 (Montserrat), 142 (Morocco), 143 (Mozambique), 144 (Myanmar), 145 (Namibia), 146 (Nauru), 147 (Nepal), 148 (Netherlands), 149 (Netherlands Antilles), 150 (New Caledonia), 151 (New Zealand), 152 (Nicaragua), 153 (Niger), 154 (Nigeria), 155 (Niue), 157 (Northern Mariana Islands), 158 (Norway), 159 (Oman), 160 (Pakistan), 161 (Palau), 162 (Palestine), 163 (Panama), 164 (Papua New Guinea), 165 (Paraguay), 166 (Peru), 167 (Philippines), 168 (Pitcairn), 169 (Poland), 170 (Portugal), 171 (Puerto Rico), 172 (Qatar), 173 (Republic of the Congo), 174 (Reunion), 175 (Romania), 176 (Russia), 177 (Rwanda), 178 (Saint Barthelemy), 179 (Saint Helena), 180 (Saint Kitts and Nevis), 181 (Saint Lucia), 182 (Saint Martin), 183 (Saint Pierre and Miquelon), 184 (Saint Vincent and the Grenadines), 185 (Samoa), 186 (San Marino), 187 (Sao Tome and Principe), 188 (Saudi Arabia), 189 (Senegal), 190 (Serbia), 191 (Seychelles), 192 (Sierra Leone), 193 (Singapore), 194 (Sint Maarten), 195 (Slovakia), 196 (Slovenia), 197 (Solomon Islands), 198 (Somalia), 199 (South Africa), 200 (South Korea), 201 (South Sudan), 202 (Spain), 203 (Sri Lanka), 205 (Suriname), 206 (Svalbard and Jan Mayen), 207 (Swaziland), 208 (Sweden), 209 (Switzerland), 211 (Taiwan), 212 (Tajikistan), 213 (Tanzania), 214 (Thailand), 215 (Togo), 216 (Tokelau), 217 (Tonga), 218 (Trinidad and Tobago), 219 (Tunisia), 220 (Turkey), 221 (Turkmenistan), 222 (Turks and Caicos Islands), 223 (Tuvalu), 224 (U.S. Virgin Islands), 225 (Uganda), 226 (Ukraine), 227 (United Arab Emirates), 228 (United Kingdom), 229 (United States), 230 (Uruguay), 231 (Uzbekistan), 232 (Vanuatu), 233 (Vatican), 234 (Venezuela), 235 (Vietnam), 236 (Wallis and Futuna), 237 (Western Sahara), 238 (Yemen), 239 (Zambia), 240 (Zimbabwe), 241 (Guadeloupe). Example: [29] for Brazil, [229] for United States

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare openWorldHint=true, readOnlyHint=false and destructiveHint=false, so the write/external-call profile is covered. The description adds the constraint that criteria must be LinkedIn-supported, but says nothing about persistence, what is returned on success (audience ID vs. estimate count), or failure modes when criteria are unsupported.

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 short sentences, front-loaded with the action and resource. The second sentence is partly redundant with the first ('LinkedIn-supported targeting criteria' then a list of those criteria), which keeps it just short of a 5.

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 8-parameter mutation tool with no output schema, the description omits what the agent gets back (new audience identity, estimated size) and whether the created audience is immediately usable for targeting. The rich schema compensates for parameters, but return-value behavior is left unexplained.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter carrying enums, examples and formats. The description's list of criteria categories mirrors the schema fields and adds no syntax, format or validation detail beyond it, so baseline 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?

Clear verb+resource: 'Create a LinkedIn native criteria audience using LinkedIn-supported targeting criteria.' The word 'criteria' implicitly distinguishes it from create_csv_upload_linkedin_native_audience and create_g2_intent_linkedin_native_dynamic_audience, but that contrast is never made explicit.

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 says what an audience can be built from but never states when to choose this tool over the many sibling audience-creation tools (CSV upload, Facebook native criteria, LinkedIn engagement retargeting, G2 intent). The important estimate_only preview workflow is documented only in the schema, not surfaced as usage guidance.

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

create_marketing_automation_contacts_audienceCreate Marketing-Automation Contacts AudienceAInspect

Create a Marketing-Automation-contacts custom audience (platform customAudienceType MA_CONTACTS_STATIC or MA_CONTACTS_DYNAMIC) from a provider library list.

NameRequiredDescriptionDefault
variantYesSTATIC = snapshot (MA_CONTACTS_STATIC); DYNAMIC = refreshing (MA_CONTACTS_DYNAMIC). Ask the user if unspecified.
providerYesThe Marketing-Automation provider that owns the list.
list_nameNoOptional: the source list's own name, from list_marketing_automation_lists.
library_list_idYesThe library list id from list_marketing_automation_lists.
custom_audience_nameYesAudience display name. Must not contain '/'.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds the platform-side audience type mapping, which is useful for interpreting errors, but says nothing about whether creation is reversible, what happens on duplicate names, or provider auth requirements — meaningful gaps for an open-world write.

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; the created resource and its origin both land immediately.

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 full schema coverage, no output schema and explicit annotations, the definition is nearly self-sufficient. The only missing piece is outcome information (what is returned or what to do after creation), which is minor for a create operation at this schema richness.

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 every parameter, including the STATIC/DYNAMIC enum semantics and the no-'/' name constraint, is already documented in the schema. The description's mention of STATIC/DYNAMIC simply restates the variant enum, adding no new parameter-level meaning.

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 gives a specific verb and resource ('Create a Marketing-Automation-contacts custom audience') and even names the underlying platform types (MA_CONTACTS_STATIC/MA_CONTACTS_DYNAMIC), which lets an agent distinguish it from siblings such as create_salesforce_contacts_audience or create_audience_from_segment. It stops short of explicitly naming those alternatives, so it is clear but not fully differentiated.

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

Usage Guidelines3/5

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

The phrase 'from a provider library list' implies the prerequisite (a library list id sourced elsewhere), but the description never states when to choose this tool over the other audience-creation tools or any when-not conditions. Usage is inferable rather than stated.

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

create_microsoft_business_logo_extensionCreate Microsoft Ads Business Logo Extension (BETA)AInspect

Create a business logo extension in the account’s Microsoft Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
domain_nameNo
business_nameNo
image_library_idYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare a non-read-only, non-destructive, open-world write; the description adds real value by disclosing the return ('extension result and available identifier') and failure mode ('validation/platform error'). It does not mention that creation mutates the shared asset library or any account-access requirements.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the outcome, then the scoping caveat. No filler.

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?

No output schema exists, and the description usefully covers return values and errors, so that gap is closed. However, with three parameters at 0% schema coverage and no explanation of the required image_library_id, an agent still lacks enough to populate the call confidently.

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 carries the full burden — but 'using the supplied fields' adds nothing. Nothing explains that image_library_id is a required reference to a previously uploaded image asset or what domain_name/business_name constrain, despite the 25/50 character limits.

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 business logo extension') scoped to the Microsoft Ads asset library. This clearly separates it from the Google counterpart (create_google_business_logo_extension) and from the various Microsoft callout/image/price/sitelink siblings.

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?

Adds a valuable routing note: 'Attaching the extension to a campaign is a separate operation,' which steers the agent away from expecting campaign association here. It doesn't state prerequisites such as needing an existing image library asset, and gives no explicit when-not guidance.

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

create_microsoft_callout_extensionCreate Microsoft Ads Callout ExtensionAInspect

Create a callout extension in the account’s Microsoft Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
callout_textYesCallout snippet. 1-25 characters.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=false, so the write/non-destructive profile is known. The description adds real value beyond that: it says the call returns the extension result and identifier, and that failures surface as validation or platform errors. It does not cover auth/account requirements or duplicate-handling.

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 filler; the creation scope leads and the attach-separation caveat follows. Nothing repeated from the title or 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 single-required-parameter create tool with full annotation coverage and no output schema, the description covers purpose, return payload, error behavior, and the follow-up attach operation. An agent has everything needed to call it and interpret the result.

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 callout_text parameter already carries its 1-25 character constraint in the schema. "Using the supplied fields" adds no meaning beyond that, so the baseline 3 for a fully documented schema 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?

States a specific verb and resource ("Create a callout extension in the account's Microsoft Ads asset library"), which separates it from the Google callout sibling and from the sitelink/price/promotion Microsoft extension creators. It never names an alternative tool outright, but the note that attaching is a separate operation implicitly draws the boundary against add_extensions_to_native_campaign.

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?

"Using the supplied fields" plus "Attaching the extension to a campaign is a separate operation" gives the agent clear context for when this tool is the right call and warns that creation alone does not deploy the asset. There is no explicit when-not guidance or named alternative, which keeps it below a 5.

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

create_microsoft_image_extensionCreate Microsoft Ads Image Extension (BETA)BInspect

Create a image extension in the account’s Microsoft Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
display_textNo
destination_urlNo
alternative_textNo
image_library_idsYes1-20 image-library IDs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is known. The description adds genuine context beyond that — it discloses the return payload (extension result plus identifier) and that failures surface as validation/platform errors — but says nothing about permissions, duplicate handling, or whether the created asset is reusable across campaigns.

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?

Three short sentences, front-loaded with the action and immediately followed by the return behavior and the scope boundary. No filler, though it is slightly terse for the amount of undefined parameter surface it covers.

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?

Knowledge that there is no output schema makes the return-value sentence valuable, and the scope boundary is a useful addition. However, with four parameters at 25% schema coverage and no annotations explaining mutation semantics, the description leaves field-level meaning and prerequisite context under-specified.

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% — only image_library_ids carries a description. The description's "using the supplied fields" adds no meaning for display_text, destination_url, or alternative_text, so an agent gets no guidance on what alternative_text is for versus display_text, or what URL constraints apply to destination_url.

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

Purpose4/5

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

States a specific verb and resource: creating an image extension in the account's Microsoft Ads asset library. It also distinguishes itself from the attach-to-campaign flow without naming the sibling explicitly, which is enough for an agent to tell it apart from create_google_image_extension or upload_image_creative.

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?

"Attaching the extension to a campaign is a separate operation" implies this tool only creates the library asset, and presumes image_library_ids already exist. There is no explicit statement of when to prefer this over create_google_image_extension or upload_image_creative, so usage is only implied.

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

create_microsoft_price_extensionCreate Microsoft Ads Price ExtensionAInspect

Create a price extension in the account’s Microsoft Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
price_offeringsYes3-8 price offerings.
price_qualifierYesPrice qualifier shown before the price.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare a non-read-only, non-destructive, open-world write. The description adds value beyond them by disclosing outcome semantics ('Returns the extension result and available identifier, or a validation/platform error') and that the asset is not attached to any campaign by this call — useful, non-obvious context 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?

Two tight sentences: the action and scope come first, then return behavior and the attach caveat. No filler and nothing restated from the annotations.

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 write tool with no output schema, the description covers what is created, what comes back, and what is not done (attachment). Remaining gaps are minor — which account identifier the call implicitly targets and any per-account extension limits are unstated, but the schema carries the field-level constraints.

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% — nested offering fields, the 3-8 item bounds, length limits, and the price_qualifier enum are all in the schema. The description adds only 'using the supplied fields', which conveys nothing 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 ('Create a price extension in the account's Microsoft Ads asset library'), which cleanly separates it from the many sibling extension-creation tools for Microsoft, Google, and other asset types. It also disambiguates library creation from the separate attach step.

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 scopes the tool to asset-library creation and states that 'Attaching the extension to a campaign is a separate operation', which prevents the common misuse case. It stops short of naming the sibling that performs the attach, so the agent must infer the follow-up tool.

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

create_microsoft_promotion_extensionCreate Microsoft Ads Promotion ExtensionAInspect

Create a promotion extension in the account’s Microsoft Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
urlYes
itemYes
end_dateYesISO-8601 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'". Future or present.
occasionYes
start_dateYesISO-8601 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'". Future or present.
details_typeYes
category_typeYes
details_amountNoThreshold USD amount; supply when details_type is ON_ORDERS_OVER.
category_amountNoUSD amount; supply when category_type is MONETARY or UP_TO_MONETARY.
category_percentNoPercent (≤100); supply when category_type is PERCENT or UP_TO_PERCENT.
details_promo_codeNoPromo code; supply when details_type is PROMO_CODE.

TDQS

A4/5.0
Behavior4/5

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

The annotations already establish that this is a non-read-only, open-world, non-destructive operation. The description adds useful behavioral context beyond those annotations by stating that it returns the extension result and identifier, or a validation/platform error, and that campaign attachment is not part of this call.

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 tight sentences with the core operation front-loaded, followed by return behavior and the important attachment scope. There is little waste and the key routing information is easy to scan.

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 relatively complex create tool with no output schema, the description does well by explaining the return and separation from attachment. However, it does not surface required-field or conditional-parameter expectations, leaving an agent to rely on a partially documented input schema.

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 description only says 'using the supplied fields' and does not explain the 11 parameters or their conditional relationships. With only 55% schema description coverage, it does not compensate for undocumented required fields such as occasion, item, category_type, and details_type, though the schema's enums and some optional-field descriptions carry partial meaning.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Create a promotion extension' in the Microsoft Ads asset library. It distinguishes the operation from Google promotion extensions by naming Microsoft Ads, and distinguishes asset creation from campaign attachment by explicitly stating that attaching is a separate operation.

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 indicates that this tool creates an asset and that attaching the extension to a campaign is handled separately, which prevents a common misuse. It does not enumerate when to choose this over the other Microsoft extension creation siblings, but the resource name 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.

create_microsoft_structured_snippet_extensionCreate Microsoft Ads Structured Snippet ExtensionAInspect

Create a structured snippet extension in the account’s Microsoft Ads asset library using the supplied fields. Returns the extension result and available identifier, or a validation/platform error. Attaching the extension to a campaign is a separate operation.

NameRequiredDescriptionDefault
headerYesSnippet header. 1-25 characters.
valuesYes3-10 snippet values, each 1-25 characters.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true; the description adds value beyond them by stating the return contract (extension result plus identifier, or a validation/platform error). It could go further on idempotency or duplicate handling, so not a 5.

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, front-loaded with the action and scope, with the second sentence carrying a non-obvious behavioral boundary. 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?

With no output schema, the description compensates by describing the return value and error modes, and it clarifies the attach-vs-create boundary. Complete enough to invoke correctly, though it omits any note on duplicates or account-level constraints.

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 both parameters carry min/max constraints and item counts in the schema, so the schema does the heavy lifting. The description adds nothing beyond 'using the supplied fields', matching the baseline 3 for fully documented params.

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 structured snippet extension') plus the exact location ('Microsoft Ads asset library'), which cleanly disambiguates it from the Google equivalent (create_google_structured_snippet_extension) and from other Microsoft extension creators such as sitelink or callout.

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 closing sentence, 'Attaching the extension to a campaign is a separate operation,' gives clear scoping guidance about what this tool does and does not do. It stops short of naming the sibling tool to use for attachment or of explicitly contrasting with the Google variant, so it stops at 4.

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

create_native_structure_campaignCreate Campaign — Channel First / Native Structure (N×N×N)AInspect

Create a draft campaign using Channel First Structure (NxNxN), also called Native Structure. Audiences, ads, and offers are grouped within channel-specific containers. Returns the draft campaign and channel configuration or validation errors. This tool does not launch it.

NameRequiredDescriptionDefault
campaign_dataYesComplete Channel First / Native Structure (N×N×N) campaign configuration. Each channel takes a `containers` list; each container groups one audience with an `ad_offers` list of {ad, offer} pairs.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare the tool is not read-only, not destructive, and not open-world. The description adds useful context beyond that: it creates a draft (not a launched campaign) and returns the draft campaign and channel configuration or validation errors, which helps set expectations for side effects and responses.

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 short sentences, front-loaded with the core action and resource. Every sentence contributes value: structure name, container grouping, return behavior, and the draft-only caveat.

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 and the very rich input schema, the description covers what the tool does and what it returns. It could mention prerequisites such as needing existing ads/offers or connected channels, but those details are already in the schema descriptions.

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 has 100% description coverage and is extremely detailed, so the baseline is 3. The description only summarizes that audiences, ads, and offers are grouped within channel-specific containers, adding little beyond what the nested schema already explains.

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 (Create), resource (draft campaign), and structure type (Channel First / Native Structure N×N×N). It distinguishes this tool from the generic create_campaign and from launch_campaign by explicitly noting 'This tool does not launch it.'

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

Usage Guidelines3/5

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

Usage is implied: use this tool to create a draft campaign with native structure, as opposed to launching one. However, it does not explicitly state when to choose this over sibling tools like create_campaign or add_and_edit_native_campaign_elements, nor does it name the alternative for launching beyond the exclusion.

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

create_negative_keywords_listCreate Negative Keywords ListCInspect

Create a new negative keywords list in the Metadata platform with Google Ads integration.

NameRequiredDescriptionDefault
nameYesName of the negative keywords list (string). Example: "Competitor Brands", "Low Intent Keywords"
channelNoAd channel scope. Both search channels are supported. These are PER-CHANNEL resources: GOOGLE_ADS and MICROSOFT_ADS hold separate sets, and one is invisible to the other. Defaults to GOOGLE_ADS when the user does not say which.GOOGLE_ADS
keywordsYesArray of keyword strings to block. Example: ["raichu", "blastoise", "charizard"]
match_typeYesMatch type for all keywords. Options: EXACT (exact match), PHRASE (phrase match), BROAD (broad match). Example: 'EXACT'

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only 'in the Metadata platform with Google Ads integration', which is thin for a mutation and arguably narrows scope in a way the channel parameter contradicts; it says nothing about validation limits on keywords, whether creation is idempotent, or what is returned.

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?

A single compact sentence with no filler, front-loading the verb and resource. It is not padded, though its brevity leaves no room for the routing or lifecycle information an agent needs.

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

Completeness2/5

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

For a mutation tool with no output schema, the description should say what comes back (e.g. the new list's identifier) and what state the result is in. Neither the return value nor the standalone-vs-attached lifecycle is addressed, leaving the agent to guess the next step after creation.

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 channel enum itself explains the per-channel isolation and default, so the heavy lifting is done structurally. The description adds no parameter meaning and its 'Google Ads integration' phrasing points away from the supported MICROSOFT_ADS option, so baseline 3 rather than higher.

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

Purpose4/5

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

States a specific verb plus resource ('Create a new negative keywords list') and names the platform, so the basic action is unambiguous. It does not distinguish itself from close siblings such as duplicate_negative_keywords_list or add_negative_keyword_lists_to_live_campaigns, which an agent must infer.

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

Usage Guidelines2/5

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

No guidance on when to use this versus duplicating, listing, or attaching an existing list to campaigns. The critical workflow fact — that a newly created list is standalone and must be pushed live via add_negative_keyword_lists_to_live_campaigns — is absent.

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

create_reddit_target_groupCreate Reddit Target GroupAInspect

Create a Reddit target group with location, communities, interests, or keyword criteria and optional audience references. Returns the group or validation/platform errors. The first include block contains location criteria with isModifiable=false.

NameRequiredDescriptionDefault
nameYesThe name for the new Reddit target group. Must be unique, descriptive, and UNDER 50 characters — the platform rejects 50+ character names with a 400.
targetingYesComplete Reddit targeting configuration with include/exclude rules. LOCATION must be the first include block. All references must come from search_reddit_criteria.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the mutation profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the bar is lower. The description still adds real value by disclosing the return surface ('Returns the group or validation/platform errors') and the ordering invariant that the first include block is location criteria with isModifiable=false — something an agent would otherwise get wrong. It omits any mention of permissions or rate limits, so it is good 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.

Conciseness4/5

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

Three short sentences, front-loaded with the core action and followed by return behavior and the structural caveat. The final sentence about isModifiable is slightly orphaned without saying why it matters, but nothing is wasted.

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 write tool with a deeply nested 2-parameter schema at full description coverage and no output schema, the description covers action, return/error shape, and the key structural constraint. The main gap is not routing the agent to search_reddit_criteria for valid criterion values — that dependency lives only in the schema text.

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 nested targeting object documents include/exclude, criteria, and audiences in detail, so the baseline is 3. The description's only addition is the first-include-block/location/isModifiable rule, which partly duplicates the targeting schema description — real but marginal added meaning.

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

Purpose4/5

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

States a specific verb and resource (create a Reddit target group) plus the kinds of criteria it accepts, which distinguishes it from generic siblings like create_target_group or create_retargeting_audience. It never explicitly names the Reddit-specific alternative or explains when the generic sibling applies, so sibling differentiation is only implied by the 'Reddit' qualifier.

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 tells the agent what content belongs in a group (location, communities, interests, keywords, optional audience references) and gives one structural rule about the first include block, which implies how to build the payload. It gives no explicit when-to-use/when-not guidance versus create_target_group, update_target_group, or estimate_target_group, and does not mention the search_reddit_criteria prerequisite that the schema carries.

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

create_retargeting_audienceCreate Retargeting AudienceCInspect

Create a new retargeting audience on the Metadata platform from native channel audiences.

NameRequiredDescriptionDefault
audience_dataYesComplete audience object from get_retargeting_audiences response. Should contain: id, name, type, subtype, channel, matchCount, externalAccountId, and other relevant fields.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already cover safety (readOnly=false, destructive=false, openWorld=true), so no credit is due for restating that this is a creation. The description adds nothing operational: no mention of duplicate handling if the audience already exists, whether the channel must be connected first, or whether the new audience is auto-attached to any campaign.

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?

A single, front-loaded sentence with no filler. It is efficient but its brevity comes at the cost of specificity rather than through disciplined editing.

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

Completeness3/5

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

For a one-parameter creation tool with a rich nested schema and no output schema, the schema carries most of the weight, but the description omits the source-tool dependency and any post-creation behavior. Adequate to identify the call, thin on how to use 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 nested audience_data object fields (id, name, type, subtype, channel, externalAccountId) are fully documented in-schema. The description contributes only the loose phrase 'native channel audiences' and nothing on required field semantics, so baseline 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?

States a specific verb and resource ('Create a new retargeting audience') and adds a modest qualifier ('from native channel audiences') that hints at the input source. It does not distinguish itself from the many sibling audience-creation tools (create_linkedin_engagement_retargeting_audience, create_audience_from_segment, create_g2_intent_dynamic_audience, etc.), so the agent still has to infer which creator applies.

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 when-to-use or when-not-to-use guidance, and no alternative named among the ~20 sibling create/upload audience tools. The crucial prerequisite — that audience_data should come from get_retargeting_audiences — appears only in the schema, not the description.

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

create_salesforce_contacts_audienceCreate Salesforce Contacts AudienceAInspect

Create a Salesforce-contacts custom audience (platform customAudienceType SFDC_CONTACTS_STATIC or SFDC_CONTACTS_DYNAMIC) from a Salesforce mixed-criteria.

NameRequiredDescriptionDefault
nameYesAudience display name.
variantYesSTATIC = snapshot (SFDC_CONTACTS_STATIC); DYNAMIC = refreshing (SFDC_CONTACTS_DYNAMIC). Ask the user if unspecified.
criteria_idYesThe Salesforce mixed-criteria id from list_salesforce_mixed_criteria.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is clear. The description adds useful context by naming the platform customAudienceType values and source entity, but it does not disclose creation side effects, idempotency, permissions, or return behavior.

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

Conciseness5/5

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

The description is a single efficient sentence with the resource and source stated up front. It contains no filler and every clause adds relevant context.

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 three-parameter, fully documented create tool, the description gives enough context to understand what is being created and from what source. It lacks explicit usage prerequisites and return-value detail, but annotations and schema cover most operational needs.

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 three parameters are already documented in the schema. The description adds only the customAudienceType mapping context and does not provide syntax or selection guidance beyond what the schema provides.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Create a Salesforce-contacts custom audience.' It also states the platform customAudienceType values and that the audience comes from a Salesforce mixed-criteria, which clearly distinguishes it from sibling audience-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 Guidelines2/5

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

The description does not explicitly state when to use this tool versus alternatives or what prerequisites are required. It implies the source is a Salesforce mixed-criteria, but does not mention listing criteria first or how to choose between the static and dynamic variants.

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

create_segmentCreate SegmentAInspect

Create a saved Insights segment from typed criteria over account-journey records. Returns the segment ID, name, status, and available account count. Invalid fields, operators, or values return validation errors; criteria groups support up to three nested group levels.

NameRequiredDescriptionDefault
nameYesDescriptive, unique segment name, e.g. 'Saturated: 200+ LinkedIn impressions'.
criteriaYes
lookback_windowNoOptional. Days to evaluate the segment over when counting `accounts` in the response; use the window the audience will be created with.

TDQS

A3.6/5.0
Behavior4/5

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

With annotations already stating readOnlyHint=false, destructiveHint=false, and openWorldHint=false, the description usefully adds that the tool returns segment ID, name, status, and available account count, and that invalid criteria produce validation errors. It also discloses the three-level nested group limit, though it does not discuss permissions or failure modes beyond validation.

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 tight sentences with the core action front-loaded, followed by return behavior and validation constraints. Every sentence adds useful information 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?

For a tool with a complex nested schema and no output schema, the description does well by stating the return fields and validation behavior and by noting the nesting depth limit. It is not fully complete because it leaves criteria grammar and field/operator semantics largely to the schema, but it covers the main agent needs.

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 67%, and the description adds meaningful context about typed criteria and a maximum of three nested criteria group levels. However, it does not explain the AND/OR operator semantics or the distinction between field/property/entity criteria, and it does not mention the optional lookback_window parameter.

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: "Create a saved Insights segment from typed criteria over account-journey records." It clearly identifies the object and the data domain, but it does not explicitly distinguish this tool from nearby siblings such as create_audience_from_segment, list_segments, or get_segment_criteria.

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 implies that this is the creation path for saved segments, but it gives no explicit when-to-use guidance, prerequisites, or comparison with alternatives like create_audience_from_segment or list_segments. An agent must infer the routing decision from context alone.

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

create_target_groupCreate Target GroupAInspect

Create a LinkedIn target group with a name, include rules, and optional exclusions. Criteria and audience references are validated against the account and channel. Returns the group or validation/platform errors.

NameRequiredDescriptionDefault
nameYesThe name for the new target group. Must be unique, descriptive, and UNDER 50 characters — the platform rejects 50+ character names with a 400.
channelYesThe advertising channel for the target group. Only LINKEDIN is currently supported.
targetingNoComplete targeting configuration with include/exclude rules...

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare mutation (readOnlyHint=false) with destructiveHint=false and a closed-world scope, so the safety bar is lower. The description adds real value beyond that: it warns that criteria and audience references are validated server-side against the account and channel, and states the failure mode (validation/platform errors) alongside the success return, which tells the agent to expect rejection rather than silent coercion.

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: identity of the operation first, the validation constraint second, the return/error contract last. Every sentence carries information an agent would not get from the structured fields alone.

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 nested three-parameter creation tool with no output schema, the description covers the essentials: what is created, what gets validated, and what comes back. It doesn't cover permission/connection requirements or suggest estimating audience size before committing, and the "include rules" phrasing slightly overstates an optional field.

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 nested targeting/exclude structures are documented in-schema, so the baseline of 3 applies. The description only restates the parameter surface (name, include, exclusions) without adding format, cardinality, or channel-specific criterion-type guidance. One nuance: it frames include rules as part of the create payload while `targeting` is in fact optional — a mild imprecision the schema corrects.

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

Purpose4/5

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

States a specific verb and resource ("Create a LinkedIn target group") and enumerates the composition (name, include rules, optional exclusions), which cleanly separates it from update_target_group, retrieve_target_group_by_id, list_target_groups and create_reddit_target_group. It stops short of naming any sibling explicitly, so differentiation is inferable 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 Guidelines3/5

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

No explicit when-to-use/when-not guidance and no pointer to adjacent tools an agent would need before calling it (search_target_group_criteria, estimate_target_group, list_target_groups for duplicate-name checks). The line about criteria and audience references being "validated against the account and channel" implies a prerequisite ordering but doesn't state it as a workflow.

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

create_technographic_audienceCreate Technographic AudienceAInspect

Creates B2B audiences based on technology stack, software usage, and firmographic attributes.

            ESTIMATE-ONLY MODE:
            Pass estimate_only=true to preview audience size (companies + contacts) WITHOUT creating the audience.
            In this mode the tool returns expectedNumberOfCompanies,
            expectedNumberOfContacts, and cappedContactCount. Default is false (audience is created).

            WHEN TO USE:
            - Target companies using specific technologies or software
            - Create audiences based on technology adoption patterns
            - Target by technology categories (CRM, Marketing Automation, Analytics, etc.)
            - Combine technology targeting with firmographic filters
            - Build tech-savvy audience segments for B2B campaigns
            - User wants to target companies and contacts that are familiar/using some specific software like hubspot, g2, etc.

            TECHNOLOGY CATEGORIES:
            - CRM: Salesforce, HubSpot, Microsoft Dynamics, Zoho, Pipedrive
            - Marketing Automation: Marketo, Pardot, Eloqua, HubSpot, Mailchimp
            - Analytics: Google Analytics, Adobe Analytics, Mixpanel, Amplitude
            - E-commerce: Shopify, Magento, WooCommerce, BigCommerce
            - Content Management: WordPress, Drupal, Joomla, Adobe Experience Manager
            - Collaboration: Slack, Microsoft Teams, Zoom, Asana, Monday.com
            - Cloud Infrastructure: AWS, Azure, Google Cloud, Oracle Cloud
            - Database: MySQL, PostgreSQL, MongoDB, Oracle, SQL Server
            - And many more technology categories available

            FIRMOGRAPHIC FILTERS (OPTIONAL):
            - Industries: Use industry IDs (1-148, same as firmographic audiences)
            - Employees: "LESS_THAN_10", "FROM_10_TO_50", "FROM_50_TO_200", "FROM_200_TO_500", "FROM_500_TO_1000", "FROM_1000_TO_5000", "FROM_5000_TO_10000", "OVER_10000"
            - Revenue: "LESS_THAN_1M", "FROM_1M_TO_10M", "FROM_10M_TO_50M", "FROM_50M_TO_100M", "FROM_100M_TO_200M", "FROM_200M_TO_500M", "FROM_500M_TO_1000M", "OVER_1000M"

            CONTACTS CRITERIA:

Use the following parameters to filter and target specific contacts within accounts:

GEOGRAPHIC TARGETING:

  • location_country_ids: Array of country IDs (e.g., [29] for Brazil, [229] for United States)

  • location_state_ids: Array of state IDs (e.g., [5] for California, [32] for New York)

JOB TITLES:

  • job_title_includes: Array of free text strings to include (e.g., ["Software Engineer", "Manager"])

  • job_title_excludes: Array of free text strings to exclude (e.g., ["Senior", "Lead"])

JOB FUNCTIONS: Valid job function IDs and their labels:

  • 1: Marketing, 2: Sales, 3: Customer Service, 4: Finance, 5: Human Resources, 6: Public Relations

  • 7: Media, 8: Design, 9: Engineering, 10: Operations, 11: Legal, 12: Education

  • 13: Health, 14: Real Estate, 15: Accounting, 16: Administrative, 17: Business Development

  • 18: Community and Social Services, 19: Consulting, 20: Entrepreneurship, 21: Information Technology

  • 22: Military and Protective Services, 23: Product Management, 24: Program and Project Management

  • 25: Purchasing, 26: Quality Assurance, 27: Research, 28: Trades

  • job_function_include_ids: Array of job function IDs to include (e.g., [9] for Engineering)

  • job_function_exclude_ids: Array of job function IDs to exclude

SENIORITY LEVELS: Valid seniority IDs and their labels:

  • 2: Manager, 3: Director, 4: VP, 5: CXO, 6: Unpaid, 7: Training

  • 8: Senior, 9: Owner, 10: Entry, 11: Partner

  • seniority_include_ids: Array of seniority level IDs to include (e.g., [10, 7] for Entry and Training)

  • seniority_exclude_ids: Array of seniority level IDs to exclude

CONTACT LIMITS:

  • contacts_per_company_limit: Maximum number of contacts to target per company (optional). Example: 20

USAGE NOTES:

  • All ID fields (countries, states, job functions, seniorities) use numeric IDs from the platform

  • Job titles are free text strings, not IDs

  • Use include parameters to specify which criteria to target

  • Use exclude parameters to filter out contacts matching specific criteria

  • Combine multiple criteria for precise targeting (e.g., Senior Engineers in California)

  • Criteria are combined with AND logic, so all conditions must be met

CONTACTS CRITERIA PARAMETERS(Usually after other initial audience parameters to be described next):

  • location_country_ids: Array of country IDs (optional)

  • location_state_ids: Array of state IDs (optional)

  • job_title_includes: Array of job title keywords to include (optional)

  • job_title_excludes: Array of job title keywords to exclude (optional)

  • job_function_include_ids: Array of job function IDs (optional)

  • job_function_exclude_ids: Array of job function IDs (optional)

  • seniority_include_ids: Array of seniority level IDs (optional)

  • seniority_exclude_ids: Array of seniority level IDs (optional)

  • contacts_per_company_limit: Maximum contacts per company (optional)

              PARAMETERS:
              - name: Audience name (required) - **IMPORTANT: Name MUST NOT exceed 50 characters. This is a mandatory requirement.**
              - technologies: Array of technology names (required)
              - industries: Array of industry IDs (optional)
              - employees: Array of employee count ranges (optional)
              - revenue: Array of revenue ranges (optional)
    
              RETURNS:
              Audience details with ID, size estimation, and creation status, plus `technologies_requested`, `technologies_targeted` (the indexed names actually sent) and `technology_resolution`.
    
              COMMON USE CASES:
              - Target companies using Salesforce and HubSpot
              - Find AWS users in the software industry
              - Build audiences of companies using specific MarTech stacks
              - Combine technology and firmographic targeting for precise B2B campaigns
    
              IMPORTANT NOTES:
              - **CRITICAL: Audience name MUST NOT exceed 50 characters - this is mandatory and will cause creation to fail if exceeded**
              - name and technologies are required parameters
              - All other parameters are optional for flexible audience creation
              - Technology names are resolved against the platform's indexed product catalog: an exact name is used as given; otherwise the closest indexed match is used and reported back in `technology_resolution` (requested, used, exact_match, alternatives) plus a plain-words `technology_note`. A name with no catalog match fails the call with an error; nothing is dropped silently.
              - When the call fails as too small and the error names a substituted technology, retry with one of the listed alternatives or a broader technology name. Do NOT loosen industries, seniority, employee bands or countries first: the substituted product is the cause.
              - Contact criteria fields work the same as in other audience types
              - Audience size depends on technology filters and applied criteria
NameRequiredDescriptionDefault
nameYesAudience name (required). Maximum 50 characters.
revenueNoRevenue ranges for firmographic filtering (optional). Valid enum values: LESS_THAN_1M ($0-$1M), FROM_1M_TO_10M ($1M-$10M), FROM_10M_TO_50M ($10M-$50M), FROM_50M_TO_100M ($50M-$100M), FROM_100M_TO_200M ($100M-$200M), FROM_200M_TO_500M ($200M-$500M), FROM_500M_TO_1000M ($500M-$1B), OVER_1000M ($1B+). Example: ['FROM_10M_TO_50M', 'FROM_50M_TO_100M']
employeesNoEmployee count ranges for firmographic filtering (optional). Valid enum values: LESS_THAN_10 (0-9), FROM_10_TO_50 (10-49), FROM_50_TO_200 (50-199), FROM_200_TO_500 (200-499), FROM_500_TO_1000 (500-999), FROM_1000_TO_5000 (1,000-4,999), FROM_5000_TO_10000 (5,000-9,999), OVER_10000 (10,000+). Example: ['FROM_50_TO_200', 'FROM_200_TO_500']
industriesNoIndustry IDs for firmographic/technographic filtering (optional). Valid IDs: 1=Defense & Space, 3=Computer Hardware, 4=Computer Software, 5=Computer Networking, 6=Internet, 7=Semiconductors, 8=Telecommunications, 9=Law Practice, 10=Legal Services, 11=Management Consulting, 12=Biotechnology, 13=Medical Practice, 14=Hospital & Health Care, 15=Pharmaceuticals, 16=Veterinary, 17=Medical Device, 18=Cosmetics, 19=Apparel & Fashion, 20=Sporting Goods, 21=Tobacco, 22=Supermarkets, 23=Food Production, 24=Consumer Electronics, 25=Consumer Goods, 26=Furniture, 27=Retail, 28=Entertainment, 29=Gambling & Casinos, 30=Leisure, Travel & Tourism, 31=Hospitality, 32=Restaurants, 33=Sports, 34=Food & Beverages, 35=Motion Pictures & Film, 36=Broadcast Media, 37=Museums & Institutions, 38=Fine Art, 39=Performing Arts, 40=Recreational Facilities & Services, 41=Banking, 42=Insurance, 43=Financial Services, 44=Real Estate, 45=Investment Banking, 46=Investment Management, 47=Accounting, 48=Construction, 49=Building Materials, 50=Architecture & Planning, 51=Civil Engineering, 52=Aviation & Aerospace, 53=Automotive, 54=Chemicals, 55=Machinery, 56=Mining & Metals, 57=Oil & Energy, 58=Shipbuilding, 59=Utilities, 60=Textiles, 61=Paper & Forest Products, 62=Railroad Manufacture, 63=Farming, 64=Ranching, 65=Dairy, 66=Fishery, 67=Primary/Secondary Education, 68=Higher Education, 69=Education Management, 70=Research, 71=Military, 72=Legislative Office, 73=Judiciary, 74=International Affairs, 75=Government Administration, 76=Executive Office, 77=Law Enforcement, 78=Public Safety, 79=Public Policy, 80=Marketing & Advertising, 81=Newspapers, 82=Publishing, 83=Printing, 84=Information Services, 85=Libraries, 86=Environmental Services, 87=Package/Freight Delivery, 88=Individual & Family Services, 89=Religious Institutions, 90=Civic & Social Organization, 91=Consumer Services, 92=Transportation/Trucking/Railroad, 93=Warehousing, 94=Airlines/Aviation, 95=Maritime, 96=Information Technology & Services, 97=Market Research, 98=Public Relations & Communications, 99=Design, 100=Non-profit Organization Management, 101=Fundraising, 102=Program Development, 103=Writing & Editing, 104=Staffing & Recruiting, 105=Professional Training & Coaching, 106=Venture Capital & Private Equity, 107=Political Organization, 108=Translation & Localization, 109=Computer Games, 110=Events Services, 111=Arts & Crafts, 112=Electrical & Electronic Manufacturing, 113=Online Media, 114=Nanotechnology, 115=Music, 116=Logistics & Supply Chain, 117=Plastics, 118=Computer & Network Security, 119=Wireless, 120=Alternative Dispute Resolution, 121=Security & Investigations, 122=Facilities Services, 123=Outsourcing/Offshoring, 124=Health, Wellness & Fitness, 125=Alternative Medicine, 126=Media Production, 127=Animation, 128=Commercial Real Estate, 129=Capital Markets, 130=Think Tanks, 131=Philanthropy, 132=E-learning, 133=Wholesale, 134=Import & Export, 135=Mechanical Or Industrial Engineering, 136=Photography, 137=Human Resources, 138=Business Supplies & Equipment, 139=Mental Health Care, 140=Graphic Design, 141=International Trade & Development, 142=Wine & Spirits, 143=Luxury Goods & Jewelry, 144=Renewables & Environment, 145=Glass, Ceramics & Concrete, 146=Packaging & Containers, 147=Industrial Automation, 148=Government Relations. Example: [4, 96, 11] for Software, IT Services, Consulting
technologiesYesArray of technology names to target (required). Example: ['Salesforce', 'HubSpot', 'Marketo']
estimate_onlyNoIf true, do NOT create the audience — only estimate its size and return the counts. Use this when the user wants to preview how many companies/contacts match the criteria before committing. Defaults to false (audience is created).
job_title_excludesNoFree text keywords for job titles to exclude (optional). Example: ['Senior', 'Lead']
job_title_includesNoFree text keywords for job titles to include (optional). Example: ['Software Engineer', 'Manager']
location_state_idsNoState IDs for geographic targeting (optional). Valid US State IDs: 1 (Alabama), 2 (Alaska), 3 (Arizona), 4 (Arkansas), 5 (California), 6 (Colorado), 7 (Connecticut), 8 (Delaware), 9 (Florida), 10 (Georgia), 11 (Hawaii), 12 (Idaho), 13 (Illinois), 14 (Indiana), 15 (Iowa), 16 (Kansas), 17 (Kentucky), 18 (Louisiana), 19 (Maine), 20 (Maryland), 21 (Massachusetts), 22 (Michigan), 23 (Minnesota), 24 (Mississippi), 25 (Missouri), 26 (Montana), 27 (Nebraska), 28 (Nevada), 29 (New Hampshire), 30 (New Jersey), 31 (New Mexico), 32 (New York), 33 (North Carolina), 34 (North Dakota), 35 (Ohio), 36 (Oklahoma), 37 (Oregon), 38 (Pennsylvania), 39 (Rhode Island), 40 (South Carolina), 41 (South Dakota), 42 (Tennessee), 43 (Texas), 44 (Utah), 45 (Vermont), 46 (Virginia), 47 (Washington), 48 (West Virginia), 49 (Wisconsin), 50 (Wyoming), 52 (District of Columbia). Example: [5] for California, [32] for New York
location_country_idsNoCountry IDs for geographic targeting (optional). Valid IDs: 1 (Afghanistan), 2 (Albania), 3 (Algeria), 4 (American Samoa), 5 (Andorra), 6 (Angola), 7 (Anguilla), 8 (Antarctica), 9 (Antigua and Barbuda), 10 (Argentina), 11 (Armenia), 12 (Aruba), 13 (Australia), 14 (Austria), 15 (Azerbaijan), 16 (Bahamas), 17 (Bahrain), 18 (Bangladesh), 19 (Barbados), 20 (Belarus), 21 (Belgium), 22 (Belize), 23 (Benin), 24 (Bermuda), 25 (Bhutan), 26 (Bolivia), 27 (Bosnia and Herzegovina), 28 (Botswana), 29 (Brazil), 30 (British Indian Ocean Territory), 31 (British Virgin Islands), 32 (Brunei), 33 (Bulgaria), 34 (Burkina Faso), 35 (Burundi), 36 (Cambodia), 37 (Cameroon), 38 (Canada), 39 (Cape Verde), 40 (Cayman Islands), 41 (Central African Republic), 42 (Chad), 43 (Chile), 44 (China), 45 (Christmas Island), 46 (Cocos Islands), 47 (Colombia), 48 (Comoros), 49 (Cook Islands), 50 (Costa Rica), 51 (Croatia), 53 (Curacao), 54 (Cyprus), 55 (Czech Republic), 56 (Democratic Republic of the Congo), 57 (Denmark), 58 (Djibouti), 59 (Dominica), 60 (Dominican Republic), 61 (East Timor), 62 (Ecuador), 63 (Egypt), 64 (El Salvador), 65 (Equatorial Guinea), 66 (Eritrea), 67 (Estonia), 68 (Ethiopia), 69 (Falkland Islands), 70 (Faroe Islands), 71 (Fiji), 72 (Finland), 73 (France), 74 (French Polynesia), 75 (Gabon), 76 (Gambia), 77 (Georgia), 78 (Germany), 79 (Ghana), 80 (Gibraltar), 81 (Greece), 82 (Greenland), 83 (Grenada), 84 (Guam), 85 (Guatemala), 86 (Guernsey), 87 (Guinea), 88 (Guinea-Bissau), 89 (Guyana), 90 (Haiti), 91 (Honduras), 92 (Hong Kong), 93 (Hungary), 94 (Iceland), 95 (India), 96 (Indonesia), 98 (Iraq), 99 (Ireland), 100 (Isle of Man), 101 (Israel), 102 (Italy), 103 (Ivory Coast), 104 (Jamaica), 105 (Japan), 106 (Jersey), 107 (Jordan), 108 (Kazakhstan), 109 (Kenya), 110 (Kiribati), 111 (Kosovo), 112 (Kuwait), 113 (Kyrgyzstan), 114 (Laos), 115 (Latvia), 116 (Lebanon), 117 (Lesotho), 118 (Liberia), 119 (Libya), 120 (Liechtenstein), 121 (Lithuania), 122 (Luxembourg), 123 (Macau), 124 (Macedonia), 125 (Madagascar), 126 (Malawi), 127 (Malaysia), 128 (Maldives), 129 (Mali), 130 (Malta), 131 (Marshall Islands), 132 (Mauritania), 133 (Mauritius), 134 (Mayotte), 135 (Mexico), 136 (Micronesia), 137 (Moldova), 138 (Monaco), 139 (Mongolia), 140 (Montenegro), 141 (Montserrat), 142 (Morocco), 143 (Mozambique), 144 (Myanmar), 145 (Namibia), 146 (Nauru), 147 (Nepal), 148 (Netherlands), 149 (Netherlands Antilles), 150 (New Caledonia), 151 (New Zealand), 152 (Nicaragua), 153 (Niger), 154 (Nigeria), 155 (Niue), 157 (Northern Mariana Islands), 158 (Norway), 159 (Oman), 160 (Pakistan), 161 (Palau), 162 (Palestine), 163 (Panama), 164 (Papua New Guinea), 165 (Paraguay), 166 (Peru), 167 (Philippines), 168 (Pitcairn), 169 (Poland), 170 (Portugal), 171 (Puerto Rico), 172 (Qatar), 173 (Republic of the Congo), 174 (Reunion), 175 (Romania), 176 (Russia), 177 (Rwanda), 178 (Saint Barthelemy), 179 (Saint Helena), 180 (Saint Kitts and Nevis), 181 (Saint Lucia), 182 (Saint Martin), 183 (Saint Pierre and Miquelon), 184 (Saint Vincent and the Grenadines), 185 (Samoa), 186 (San Marino), 187 (Sao Tome and Principe), 188 (Saudi Arabia), 189 (Senegal), 190 (Serbia), 191 (Seychelles), 192 (Sierra Leone), 193 (Singapore), 194 (Sint Maarten), 195 (Slovakia), 196 (Slovenia), 197 (Solomon Islands), 198 (Somalia), 199 (South Africa), 200 (South Korea), 201 (South Sudan), 202 (Spain), 203 (Sri Lanka), 205 (Suriname), 206 (Svalbard and Jan Mayen), 207 (Swaziland), 208 (Sweden), 209 (Switzerland), 211 (Taiwan), 212 (Tajikistan), 213 (Tanzania), 214 (Thailand), 215 (Togo), 216 (Tokelau), 217 (Tonga), 218 (Trinidad and Tobago), 219 (Tunisia), 220 (Turkey), 221 (Turkmenistan), 222 (Turks and Caicos Islands), 223 (Tuvalu), 224 (U.S. Virgin Islands), 225 (Uganda), 226 (Ukraine), 227 (United Arab Emirates), 228 (United Kingdom), 229 (United States), 230 (Uruguay), 231 (Uzbekistan), 232 (Vanuatu), 233 (Vatican), 234 (Venezuela), 235 (Vietnam), 236 (Wallis and Futuna), 237 (Western Sahara), 238 (Yemen), 239 (Zambia), 240 (Zimbabwe), 241 (Guadeloupe). Example: [29] for Brazil, [229] for United States
seniority_exclude_idsNoSeniority level IDs to exclude (optional). Valid IDs: 2-11 as listed above
seniority_include_idsNoSeniority level IDs to include (optional). Valid IDs: 2 (Manager), 3 (Director), 4 (VP), 5 (CXO), 6 (Unpaid), 7 (Training), 8 (Senior), 9 (Owner), 10 (Entry), 11 (Partner). Example: [10, 7] for Entry and Training
job_function_exclude_idsNoJob function IDs to exclude (optional). Valid IDs: 1-28 as listed above
job_function_include_idsNoJob function IDs to include (optional). Valid IDs: 1 (Marketing), 2 (Sales), 3 (Customer Service), 4 (Finance), 5 (HR), 6 (PR), 7 (Media), 8 (Design), 9 (Engineering), 10 (Operations), 11 (Legal), 12 (Education), 13 (Health), 14 (Real Estate), 15 (Accounting), 16 (Administrative), 17 (Business Development), 18 (Community Services), 19 (Consulting), 20 (Entrepreneurship), 21 (IT), 22 (Military Services), 23 (Product Management), 24 (Program/Project Management), 25 (Purchasing), 26 (QA), 27 (Research), 28 (Trades). Example: [9] for Engineering
contacts_per_company_limitNoMaximum number of contacts to target per company (optional). Example: 20

TDQS

A4.1/5.0
Behavior5/5

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

The description goes far beyond the annotations, disclosing that estimate_only=true previews without creating, that technology names are resolved against a catalog with no silent drops, that name length >50 chars causes failure, and how to retry on too-small failures. It also states AND logic and the exact return fields, which is rich behavioral context.

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

Conciseness2/5

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

The text is heavily bloated and repetitive: the contacts criteria parameter list appears twice, the first five parameters are re-listed in a PARAMETERS section, and the 50-character name warning is repeated three times. Headings help structure, but many sentences and lists do not earn their 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 15-parameter tool with no output schema, the description covers essentially everything: all firmographic, geographic, contact, and limit criteria, estimate behavior, return values, failure modes, and retry guidance. Nothing an agent needs to invoke it correctly appears to be missing.

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 real value on top: technology category examples, explicit statement that job titles are free text while IDs are numeric, the AND-combination rule, and include/exclude semantics. This elevates parameter understanding beyond the schema alone.

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 opens with a specific action and resource: 'Creates B2B audiences based on technology stack, software usage, and firmographic attributes.' It clearly identifies the technographic angle that distinguishes it from sibling audience tools, but it never explicitly names or contrasts a sibling such as create_firmographic_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?

A dedicated 'WHEN TO USE' section lists concrete triggers (target companies using Salesforce, combine technology and firmographic filters, etc.). It gives clear context for when to invoke the tool and clarifies estimate_only usage, though it lacks explicit 'when NOT to use' or named alternative tools.

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

create_update_convo_adCreate or Update LinkedIn Conversation AdC
Destructive
Inspect

Create or update a LinkedIn Conversation Ad ("convo ad"). a branching in-message chat where each step contains a message bubble and a list of button actions that drive the conversation forward.

NameRequiredDescriptionDefault
idNoExisting convo ad ID — include to UPDATE; omit to CREATE.
nameYesAd name in the platform library (max 50 chars).
stepsYesOrdered list of conversation steps. MUST include stepId=1 as the entry.
flowIdNoLinkedIn convo flow version. Defaults to 7 — keep the default unless told otherwise.
senderIdYesLinkedIn sender ID. MUST come from get_linkedin_senders.
senderNameYesDisplay name matching senderId from get_linkedin_senders.
templateIdNoLinkedIn convo template ID. Defaults to 1 — keep the default unless told otherwise.
headlineTextYesSubject line shown above the message thread.
completionStatusNoDefaults to DRAFT.
bannerCreativeLibraryIdNoOptional: imageLibraryId of the banner image. Upload first via upload_image_creative.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so safety framing is partly handled. However, the description adds nothing beyond annotations about the mutation itself: it never says whether an update replaces the entire step list, whether in-flight ads are affected, or what happens to omitted fields. For a destructive create-or-update tool that gap matters.

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 short sentences with no filler and the resource is front-loaded. The second sentence is a grammatical fragment and reads as glossary rather than operational guidance, which slightly weakens the structure but nothing is wasted.

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 100%-covered schema does most of the heavy lifting for a 10-parameter nested tool, and no output schema exists to explain. What is still missing is what an agent most needs beyond structured fields: the update-vs-create behavioral consequence implied by destructiveHint=true and any sequencing requirement with the creative/sender lookup tools.

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

Parameters3/5

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

Schema description coverage is 100% and the schema itself carries the critical semantics (id present = update, stepId=1 is the entry, step/action type relationships, defaults for flowId/templateId). The description adds no parameter-level meaning beyond restating the general structure, so the baseline 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?

States a specific verb pair (create/update) and resource (LinkedIn Conversation Ad) and even defines the artifact as a branching in-message chat with message bubbles and button actions. It does not explicitly differentiate this from close siblings like create_update_linkedin_message_ad or create_update_carousel_ad, but the domain definition makes the object clear.

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 versus the other LinkedIn ad-format tools, no prerequisites stated (e.g. sender must come from get_linkedin_senders, banner must be uploaded first — both only in the schema), and no statement about what an update does to existing steps. The description is purely definitional.

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

create_update_ctv_adCreate or Update LinkedIn CTV (Connected TV) AdA
Destructive
Inspect

Create OR update a LinkedIn CTV (Connected TV) video ad. LinkedIn only. TO UPDATE: include id; to CREATE: omit it.

NameRequiredDescriptionDefault
ads_dataYesArray of LinkedIn CTV ads to create or update.

TDQS

A4/5.0
Behavior3/5

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

The annotations already disclose that this is a non-read-only, destructive, open-world mutation. The description adds useful create/update mechanics and platform scope, but does not explain overwrite behavior on update, publishing/finalization implications, or other mutation risks beyond what the annotations 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 three short, front-loaded sentences with no filler. The create/update distinction is stated immediately and the id rule 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?

For a destructive create/update tool with a rich 100%-covered schema and annotations, the description covers the essential selection and invocation logic. It omits batch-array behavior and `completionStatus` implications, but those are thoroughly documented in the schema.

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 nested fields are already well documented, including `id`, `creativeID`, `completionStatus`, and required ad fields. The description reinforces the `id` create/update rule but adds little beyond the schema's own 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?

The description states a specific verb/resource pair and narrows it to 'LinkedIn CTV (Connected TV) video ad,' which distinguishes it from broader ad-creation siblings such as create_update_video_ad and create_update_linkedin_message_ad. An agent can identify the tool's purpose 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 Guidelines4/5

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

It clearly explains the create-vs-update selection rule: include `id` to update and omit it to create. It also gives a platform constraint ('LinkedIn only'), though it does not explicitly name alternatives or when this should be used instead of related video-ad tools.

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

create_update_document_adCreate or Update LinkedIn Document AdC
Destructive
Inspect

Create a new or update an existing LinkedIn Document Ad on the Metadata platform.

NameRequiredDescriptionDefault
idNoExisting Document Ad ID — include to UPDATE; omit to CREATE.
nameYesAd name in the platform library (max 50 characters).
textYesIntroductory text shown with the document (max 3000 characters).
ctaTypeNoCall-to-action. Defaults to UNLOCK_FULL_DOCUMENT (the document-gate CTA).
headlineYesHeadline shown with the document (max 200 characters).
libraryIdYesInteger id of the DOCUMENT creative in the library (contentType=DOCUMENT). Get it from search_library_creatives_by_name(contentTypes="DOCUMENT"). NOT an image/video id.
maxPreviewPagesNoHow many document pages are previewable before the unlock gate. Defaults to 1.
completionStatusNoDefaults to DRAFT. Use COMPLETED only when every required field is final.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the mutation profile is known. The description adds nothing beyond that — it restates the name/title and does not explain that updating overwrites the ad, that all four required fields must be resupplied on update, or what happens to unspecified fields. For a destructive, open-world write, that is a meaningful 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?

A single front-loaded sentence with no redundancy or filler. It is efficiently structured, but the brevity borders on under-specification rather than true economy.

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 an 8-parameter destructive mutation tool with no output schema. Given that the description is one sentence and leaves create-vs-update mechanics, required-field implications on update, and the return shape entirely to the schema, it is not complete enough for the 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%, including the enum meanings, maxLengths, defaults, and even the note that libraryId is not an image/video id. The description contributes no additional parameter meaning, so the baseline 3 applies.

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

Purpose4/5

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

The description uses a clear verb pair (create/update) and names a specific resource (LinkedIn Document Ad on the Metadata platform), which inherently separates it from create_update_image_ad, create_update_video_ad and create_update_carousel_ad. It stops short of explicitly routing the agent away from those siblings, so it is clear but not fully differentiated.

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

Usage Guidelines2/5

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

The description offers no when-to-use guidance: nothing about how to choose create vs. update (the id parameter in the schema carries that logic, not the description), no prerequisite that a DOCUMENT creative must already exist in the library, and no mention of alternatives. The agent must open the schema to learn the mode switch.

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

create_update_google_ads_adCreate or Update Google Ads AdA
Destructive
Inspect

Create or update a Google Ads text ad. An id selects an existing ad for update. Headlines are limited to 30 characters and descriptions to 90; repeated copy is rejected. Returns the ad definition or a validation/platform error.

NameRequiredDescriptionDefault
idNoThe existing ad ID to update. If omitted, a new ad will be created.
nameYesThe name/label for the ad in Metadata platform (max 50 characters)
headlinesYesList of headline texts for the Google Ads ad (minimum 3, maximum 15 headlines, each max 30 characters)
descriptionsYesList of description texts for the Google Ads ad (2 to 4 descriptions). CRITICAL #1 FAILURE MODE: each description MUST be ≤ 90 characters — this is enforced by maxLength schema validation AND by server-side truncation. Going over 90 means either (a) the call is rejected before it runs, or (b) the description is silently cut at 90 mid-sentence. Count every character (incl. spaces/punctuation/emoji). Target 70-85 chars to leave margin for sanitization. Shorter is always safer.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavior—repeated copy is rejected and returns either the ad definition or a validation/platform error—but it does not explain what an update overwrites or what permissions are needed.

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 short, front-loaded with the core action, and every sentence contributes useful information. There is no wasted wording.

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 rich schema and annotations, the description covers purpose, create-vs-update behavior, key constraints, and error outcomes. It is nearly complete, though it could clarify update overwrite behavior or what repeated-copy rejection means in practice.

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 documents id, name, headlines, and descriptions in detail. The description reinforces id semantics and character limits but adds little beyond the schema for 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?

The description uses a specific verb and resource: "Create or update a Google Ads text ad." The word "text" distinguishes this tool from sibling ad-format tools like create_update_image_ad and create_update_carousel_ad.

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 create-vs-update behavior through the optional id. However, it does not explicitly say when to choose this Google Ads text ad tool over sibling ad-format tools or list any exclusions, so usage is only implied.

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

create_update_image_adCreate or Update Image AdA
Destructive
Inspect

Create OR update an IMAGE (or GIF) ad on Facebook, Instagram, LinkedIn, and/or Reddit. TO UPDATE: include id; to CREATE: omit it.

NameRequiredDescriptionDefault
ads_dataYesArray of IMAGE ads to create or update. Each item targets one or more of FB/IG/LinkedIn/Reddit; the platform creates one ad row per (ad, channel).

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the agent knows this mutates external ad platforms. The description adds only the create-vs-update discriminator; it says nothing about what an update overwrites, whether updates are partial or full replacement, or what happens on partial batch failure across a multi-channel array.

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

Conciseness5/5

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

Two short sentences, front-loaded with the resource and channels, with the create/update rule rendered in caps so it is impossible to miss. Nothing repeats and nothing is wasted.

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 bulk, destructive, multi-channel mutation with 20+ nested per-channel fields, the description is thin on the things the schema cannot express: whether `ads_data` items are transactional, whether an update replaces unspecified fields, and whether COMPLETED vs DRAFT changes what is pushed upstream (buried in a nested field description). The exhaustive schema and annotations keep it from being inadequate, but real gaps remain.

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 per-field docs are unusually detailed (CTA enums, per-channel length limits, required-for-channel markers, creativeID being a library ID not a URL). The description only restates the `id` semantics already documented in the schema, so it sits at the baseline rather than adding meaning.

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?

Names a specific verb pair (create/update), a specific creative type (IMAGE or GIF), and the exact channels supported (Facebook, Instagram, LinkedIn, Reddit). The media-type qualifier effectively separates it from siblings like create_update_video_ad or create_update_carousel_ad, but no sibling is named explicitly, so an agent must infer the routing.

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 a crisp decision rule for the two modes — include `id` to update, omit it to create — which is the single most important routing decision for this tool. It stops there: no guidance on prerequisites (a creative must already exist via upload_image_creative), no exclusions against sibling ad-creation tools, and no note about when to prefer a different ad format.

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

create_update_linkedin_message_adCreate or Update LinkedIn Message AdC
Destructive
Inspect

Create a new or update an existing LinkedIn Message Ad on the Metadata platform.

NameRequiredDescriptionDefault
idNoExisting Message Ad ID — include to UPDATE; omit to CREATE.
nameYesAd name in the platform library (max 50 characters).
senderIdYesLinkedIn sender ID. MUST come from get_linkedin_senders. Do not invent.
actionTextYesCall-to-action button label (max 20 characters).
senderNameYesDisplay name matching senderId, also from get_linkedin_senders.
messageTextYesMessage body (max 2000 characters). Supports LinkedIn personalization macros — ONLY %FIRSTNAME%, %LASTNAME%, %COMPANYNAME%, %JOBTITLE%, %INDUSTRY%. Any other %...% token is rejected by the platform validator.
headlineTextYesMessage subject line shown in the recipient's inbox (max 60 characters).
completionStatusNoDefaults to DRAFT. Use COMPLETED only when every required field is final.
bannerCreativeLibraryIdNoOptional: imageLibraryId of the banner image shown above the message. Upload the image first via upload_image_creative and pass the returned ID. Omit to skip the banner.

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the safety profile is known. The description adds nothing behavioral beyond that: it does not warn that supplying an id overwrites the existing ad's fields, does not say whether omitted optional fields are cleared or preserved on update, and gives no side-effect or validation context. The low bar set by the annotations is not cleared with any added value.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or redundancy, so every word earns its place. It is efficient but borders on under-specification rather than exemplary concision.

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 9-parameter destructive mutation with no output schema, the description leaves the agent to reconstruct create-vs-update semantics, update overwrite behavior, and the required pre-steps entirely from the schema. The rich schema descriptions mitigate most of this, so the definition is workable but not self-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 100%, and the schema itself is unusually strong — it documents the id create/update switch, character limits, the allowed personalization macros, the get_linkedin_senders dependency, and the DRAFT/COMPLETED default. The description adds no parameter semantics of its own, so baseline 3 applies; the schema is doing all the work.

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

Purpose3/5

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

The description names a specific verb pair (create/update) and resource (LinkedIn Message Ad), so the action is identifiable. However, it is essentially a restatement of the tool name and title, and it gives no differentiation from the many sibling ad-creation tools (create_update_convo_ad, create_update_image_ad, create_update_document_ad, etc.) beyond the ad type embedded in the name.

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 statement of when to use this tool versus the other Message/Conversation ad or generic ad tools, and no mention of prerequisites such as resolving senderId via get_linkedin_senders or uploading a banner via upload_image_creative — both of which are critical ordering dependencies for this call. The one thing it does convey, the create-vs-update duality, is already encoded in the name.

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

create_update_microsoft_ads_adCreate or Update Microsoft Ads AdA
Destructive
Inspect

Create or update a Microsoft Ads text ad. An id selects an existing ad for update. Headlines are limited to 30 characters and descriptions to 90; repeated copy is rejected. Returns the ad definition or a validation/platform error.

NameRequiredDescriptionDefault
idNoThe existing ad ID to update. If omitted, a new ad will be created.
nameYesThe name/label for the ad in Metadata platform (max 50 characters)
headlinesYesList of headline texts for the Microsoft Ads ad (minimum 3, maximum 15 headlines, each max 30 characters). Every headline must be DISTINCT — the platform rejects the ad if two share the same text — and must not contain '!'.
descriptionsYesList of description texts for the Microsoft Ads ad (2 to 4 descriptions — 2 is the platform minimum, a single-description ad is rejected). Each description MUST be 90 characters or fewer and MUST be distinct from the others. Count every character (incl. spaces/punctuation/emoji); target 70-85 chars to leave margin for sanitization.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, and the description adds useful validation behavior (repeated copy rejected, validation/platform error returned). But it never tells the agent that an update replaces the existing headlines/descriptions wholesale, which is the key destructive consequence the annotations imply.

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?

Three short sentences, front-loaded with the create-vs-update rule, then constraints, then return behavior. The character limits largely repeat the schema, but the paragraph stays tight and wastes little space.

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 still covers the return contract (ad definition or validation/platform error) and the id semantics. It is nearly complete for a 4-param write tool; only the overwrite behavior on update 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 30-char headline and 90-char description limits restated in the description are already fully documented in the schema. The description adds no syntax or format guidance beyond that, 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 pair (create or update) and resource (Microsoft Ads text ad), and explicitly says an id selects update vs. create. This cleanly separates it from siblings like create_update_google_ads_ad or create_update_image_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?

It gives a clear selection rule: include an id to update, omit it to create. However, it names no alternatives or exclusions (e.g., use archive_ad to retire an ad, or the Google counterpart for other platforms), so the agent is left to infer cross-tool routing.

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

create_update_offerCreate or Update OfferA
Destructive
Inspect

Create or update Lead Gen or Landing Page offers in Metadata platform. Returns direct URL to access the offer in the platform. Lead Gen form fields take only the channel's predefined field types; the account's custom questions go in customFieldSelections, copied from get_offer, and on update omitting customFieldSelections keeps the current ones. A form takes at most 12 fields and custom questions together, and this tool cannot create a new custom field.

NameRequiredDescriptionDefault
dataYesOffer configuration data. Required fields depend on offer_type and channel - see description for details.
offer_typeYesType of offer to create

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already disclose that the operation is not read-only, is destructive, and is open-world. Beyond that, the description adds valuable behavioral context: it returns a direct URL, explains custom question preservation on update, states a 12-field/question limit, and clarifies that new custom fields cannot be created.

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, with purpose and return value early and operational constraints following. It is dense but appropriately sized for a complex mutation tool, with no obvious 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 complex, destructive create/update tool with no output schema, the description covers purpose, return URL, field-type constraints, custom-field update behavior, and key limits. It does not discuss authentication, platform prerequisites, or broader workflow routing, but the schema and annotations fill much of that 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 coverage is 100% and the schema already documents parameters in detail. The description still adds cross-field meaning: Lead Gen fields must use predefined channel types, custom questions belong in customFieldSelections and should be copied from get_offer, omission preserves existing selections on update, and the combined field limit is 12.

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+resource ("Create or update ... offers") and explicitly covers the two offer types the tool manages, Lead Gen and Landing Page. It clearly distinguishes this from read-only siblings such as get_offer or find_offer_url.

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 useful context: update behavior for custom fields is described, and it notes that the tool cannot create a new custom field. However, it does not explicitly name alternatives or fully state when to use this tool versus get_offer or find_offer_url, leaving some routing to inference.

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

create_update_video_adCreate or Update Video AdA
Destructive
Inspect

Create OR update a VIDEO ad on Facebook, Instagram, LinkedIn, and/or Reddit. TO UPDATE: include id; to CREATE: omit it. For Facebook and Instagram, every requested video must report READY on that channel before any ad is written; otherwise the whole batch is refused and nothing is created.

NameRequiredDescriptionDefault
ads_dataYesArray of VIDEO ads to create or update. Each item targets one or more of FB/IG/LinkedIn/Reddit; the platform creates one ad row per (ad, channel).

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the destructive/open-world annotations, it discloses a non-obvious batch behavior: for Facebook and Instagram, all requested videos must be READY or the entire batch is refused and nothing is created. It does not explain what an update overwrites, but the annotations already signal destructive mutation.

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 compact sentences front-load the tool identity, the create/update switch, and the critical Facebook/Instagram readiness failure mode. 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 complex nested ad payload, the description covers the key operational distinctions and a major failure condition while leaving field-level requirements to the fully documented schema. It does not describe return values, but no output schema exists and the core calling behavior is sufficiently clear.

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 detailed nested fields, enums, per-channel requirements, and creativeID meaning are already documented in the schema. The description adds the create-vs-update meaning of `id`, but that is also stated in the schema, so it does little beyond the structured fields.

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 or update a VIDEO ad on named channels. The 'VIDEO' qualifier distinguishes it from sibling ad-creation tools such as create_update_image_ad and create_update_carousel_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?

It clearly explains how to select update versus create behavior by including or omitting `id`, and it states an important prerequisite for Facebook/Instagram readiness. It does not explicitly route agents to related tools like upload_video_creative or name alternatives for other ad formats.

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

deep_funnel_statsGet Deep Funnel Analysis StatisticsB
Read-only
Inspect

Comprehensive funnel conversion analysis: funnel conversions, ROI statistics, experiment performance.

NameRequiredDescriptionDefault
endDateNoEnd date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Example: '2025-12-31T23:59:59.999Z'
funnel_idYesThe funnel ID to analyze. Example: 35
startDateNoStart date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Example: '2025-01-01T00:00:00.000Z'
opportunityModelNoOpportunity attribution model. Options: ALL (default), TRIGGERED, INFLUENCEDALL

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds a high-level list of returned metric categories, but it does not disclose operational behavior such as pagination, default date ranges, or whether the analysis is scoped to a single funnel.

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

Conciseness4/5

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

The description is a single, front-loaded sentence fragment with no wasted words. It efficiently conveys the main metric categories, though it could be slightly more structured by explicitly stating that it retrieves statistics for a given funnel.

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 4-parameter read-only analytics tool with no output schema, the description is minimally adequate. It names the metric categories returned but omits operational details like date-range behavior, attribution model effects, and how results are scoped to a funnel, leaving gaps that the fully documented schema and annotations only partially fill.

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 (funnel_id, startDate, endDate, opportunityModel) are already fully documented in the schema. The description adds no additional parameter meaning, which is acceptable given the complete schema coverage.

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

Purpose4/5

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

The description states the analysis domain and lists the metrics covered (funnel conversions, ROI statistics, experiment performance). It is clear what the tool does, but it does not differentiate itself from siblings such as experiment_performance_stats, which likely overlaps on experiment performance.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, nor any mention of prerequisites, exclusions, or typical scenarios. The description only lists content, leaving the agent to infer usage context from the tool name and schema.

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

delete_negative_keyword_listsDelete Negative Keyword ListsA
Destructive
Inspect

Permanently delete one or more entire Google Ads negative keyword lists, only when the user has explicitly asked.

NameRequiredDescriptionDefault
channelNoAd channel scope. Both search channels are supported. These are PER-CHANNEL resources: GOOGLE_ADS and MICROSOFT_ADS hold separate sets, and one is invisible to the other. Defaults to GOOGLE_ADS when the user does not say which.GOOGLE_ADS
listIdsYesIDs of the negative keyword lists to delete (from list_negative_keywords_list).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description earns credit by adding "permanently" (irreversibility) and the explicit-user-request requirement, but says nothing about what happens to lists still attached to live campaigns or partial-failure behavior across multiple IDs.

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?

One sentence, front-loaded with the verb and the destructive qualifier, with the invocation constraint attached. Nothing extraneous and nothing buried.

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 destructive, fully-annotated, fully-documented two-parameter tool, the description covers what it deletes and when it may be called. The gap is outcome behavior on multi-ID or in-use lists, which is not addressed anywhere in the 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 description coverage is 100%; listIds already names its source tool and channel documents the per-channel scoping rule in depth. The description adds no parameter-level meaning beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (permanently delete) and a precise resource scope (one or more *entire* negative keyword lists), which implicitly separates it from keyword-level siblings like remove_keywords_from_negative_list. No sibling is named explicitly, so it stops short of the top band.

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?

"Only when the user has explicitly asked" gives a concrete gating condition for invocation, which is meaningful for a destructive tool. It does not, however, point to alternative operations (e.g. deleting individual keywords, or deleting vs. archiving a list) if the intent is narrower.

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

demographic_country_statsGet Demographic Country StatisticsC
Read-only
Inspect

Performance metrics grouped by Country.

NameRequiredDescriptionDefault
pageNoPage number for pagination (0-based). Example: page=0 for the first page.
sizeNoResults per page from 1 to 100; default 100. Use successive zero-based page values and response pagination metadata for more results.
sortNoSorting criteria. Examples: 'spend,desc' (default), 'leads,desc', 'cpl,asc', 'impressions,desc'. Format: field,direction where direction is 'asc' or 'desc'.spend,desc
toMonthNoEnd date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Example: 2025-01-31T23:59:59.999Z. Required for custom date ranges.
channelsNoComma-separated channel names (e.g., 'LINKEDIN,FACEBOOK,INSTAGRAM,GOOGLE_ADS'). Leave empty for all channels.
fromMonthNoStart date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Example: 2025-01-01T00:00:00.000Z. Required for custom date ranges.
groupTypeNoGrouping type - currently only COUNTRY is supported for geographic breakdown.COUNTRY

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say which metrics are returned, whether the two date parameters must be paired, or what the default time window is.

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

Conciseness3/5

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

A single short clause with zero waste and the grouping dimension front-loaded, but it is terse to the point of under-specification rather than genuinely efficient communication.

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?

With seven parameters, no output schema, and no explanation of which performance metrics or response shape the caller receives, the description leaves an agent unable to predict results. The rich schema offsets this somewhat, but the metric content is never described anywhere.

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

Parameters3/5

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

Schema description coverage is 100%, with examples and defaults for page, size, sort, fromMonth/toMonth, channels, and groupType, so the schema does the heavy lifting. The description itself contributes no parameter semantics at all; baseline 3 applies.

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

Purpose3/5

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

The description states a verb-less purpose, 'Performance metrics grouped by Country,' which is enough to infer a read-only reporting tool scoped to geographic breakdown. It does not distinguish itself from close siblings such as performance_metrics, account_level_stats, or deep_funnel_stats beyond the 'by Country' grouping.

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 pick this over performance_metrics or other reporting siblings, and no stated prerequisites (e.g., whether fromMonth/toMonth should be supplied only together). Usage is entirely inferred from the name and schema.

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

disconnect_channelDisconnect ChannelA
Destructive
Inspect

Disconnect the selected advertising-channel integration from the current Metadata account. This changes the integration and can interrupt campaign management. Returns the platform operation result or an error. Reconnection requires a separate authorization flow.

NameRequiredDescriptionDefault
channelYesThe channel to disconnect. Must be one of: reddit, facebook, linkedin, twitter, google, instagram

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already flag destructive=true and openWorld=true, but the description adds value beyond them: campaign management can be interrupted, and restoring the integration needs a separate authorization flow. It also notes the return is the platform operation result or an error, though it doesn't say what the result contains.

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?

Three short sentences, front-loaded with the action and scope, then consequences, then return. Nothing is wasted, though 'Returns the platform operation result or an error' is close to boilerplate.

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 destructive one-parameter mutation with no output schema, the description covers scope, disruption risk, and reconnection path — enough to call it safely. Missing only explicit routing to alternatives such as connect_channel or the integration-status 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% with a single enum-validated channel parameter, so the schema carries the semantics. The description only refers to 'the selected advertising-channel integration' and adds no format or selection guidance 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?

States a specific verb and resource ('Disconnect the ... advertising-channel integration') and scopes it to the account level ('from the current Metadata account'), which distinguishes it from the campaign-scoped sibling remove_channels_from_campaign and from connect_channel.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the warning that it 'can interrupt campaign management' and the note that 'Reconnection requires a separate authorization flow' tell the agent about consequences, but no alternative (connect_channel, get_integrations_status) or precondition is named explicitly.

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

duplicate_campaignDuplicate CampaignBInspect

Duplicate (copy) an existing campaign into a NEW DRAFT campaign.

NameRequiredDescriptionDefault
nameNoName for the new (copied) campaign. Must be unique on the account and <= 255 chars. Omit to auto-generate '<original name>_copy_<timestamp>'.
campaign_idYesThe wizard/campaign ID of the campaign to duplicate. Must be in status Launched, Launching, Editing, or Draft.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only but non-destructive, closed-world mutation. The description adds one genuinely useful behavioral fact beyond that: the result is a NEW DRAFT (not launched) campaign, and the original is untouched ('copy'). It does not say what is included in the copy (ads, keywords, targeting, extensions) or whether credits/publish state are affected.

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

Conciseness5/5

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

A single short sentence with zero filler, and the most decision-relevant fact (the output is a new draft) is placed at the end where it lands. Nothing needs trimming.

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 2-parameter tool with full schema coverage the description is adequate, and it correctly signals the resulting draft state. However, with no output schema, an agent would benefit from knowing what the call returns (e.g., the new campaign's id/name) and what content gets carried over, neither of which is covered.

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 explains campaign_id status restrictions and the name auto-generation pattern in detail. The description adds nothing parameter-specific; baseline 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?

States a specific verb (duplicate/copy) and resource (campaign), plus the outcome state (a NEW DRAFT campaign), which distinguishes it from create_campaign. It never names a sibling explicitly, so an agent must infer that this is the copy path rather than the build-from-scratch path.

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 choose this over create_campaign, manage_campaign, or duplicate_negative_keywords_list, and no prerequisites are stated. The only hint is the 'new draft' outcome, which implies cloning as an alternative to building a campaign from scratch but does not say so.

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

duplicate_negative_keywords_listDuplicate Negative Keywords List Across ChannelsAInspect

Duplicate (copy) a negative keyword list from one search channel to the other: Google Ads to Microsoft Ads (Bing), or Microsoft Ads to Google Ads.

NameRequiredDescriptionDefault
nameNoOptional name for the new list. Defaults to "<source name> (<target>)", e.g. "Competitor Brands (Microsoft)".
dryRunNoWhen true, preview the copy (keyword count + BROAD-to-PHRASE conversions) without creating the list.
sourceListIdYesId of the negative keyword list to copy, as returned by list_negative_keywords_list.
sourceChannelNoChannel the source list lives on. Default GOOGLE_ADS.GOOGLE_ADS
targetChannelNoChannel to create the copy on. Must differ from sourceChannel. Default MICROSOFT_ADS.MICROSOFT_ADS

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the mutation profile is known. The description adds the copy direction but omits notable behavior such as what happens on name collisions and the BROAD-to-PHRASE match-type conversion, which is only visible inside the dryRun schema field rather than in the description.

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

Conciseness5/5

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

A single front-loaded sentence that states the action, the resource, and both directions with zero padding. Nothing could be removed without losing meaning.

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 five parameters, full schema coverage, and safety annotations, the description covers enough to invoke the tool correctly. It is slightly thin for a creating operation with no output schema — it says nothing about the result of the copy or the match-type conversion side effect, which an agent might otherwise assume is a verbatim duplicate.

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 defaults for name, sourceChannel, targetChannel, and dryRun are fully documented in the schema itself. The description's phrase 'from one search channel to the other' only mirrors the sourceChannel/targetChannel pair and adds no syntax or constraint detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

The description names a specific verb (duplicate/copy), a specific resource (negative keyword list), and the exact scope (cross-channel, Google Ads ↔ Microsoft Ads). This scope is distinct from siblings like create_negative_keywords_list or add_keywords_to_negative_lists, so an agent can pick the right tool 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 Guidelines3/5

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

The directional scope implies when the tool applies (copying an existing list to the opposite channel), but there is no explicit guidance on when to prefer it over create_negative_keywords_list plus add_keywords_to_negative_lists, and no stated prerequisites such as needing both channels connected.

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

edit_brand_creativeEdit Brand CreativeAInspect

Create an AI-edited copy of an existing image using the supplied edit instructions and brand context. Returns a hosted URL for a new standalone image that the caller can download or use independently. The source image and any existing library creative remain unchanged. The new image is not automatically attached to an ad; upload_image_creative can store it under a new library ID. AI edits may alter text and visual details beyond the requested region.

NameRequiredDescriptionDefault
domainYesCompany domain for brand context. Used to fetch brand DNA for consistency. Examples: 'metadata.io', 'bloomreach.com'
image_sourceYesURL of the creative image to edit. Must be a valid accessible image URL (PNG, JPG, WebP). Can be a URL returned by a previous generation or edit.
edit_instructionYesNatural language description of the desired edit(s). Can include multiple changes in one request. Examples: 'Replace the robot with a dashboard', 'Change headline to BOOST ROI and make CTA say GET STARTED', 'Add a +50% ROI badge in the corner'

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, the description discloses key behavior: the source image and existing library creative remain unchanged, the result is a new standalone hosted URL, it is not automatically attached to an ad, and AI edits may alter text or visual details outside the requested region. These details are highly relevant for a non-destructive but open-world image-editing 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 front-loaded with the core action and result, then adds only the operational caveats that matter: source preservation, standalone output, non-attachment, and AI edit variability. There is no redundant or filler language.

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

Completeness4/5

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

For a mutation-style generation tool with no output schema, the description sufficiently explains the return value and side-effect behavior. It could still mention credit consumption or other operational constraints, but it covers the essential call semantics.

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 three parameters are already well documented. The description reinforces that image_source is an existing image, edit_instruction carries the desired edits, and domain supplies brand context, but it adds little beyond 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 states a specific verb and resource: 'Create an AI-edited copy of an existing image' using edit instructions and brand context. This clearly distinguishes the tool from generation-from-scratch siblings by emphasizing that the source must already exist.

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 clear context for when to use the tool: editing an existing image and receiving a standalone hosted result rather than an attached ad creative. It also names upload_image_creative as the follow-up for storing the result, but it does not explicitly contrast this tool with generate_brand_creative or generate_flexible_brand_creative.

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

estimate_target_groupEstimate Target GroupA
Read-only
Inspect

Estimate reach for LinkedIn or Reddit targeting criteria, including audience references and exclusions. Returns the match count and whether it falls below the channel minimum, or an error. This tool does not create a target group.

NameRequiredDescriptionDefault
channelYesChannel to estimate for. LINKEDIN (default) takes criteria ids from search_target_group_criteria; REDDIT takes them from search_reddit_criteria and is estimated the same way. Omit for LinkedIn.LINKEDIN
targetingNoComplete targeting configuration with include/exclude rules. Structure: { "include": [ { "criteria": [{"type": str, "data": object}], "audiences": [] } ], "exclude": {"criteria": [], "audiences": []} } All criteria IDs/references must come from search_target_group_criteria tool.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value beyond them by disclosing the return shape: match count, whether it falls below the channel minimum, or an error. It stops short of saying whether estimates are exact/approximate or how errors 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, front-loaded with the primary action, then the return values, then the negative scoping. Every sentence carries distinct information with no repetition of 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?

Despite a deeply nested targeting object and no output schema, the description plus the 100%-covered schema and read-only annotations give an agent enough to call it correctly, and the return semantics are spelled out. The only omission is a pointer to the mandatory criteria search tools at the description level, which currently lives only inside the schema.

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 channel property is richly documented (enum, default, which criteria search tool feeds each channel). The description's phrase 'including audience references and exclusions' alludes to the include.audiences and exclude fields but adds no format or sourcing detail 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?

States a specific verb and resource ('Estimate reach for LinkedIn or Reddit targeting criteria') and explicitly distinguishes itself from the creation tool with 'This tool does not create a target group.' An agent can separate this from create_target_group or retrieve_target_group_by_id without opening any schema.

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 'does not create a target group' clause implies the preview-before-create use case and rules out a sibling. However, it never states the positive condition (e.g., call this before create_target_group to validate reach) nor names an alternative to use when estimation is not wanted.

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

experiment_performance_statsGet Experiment Performance StatisticsB
Read-only
Inspect

Experiment-level performance statistics from Metadata.io Experiments API. Rows carry no lead or conversion date.

NameRequiredDescriptionDefault
nameNoExperiment name filter, matched as ONE substring per request. Use 'name' field (NOT experimentName) for specific experiment questions. Can be a single string or an array of strings for multiple experiments; an array is queried one name per request and the results are merged. Do NOT add additional parameters when filtering by specific experiment name.
pageNoPage number for pagination (0-based). Use it with the 'size' you already sent to reach rows beyond the first page when 'totalElements' exceeds the rows returned.
sizeNoResults per page from 1 to 100; default 10. Use successive zero-based page values and response pagination metadata for more results.
sortNoSorting parameter. CRITICAL RULES: 'cpl2Score,desc' for Lead Generation or unspecified campaigns, 'cpc2Score,desc' for Brand Awareness, 'triggeredAmount,desc' for ROI/pipeline questions, 'oppsAmount,desc' for influenced pipeline, 'conversionRate,desc' for conversion rate, 'internalStatus,desc' for active experiments, use specific metric,desc when asked (e.g. 'impressions,desc', 'mqls,desc').cpl2Score,desc
goalsNoCampaign goal type. RULES: 'CPL' for Lead Generation campaigns, 'CTR' for Brand Awareness campaigns. Do NOT include for unspecified campaign types. When multiple metrics involved, use only the first metric's corresponding goal.
adNameNoFilter by specific ad name (e.g., 'Sifted_WorkShift_Ad5_Beige'). Use 'adName' field when question asks about specific ad names.
minCpcNoMinimum cost per click threshold (whole dollars). OPTIONAL filter: omit it unless the question needs one. Do NOT set it for Lead Generation or unspecified campaign types.
minCplNoMinimum cost per lead threshold (whole dollars). OPTIONAL filter: omit it unless the question needs one. It excludes every zero-lead experiment, whose CPL is undefined, so never pair it with minLeads=0 and never set it for Brand Awareness.
endDateNoEnd date in ISO 8601 format. Must end on last hour of date (e.g., '2024-11-21T23:59:59.999Z'). CRITICAL: Do NOT include if timeFrame parameter is used. For specific campaigns/experiments without timeframe, omit this parameter.
metricsNoList of metrics for secondary ordering when question involves multiple metrics (e.g., ['cpl', 'ctr', 'leads']). Only include when analyzing more than one metric simultaneously. Do NOT include for single metric questions.
channelsNoMarketing channels to include
minLeadsNoMinimum leads threshold. OPTIONAL filter: omit it unless the question needs one. Useful to keep only converting experiments in a Lead Generation ranking. Do NOT set it for Brand Awareness, nor when the user asks about zero-lead or 'no results' experiments.
minSpendNoMinimum spend threshold. OPTIONAL filter: omit it unless the question needs one. Useful when ranking Lead Generation performance and non-delivering experiments would be noise. Do NOT set it when the user asks about experiments with no spend, no leads or no results.
minClicksNoMinimum clicks threshold. OPTIONAL filter: omit it unless the question needs one. Useful in a Brand Awareness ranking. Do NOT set it for Lead Generation.
offerNameNoFilter by specific offer name (e.g., 'AMER_ZO_EN_HBR Reimagining Work'). Use this field when question mentions specific offers.
startDateNoStart date in ISO 8601 format (e.g., '2024-10-18T00:00:00.000Z'). CRITICAL: Do NOT include if timeFrame parameter is used. Use last year of data if period cannot be inferred from question. For specific campaigns/experiments without timeframe, omit this parameter.
timeFrameNoTimeframe aggregation. CRITICAL RULES: Use ONLY for WEEK or QUARTER questions. NEVER use 'YEAR' - use startDate/endDate instead. If timeFrame is included, DO NOT add startDate or endDate parameters under any circumstances.
offerTypesNoOffer types filter. RULES: ['LP'] for lead gen forms/landing pages questions, ['LP', 'LG'] as default when offer types mentioned. LP=Landing Pages, LG=Lead Gen forms. Should NOT be empty when included.
audienceNameNoFilter by target audience name (e.g., 'WTS EMEA Jan25_EMEAPitchbook')
campaignNameNoCampaign name filter. Use when question is about specific campaign(s). Can be single string or array ['campaign1', 'campaign2'] for multiple campaigns. Do NOT include additional parameters when filtering by specific campaign name.
visibilitiesNoVisibility status filter. The platform knows only VISIBLE (live) and ARCHIVED; there is no HIDDEN value and sending one is rejected with a 400.
audienceTypesNoComma-separated list of audience types (e.g., 'Spotlight Retargeting Contacts (Dynamic),Technographic (Aberdeen)')
minAudienceSizeNoMinimum audience size. OPTIONAL filter: omit it unless the question needs one.
imageLibraryNameNoFilter by creative/image name (e.g., 'JP - Square-Ad15.png'). Use 'imageLibraryName' field when question asks about specific creative names.
launchedExperimentStatusesNoFilter experiments by launch status. DEFAULT when omitted: successfully-launched experiments only (Active, WithoutSpend, Paused, Completed) — Failed and Disconnected are EXCLUDED, because a failed/non-launched experiment has 0 leads and is a non-starter, not a 'bottom performer'. Pass values explicitly to override: ['Active'] for live only, or ['Failed'] / ['Failed','Disconnected'] when the user explicitly asks which experiments failed.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful context that rows carry no lead or conversion date, but it does not describe return shape, pagination behavior, or other operational traits beyond that single limitation.

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 short sentences and front-loads the purpose before adding the row limitation. It is efficient and has no filler, though it could do more to route among sibling statistics tools.

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 25-parameter analytics tool in a crowded set of metrics siblings, the description is under-specified on selection context. The schema is rich and annotations cover safety, but the description does not explain when this tool should be preferred over performance_metrics or other stats tools, nor does it clarify the expected result context beyond the lead/conversion-date caveat.

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 25 parameters already have detailed semantic documentation in the schema. The description does not add parameter-specific guidance beyond what the schema provides, which is the expected baseline when the schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb+resource: experiment-level performance statistics from the Metadata.io Experiments API. It is clear what the tool returns, but it does not distinguish itself from related sibling tools such as performance_metrics, deep_funnel_stats, or experiments_keywords_stats.

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 offers no explicit when-to-use guidance and names no alternatives. The caveat that rows carry no lead or conversion date implies a limitation, but it does not tell the agent which sibling tool to choose when lead or conversion dates are needed.

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

experiments_keywords_statsGet Keyword Performance Statistics from ExperimentsC
Read-only
Inspect

Keyword performance data from active experiments with date range filtering.

NameRequiredDescriptionDefault
pageNoPage number for pagination (0-based). Example: page=0 for the first page, page=1 for the next one.
sizeNoResults per page from 1 to 100; default 50. Use successive zero-based page values and response pagination metadata for more results.
sortNoSorting criteria as field,direction (direction 'asc' or 'desc'). Sortable fields: keyword, wizExperimentName, adGroup, matchType, status, spend, impressions, clicks, ctr, cpc, cpm, cpl, leads, mqls, cpMQL, conversions, allConversions, interactions, qualityScoreHist, totalOpps, oppsAmount, totalTriggered, triggeredAmount. Default: 'spend,desc'.spend,desc
endDateYesEnd date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Example: '2025-12-31T23:59:59.999Z'
startDateYesStart date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). Example: '2025-01-01T00:00:00.000Z'
keywordOrExperimentNameNoOptional substring filter matched against the keyword text and the experiment name. Omit it to get every keyword in the window.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds the 'active experiments' scoping constraint, which is useful, but says nothing about pagination behavior, result volume, or what happens when no active experiment matches.

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

Conciseness3/5

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

One short sentence with no filler, but it is under-specified rather than concise: the entire description is a single noun phrase, so there is no front-loaded instruction and no supporting detail to earn its brevity.

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?

With six parameters, no output schema, and a metrics-oriented return payload, the description should explain what metrics come back (spend, clicks, CTR, conversions, etc.) and how pagination metadata works. Neither is covered, leaving the agent to guess at the response shape from sortable field names.

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 page, size, sort, dates and the keywordOrExperimentName filter all documented in the schema. The description only restates the date-range filter, so it adds nothing beyond the schema; baseline 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?

Names the resource precisely: keyword-level performance data scoped to active experiments, with date-range filtering. This distinguishes it from experiment-level siblings like experiment_performance_stats and from list_experiment_keywords, though the differentiation is implicit 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 Guidelines2/5

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

No when-to-use guidance, no mention of alternatives such as experiment_performance_stats (experiment-level rollups) or list_experiment_keywords (structural listing). The agent must infer selection 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.

fetch_creative_detailsFetch Creative DetailsB
Read-only
Inspect

Get detailed information for specific creative assets by their IDs. Looks up each creative ID individually.

NameRequiredDescriptionDefault
creative_idNocreative id to be query

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description need only add context. 'Looks up each creative ID individually' adds a useful behavioral hint about per-ID resolution, but there is no information on what fields are returned, what happens with invalid/unknown IDs, or response 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?

Two short sentences with the purpose front-loaded and no filler. The second sentence is brief and marginally informative, though slightly redundant with 'by their IDs'.

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 read-only, single-optional-parameter fetch there is no output schema, so the description's 'detailed information' is vague about what is actually returned. Given the low complexity this is adequate but leaves a meaningful gap about response contents.

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 single creative_id parameter is already documented as 'creative id to be query'. The description adds only the notion that lookup is per-ID; it does not clarify format, source of IDs, or handling of the plural 'IDs' wording versus the single integer parameter.

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 gives a specific verb (get/fetch) and resource (detailed information for creative assets), with the lookup key (IDs) stated. It implicitly distinguishes itself from search_library_creatives_by_name by requiring IDs, but never names that sibling, so differentiation is left to inference.

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

Usage Guidelines3/5

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

The phrase 'by their IDs' implies the tool is for when you already hold creative IDs, and 'looks up each creative ID individually' hints at per-item resolution. However, no explicit when-to-use/when-not guidance or named alternative (e.g., search_library_creatives_by_name for name-based discovery) is provided.

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

find_offer_urlFind Offer Landing-Page URLA
Read-only
Inspect

Find a specific marketing-offer landing page on a domain when no URL is already known. Checks conventional paths, the sitemap, and links on the site, then scores matching pages. Generic index pages and direct media/PDF links are excluded. Returns a candidate landing-page URL and discovery details, or success=false when no suitable page is found. It does not create or modify an offer.

NameRequiredDescriptionDefault
topicNoOptional topic keywords to bias scoring (e.g., 'fintech', 'servicenow integration', 'data warehousing'). Improves hit rate when the domain has many offers of the same type.
domainYesCompany website URL or domain. Examples: 'snowflake.com', 'www.servicenow.com'
offer_typeYesType of offer content to locate. Drives which paths are probed and which keywords score higher.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare readOnly/openWorld/non-destructive; the description adds real behavior the agent cannot infer: it probes conventional paths, the sitemap and on-site links, scores candidates, excludes generic index pages and direct media/PDF links, and returns success=false on failure. That is mechanism, filtering policy and failure semantics in one place.

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?

Five short sentences, front-loaded with purpose and precondition, then mechanism, exclusions, return contract, and the sibling boundary. Nothing is repeated and every clause carries information an agent would otherwise have to guess.

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, yet the description documents the return shape (candidate landing-page URL plus discovery details) and the failure case (success=false). Combined with 100% schema coverage on the three inputs, an agent has everything needed to call it and interpret the result.

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%, including the enum for offer_type and a detailed topic description, so the schema does the heavy lifting. The description adds only indirect signal ('drives which paths are probed') and no additional format or interaction guidance between domain, topic and offer_type; 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 ('find a specific marketing-offer landing page on a domain') plus the precondition 'when no URL is already known'. The closing line 'It does not create or modify an offer' separates it from the offer-mutation siblings such as create_update_offer and get_offer, and the domain-scoped discovery focus distinguishes it from find_privacy_url.

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 a clear triggering condition ('when no URL is already known') and an implicit exclusion via the negative statement about not creating/modifying offers. It stops short of naming the alternative tools (find_privacy_url, get_offer) an agent should fall back to when a URL is already known or an offer must be edited.

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

find_privacy_urlFind Privacy URLB
Read-only
Inspect

Locate the privacy-policy URL for a given website domain.

NameRequiredDescriptionDefault
domainYesCompany website URL or domain. Examples: 'metadata.io', 'www.bloomreach.com', 'https://example.com'

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already state readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds no behavioral context beyond the basic lookup action, such as what happens if no privacy URL is found or whether the result is fetched live from the open web.

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?

One short, front-loaded sentence with zero waste. It states the action and resource immediately.

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 read-only lookup this is mostly adequate, especially given clear annotations and a fully described parameter. However, with no output schema, the description does not clarify return behavior when no privacy URL exists or whether the tool returns a best-effort match.

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 domain parameter is fully documented with examples. The description adds no syntax, format, or edge-case detail beyond what the schema already provides, so baseline 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 uses a specific verb and resource: 'Locate the privacy-policy URL' for a website domain. It is clearly distinct from most siblings in intent, though it does not explicitly mention the closely related sibling find_offer_url.

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

Usage Guidelines3/5

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

Usage is implied by the purpose: call this when you need a privacy-policy URL for a domain. There is no explicit when-to-use, when-not-to-use, or alternative-tool guidance, and no mention of find_offer_url.

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

fix_flexible_creativeFix Flexible Creative ImageAInspect

Create an AI-edited copy of a supplied background or flat creative image, at the source's pixel size (longest edge at most 2000 px) when the shape is close to the source's. Returns a hosted URL for a new standalone image that the caller can download or use independently. It does not update the source, a library item, an ad, or the layered document. The first-party editor can use the returned URL as a replacement background. Registered brand characters shown in the source are kept unless characters is passed to change them. WARNING: text baked into a flat image may be repainted or become unreadable; separate text and logo layers are outside this tool's edit.

NameRequiredDescriptionDefault
domainYesCompany domain for brand context (e.g. 'metadata.io').
charactersNoThe brand characters the edit must keep. Omit to keep the ones the image shows; [] drops them all, a list keeps only those names.
image_sourceYesURL of the background image to edit (PNG/JPG/WebP). Typically the flexible creative's current background.
edit_instructionYesNatural-language description of the fix(es). Can combine several changes in one request.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly=false, destructive=false, openWorld=true): it discloses no side effects on source/library/ad/layered document, the output form (hosted URL), the resolution cap (longest edge ≤2000 px), character-preservation defaults, and a real hazard warning that baked-in text may be repainted or become unreadable.

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-loads the action and the output form, then moves to constraints and warnings. It's efficiently written, though the sentence about the returned URL being downloadable/independent and the follow-on sentence about the first-party editor reusing it as a replacement background partially overlap.

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?

No output schema exists, and the description carries that burden by specifying the return value (a hosted URL to a new standalone image the caller can download). Combined with the size cap, no-side-effect guarantees, and the text-baking warning, an agent has everything needed to call it and interpret the result.

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 all four parameters are already documented, so the baseline is 3. The description adds only the notion of 'registered brand characters' being kept unless characters is passed, which slightly enriches the characters parameter but largely restates the schema's own 'Omit to keep the ones the image shows' wording.

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

Purpose4/5

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

States a specific verb+resource: 'Create an AI-edited copy of a supplied background or flat creative image', and scopes the output ('hosted URL for a new standalone image'). It implicitly separates itself from sibling edit paths by saying it 'does not update the source, a library item, an ad, or the layered document', but never names the sibling to use instead (e.g. edit_brand_creative).

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 a clear context of use: when you want an independent edited copy at roughly the source's size, with the returned URL usable as a replacement background in the first-party editor. The exclusions ('does not update the source, a library item, an ad, or the layered document') tell an agent when not to expect side effects, but no explicit alternative tool is named for those cases.

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

generate_brand_creativeGenerate Brand CreativeAInspect

Generate a branded advertising image using AI and a company brand kit. The headline and optional CTA are baked into the pixels. Returns a hosted URL for a finished PNG that the caller can download or use independently. This tool does not automatically attach the image to an ad or launch a campaign; a separate upload_image_creative and ad-creation call can consume it. Missing brand data is generated by the tool. Text rendering may differ from the requested copy.

NameRequiredDescriptionDefault
domainYesCompany domain to extract brand DNA from. Examples: 'docebo.com', 'metadata.io', 'bloomreach.com'. Do not include protocol (http/https).
headlineYesPrimary headline text to display in the creative. Keep to 25 characters or fewer for optimal rendering (hard cap 40 — the image model truncates or garbles longer text). Used to select aligned reference ads and guide visual hierarchy. Examples: 'Boost ROI by 30%', 'AI-Powered Marketing', 'Drive More Pipeline'
logo_urlNoOptional direct URL to a logo image (e.g. the URL of a logo the user just uploaded in chat). When set, THIS logo is overlaid for this creative instead of the brand kit's logo or the one from Brandfetch. Use it when the user says things like 'use this logo' or 'use the logo I uploaded'. The uploaded logo is automatically expanded in-memory into clean variants (transparent, high-res, and both a light and dark version when the mark is a single color) for this creative only — nothing is persisted — so the placement model can pick the best fit for the background. To change a brand's logo permanently for all future creatives, call update_brand_kit with logo_url instead of passing it here.
platformNoTarget platform for the creative. Each platform has specific dimensions, text limits, and best practices that will be automatically applied. 'instagram_story' is the vertical 9:16 canvas (Stories, Reels), the one to ask for when the still will be animated into a vertical video. Default: 'linkedin'linkedin
include_ctaNoWhether to render a call-to-action (button or styled text link) in the creative. Set to false for surfaces that must not contain a CTA, e.g. stills that seed video ads, where the channel's ad unit provides the real CTA. Default: true
include_logoNoWhether to include a logo overlay on the generated creative. Set to false to get the raw creative without any logo. Default: true
instructionsYesNatural language instructions describing the desired creative. Will be enhanced with brand DNA patterns including proven layouts, CTAs, colors, and tones. Examples: 'Create a professional B2B ad with clean design', 'Generate announcement for new AI feature launch', 'Design case study visual with modern aesthetic'
logo_positionNoForce a specific logo position instead of using AI-recommended placement. If not provided, an AI model analyzes the creative to find the optimal position.
logo_size_percentNoLogo width as a percentage of the image width (e.g., 15 means the logo occupies 15% of the image width). If not provided, the AI recommends an optimal size. Typical range: 10-30.
use_website_backgroundNoUse the brand website's background color as the creative's dominant background; brand primary colors then appear as accents (CTA button, shapes, highlights). Default: true. Set false when the user wants a brand-colored or model-chosen background instead. Silently ignored when the brand kit has no resolvable website background color.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare a non-read-only, open-world, non-destructive write, and the description adds meaningful behavior beyond that: a hosted URL return, auto-generation of missing brand data, and a caveat that rendered text may differ from the requested copy. That last caveat is exactly the kind of failure-mode disclosure annotations cannot carry; only the cost/credit dimension is unmentioned.

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?

Five short sentences, front-loaded with the capability, then return type, then the boundary condition, then two caveats. Every sentence adds a distinct fact an agent would otherwise mis-infer (e.g. that it does not launch an ad).

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?

No output schema exists, so the description correctly supplies the return shape (hosted PNG URL), downstream consumption path, and quality caveats. With ten parameters and heavy schema coverage the remaining gap is only differentiation from the flexible-brand-creative sibling and any credit cost implications.

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

Parameters3/5

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

Schema coverage is 100%, so all ten parameters are already documented in detail (including the 40-char headline cap and the logo_url persistence caveat). The description adds only the framing that headline and CTA are rasterized into pixels, which is a modest but real complement to the schema, keeping this at baseline.

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

Purpose4/5

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

States a specific verb and resource: generates a branded advertising image using AI and a company brand kit, and names the concrete artifact (a hosted PNG). It distinguishes itself from downstream steps (upload_image_creative, ad creation) but never contrasts itself with close siblings like generate_flexible_brand_creative or generate_brand_kit.

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 what this tool does NOT do (no auto-attach to an ad, no campaign launch) and what consumes its output, which is real routing guidance. It stops short of stating when to pick this over generate_flexible_brand_creative or edit_brand_creative given the crowded creative-generation sibling set.

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

generate_brand_kitGenerate Brand KitBInspect

Analyze a company's brand from their website and extract brand identity. Fetch brand assets (logo, colors, fonts) and create a brand DNA document for consistent advertising.

NameRequiredDescriptionDefault
domainYesCompany website URL or domain
brand_nameNoOptional brand name override
sample_ad_urlsNoOptional ad image URLs to analyze (max 5)
force_regenerateNoIf True, regenerate brand kit even if one already exists. Default: False

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, destructiveHint=false, so the mutation and external-fetch profile is covered. The description adds that it scrapes/analyzes a live website and produces a persisted document, but says nothing about credit consumption (notable given get_credit_balance siblings), runtime, or whether an existing kit is overwritten by default.

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, front-loaded with the primary action and followed by the concrete outputs. No filler or repetition of the title, though the second sentence would be stronger if it named the retrieval sibling instead of restating assets.

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 mutating, open-world tool with no output schema, the description does specify the return concept (a brand DNA document containing logo, colors, fonts). Gaps remain around idempotency, cost, and processing time, but the core contract is conveyable from this text plus the schema.

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%, including the max-5 constraint on sample_ad_urls and the default/behavior of force_regenerate, so the schema carries the parameter burden. The description adds no meaning beyond it (e.g., how sample ad URLs influence extraction), which meets but does not exceed the baseline.

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

Purpose4/5

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

Clear verb+resource chain: analyze a brand from a website, extract identity, fetch assets (logo, colors, fonts), and produce a brand DNA document. It is distinguishable from the creative-generation siblings (generate_brand_creative) but never names get_brand_kit or update_brand_kit, so the create-vs-read boundary is left implicit.

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

Usage Guidelines2/5

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

No statement of when to call this versus get_brand_kit (retrieve existing) or update_brand_kit (amend). The existence of force_regenerate in the schema hints at the 'kit already exists' case, but the description itself offers no when/when-not guidance or prerequisites.

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

generate_flexible_brand_creativeGenerate Flexible Brand CreativeAInspect

Generate a layered creative document with an AI-generated background and editable text, CTA, and logo layers, at the ad channel's recommended size for the chosen platform and aspect_ratio (a shape the channel does not take is refused). Returns JSON containing canvas dimensions, positions, styling, and a hosted background image URL. The background URL is a standalone asset that the caller can download or use independently; it is also referenced by the returned document. Optional reference_images (at most 12) guide the background without painting their text or logos. The combined result is checked before return, and any warning is included in the document. No ad is automatically created or launched. Copy above the schema and canvas-specific limits is rejected with an error: headline 45 characters and 8 words on 1:1, 4:3, 4:5 and 9:16 canvases, 55 characters and 10 words on 16:9 and 1.91:1, or 35 characters and 6 words on the 6:5 banner; CTA wording that fits on one line of its button; subheadline 90 characters; label 24 characters.

NameRequiredDescriptionDefault
ctaNoOptional call-to-action button text (e.g. 'Learn more', 'Try Metadata in ChatGPT'): any number of words that fits on one line of the button at the format's CTA size, including padding. The format-specific character limit is computed from that size. A longer one is rejected with the limit named, so it can be shortened and resent.
bodyNoOptional supporting body copy. Pass ONLY when the user explicitly asked for body copy — extra layers crowd the layout.
labelNoOptional short tag set small above the headline, at most 24 characters: a product name or a category ('Metadata AI', 'Campaign Builder'). Longer is rejected with the limit named.
styleNoHow the user said the creative should look (style, medium, mood, colors, people, composition), copied word for word from them, never paraphrased. Every background draft follows it, and when no draft does, the call fails with an error saying so. Omit it when the user described no look.
domainYesCompany domain for brand DNA (e.g. 'metadata.io'). No protocol.
layoutNoHow the copy is set: column (a left- or right-aligned column at the side) or centered (a centered stack across the top or bottom). In a batch, give the creatives different layouts. The copy goes where the scene leaves calm space for that layout, else where it is calmest. Omit it to let the calmest space decide.
headlineNoHeadline copy to place as an editable layer. Image copy, not ad text: at most 45 characters and 8 words on a 1:1, 4:3, 4:5 or 9:16 canvas, 55 characters and 10 words on 16:9 or 1.91:1, 35 characters and 6 words on the 6:5 banner. Longer copy is rejected with the limit named, so it can be shortened and resent.
platformNoThe ad channel the creative is for: it sets the canvas sizes and the default shape. 'display' is Google Ads and Microsoft Advertising image assets; 'general' an image for no single channel, or one image shared by several. Default: 'linkedin'.linkedin
charactersNoNames of brand characters (registered with register_brand_character) the creative must show, as the user named them. Their sheets guide every draft and a draft that loses one is not returned. An unknown name is refused with the closest registered one: confirm it with the user, never pick one for them. Omit when the user named no character.
disclaimerNoOptional fine-print/disclaimer copy. Pass ONLY when the user explicitly asked for a disclaimer.
subheadlineNoOptional subheadline copy, at most 90 characters; pass it only when it adds a fact the headline lacks.
aspect_ratioNoCanvas shape, one of the shapes 'platform' takes; the creative comes out at that channel's own size for it. Each platform's shapes and sizes: linkedin (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 720x900; facebook (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1.91:1 at 1200x628; instagram (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1.91:1 at 1200x628; reddit (default 4:3): 4:3 at 1440x1080, 1:1 at 1080x1080, 4:5 at 1080x1350, 16:9 at 1920x1080; display (default 1.91:1): 1.91:1 at 1200x628, 1:1 at 1200x1200, 4:5 at 960x1200, 9:16 at 1080x1920; general (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 1440x1800, 9:16 at 1080x1920, 16:9 at 1920x1080, 4:3 at 1440x1080, 6:5 at 300x250. A shape the platform does not list is refused before anything is generated. Pass this whenever the user names a size or shape: '1:1' square, '1.91:1' landscape (LinkedIn, Meta, Google and Microsoft), '16:9' wide, '4:3' Reddit's landscape, '4:5' portrait, '9:16' full-height story, '6:5' the 300x250 banner of LinkedIn Message and Conversation ads ('general' only). Omit to take the platform's default shape.
include_logoNoAdd a brand logo layer (resolved from the brand kit). Default: true.
instructionsYesNatural-language direction for the background scene and overall creative (e.g. 'clean B2B scene for an AI analytics launch').
background_toneNoBase tone of the background scene, drawn from the brand palette. In a batch, give each creative a different tone so no two share one. Omit it to anchor the scene on the brand's website background.
headline_accentNoOptional key phrase of the headline, copied word for word from it, shown in the brand accent color (e.g. 'final say' in 'You keep the final say'). It must be part of the headline, not all of it. When the accent color would not read on the background the phrase is shown in the headline color.
reference_imagesNoURLs of the images (PNG, JPG, WebP, GIF, BMP or TIFF) the user gave as references for this creative, at most 12: images they attached and asked a new creative to follow. A creative with brand characters takes fewer, and the call says how many. The background follows their style, medium, mood and composition in place of the brand's own reference ads, and their subject when the instructions ask for it; their text and logos are never painted. An animated GIF or WebP is read from frames across its animation. A URL that cannot be read fails the call, naming it, before anything is generated. Omit when the user gave no reference image.

TDQS

A3.8/5.0
Behavior5/5

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

Annotations establish only that this is a non-readonly, non-destructive, open-world operation. The description adds real behavioral detail beyond that: the exact return payload (dimensions, positions, styling, hosted background URL), the fact that the background URL is a standalone downloadable asset, that pre-return validation warnings are embedded in the document, and that text above per-canvas limits is refused with the limit named.

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

Conciseness3/5

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

The purpose and return shape are front-loaded, which is good. However, the rest of the description is a dense run-on of long clauses, and the final copy-limit sentence is a compression of data already in the schema, so that content does not earn its place as repeated description text.

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 17 parameters and no output schema, the description carries the burden of explaining results, and it does: it documents the returned JSON, the standalone background URL, the validation warnings, and the refusal behavior. It omits prerequisites that would matter for a brand tool, such as needing a brand kit or domain resolution or credit costs, but overall it is nearly 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 all 17 parameters thoroughly; that sets the baseline at 3. The description mostly restates constraints already present in the schema, such as the headline limits of 45/55/35 characters, the 12-image cap, and the aspect-ratio refusal. It rarely adds meaning beyond what the parameter descriptions already say.

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

Purpose4/5

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

The description states a specific verb and resource: it generates a layered creative document with an AI background plus editable text, CTA, and logo layers at the channel's canvas size, and it returns JSON. It is detailed about the output, but it never distinguishes itself from the sibling tools generate_brand_creative, edit_brand_creative, or fix_flexible_creative, which look like close alternatives.

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

Usage Guidelines3/5

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

It does state some when-not guidance: 'No ad is automatically created or launched' and 'a shape the channel does not take is refused.' It also takes usage cues from its parameter descriptions ('Pass ONLY when the user explicitly asked'). However, it never says when an agent should pick this tool over the similarly named sibling generators or editors, so the agent must infer that choice.

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

get_abm_account_listsGet ABM Account ListsB
Read-only
Inspect

Get account lists from the Metadata ABM Lists library. Retrieves uploaded CSV account lists, website retargeting lists, and their metadata.

NameRequiredDescriptionDefault
pageNoPage number for pagination (0-based)
sizeNoNumber of results per page
sortNoSort criteria (e.g., 'createdDate,desc', 'name,asc', 'accountsCount,desc')createdDate,desc
typeNoFilter by list type (e.g., CSV, WEBSITE_RETARGETING)
statusNoFilter by status (e.g., READY, PROCESSING, ERROR)
filenameNoFilter by account list filename (supports partial matching)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered without description help. The description adds that returned lists are uploaded CSVs and website retargeting lists with metadata, but says nothing about pagination totals, ordering defaults, or how incomplete/processing lists appear.

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 short sentences with the resource front-loaded; nothing is wasted. The second sentence largely restates the first's enumeration, which is minor redundancy rather than bloat.

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 listing tool with full parameter documentation and explicit safety annotations, the description covers enough to call it correctly. The one remaining gap is the shape of returned list metadata, which is only gestured at and has no output schema to compensate.

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

Parameters3/5

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

Schema description coverage is 100%, with page, size, sort, type, status, and filename all documented inline including examples. The description adds nothing about the filters, so the schema does the entire job and baseline 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?

States a specific verb and resource (get account lists from the Metadata ABM Lists library) and enumerates the two list varieties it returns, which tells an agent exactly what content is covered. It never distinguishes itself from nearby siblings such as list_marketing_automation_lists, search_ma_lists, or get_retargeting_audiences, so the agent must infer the boundary.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance beyond the implicit listing intent. The sibling set contains several other list-fetching tools, and nothing in the description says which one to pick for ABM lists versus MA lists or retargeting audiences.

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

get_account_detailsGet Account DetailsC
Read-only
Inspect

Current user and account information.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no context about what data is actually returned (user identity, account settings, permissions, billing?) nor any constraints, so it contributes nothing beyond the structured metadata.

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

Conciseness3/5

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

One short, front-loaded sentence with no filler, but its brevity comes from under-specification rather than efficiency. It is appropriately sized only because it says almost nothing.

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?

With no output schema and no parameters, the description carries the full burden of explaining what comes back, and "current user and account information" is too vague to let an agent know whether it gets identity, org settings, or billing data. It is not complete enough to call the tool confidently.

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 takes zero parameters, so the baseline is 4; the empty schema leaves nothing to misinterpret. There is no parameter information the description could usefully add.

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

Purpose2/5

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

"Current user and account information" essentially restates the tool name and title rather than specifying what the tool actually returns. It does not distinguish this from siblings that also expose account-level data such as account_level_stats, get_account_summary_insights, or list_user_accounts.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus the many account-level siblings (get_account_summary_insights, get_account_opportunities_insights, list_user_accounts). An agent must guess from the name alone.

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

get_account_opportunities_insightsGet Account Opportunities InsightsB
Read-only
Inspect

Get opportunities for domain(s) with status filtering and pagination.

NameRequiredDescriptionDefault
pageNo0-based page number.
sizeNoResults per page from 1 to 100; default 25. Use successive zero-based page values and response pagination metadata for more results.
sortNoSort field. Default: lastTouchDatelastTouchDate
statusNoFilter by status. Omit for all.
domainsYesDomain strings. E.g., ['metadata.io']
endDateNoISO 8601 format.
startDateNoISO 8601 format. E.g., '2025-01-01T00:00:00.000Z'

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only that results are paginated and status-filterable, without saying what an "opportunity" record contains or how date-range filtering interacts with the rest.

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?

A single front-loaded sentence with no filler. Its brevity is efficient rather than padded, though the terseness borders on under-specification for a 7-parameter tool.

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

Completeness3/5

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

Seven parameters, no output schema, and a mutation-free read — the schema and annotations carry most of the load, so the description is minimally sufficient. Still missing: what an opportunity record includes, whether date range is required to be bounded, and how this differs from the other account-insight tools.

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

Parameters3/5

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

Schema coverage is 100%, so page, size, sort, status, domains, startDate and endDate are all documented in the schema itself. The description merely echoes status filtering and pagination, adding no semantics beyond it — baseline 3 is appropriate.

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

Purpose4/5

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

Specific verb + resource ("Get opportunities") scoped to domains, with the two main dimensions of variation (status filter, pagination) named. It is distinguishable from nearby siblings like get_account_details or get_account_summary_insights, though the title's word "insights" is never reconciled with the plain "opportunities" phrasing.

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 statement of when to reach for this versus get_account_summary_insights, account_funnel_reports, get_account_details, or account_level_stats. An agent faced with several account-oriented siblings gets no routing signal beyond the words in the name.

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

get_account_summary_insightsGet Account Summary InsightsC
Read-only
Inspect

Get comprehensive account details for specific domain(s).

NameRequiredDescriptionDefault
domainsYesDomain strings. E.g., ['metadata.io']

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: it doesn't say what an 'insight' consists of, whether results are per-domain rows, or how large the response is. With the reduced burden from annotations, this is thin but not contradictory.

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

Conciseness4/5

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

One short, front-loaded sentence with no filler. It is concise, but the brevity comes at the cost of the differentiation the sibling set demands.

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?

There is no output schema, so the description must explain what 'comprehensive account details' / 'insights' actually contains, and it does not. Given a crowded family of account-level tools, the definition leaves an agent unable to judge the return content or the correct selection.

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 parameter carries an inline example ('metadata.io'), so the schema does the heavy lifting. The description's 'for specific domain(s)' adds only marginal confirmation that multiple domains are accepted.

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

Purpose3/5

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

The description states a verb and resource ('Get comprehensive account details') scoped to domains, but the tool is named 'insights' and nothing explains what insight content it returns versus plain account details. With siblings like get_account_details and get_account_opportunities_insights in the same family, the agent cannot tell which one to pick from this text alone.

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 instead of get_account_details, get_account_opportunities_insights, or account_level_stats, and no prerequisites or exclusions are mentioned. The single sentence merely restates the input.

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

get_account_utm_defaultsGet Account UTM DefaultsA
Read-only
Inspect

Read the account’s resolved UTM defaults by channel. Returns values and their origin, including platform defaults when no account-specific value exists. Empty stored mappings do not imply that tracking is disabled. Does not modify defaults.

TRACKING TIMING AND TOKEN MEANING: Leads using server-resolved campaign UTMs use the current saved mapping when the platform processes them, without waiting for an ad republish. Captured URL or caller-supplied values can follow a different ingestion path, so do not generalize this timing to every new lead. Native click-time macros retain values captured from the lead's click URL. Ad click URLs have a separate publication timeline: a draft uses the saved mapping at launch, and launched ads use it on their next campaign publish. Saving a launched Microsoft Ads campaign triggers a live UTM push. AD_NAME is a dynamic token, not necessarily an individual ad name: standard experiments use their ad group name when present, otherwise their creative name; native ad structures use the native ad's own name. CAMPAIGN_NAME uses the wizard campaign name. Saving a launched campaign can also queue an asynchronous existing-lead UTM refresh. Do not assume historical rows are immutable or that all old rows have already refreshed. Verify the saved mapping with get_campaign_utms and actual lead values and ingestion timing separately from live ad click URLs; a supplied or backfilled lead creation date alone does not prove when its UTMs were resolved.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/non-destructive, and the description adds non-obvious semantics beyond them: empty stored mappings do not mean tracking is disabled, values come back with their origin and may be platform fallbacks, and saving a launched campaign can trigger async pushes/refreshes. Much of the timing/token material is pipeline context rather than this tool's own behavior, which keeps it from a 5.

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

Conciseness2/5

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

The opening paragraph is well front-loaded, but the following ~150 words on lead ingestion timing, ad click URL publication, AD_NAME/CAMPAIGN_NAME token resolution, and asynchronous refreshes are largely tangential to a zero-parameter read of account defaults and duplicate context that belongs to set_campaign_utms/get_campaign_utms. For this tool, most of those sentences do not earn their 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?

With no parameters and no output schema, the description carries the burden of explaining returns and does so: resolved values, their origin, platform-default fallback, and the meaning of empty mappings. An agent has enough to call it and interpret the result.

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 takes zero parameters, so the baseline is 4; there is nothing parameter-related the description needs to compensate for, and it correctly describes the returned shape (values plus origin) instead.

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 ('Read the account's resolved UTM defaults by channel') and clarifies the scope of resolution, including platform defaults when no account-specific value exists. That distinguishes it clearly from get_campaign_utms (campaign-level saved mapping) and set_campaign_utms (mutation) among the siblings.

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 real usage context: it is read-only ('Does not modify defaults') and points the agent to get_campaign_utms to verify saved mappings, with the caveat that live ad click URLs and lead ingestion timing must be verified separately. It never states an explicit when-not condition, 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.

get_ad_detailsGet Ad DetailsA
Read-only
Inspect

Read an advertising-library ad by ID. Returns its configuration, content, creative references, channel, and status as available from the platform, or an error when the ad is inaccessible. This is an ad definition, not an experiment performance report.

NameRequiredDescriptionDefault
idsYesAd ID(s) to get details for. Can be: single integer (182124) or comma-separated string ('182124,182123').

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the extra value here is the disclosure of return contents and the failure mode ('an error when the ad is inaccessible'). It doesn't mention rate limits, partial results, or behavior with multiple comma-separated IDs, keeping it below 5.

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, front-loaded with the verb and resource, then returns, then the disambiguating scope note. 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.

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 with no output schema, the description does the necessary work by naming the returned fields and the error case. Minor gaps remain around multi-ID batch behavior and whether missing fields are omitted or null, but nothing critical to invoking it is absent.

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 spells out both accepted forms (single integer or comma-separated string with an example). The description only says 'by ID' and adds no syntax, batch-size, or ordering guidance beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Read an advertising-library ad by ID') and enumerates what comes back (configuration, content, creative references, channel, status). It also fences itself off from analytics tools by noting it is an 'ad definition, not an experiment performance report,' though it doesn't name the nearest siblings like search_ads_by_names or fetch_creative_details.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the agent can infer this is the ID-based lookup path and not a performance report. There is no explicit 'use this when you have IDs, use search_ads_by_names when you only have names' routing, and no stated prerequisites or exclusions.

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

get_audience_detailsGet Audience DetailsA
Read-only
Inspect

Custom audience information from Metadata platform: configurations, targeting criteria, size metrics, performance. A NAME IS REQUIRED: this is the by-name lookup, not the account-wide browse.

NameRequiredDescriptionDefault
nameYesFilter by audience name (supports partial matching)
pageNoPage number for pagination (0-based)
sizeNoNumber of results per page
sortNoSort as '<field>,<asc|desc>' over the audience record's own fields: creationDate (default), updateDate, name, status, type, expectedNumberOfContacts, expectedNumberOfCompanies, id. For the largest audiences sort by 'expectedNumberOfContacts,desc' (people) or 'expectedNumberOfCompanies,desc' (accounts). There is no audienceSize field: the platform rejects any other field name.creationDate,desc

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds the substantive context the annotations lack: that this is a name-scoped lookup returning configurations, targeting, size and performance data. No pagination or result-shape detail beyond the schema, which keeps it from a 5.

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 waste; the payload summary leads and the scoping constraint follows immediately. The all-caps 'A NAME IS REQUIRED' is slightly heavy-handed but functionally front-loads the key constraint.

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, so the description does the work of telling the agent what comes back (configurations, targeting criteria, size metrics, performance), which is sufficient for a read lookup. Given the rich schema, nothing critical is missing 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%, including a very rich sort field spec, so the schema carries the parameter burden and baseline 3 applies. The description reinforces that name is required and is the lookup key, but adds little that the schema's 'Filter by audience name (supports partial matching)' and required list do not already say.

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?

Specific verb+resource ('Custom audience information') with an enumeration of what is returned (configurations, targeting criteria, size metrics, performance). It also scopes the tool as the by-name lookup rather than an account-wide browse, which separates it from list_audiences without naming that sibling outright.

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 the name is required and frames the tool as the by-name lookup as opposed to the account-wide browse, giving a clear selection rule. It stops short of naming alternatives like list_audiences or get_deep_audience_details, so the routing guidance is implied rather than fully enumerated.

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

get_brand_kitGet Brand KitA
Read-only
Inspect

Retrieve current brand kit configuration for a company, including its registered brand characters (characters[], each with a reference-sheet URL valid for one hour).

NameRequiredDescriptionDefault
domainYesCompany website URL or domain. Examples: 'metadata.io', 'www.bloomreach.com', 'https://example.com'

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely new behavior: the returned reference-sheet URLs expire after one hour, which tells an agent to consume or re-fetch promptly rather than cache — exactly the kind of context annotations cannot carry.

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?

One sentence, front-loaded with what is returned, no filler or restatement of the title. The parenthetical carries only load-bearing detail (array name and URL expiry).

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

Completeness4/5

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

With no output schema, the description must sketch the return value, and it does: configuration plus a characters[] array with per-character reference-sheet URLs and their TTL. Remaining config fields are left to 'including', which is acceptable since the purpose is to inspect rather than enumerate every field.

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 single 'domain' parameter already has format guidance and three examples. The description says nothing about the parameter, per the baseline for fully covered schemas.

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?

Specific verb ('Retrieve') plus resource ('current brand kit configuration for a company') and it names the embedded collection (characters[]). It implicitly separates itself from update_brand_kit and generate_brand_kit via 'current', but never names those siblings, so an agent must infer the distinction.

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

Usage Guidelines2/5

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

No statement of when to call this versus update_brand_kit, generate_brand_kit, or register_brand_character, and no prerequisites or exclusions. The only signal is the word 'current', which implies a read of existing state but is never spelled out.

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

get_budget_groupGet Budget GroupA
Read-only
Inspect

Get configuration and settings for a budget group (NOT performance data). Matches the full stored name across search pages, ignoring letter case and outer whitespace, whether switched on or off, and refuses ambiguous names. Also returns the account's auto pause rule sets (accountAutoPauseRuleSets). A MONTHLY_RESET or CUSTOM_RESET group runs until switched off; currentPeriodStart and currentPeriodEnd bound only the current period, not the group's end.

NameRequiredDescriptionDefault
nameYesThe full stored name of the budget group, ignoring letter case and outer whitespace. Example: 'Brand'

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already establish read-only, non-destructive, closed-world behavior, yet the description still adds substantial value: cross-page name matching semantics, ambiguity refusal (an error mode), inclusion of disabled groups, the extra accountAutoPauseRuleSets payload, and the crucial distinction that currentPeriodStart/End bound only the period and not the group's lifetime. This is behavior beyond what structured fields 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?

Four sentences, front-loaded with the top-level purpose and the performance-data exclusion before mechanics. Every sentence carries information, though the reset-semantics sentence is dense and could be marginally 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?

With no output schema, the description does the work of noting that accountAutoPauseRuleSets is returned and framing currentPeriodStart/currentPeriodEnd, which is enough for an agent to interpret the result shape. It stops short of enumerating the full configuration payload, leaving some gaps about 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?

Schema coverage is 100% and already documents the name parameter's case/whitespace handling, so the baseline is 3. The description adds meaningful semantics beyond the schema: matching spans search pages and ambiguous names are refused, telling the agent the lookup can fail on duplicates.

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 ('Get configuration and settings for a budget group') and immediately distinguishes itself from performance tooling with '(NOT performance data)', which cleanly separates it from siblings like budget_group_performance and budget_group_performance stats. An agent can select it 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 Guidelines4/5

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

Explicitly scopes usage by ruling out performance data and by describing matching behavior (full stored name, case/whitespace-insensitive, includes disabled groups, rejects ambiguous names). It does not name the alternative tool to use for performance data, so the routing hint is implicit rather than explicit.

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

get_campaign_by_wizard_idGet Campaign by Wizard IDA
Read-only
Inspect

Get full campaign details by its wizard campaign ID, including channels, audiences, ads, and budget configuration.

NameRequiredDescriptionDefault
campaign_idYesThe wizard campaign ID to retrieve details for

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by disclosing what the read returns — channels, audiences, ads, and budget configuration — which tells the agent this is the full-detail endpoint rather than a summary view. It stops short of noting whether missing IDs error or return empty.

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-formed sentence that front-loads the action and identifier, then lists the payload contents. Nothing is redundant or misplaced.

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 one-parameter read-only getter with full annotation coverage and no output schema, the description is nearly sufficient — it pre-summarizes the returned fields, which compensates for the missing output schema. The only gap is the lack of guidance on error behavior for an invalid or unknown campaign ID.

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?

There is exactly one parameter and schema coverage is 100%, with the schema describing it as 'The wizard campaign ID to retrieve details for'. The description restates this without adding format, range, or source-of-ID guidance, so baseline 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?

States a specific verb ('Get') and resource ('campaign details') plus the qualifier 'by its wizard campaign ID', which separates it from the many campaign-related siblings. It does not explicitly name list_wizard_campaigns or search_campaigns_by_names as the enumeration/search counterparts, so sibling differentiation is implied rather than stated.

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

Usage Guidelines3/5

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

The 'by wizard campaign ID' framing implies this is for fetching a known campaign rather than discovering one, which is meaningful given siblings like list_wizard_campaigns and search_campaigns_by_names. However, the description never states when to prefer this over those alternatives, and no prerequisites or failure conditions are mentioned.

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

get_campaign_targeting_locationsGet Campaign Targeting LocationsA
Read-only
Inspect

Read the configured geographic targeting of a campaign. Returns its targeting locations and channel details, and for native targeting the attached audienceIds, targetGroupIds and resolvedFrom. These are the locations the campaign is configured to target. An empty countries list is not evidence that no audience is attached, and targeting.resolved false means the geographic scope could not be fully read. demographic_country_stats reports where delivery occurred, which can differ from targeting.

NameRequiredDescriptionDefault
campaign_idsNoWizard campaign ids to read. Omit to scan the account.
country_namesNoFilter to campaigns targeting these countries, e.g. ["Germany", "Austria"].
max_campaignsNoCap on campaigns read when scanning (default 25, max 100).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish this is a safe read (readOnlyHint true, destructiveHint false, openWorldHint false), so the bar is lower; the description still adds real behavioral context: an empty countries list is not evidence no audience is attached, and targeting.resolved false means the geographic scope could not be fully read. It does not mention auth needs, rate limits, 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.

Conciseness4/5

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

The purpose and the return contents are front-loaded, followed by the important caveats. "These are the locations the campaign is configured to target" is slightly redundant with the opening sentence, but the rest of the text is dense and each caveat 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?

With no output schema, the description carries the burden of explaining return values, and it does name the main fields and their meaning. For a simple read tool with full annotation and schema coverage, the main remaining gap is the shape/format of channel details and how multiple campaigns are keyed in the response.

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 three parameters (including the omit-to-scan-account behavior of campaign_ids and the 25/100 bounds on max_campaigns) are already documented in the schema. The description adds no additional parameter semantics beyond that, so 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 ("Read") and resource ("configured geographic targeting of a campaign") and enumerates what is returned: targeting locations, channel details, and for native targeting audienceIds, targetGroupIds and resolvedFrom. It explicitly distinguishes itself from demographic_country_stats, which reports delivery rather than configuration.

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 for use (reading a campaign's configured geo targeting) and names the alternative for a different question (demographic_country_stats for where delivery occurred, which "can differ from targeting"). It stops short of saying when not to use it or routing to siblings like set_search_channel_locations or get_campaign_by_wizard_id.

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

get_campaign_utmsGet Campaign UTMsA
Read-only
Inspect

Read one wizard campaign’s resolved UTM parameters by channel. Returns stored and resolved values, origin, and comparison with account defaults. An empty stored mapping inherits the account defaults, or platform defaults when the account has none. A stored mapping identical to its inherited default cannot be distinguished from inheritance. Dynamic tokens are resolved for lead records and ad URLs, not stored as literal text. Does not modify UTMs.

TRACKING TIMING AND TOKEN MEANING: Leads using server-resolved campaign UTMs use the current saved mapping when the platform processes them, without waiting for an ad republish. Captured URL or caller-supplied values can follow a different ingestion path, so do not generalize this timing to every new lead. Native click-time macros retain values captured from the lead's click URL. Ad click URLs have a separate publication timeline: a draft uses the saved mapping at launch, and launched ads use it on their next campaign publish. Saving a launched Microsoft Ads campaign triggers a live UTM push. AD_NAME is a dynamic token, not necessarily an individual ad name: standard experiments use their ad group name when present, otherwise their creative name; native ad structures use the native ad's own name. CAMPAIGN_NAME uses the wizard campaign name. Saving a launched campaign can also queue an asynchronous existing-lead UTM refresh. Do not assume historical rows are immutable or that all old rows have already refreshed. Verify the saved mapping with get_campaign_utms and actual lead values and ingestion timing separately from live ad click URLs; a supplied or backfilled lead creation date alone does not prove when its UTMs were resolved.

NameRequiredDescriptionDefault
campaign_idYesWizard campaign id (the `id` from list_wizard_campaigns).

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly and non-destructive annotations, the description discloses substantial behavior: inheritance from account or platform defaults, inability to distinguish inherited from identical stored mappings, dynamic token resolution, and separate lead versus ad publication timing. It also notes asynchronous existing-lead UTM refreshes and warns that historical rows may not be immutable.

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 with purpose and return behavior, then organized under a clear timing and token-meaning section. It is lengthy for a one-parameter read tool, but the density is largely justified by the attribution nuances it must convey.

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?

Although there is no output schema, the description explains the return shape, inheritance semantics, token resolution, and timing caveats in enough depth for an agent to interpret results correctly. It is complete for this tool's complexity and annotation profile.

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 campaign_id parameter is fully documented in the schema as the id from list_wizard_campaigns. The description adds no additional meaning about the parameter itself, so the baseline of 3 is appropriate.

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

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: reading one wizard campaign's resolved UTM parameters by channel. It also specifies what is returned (stored and resolved values, origin, comparison with account defaults), making the tool easy to distinguish from set_campaign_utms and search_campaigns_by_utm_value.

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 clear context for use, notably verifying the saved mapping against actual lead values and ingestion timing. It also sets exclusions around what cannot be proven from this tool alone, though it does not explicitly name sibling alternatives like set_campaign_utms or get_account_utm_defaults.

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

get_converted_leads_summaryGet Converted Leads Summary (Smart Leads aggregates)A
Read-only
Inspect

Read aggregate counts and rates for the account's converted leads using optional date, campaign, channel, and audience filters. Returns totals, MQL rates, unique leads and domains, channel mix, enrichment and marketing-automation coverage, and triggered/influenced opportunity aggregates where available. No individual lead rows are returned. This summary can establish a baseline for lead analysis; get_converted_leads provides paginated rows where access permits.

NameRequiredDescriptionDefault
idsNoRestrict the summary to specific lead IDs.
emailNoFilter by lead email (partial match).
adNameNoFilter by the ad (library) name that captured the leads (partial match).
syncMANotrue = only leads synced to marketing automation; false = only unsynced.
tagIdsNoFilter by tag IDs on the leads' experiments.
endDateNoLeads created on/before this date. ISO 8601; date-only is accepted.
keywordNoFilter by the exact search keyword that captured the leads.
channelsNoFilter by acquisition channel(s).
jobTitleNoFilter by lead job title (partial match).
lastNameNoFilter by lead last name (partial match).
statusesNoLead statuses to include. The platform Leads tab defaults to ACTIVE. Omit to include all.
companiesNoFilter by exact company names.
countriesNoFilter by exact lead country names.
firstNameNoFilter by lead first name (partial match).
offerNameNoFilter by the offer name tied to the leads' experiments.
startDateNoLeads created on/after this date. ISO 8601; date-only is accepted.
matchTypesNoFilter by keyword match type (search channels).
modifiedByNoFilter by the platform user email who last modified the leads (partial match).
campaignNameNoFilter by campaign name (partial match).
contentTypesNoData-completeness filter: only leads that HAVE this content.
qualityTypesNoQuality-signal filter (opportunities, MQL date/score).
audienceTypesNoFilter by audience type of the leads' experiments (e.g. FIRMOGRAPHIC_INCLUDE, CONTACT_LIST, BUYER_INTENT, NATIVE_LINKEDIN).
isAutoUpdatedNotrue = only auto-enriched leads.
businessEmailsNoFilter by exact business email addresses (OR within the list).
experimentNameNoFilter by experiment name (partial match).
isFullyEnrichedNotrue = only fully enriched leads; false = only not fully enriched.
isManuallyUpdateNotrue = only manually enriched/edited leads (platform parameter name is 'isManuallyUpdate').
customAudienceNameNoFilter by targeted audience name (partial match).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds real context beyond that: enumerated return categories, the caveat that some opportunity aggregates exist only 'where available', and the no-row guarantee.

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?

Four sentences, front-loaded with the purpose before the return summary and the sibling comparison. The return-field enumeration is somewhat list-like but each clause maps to a distinct aggregate group, so little is wasted.

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 28 parameters, the description usefully enumerates the return contents (totals, MQL rates, channel mix, enrichment coverage) and flags conditional availability. It could say more about default filtering behavior, but covers what the structured fields do not.

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% across all 28 optional parameters, so the schema carries the burden. The description only broadly characterizes filter families (date, campaign, channel, audience) and adds little syntax or filtering-behavior detail 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?

States a specific verb (read aggregate counts and rates) and resource (the account's converted leads), and explicitly names what it is not: 'No individual lead rows are returned.' This cleanly separates it from row-returning siblings and the referenced get_converted_leads.

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?

Names the alternative ('get_converted_leads provides paginated rows where access permits') and positions this tool as a baseline for lead analysis, giving a clear selection cue. No explicit 'when not to use' beyond that, keeping it 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.

get_credit_balanceGet AI Credit BalanceA
Read-only
Inspect

Read the current AI credit balance for the authenticated account. Returns account_id, balance_usd, updated_at, and is_exhausted, or an error. When the account's direct use is not charged, the response also carries direct_use_charged=false and is_exhausted stays false. A negative balance is possible. An unreadable balance is unknown, not zero. Credit payments settle asynchronously, so a completed card charge can precede a usable balance. This tool does not initiate a purchase.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnly/non-destructive annotations, the description discloses the exact return fields, that a negative balance is legal, that an unreadable balance means unknown rather than zero, and that payment settlement is asynchronous so a completed charge may not yet show a usable balance. These are precisely the non-obvious behaviors an agent could otherwise misread.

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 action and return shape are front-loaded, then caveats follow in short declarative sentences. It runs six sentences, and the direct_use_charged detail is somewhat niche, but each sentence carries distinct semantic weight rather than restating the name.

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, so the description carries the return-value burden itself and does so fully: it enumerates fields, the error case, and the alternate direct_use_charged shape. For a zero-parameter read tool, nothing an agent needs to interpret the response is missing.

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 takes zero parameters, so there is nothing for the description to explain and the schema is trivially complete. Baseline 4 applies; no parameter-level value can be added.

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 first sentence gives a specific verb and resource ('Read the current AI credit balance') scoped to the authenticated account, and the closing line ('does not initiate a purchase') draws a boundary against payment/purchase actions. It stops short of naming the closest read siblings (get_credit_transactions, get_payment_status), so an agent must infer the split between current balance and transaction history.

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 the read context and explicitly states a when-not ('This tool does not initiate a purchase'), which steers agents away from using it as a purchase trigger. It does not name alternatives like get_credit_transactions for historical detail, leaving that routing to inference.

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

get_credit_transactionsGet AI Credit TransactionsA
Read-only
Inspect

Read paginated AI credit movements for the authenticated account, newest first. Negative amountUsd values are charges; positive values are top-ups or adjustments. Returns account_id, transactions with source, description, referenceId, createdAt and markup, plus total_elements, total_pages, and page. This tool does not initiate a purchase.

NameRequiredDescriptionDefault
pageNoZero-based page number. Defaults to 0 (most recent).
sizeNoRows per page, 1-100. Defaults to 25.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds genuinely non-obvious behavior beyond that: newest-first ordering, the sign convention for amountUsd (negative=charge, positive=top-up/adjustment), and an explicit non-effect statement. The sign convention is the kind of domain semantics an agent cannot get from structured fields.

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, all front-loaded and dense: scope first, then the amount sign convention, then the return shape and the explicit non-behavior. No filler, and the field list earns its place because there is no output 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?

With no output schema, the description carries the burden of describing return values and does so concretely: account_id, transactions with source/description/referenceId/createdAt/markup, plus total_elements, total_pages and page. Combined with the amountUsd sign semantics and empty-required-params, an agent has enough to call and interpret the result. Minor gap: no mention of default page size behavior when handing off to a follow-up page request.

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 only two optional parameters, so the schema already documents page (zero-based, default 0) and size (1-100, default 25). The description reinforces ordering ('newest first') and that page 0 is the most recent, but adds no syntax or constraint detail beyond the schema. Baseline 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?

States a specific verb+resource with scope and ordering: 'Read paginated AI credit movements for the authenticated account, newest first.' An agent can distinguish this from mutation/purchase tools, and the closing line 'This tool does not initiate a purchase' further narrows it. It does not explicitly distinguish itself from the sibling get_credit_balance, which is the nearest alternative.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the tool reads movement history, and the negative statement about not initiating a purchase functions as a partial when-not hint. However, it never names get_credit_balance or get_payment_status as the alternative for a current-balance or billing question, leaving the agent to infer the routing.

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

get_current_dateGet Current DateA
Read-only
Inspect

Return the REAL current date and time (UTC).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description usefully adds that the value is UTC and authoritative ('REAL'). It does not state the result format or precision (ISO 8601, seconds vs. milliseconds), which would be the remaining behavioral detail.

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 short sentence with the key information (currency of the value, UTC) front-loaded 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?

With no parameters, no output schema, and annotations covering the safety profile, the definition is nearly complete. The one gap is that the return value's format is unspecified, which the description would need to state since no output schema exists.

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 takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 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 specifies the exact verb ('Return') and resource ('current date and time') with the timezone qualifier (UTC). No sibling tool overlaps with this capability, so an agent can unambiguously identify it.

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?

There is no explicit when-to-use or when-not-to-use statement; usage is only implied by the tool's nature. The word 'REAL' hints that it should be called rather than guessing or fabricating a date, but this is left to inference.

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

get_deep_audience_detailsGet Deep Audience DetailsC
Read-only
Inspect

Get detailed information about audiences including criteria and advanced configuration.

NameRequiredDescriptionDefault
audience_idsYesArray of audience IDs to retrieve detailed information for. Example: [42828, 42829, 42831]

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description contributes only the hint that the response includes criteria and advanced configuration — useful given there is no output schema, but it does not explain depth, cost, 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.

Conciseness4/5

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

One efficient sentence with the verb and content scope front-loaded and zero filler. It is well formed but so terse that the brevity edges into under-specification.

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 read tool with no output schema, the description is the only place an agent could learn what 'deep' detail actually contains, and it offers just two vague nouns. It also leaves unresolved overlap with the sibling get_audience_details, which the agent cannot resolve elsewhere.

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 single parameter already documents the array type, minimum of 1, minItems, and a concrete example. The description's plural 'audiences' is consistent with the array but adds no syntax or format detail beyond the schema. Baseline 3.

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

Purpose3/5

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

States a verb (Get) and resource (audience details) plus a vague content hint ('criteria and advanced configuration'), but never explains what makes this retrieval 'deep' versus the sibling get_audience_details or list_audiences. An agent cannot tell from the description which of these audience-reading tools to pick.

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 when-to-use guidance at all: no mention of when to pick this over get_audience_details, list_audiences, or get_retargeting_audiences, and no prerequisites or call-ordering notes. The agent must infer selection 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.

get_default_ma_listGet Default Marketing Automation ListA
Read-only
Inspect

Read the account’s default marketing-automation destination list and its current health. Returns the stored list ID, name, provider, and status as available. The default applies to newly created campaign channels; existing channels retain the value captured when they were created.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and closed-world, so the description's job is lighter. It still adds real behavioral context beyond them: fields come back 'as available' (partial data is possible), and 'the default applies to newly created campaign channels; existing channels retain the value captured when they were created' explains what the stored value actually means. It does not say what happens when no default is set.

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, zero filler. The core read action and its scope lead, and the scoping caveat about existing channels follows as supporting detail. Every clause carries 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 zero-parameter read with no output schema, the description is nearly sufficient: it names the return fields (list ID, name, provider, status) and hedges with 'as available'. The one gap is the empty-state behavior — whether an unset default returns null, an empty object, or an error — which matters for an agent deciding whether to call set_default_ma_list afterwards.

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 takes zero parameters and the schema coverage is 100%, so there is nothing for the description to disambiguate. Baseline of 4 applies; no parameter-level value could have been added.

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

Purpose4/5

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

States a specific verb and resource ('Read the account's default marketing-automation destination list') plus a secondary concern ('its current health'), which separates it from list_marketing_automation_lists and search_ma_lists by scope. It stops short of naming those siblings explicitly, so the differentiation is implied by the word 'default' rather than spelled out.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the read counterpart to set_default_ma_list and clear_default_ma_list, but the description never says so or gives a when-to-use condition. The second sentence is about semantics of the stored value, not about choosing this tool over alternatives.

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

get_insights_reportGet Insights ReportB
Read-only
Inspect

Query account journey insights with filtering, sorting, and pagination.

NameRequiredDescriptionDefault
pageNo0-based page number.
sortNoSort format: field,direction. Default: lastTouchDate,desclastTouchDate,desc
endDateNoISO 8601 format or null.
criteriaNoCriteria object: {"operator":"AND","match":[{field,operator,type,value}]}. Use get_segment_criteria for saved segments.
startDateNoISO 8601 format or null. E.g., '2025-01-01T00:00:00.000Z'
accountNameNoFilter by account/company name.

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety behavior is covered. The description adds only that results can be filtered, sorted, and paginated, which is largely reflected in the schema, and does not disclose return format, rate limits, or data freshness.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. It states the resource and the supported operations efficiently.

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

Completeness3/5

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

The tool has six optional parameters and no output schema, and the description is very brief. The schema covers parameter details well, but the description does not explain what 'account journey insights' include or how this report differs from adjacent insight tools, leaving some context gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are documented in the input schema. The description mentions filtering and sorting generically but adds no parameter-specific meaning, syntax, or defaults beyond what the schema already provides.

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: 'Query account journey insights', and adds the operations 'filtering, sorting, and pagination'. It is clear what the tool does, but it does not distinguish this report from sibling insight tools such as get_account_summary_insights or get_account_opportunities_insights.

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 states that filtering, sorting, and pagination are supported but gives no explicit guidance on when to use this tool versus the many other analytics and insight tools. There are no exclusions, prerequisites, or alternative recommendations.

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

get_integrations_statusGet Integrations StatusA
Read-only
Inspect

Read the authenticated account’s advertising-channel, CRM, and marketing-automation integration status. Returns the connected or disconnected state and available integration details. A LinkedIn connection can also report connectionPending (the ad account was not chosen yet, so it is not launch-ready even when connected is true) or reconnectRequired, each with an action_required message for the user. It does not authorize a new connection or disconnect an existing one.

NameRequiredDescriptionDefault
platformNameNoFilter by specific platform name (e.g., 'Facebook', 'LinkedIn', 'Salesforce', 'HubSpot')

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly=true, destructive=false, so the safety profile is covered; the description still adds real value by enumerating the returned states and the non-obvious LinkedIn edge cases (connectionPending, reconnectRequired, action_required messaging). It omits auth/permission requirements and whether the call is scoped to the current account only, which keeps it off a 5.

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?

Four tight sentences: purpose, return shape, edge cases, then scope exclusion. Front-loaded and free of restatement of the title.

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 carries the return-value burden and does so by naming the state values and the LinkedIn-specific statuses. It doesn't clarify whether results are account-wide or filterable per platform, which is a small but real gap for calling 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 coverage is 100% and the single optional platformName filter is fully described in the schema with examples. The description says nothing about the filter, so baseline 3 applies — the schema does all the work here.

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?

Opens with a specific verb+resource ('Read the authenticated account's ... integration status') and names the domains covered (advertising-channel, CRM, marketing-automation). The closing sentence explicitly scopes out connect/disconnect actions, distinguishing it from connect_channel and disconnect_channel among the siblings.

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 final sentence establishes the when-not boundary ('does not authorize a new connection or disconnect an existing one'), implicitly routing the agent to connect_channel/disconnect_channel. It also surfaces the launch-readiness context that makes this tool relevant before launch, though it never names those siblings explicitly.

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

get_intent_topicsGet Intent TopicsB
Read-only
Inspect

Get available intent topics for BOMBOORA audience creation.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds nothing beyond that — no indication of how many topics are returned, whether the list is cached/static, or what a topic record contains, which matters because the next step presumably needs topic identifiers.

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?

A single front-loaded sentence with no filler or redundancy. It is efficient, but its brevity is also the source of the gaps in usage and behavioral detail.

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

Completeness3/5

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

With no parameters, no output schema and annotations covering the safety profile, the definition is minimally viable. The missing piece is return-value shape: an agent doesn't know if topics come back as plain strings, IDs, or objects, which is precisely what it would need to feed a subsequent create_bombora_audience 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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies a parameterless global lookup rather than something scoped to an account or audience.

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?

Specific verb+resource ('Get available intent topics') with the downstream purpose (BOMBOORA audience creation) named. It is distinguishable from the many create_* audience siblings because it clearly retrieves reference data rather than mutating anything, though it doesn't explicitly contrast with lookup siblings like get_abm_account_lists or search_target_group_criteria.

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 BOMBOORA audience creation' implies the call is a prerequisite step when building a Bombora audience, which is useful context. However, it never states when to call it versus other lookups, whether it must precede create_bombora_audience, or any prerequisites.

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

get_linkedin_engagement_source_typesGet LinkedIn Engagement Source TypesB
Read-only
Inspect

List the LinkedIn engagement source types and their triggers.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already state that the tool is read-only, non-destructive, and closed-world, so the safety profile is covered. The description adds only that the result includes "their triggers", which is minor extra context and does not describe the shape or scope of the listing.

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 definition is one wasted-free sentence and places the object of the listing up front. It is arguably too terse: a short clause about how it differs from the search sibling would fit in the same sentence structure.

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 no-parameter lookup tool, the description covers nearly everything an agent needs. The main remaining gap is routing: without saying how this differs from search_linkedin_engagement_sources, the agent may pick the wrong 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?

There are zero parameters, and the schema is fully self-describing, so there is nothing to document. The description correctly implies the call needs no input.

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 and resource ("List the LinkedIn engagement source types and their triggers"), so the purpose is immediately understandable. However, it does not distinguish this tool from the sibling search_linkedin_engagement_sources, leaving the agent unsure which one to call.

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, when not to use it, or which alternative to use. The near-identical sibling search_linkedin_engagement_sources makes this omission costly.

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

get_matched_audiencesGet Matched AudiencesB
Read-only
Inspect

Get matched audiences (custom audiences) from the Campaign Wizard based on audience type and targeting options.

NameRequiredDescriptionDefault
pageNoPage number for pagination (0-indexed)
sizeNoNumber of results per page
sortNoSort field and direction in format 'field,direction'. Common fields: createdDate. Direction: asc or desc.createdDate,desc
typeYesArray of audience targeting types to filter by. If omitted, searches all targeting types.
channelNoThe advertising channel to filter campaigns byLINKEDIN

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that results come from the Campaign Wizard and are filtered by audience type and targeting options, but does not add further behavioral context such as return shape, pagination behavior, or permission requirements.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no redundant setup. It is appropriately sized for a read-only retrieval tool whose schema already carries detailed parameter documentation.

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 definition is adequate for a read-only tool with full schema coverage and annotations, but the audience-related sibling landscape is crowded. It lacks explicit differentiation from list_audiences and get_retargeting_audiences, and with no output schema it could do more to clarify what the returned matched audiences represent.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented in the schema. The description only broadly references audience type and targeting options, adding little beyond the structured parameter definitions.

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

Purpose4/5

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

The description states a specific verb and resource: get matched audiences (custom audiences) from the Campaign Wizard. It also names the filtering basis, audience type and targeting options. It does not, however, distinguish this tool from nearby siblings such as list_audiences or get_retargeting_audiences.

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 implies filtering by audience type and targeting options, but gives no explicit when-to-use guidance. It does not name alternatives or explain when an agent should choose this instead of list_audiences, get_retargeting_audiences, or get_audience_details.

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

get_negative_keywords_list_detailsGet Negative Keywords List DetailsC
Read-only
Inspect

Fetch the keywords inside a single Google Ads negative keyword list.

NameRequiredDescriptionDefault
pageNo0-based page index. Default 0.
sizeNoRows per page. Default 25, max 100.
sortNoSort criteria in format '<field>,<direction>'. Default 'text,asc'.text,asc
textNoOptional substring filter on keyword text.
listIdYesID of the negative keyword list (from list_negative_keywords_list).
channelNoAd channel scope. Both search channels are supported. These are PER-CHANNEL resources: GOOGLE_ADS and MICROSOFT_ADS hold separate sets, and one is invisible to the other. Defaults to GOOGLE_ADS when the user does not say which.GOOGLE_ADS

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds essentially nothing beyond a restatement of the purpose: no note on pagination/filtering behavior, no mention that the two channels hold disjoint sets, and its 'Google Ads' framing actually understates the tool's channel 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?

A single front-loaded sentence with zero filler. It is efficient, though so terse that it omits the routing and channel nuances an agent needs; still, nothing is wasted.

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 read-only, fully documented, single-object fetch with no output schema, the description is minimally viable. But it omits the Microsoft Ads channel scope that the schema explicitly flags as important and disjoint, and it does not distinguish this tool from nearby negative-keyword tools.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema itself carries rich parameter meaning (per-channel invisibility, sort format, page/size bounds), so the baseline is 3. The description contributes no parameter semantics at all, and its 'Google Ads negative keyword list' phrasing is narrower than the channel enum permits.

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?

Specific verb (fetch) and resource (keywords inside a single negative keyword list), which usefully disambiguates from the sibling list_negative_keywords_list that returns the lists themselves. The 'single' qualifier is a good scope signal. Deduction because it frames the resource as 'Google Ads' only, while the tool also covers Microsoft Ads.

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 statement of when to use this versus list_negative_keywords_list, add_keywords_to_negative_lists, or remove_keywords_from_negative_list. The only routing hint (listId comes from list_negative_keywords_list) lives in the schema, not the description, so an agent reading the description alone gets no usage guidance.

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

get_offerGet OfferA
Read-only
Inspect

Get offer information by name or list all offers.

NameRequiredDescriptionDefault
nameNoThe name of the offer to search for. Example: 'AI Marketing Audit Demo'. If omitted, returns a list of all available offers.
offer_idNoExact offer id. PREFER THIS over `name` whenever you have an id: a name lookup returns the first search match, so offers sharing a prefix (a template name plus a random suffix, which is how offers get named here) can resolve to the wrong one silently. Takes precedence when both are given.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the meaningful behavioral fact that omitting the name yields a full list rather than an empty result, but omits pagination limits on 'list all', permissions, and the silent wrong-match risk that the schema documents.

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 twenty-word sentence with the action front-loaded and zero filler. Nothing is padded or repeated from the title.

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

Completeness3/5

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

For a two-parameter read-only tool with full schema coverage, no output schema, and annotations covering safety, the description is adequate to call it. Completeness is limited by missing sibling routing (find_offer_url, create_update_offer) and by no indication of list size, ordering, or pagination when 'all offers' is requested.

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 property descriptions are notably strong, including the warning that offer_id should be preferred over name due to prefix collisions and that offer_id takes precedence. The description itself adds nothing 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.

Purpose4/5

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

States a specific verb and resource ('Get offer information') and covers both operating modes — lookup by name or full list — which an agent can act on directly. It does not differentiate itself from related siblings such as find_offer_url, create_update_offer, or remove_offers_from_campaign, 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 phrase 'by name or list all offers' implies the two calling modes, so usage is inferable. But there is no explicit guidance on when to prefer offer_id over name, when to use find_offer_url instead, or when a full listing is appropriate — that critical routing advice lives in the parameter schema, not here.

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

get_payment_statusGet Payment StatusA
Read-only
Inspect

Read settlement status for one existing credit payment by reference_id. Returns pending or settled status, settled, amount_usd, settled_at, balance_usd, and is_exhausted. A card charge and a ledger credit occur asynchronously; amount_usd is null while pending. This tool does not initiate a purchase.

NameRequiredDescriptionDefault
reference_idYesThe payment's reference, as reported when the purchase was made (e.g. 'maxio:txn:987654'). Found on the transaction row in get_credit_transactions.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), and the description adds genuinely new behavioral context: the card charge and ledger credit occur asynchronously and amount_usd is null while pending. That explains a non-obvious return-state without repeating the annotation.

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: purpose and key first, return shape second, the negative disambiguation last. Nothing is redundant and the most useful information 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?

With no output schema, the description inventories the return fields (status, settled, amount_usd, settled_at, balance_usd, is_exhausted) and explains the pending-state null, so an agent knows what to expect. Nothing material is missing for a single-parameter read 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% and the schema already defines reference_id with an example and a pointer to get_credit_transactions, so the description adds little beyond narrowing scope to 'one existing' payment. Baseline 3 applies when the schema carries the parameter detail.

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 ('Read settlement status for one existing credit payment') plus the keying parameter, which cleanly separates it from get_credit_transactions and get_credit_balance. An agent can identify the right tool 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 Guidelines4/5

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

Scoping is clear ('one existing credit payment by reference_id') and it explicitly rules out a misuse ('This tool does not initiate a purchase'). It points to get_credit_transactions as the source of the reference, but gives no positive guidance on which tool to use when a purchase does need to be initiated.

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

get_retargeting_audiencesGet Retargeting AudiencesC
Read-only
Inspect

Get all available retargeting audiences for a specific advertising channel.

NameRequiredDescriptionDefault
channelYesThe advertising channel to fetch retargeting audiences for

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds essentially nothing beyond that: it doesn't say whether results are paginated, what identifiers come back, or what an empty result means, despite the phrase 'all available' hinting at an unbounded list.

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?

One front-loaded sentence with no waste. It is efficient but so terse that the brevity comes at the cost of information rather than from disciplined editing.

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 one-parameter read tool with full schema coverage and annotations covering safety, the essentials are present. What is missing is any hint about the shape of the returned audience list (IDs, names, types) or pagination behavior, which matters since no output schema exists.

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 single channel parameter is fully documented with an enum, so the schema carries the load. The description only restates that a channel selects the audiences, adding no format or behavioral detail beyond the schema; baseline 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?

States a specific verb (Get) and resource (retargeting audiences) with the scoping dimension (advertising channel). However, it does not distinguish this from close siblings such as list_audiences, get_matched_audiences, or get_audience_details, so an agent cannot tell from the description alone which one to pick.

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 versus list_audiences or get_audience_details, no noted prerequisites (e.g., channel must be connected), and no exclusions. Usage must be inferred entirely from the name.

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

get_segment_criteriaGet Segment CriteriaA
Read-only
Inspect

Read one saved Insights segment by id or name: its criteria, status, and how many accounts it matches. Pass lookback_window to count inside the window an audience would use.

NameRequiredDescriptionDefault
segment_idNoSegment ID (fastest lookup).
segment_nameNoSegment name (fuzzy matching, case-insensitive).
lookback_windowNoDays to evaluate the segment over when counting accounts; use the window the audience will be created with.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by saying it returns criteria, status, and matched-account count, and by explaining that lookback_window affects counting. It does not cover error cases or id/name precedence, which keeps it below 5.

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, front-loaded with the action and resource, with zero wasted text. The lookback_window detail is placed where it is useful without bloating the description.

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 appropriately states what is returned: criteria, status, and match count. It is nearly complete for a simple read tool, but it does not clarify behavior when both segment_id and segment_name are supplied, or when neither is supplied despite no required parameters.

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 parameters are already well documented. The description reinforces lookup 'by id or name' and explains that lookback_window should match the audience window, but adds little beyond the schema's existing parameter descriptions. 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 states a specific verb and resource: 'Read one saved Insights segment.' It also specifies the return contents (criteria, status, match count) and supports lookup by id or name, which distinguishes it from list_segments and create_segment without needing to inspect 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 Guidelines4/5

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

It clearly frames the tool as a single-segment retrieval operation and mentions passing lookback_window when counting within an audience window. It does not explicitly name alternatives such as list_segments or state exclusions, so it falls short of a 5.

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

launch_campaignLaunch CampaignA
Destructive
Inspect

Launch a configured campaign by ID. This can start advertising spend. With confirm_budget_impact omitted or false, returns requires_confirmation and proposed_changes without completing ads or launching the campaign. True asserts the caller's explicit authorization for this launch. After confirmation, the tool completes missing ad details and requests the platform launch; validation or platform errors are returned when launch cannot proceed. Provider acceptance is not proof that ads have begun delivering.

NameRequiredDescriptionDefault
campaign_idYesThe unique identifier of the draft campaign to launch
confirm_budget_impactNoExplicit authorization for these spend changes. False returns a confirmation request without writing.

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: it warns that spend can start, describes the dry-run confirmation response shape (requires_confirmation, proposed_changes), explains that the tool fills in missing ad details before requesting platform launch, and notes that provider acceptance does not prove delivery. This is exactly the behavioral context destructiveHint alone cannot 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?

Front-loaded with purpose and the spend warning, then walks through the confirmation flow in logical order with no filler sentences. Slightly dense, and the omitted/false restatement partially duplicates the schema default, keeping it from a 5.

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?

With no output schema, the description supplies the key return states (confirmation request, validation/platform errors) and the post-acceptance caveat. An agent has enough to call it correctly and interpret the response without further documentation.

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 earns more by explaining that true asserts the caller's explicit authorization and that false/omitted yields a non-writing confirmation response, adding authorization semantics the schema only hints at.

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

Purpose4/5

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

States a specific verb and resource ('Launch a configured campaign by ID') and immediately adds the consequence ('This can start advertising spend'), which separates it from create_campaign or check_campaign_launch_readiness. It never names a sibling explicitly, so differentiation is inferred 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?

Gives clear context for the two-step confirmation flow: omitting or setting confirm_budget_impact false returns requires_confirmation and proposed_changes, true asserts explicit authorization. It does not say when to prefer check_campaign_launch_readiness or manage_campaign instead, so alternatives are left implicit.

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

list_audiencesList AudiencesA
Read-only
Inspect

List the account's custom audiences, newest first: the same inventory the Metadata Audiences page shows.

NameRequiredDescriptionDefault
nameNoFilter by audience name (contains match). Omit to list every audience.
pageNoPage number, 0-indexed.
sizeNoRows per page.
typeNoFilter by CustomAudienceType. The platform binds these to a Java enum, so an unlisted value fails the request rather than matching nothing. Omit to list every type.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds only the account scope and newest-first ordering; it says nothing about result caps or how pagination behaves in practice.

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 sentence with the verb, scope, ordering, and a useful UI analogy — nothing redundant and nothing buried.

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, zero-required-parameter list tool whose schema fully documents filtering and paging, the description plus annotations cover what an agent needs. It stops short of noting the default page size or total-count behavior, but no output schema exists to carry that, so the gap is 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% and each parameter (name, page, size, type) is well documented in the schema, including the enum caveat. The description adds no parameter-level meaning beyond the account scoping, so the baseline 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?

States a specific verb and resource ("List the account's custom audiences") plus ordering ("newest first") and anchors it to a known UI surface. It doesn't distinguish itself from audience-adjacent siblings like get_retargeting_audiences, get_matched_audiences, or list_segments, but the core purpose is unambiguous.

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

Usage Guidelines3/5

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

Usage is implied by "the same inventory the Metadata Audiences page shows," which helps an agent that knows the UI, but there is no explicit when-to-use or when-to-prefer-an-alternative guidance, and no mention that get_audience_details is the tool for inspecting a single audience.

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

list_budget_groupsList All Budget GroupsA
Read-only
Inspect

Browse and list budget groups in the Metadata platform with customizable sorting. Results are paginated and include switched-on and switched-off groups unless status is set; reading a switched-off group does not switch it on. A MONTHLY_RESET or CUSTOM_RESET group runs until switched off and its currentPeriodStart and currentPeriodEnd describe only the current period; only a FIXED_BUDGET group's endDate ends it.

NameRequiredDescriptionDefault
pageNoPage number for pagination (0-based). Default: 0
sizeNoNumber of results per page. Default: 10
statusNoOptional switch-state filter: true for switched-on groups, false for switched-off groups. Omit to include both.
sort_byNoField to sort budget groups by. Default: totalActiveExperiments
sort_orderNoSort order - 'asc' (ascending) or 'desc' (descending). Default: desc

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish read-only safety, yet the description adds substantive behavior: results are paginated, both switched-on and switched-off groups are returned by default, and reading a switched-off group has no side effect of enabling it. It also clarifies how reset-type groups relate to currentPeriodStart/End versus endDate, which is real context beyond the annotations.

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 with the core action and keeps to three dense sentences with no filler. The final reset-group explanation is slightly tangential to a listing operation but still earns its place by explaining returned period fields that have no output 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?

With no output schema, the description usefully explains key returned fields (currentPeriodStart, currentPeriodEnd, endDate) and confirms pagination, covering what an agent needs to interpret results. The absence of output field detail beyond period semantics is the only notable gap.

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

Parameters3/5

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

Schema coverage is 100%, so all five parameters (page, size, status, sort_by, sort_order) are fully documented in the schema, and the description's notes on status semantics largely restate the schema's 'Omit to include both'. Baseline 3 applies 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.

Purpose4/5

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

Clear verb+resource ('Browse and list budget groups') with scope stated as paginated enumeration of both active and inactive groups. It does not explicitly distinguish itself from siblings like get_budget_group or budget_group_performance, but the list-vs-fetch difference is inferable from the wording.

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 status clause implies when to filter versus not, which gives some usage context. However, there is no explicit routing guidance such as 'use get_budget_group to fetch a single group' or 'use budget_group_performance for metrics', so the agent must infer the alternative.

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

list_experiment_keywordsList Experiment KeywordsB
Read-only
Inspect

Search and browse keywords running in experiments with simplified response data.

NameRequiredDescriptionDefault
pageNoPage number for pagination (0-based). Default is 0.
sizeNoNumber of items per page. Default is 10.
keywordOrExperimentNameYesSearch term to filter results by keyword name or experiment name.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds one piece of behavioral context – that responses are simplified – but does not say what is omitted or how results are ordered/paginated 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?

A single front-loaded sentence with no filler, though its brevity borders on under-specification rather than efficient conciseness.

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 read-only filtered list with fully documented parameters and no output schema, the definition is adequate but leaves open what 'simplified' means for the return payload and what total ordering/paging behavior to expect.

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

Parameters3/5

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

Schema description coverage is 100%, with page, size, and keywordOrExperimentName all documented in the schema itself. The description adds no parameter-level meaning beyond what the structured fields already provide, so the baseline 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?

States a specific verb pair ('search and browse') and resource ('keywords running in experiments'), which implicitly separates it from list_keywords and experiments_keywords_stats. No sibling is named explicitly, and 'simplified response data' is vague, keeping it below a 5.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus search_experiments, list_keywords, or experiments_keywords_stats. The only signal is the implicit 'in experiments' scoping, leaving the agent to infer selection criteria.

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

list_extensionsList Search Ad ExtensionsA
Read-only
Inspect

List the account's Google Ads / Microsoft Ads library extensions (sitelinks, callouts, snippets, etc.) with their internal ids.

NameRequiredDescriptionDefault
nameNoOptional name filter. Names are auto-derived by the platform, not user-chosen, so prefer filtering by `types`.
pageNo0-based page index. Defaults to 0.
sizeNoPage size. Defaults to 50.
typesNoOptional extension-type filter, e.g. ["SITELINK"].
channelYesSearch channel. Ad extensions are a search-channel-only concept.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds that this returns the account-level *library* (not campaign-attached extensions) along with internal ids, which is genuinely useful scoping context. It says nothing about pagination or result ordering beyond what the schema 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?

A single front-loaded sentence with the resource, the two supported channels, concrete example types, and the return payload. 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.

Completeness4/5

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

For a read-only listing tool with full schema coverage and no output schema, the description gives enough to call it correctly and to understand what comes back (library extensions plus ids). Only the practical guidance on using it as the id source for extension-attachment flows is left implicit.

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 documents the name vs types filter tradeoff, paging defaults, and the channel enum. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (List) and resource (the account's Google Ads / Microsoft Ads library extensions), and enumerates concrete subtypes (sitelinks, callouts, snippets). It clearly separates itself from the many create_*_extension siblings, which write rather than list. It stops short of naming the distinction from related read tools like query_metadata_analytics_account.

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 'with their internal ids' implies the intended use — retrieving ids so they can be attached to campaigns via add_extensions_to_native_campaign — but this is inferred, not stated. There is no explicit when-to-use or when-not-to-use guidance relative to alternatives such as retrieve-style lookups.

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

list_keywordsList KeywordsC
Read-only
Inspect

List and search keywords with filtering, sorting, and pagination options.

NameRequiredDescriptionDefault
nameNoOptional keyword name(s) to search for. Can be a single string or array of strings. Supports partial matching. Omit to list all keywords.
pageNoPage number for pagination (0-based indexing). Default is 0 for the first page.
sizeNoNumber of items per page (default: 25, recommended: 25-100).
sortNoSort criteria in format: field,direction. Options: id (creation order), avgMonthlySearches, lowerPageBid, higherPageBid, name, modifiedDate. Direction: desc (descending) or asc (ascending). Default: id,desc (newest first).id,desc
archivedNoFilter by archived status. Set to false to show active keywords (default), true to include archived keywords.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that — it does not mention the important default behavior (archived=false returns only active keywords) or the default sort (id,desc = newest first), both of which meaningfully change results.

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?

One clean, front-loaded sentence with no filler. It is efficiently sized, though the brevity comes at the cost of substance rather than being tight and informative.

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 full schema coverage, rich annotations, and no output schema, the definition is just barely sufficient to invoke the tool correctly. It omits any mention of what is searched by name, the archived-inclusion default, and result shape, which for a list tool with a hidden archived filter is a real gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (name, page, size, sort, archived) are fully documented in the schema including partial matching, array aggregation, and defaults. The description contributes no additional parameter meaning, so baseline 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?

States a specific verb and resource ('List and search keywords') plus the supported capabilities (filtering, sorting, pagination), so an agent knows exactly what the tool returns. It does not differentiate from near-siblings like list_negative_keywords_list, list_experiment_keywords, or list_search_terms, so the agent must infer that this covers the positive keyword library only.

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 when-to-use or when-not-to-use guidance and no named alternatives. The description never clarifies the relationship to create_keywords, list_negative_keywords_list, or list_experiment_keywords, leaving the agent to guess which listing tool matches its intent.

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

list_linkedin_conversionsList LinkedIn ConversionsA
Read-only
Inspect

List the LinkedIn conversion actions (Insight Tag conversions) available on the connected LinkedIn ad account, with id, name, type and whether each is enabled.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds that results are scoped to the connected LinkedIn account and lists returned fields, but says nothing about pagination, empty results, or behavior when no LinkedIn channel is connected — useful extra context is limited.

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 that specifies scope and returned fields with zero filler. Every clause 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?

With no output schema, the enumeration of returned fields (id, name, type, enabled) usefully compensates. The read-only annotations carry the safety profile. Minor gaps remain around prerequisites (connected account) and result-set behavior, but the definition is sufficient to call 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?

The tool takes zero parameters, which is the baseline-4 case. There is no parameter surface that needs further explanation, and the empty schema is consistent with the 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 names a specific verb (List), resource (LinkedIn conversion actions / Insight Tag conversions), and scope (connected LinkedIn ad account), and enumerates the returned fields (id, name, type, enabled). No sibling tool covers conversions, so an agent can distinguish it 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 Guidelines3/5

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

Usage is only implied: it's clear this lists conversions on the connected account, but there's no explicit when-to-use, when-not-to-use, or named alternative. It also omits the prerequisite that a LinkedIn channel must be connected, which the agent must infer.

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

list_marketing_automation_listsList Marketing-Automation ListsB
Read-only
Inspect

List a Marketing-Automation provider's contact library lists. the selectable source for creating a Marketing-Automation-contacts audience.

NameRequiredDescriptionDefault
nameNoOptional list-name filter (partial match).
providerYesThe Marketing-Automation provider to list lists for.
list_typeNoOptional list-type filter. If omitted, the provider's own list types are queried and merged (HubSpot: STATIC_LIST + ACTIVE_LIST; Marketo: all three).

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the description carries a lower burden, yet it adds essentially nothing beyond them: no statement about pagination, result ordering, credentials required, or what happens when a provider has no lists. The one added fact (lists are usable as audience sources) is usage-oriented, not behavioral.

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 short sentences, purpose front-loaded, no filler. The second clause is a lowercase sentence fragment ('the selectable source...') that reads slightly unpolished but costs no comprehension.

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?

Since there is no output schema, the description should say what each returned list looks like (name, ID, type) for the agent to pass one into audience creation. It also omits empty-result behavior and pagination, leaving a real gap for an otherwise simple read tool.

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

Parameters3/5

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

Schema description coverage is 100% and documents all three parameters, including the merge behavior when list_type is omitted. The description adds no parameter-level meaning, so the baseline 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?

States a specific verb ('List') and a specific resource ('a Marketing-Automation provider's contact library lists'), and ties the result to creating a Marketing-Automation-contacts audience. It does not distinguish itself from sibling search_ma_lists, which an agent must infer is the searching/filtering counterpart.

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 selectable source for creating a Marketing-Automation-contacts audience' implies the workflow context (use this before create_marketing_automation_contacts_audience), but it never says when to prefer it over search_ma_lists or whether a default list applies via get_default_ma_list. Usage is implied rather than stated.

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

list_negative_keywords_listList Negative Keywords ListsC
Read-only
Inspect

List and search negative keywords lists by name filter.

NameRequiredDescriptionDefault
nameNoOptional negative keywords list name(s) to search for. Can be a single string or array of strings. Supports partial matching. Omit to list all negative keywords lists.
channelNoAd channel scope. Both search channels are supported. These are PER-CHANNEL resources: GOOGLE_ADS and MICROSOFT_ADS hold separate sets, and one is invisible to the other. Defaults to GOOGLE_ADS when the user does not say which.GOOGLE_ADS

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered by structured data. The description adds nothing beyond that: it does not mention that results are scoped per channel (a genuinely consequential behavior disclosed only in the schema) or anything about result volume or aggregation when searching multiple names.

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?

A single short sentence front-loads the verb and resource with no filler. It is perhaps too terse rather than bloated, but nothing in it is wasted.

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 read-only list tool with a fully described two-parameter schema and no output schema, the minimum needed to call it correctly is present indirectly via the schema. However, the description omits the channel-scoping caveat and any note about return shape or result limits, leaving it adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100%, so both `name` (single/array, partial matching, dedup) and `channel` (per-channel isolation, default GOOGLE_ADS) are fully documented in the schema. The description only echoes the name filter and adds no syntax or semantics of its own, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("List and search negative keywords lists") and notes the name filter, so an agent can distinguish it from mutation siblings like create/delete/duplicate. It does not differentiate itself from the closest read sibling, get_negative_keywords_list_details, which an agent would need to choose between.

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 phrase "by name filter" hints at one usage mode, but there is no explicit when-to-use guidance, no mention of when to prefer get_negative_keywords_list_details, and no note about which channel to query. With ~130 siblings, an agent gets no routing help.

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

list_salesforce_mixed_criteriaList Salesforce Mixed-CriteriaB
Read-only
Inspect

List the account's saved Salesforce "mixed criteria" (contact-list criteria). the selectable source for creating a Salesforce-contacts audience.

NameRequiredDescriptionDefault
qualifiedNoWhen true, keep only criteria whose generated filter matches qualified-signal fields.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered by structured data. The description adds account scoping ('the account's saved') and downstream applicability, but says nothing about ordering, pagination, or what the criteria objects look like.

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 short sentences with the purpose front-loaded and no filler. The second sentence is a lowercase fragment ('the selectable source for...') that reads as a stray clause, but it still earns its place by conveying downstream use.

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 read-only list with one fully documented optional parameter and no output schema, the description covers purpose and downstream use. It leaves gaps on return shape (what a 'mixed criteria' entry contains) and whether all criteria are returned regardless of the qualified flag.

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 optional boolean 'qualified' is fully documented in the schema as filtering to qualified-signal fields. The description adds no interpretation of 'qualified' or of the default behavior when omitted, so baseline 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?

Names a specific verb+resource ('List the account's saved Salesforce mixed criteria') and disambiguates the resource via a parenthetical gloss ('contact-list criteria'). It also positions the result as the source for creating a Salesforce-contacts audience, which separates it from list_segments, list_audiences, and search_ma_lists.

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 'the selectable source for creating a Salesforce-contacts audience' implies the intended downstream workflow, so an agent can infer when to reach for it. But there is no explicit when/when-not guidance and no named alternative (e.g., list_segments or search_ma_lists) for other criteria types.

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

list_search_termsList Search TermsC
Read-only
Inspect

Review the Google Ads search terms report with filtering, sorting, and pagination.

NameRequiredDescriptionDefault
pageNo0-based page index. Default 0.
sizeNoRows per page. Default 12 (kept small to limit chat-context tokens), max 100.
sortNoSort criteria in format '<field>,<direction>'. Default 'clicks,desc'. Sortable fields: searchTerm, matchType, experiment, addedExcluded, keyword, impressions, clicks, ctr, averageCpc, spent, conversions, costPerConversion.clicks,desc
channelNoAd channel scope. Both search channels are supported. These are PER-CHANNEL resources: GOOGLE_ADS and MICROSOFT_ADS hold separate sets, and one is invisible to the other. Defaults to GOOGLE_ADS when the user does not say which.GOOGLE_ADS
endDateNoOptional ISO-8601 timestamp upper bound (e.g. 2026-06-30T23:59:59.999Z).
keywordNoOptional matched-keyword substring filter.
matchTypeNoOptional subset of match types to include.
startDateNoOptional ISO-8601 timestamp lower bound (e.g. 2026-06-01T00:00:00.000Z).
experimentNoOptional experiment name substring filter.
searchTermNoOptional substring filter on the search term text.

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds nothing operational: no note that results are scoped per channel (an important caveat present only in the schema), no pagination defaults or page-size token tradeoff, and no sense of what a row contains.

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?

A single front-loaded sentence with no wasted clauses. It is efficient, though its brevity stems partly from under-specification rather than disciplined editing.

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

Completeness3/5

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

With ten optional parameters, no output schema, and a channel-scoped dataset, the description does only minimum-viable work. The rich schema and safety annotations compensate, but the agent still must open the schema to learn the per-channel isolation and default sort behavior.

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

Parameters3/5

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

Schema description coverage is 100%, with detailed docs for page, size, sort, channel, and the filter fields, so the baseline is 3. The description's generic mention of 'filtering, sorting, and pagination' maps to that schema but contributes no additional semantics.

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

Purpose3/5

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

States a verb (Review) and a resource (search terms report) plus capability areas (filtering, sorting, pagination). However, it frames the tool as 'Google Ads' while the schema's channel enum supports MICROSOFT_ADS, and it offers no differentiation from adjacent read tools such as list_keywords or performance_metrics.

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 when-to-use guidance, no exclusions, and no named alternative. 'Review the search terms report' implies the context but an agent gets no signal about when to pick this over list_keywords, performance_metrics, or experiments_keywords_stats.

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

list_segmentsList SegmentsB
Read-only
Inspect

List the account's saved Insights (Spotlight) account-journey segments: {id, name, status, last_update_date}.

NameRequiredDescriptionDefault
nameNoOptional fuzzy search by name.
sortNoSort format: field,direction. Default: name,ascname,asc

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful context by naming the return fields, which is valuable because there is no output schema, but it does not mention pagination, result limits, or other list-operation 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 definition is a single front-loaded sentence with no wasted wording. It states the action, resource, and returned fields compactly.

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 read-only list tool with complete parameter schema and clear safety annotations, the description is largely sufficient and helpfully lists the returned fields in the absence of an output schema. It could still be stronger by mentioning pagination or result-limit behavior, but the core invocation context 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 100%, so both optional parameters (name fuzzy search and sort format) are fully documented in the schema. The description adds no parameter-specific meaning beyond that baseline, so a 3 is appropriate.

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

Purpose4/5

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

The description uses a specific verb ("List") and a specific resource ("account's saved Insights (Spotlight) account-journey segments"), and it even names the returned fields. It is clear what the tool does, but it does not explicitly distinguish itself from siblings such as create_segment or get_segment_criteria.

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 states what the tool lists but gives no explicit guidance on when to use it instead of alternatives, nor any prerequisites or exclusions. A reader can infer it is for listing saved segments, but the definition does not actively route the agent between this tool and related segment tools.

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

list_target_groupsList Target GroupsB
Read-only
Inspect

List and search target groups in Metadata platform.

NameRequiredDescriptionDefault
nameNoOptional name filter for searching target groups (partial matching, case-insensitive). Example: 'engineer' matches 'Engineers EMEA', 'Senior Engineers', etc.
sortNoSort criteria. Options: 'createdDate,desc' (newest first), 'createdDate,asc' (oldest first), 'name,asc' (A-Z), 'name,desc' (Z-A). Default: 'createdDate,desc'createdDate,desc

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds nothing beyond that — no mention of pagination, result caps, default page size, or whether all groups are returned, which is exactly the kind of context that would earn credit here.

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?

A single front-loaded sentence with zero filler, which is appropriate for a simple read tool with two optional parameters. It is efficient but borders on under-specified rather than optimally concise.

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 zero-required-parameter read with full schema coverage, complete annotations and no output schema, this is close to sufficient — an agent can call it correctly. The remaining gap is behavioral: nothing about how many results come back or whether the list is paginated.

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 itself documents the optional name filter (partial, case-insensitive, with examples) and all four sort options plus the default. The description contributes nothing additional, so the baseline 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?

States a specific verb pair ("List and search") and resource ("target groups"), so the agent knows this is a collection read rather than a single-record fetch. However, it never positions itself against close siblings like retrieve_target_group_by_id or search_target_group_criteria, so the agent must infer the distinction from the name alone.

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

Usage Guidelines2/5

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

There is no explicit statement of when to use this tool versus retrieve_target_group_by_id, search_target_group_criteria, or list-style siblings. The word "search" hints that the name filter is the primary use case, but that is inference rather than guidance, and no exclusions or prerequisites are given.

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

list_user_accountsList User AccountsA
Read-only
Inspect

List accounts in the signed-in user's current memberships, optionally filtered by partial name or exact account ID. External connector callers, including Metadata staff, cannot search other accounts. Returns user_id, email, default_account_id, is_super_user, token_type, and accounts containing account_id, name, and role. Memberships are resolved using the original credential, not a switched account's PAT. Metadata's authenticated first-party admin interface separately supports scoped staff account search.

NameRequiredDescriptionDefault
nameNoOptional partial account name within current memberships.
account_idNoOptional exact account ID within current memberships.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish read-only, non-destructive, closed-world behavior, and the description adds meaningful context beyond that: external callers cannot search outside current memberships and memberships resolve from the original credential rather than a switched account's PAT. It also lists the returned fields, which matters because there is no output schema. Pagination or rate-limit behavior is not described.

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 purpose and scope are front-loaded, and the remaining sentences add access-boundary and return-shape details. It is slightly more verbose than strictly necessary, but no sentence is pure 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?

Because there is no output schema, the description usefully enumerates returned fields and explains auth scoping and caller restrictions. The schema already handles both optional filters. The main remaining gap is that pagination or result-size behavior is not mentioned, but otherwise the definition is sufficient to call 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 coverage is 100%, so both parameters already have clear descriptions in the input schema. The description restates that filtering can use partial name or exact account ID but adds no syntax or edge-case guidance beyond the schema. Baseline 3 is appropriate when the schema carries 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 and resource ('List accounts') plus the exact scope ('signed-in user's current memberships') and optional filters. It also distinguishes this narrow membership-scoped listing from broader staff account search, so an agent can identify the operation 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 Guidelines4/5

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

The description makes the usage context clear: current memberships only, with partial-name or exact-ID filtering. It also states the key exclusion that external connector callers cannot search other accounts and points to the separate admin interface for scoped staff search. It does not explicitly route to a specific sibling MCP tool for alternative account lookups, which keeps it from a 5.

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

list_wizard_campaignsList Wizard CampaignsB
Read-only
Inspect

List wizard (Metadata-native) campaigns for the current account with pagination, sorting, and experiment-status filtering.

NameRequiredDescriptionDefault
nameNoOptional: server-side name substring filter.
pageNo0-based page index. Default: 0
sizeNoResults per page. Default: 25
statusNoCampaign-level status filter. Comma-separated subset of Draft, Launched, Finished. Omit to include all three. Combine with experiment_statuses to mirror the UI tabs (e.g. Active tab = status=Launched + experiment_statuses=Active,WithoutSpend).
sort_byNoField to sort by. Default: createdDate
sort_orderNoSort order. Default: desc
visibilityNoOptional: filter by campaign visibility. Omit to include all.
experiment_statusesNoExperiment-level status filter. Comma-separated subset of Active, WithoutSpend, Paused, Completed, Failed. Omit to include all five.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds only the account scoping ('current account') and the fact that filtering spans both campaign-level and experiment-level status. It says nothing about result volume caps, default paging behavior beyond what the schema shows, or whether archived campaigns appear by default.

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?

A single sentence with the resource scoping front-loaded and the capability list after. No filler, though the parenthetical '(Metadata-native)' consumes space without resolving the wizard-vs-native ambiguity.

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

Completeness3/5

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

With 8 optional params at full schema coverage and no output schema, the description is adequate but thin: it omits the name and visibility filters entirely and never indicates what a campaign object looks like or whether the response is paginated metadata. For a list tool in a crowded sibling set it should say more about the returned collection.

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 itself carries rich semantics, including the UI-tab mirroring example for status/experiment_statuses. The description adds no parameter detail 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.

Purpose4/5

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

States a specific verb ('List') and resource ('wizard (Metadata-native) campaigns') scoped to 'the current account', which separates it from get_campaign_by_wizard_id and the archive/unarchive siblings. It does not however differentiate itself from search_campaigns_by_names or search_campaigns_by_utm_value, and leaves 'wizard (Metadata-native)' undefined relative to the several 'native' siblings.

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 names the capabilities (pagination, sorting, experiment-status filtering) but gives no guidance on when to choose this tool over search_campaigns_by_names or search_campaigns_by_utm_value, and no prerequisites or exclusions. An agent must infer the selection rule from the tool names alone.

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

manage_campaignManage CampaignA
Destructive
Inspect

Pause or restart a campaign by ID. Restart can resume advertising spend and requires confirm_budget_impact=true for the specified campaign. An omitted or false flag on restart returns requires_confirmation and proposed_changes without changing the campaign. Pause does not require that flag. Returns the platform operation result or a validation error.

NameRequiredDescriptionDefault
actionYesThe action to perform: 'pause' to stop the campaign, 'restart' to resume it
campaign_idYesThe unique identifier of the campaign to manage
confirm_budget_impactNoExplicit authorization for these spend changes. False returns a confirmation request without writing. Required for restart; pause does not require it.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the destructiveHint/openWorldHint annotations, it discloses the two-phase confirmation behavior: a missing or false confirm_budget_impact returns requires_confirmation and proposed_changes with no write. It also states the real-world consequence of restart (resuming advertising spend), which is genuine added context for a destructive, open-world mutation.

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?

Four sentences, front-loaded with the core action and then the conditional flag rule; little waste. A minor overlap exists between the second and third sentences about the confirmation flag, but overall it is tight.

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 does state the response shapes (platform operation result, validation error, or a confirmation payload), which is the key missing piece. It could go further on what the confirmation payload contains beyond proposed_changes, but it is sufficient to call 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 coverage is 100% and the schema already documents each parameter, including the restart-only requirement for confirm_budget_impact. The description's parameter information largely restates that, so it sits at the baseline rather than adding new semantics such as ID format or budget-unit expectations.

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?

"Pause or restart a campaign by ID" gives a specific verb pair and resource, and the two-action scope separates it from siblings like archive_campaigns, launch_campaign, and duplicate_campaign without needing to open 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 Guidelines4/5

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

The description clearly explains the conditional path for restart versus pause and what happens with the confirmation flag, which is the main usage decision an agent faces. It stops short of naming sibling alternatives (e.g., archive_campaigns for permanent removal) or saying when this tool should not be used.

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

manage_experimentManage ExperimentA
Destructive
Inspect

Pause, restart or reactivate one launched experiment. reactivate runs a Completed experiment again until end_date (required, YYYY-MM-DD). Restart and reactivate can increase spending: they first estimate the impact on budget groups and, when a group is affected, return a confirmation request without acting until confirm_budget_impact=true. Returns the platform operation result or an error. Keyword-level pause or restart is a separate operation.

NameRequiredDescriptionDefault
actionYesThe action to perform: 'pause' to stop the experiment, 'restart' to resume a paused one, 'reactivate' to run a completed one again until end_date
end_dateNoReactivate only, and required there: the new end date, YYYY-MM-DD, today or later (at most one year ahead on Facebook and Instagram).
experiment_idYesThe experiment ID to pause, restart or reactivate (experimentId from search_experiments).
confirm_budget_impactNoRestart and reactivate only. Set true ONLY after the user explicitly confirmed the budget-group impact returned by a previous manage_experiment call with status='requires_confirmation'.
auto_pause_ignore_historical_dataNoRestart only. When the experiment was auto-paused for low performance, true tells the optimizer to ignore the historical performance data that caused the pause.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the destructive annotation, the description discloses the important side effect that restart and reactivate can increase spending and may require an explicit confirmation before acting. It also explains that the tool returns a confirmation request instead of mutating when budget-group impact is detected, which is exactly the kind of behavioral context an agent needs for a destructive action.

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: it opens with the actions, then states the reactivate condition, then the spending confirmation flow, and finally the return behavior. Every sentence adds useful operational context without 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 destructive mutation tool with no output schema, it covers the critical decision path: action effects, required reactivate end_date, budget-impact confirmation, and the basic return outcome. It does not specify the full shape of the operation result, but it is otherwise complete 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%, and the schema already documents action enums, end_date constraints, confirm_budget_impact semantics, and auto_pause_ignore_historical_data. The description reinforces end_date and confirmation behavior but adds little parameter-level meaning beyond the already-rich 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 names specific operations (pause, restart, reactivate) on a specific resource (one launched experiment), and explicitly separates keyword-level pause/restart as a different operation. That gives an agent a clear basis for distinguishing this tool from siblings such as pause_experiment_keyword or restart_experiment_keyword.

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 clear action-level usage: pause stops, restart resumes, and reactivate reruns a Completed experiment until a required end_date. It also names one alternative operation for keyword-level management, though it does not exhaustively compare against related tools like update_experiment_end_date.

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

pause_experiment_keywordPause Experiment KeywordC
Destructive
Inspect

Pause a specific keyword running in an experiment.

NameRequiredDescriptionDefault
wizExperimentIdYesThe experiment ID where the keyword is running.
keywordExternalIdYesThe external ID of the keyword to pause.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the safety profile is known from structured data. The description adds nothing beyond that: it does not say whether pausing is reversible (restart_experiment_keyword suggests it is), what immediate effect pausing has on spend or delivery, or what errors occur when the keyword is already paused. That is a meaningful gap for a mutating endpoint.

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?

A single front-loaded sentence with zero filler; the action and target arrive immediately. It is efficient but sparse enough that brevity shades into under-specification rather than disciplined conciseness.

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

Completeness3/5

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

With only two fully documented required parameters and no output schema, the structured data carries most of the load, so the description is close to sufficient. It still omits the state transition and reversibility of the pause, which an agent would want before mutating a live experiment keyword.

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 both parameters (wizExperimentId, keywordExternalId) are documented in the schema itself. The description mentions neither, so it provides no additional semantic value beyond the baseline for a fully documented schema.

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

Purpose4/5

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

States a specific verb ('Pause') and a specific resource ('a keyword running in an experiment'), which is unambiguous. It does not, however, distinguish itself from near-siblings like restart_experiment_keyword or manage_experiment, so the agent must infer the boundary from the tool name alone.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this instead of restart_experiment_keyword, manage_experiment, or list_experiment_keywords, and no stated prerequisites (e.g., the keyword must currently be running). Usage is only implied by the verb.

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

performance_metricsGet Performance MetricsA
Read-only
Inspect

Read paginated performance metrics for ads, audiences, creatives, offers, target groups, or keywords. The endpoint argument selects the report and dates use ISO 8601. Returns one page of metrics and available pagination metadata, with at most 100 rows.

NameRequiredDescriptionDefault
idsNoSet of IDs to filter by
pageNoPage number to retrieve (0-based indexing)
sizeNoResults per page from 1 to 100; default 100. Use successive zero-based page values and response pagination metadata for more results.
sortNoSorting criteria (e.g., 'spent,desc', 'cpl,asc', 'experimentId,spent,desc')
tagsNoSet of tag IDs to filter by
goalsNoFilter by campaign goals
adNameNoFilter by specific ad name
maxCplNoMaximum cost per lead threshold
minCplNoMinimum cost per lead threshold
endDateNoendDate in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ), e.g., `startDate=2025-06-12T14:30:00.123Z`).
keywordNoFilter by specific keyword
channelsNoFilter by marketing channels
endpointNoSpecific endpoint to query. If not specified, will be auto-determined from query context. Use 'customAudience/group' for target groups.
maxLeadsNoMaximum number of leads threshold
maxSpendNoMaximum spend threshold
minLeadsNoMinimum number of leads threshold
minSpendNoMinimum spend threshold
adFormatsNoFilter by ad format types. Applied to ads endpoint automatically.
offerNameNoFilter by specific offer name
startDateNostartDate in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ), e.g., `startDate=2025-06-12T14:30:00.123Z`).
offerTypesNoFilter by offer types. LG=Lead Gen forms, LP=Landing Pages
oppsEndDateNoEnd date for opportunities data in ISO 8601 format
campaignNameNoFilter by specific campaign name
creativeNameNoFilter by specific creative name
visibilitiesNoFilter by visibility status. The platform knows only VISIBLE (live) and ARCHIVED; there is no HIDDEN value and sending one is rejected with a 400.
accountTagIdsNoSet of account tag IDs to filter by
audienceTypesNoFilter by audience types
experimentIdsNoSet of experiment IDs to filter by
oppsStartDateNoStart date for opportunities data in ISO 8601 format
showWithSpendNoShow only experiments/ingredients with spend data
customFieldIdsNoCustom field IDs to include
experimentListNoExperiment list filter
experimentNameNoFilter by specific experiment name
budgetGroupNameNoFilter by specific budget group name
maxAudienceSizeNoMaximum audience size threshold
minAudienceSizeNoMinimum audience size threshold
skipCustomFieldsNoSkip custom fields in response
customAudienceNameNoFilter by specific custom audience name
usedInActiveExperimentsNoFilter for ingredients used in active experiments only
launchedExperimentStatusesNoFilter Performance Metrics by experiment launch statuses only.

TDQS

A3.8/5.0
Behavior4/5

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

The annotations already declare read-only, non-destructive, closed-world behavior, and the description adds useful behavioral context beyond them: pagination, at most 100 rows per page, return of pagination metadata, and ISO 8601 date formatting. It does not contradict the annotations.

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 tight sentences with no wasted language. It front-loads what the tool reads, then explains endpoint selection, date format, and pagination behavior.

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 rich schema and read-only annotations, the description covers the key invocation context: report selection via endpoint, date format, and pagination limits. It still leaves sibling-tool differentiation to the agent, but is otherwise complete for this high-parameter read 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 parameter semantics are already well documented in the schema. The description mentions that the endpoint argument selects the report and dates use ISO 8601, but this largely repeats schema-level information and adds little beyond it.

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

Purpose4/5

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

The description states a specific verb and resource: read paginated performance metrics for ads, audiences, creatives, offers, target groups, or keywords. It is clear what the tool does, but it does not explicitly distinguish itself from sibling analytics tools such as experiment_performance_stats, budget_group_performance, or account_level_stats.

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

Usage Guidelines3/5

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

Usage is implied by the listed report types and the statement that the endpoint argument selects the report, but there is no explicit guidance on when to choose this tool over sibling analytics tools. No exclusions or alternatives are named.

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

query_metadata_analytics_accountQuery Account AnalyticsA
Read-only
Inspect

Read a periodically refreshed summary of the authenticated account's firmographics and recent campaign history from the Metadata analytics warehouse. It is not a live platform-state query. The account ID is resolved from the credential and cannot be supplied by the caller; cross-account queries are refused. Returns a JSON envelope with status, text_reply, rows, SQL, confidence, applied_filters, and timing. LOW confidence with identity_only_rows means no substantive attributes were found; literal_only_result is not a warehouse result.

NameRequiredDescriptionDefault
questionYesNatural-language question about the current account.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description goes well beyond them: periodic-refresh staleness, credential-derived account ID, refusal of cross-account queries, and interpretation rules for LOW confidence / identity_only_rows / literal_only_result. That confidence-semantics guidance is genuinely non-obvious context. Minor deduction because the return-envelope listing duplicates what the output schema likely already declares.

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 capability and the freshness caveat, then constraints, then return shape. Every sentence carries information, though terms like 'identity_only_rows' and 'literal_only_result' are dropped without definition and read as internal jargon.

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 annotations and an output schema, this covers freshness, authorization scope, refusal behavior, and result-quality interpretation — the things an agent actually needs to act on results. The gap is routing guidance relative to the many overlapping account-analytics siblings.

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 the single 'question' parameter, so the schema carries the specification and baseline 3 applies. The description adds one real clarification — that the account ID is resolved from the credential and is not caller-supplied — which helps the agent understand why no account parameter exists, but says nothing about question formatting or scoping beyond 'natural-language'.

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

Purpose4/5

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

The description names a specific verb and resource ('Read a periodically refreshed summary of the authenticated account's firmographics and recent campaign history') and explicitly demarcates it from a live platform-state query. It does not name the closest sibling (query_metadata_analytics_benchmarks) or other account-stats tools, so an agent must still infer the boundary from the data source rather than from an explicit contrast.

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

Usage Guidelines3/5

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

It gives one useful usage constraint — this is a warehouse snapshot, not live state — and states that cross-account queries are refused. However it never says when to prefer it over account_level_stats, account_funnel_reports, get_account_summary_insights, or query_metadata_analytics_benchmarks, all of which plausibly overlap, so tool selection is left to inference.

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

query_metadata_analytics_benchmarksQuery Advertising BenchmarksA
Read-only
Inspect

Read cross-account cohort benchmarks from the Metadata analytics warehouse. Questions can describe an industry, size, channel, ad format, or audience cohort. Named-company queries and identity-bearing outputs are refused. Returns aggregate rows, text_reply, SQL, confidence, empty_reason, and timing, or a refusal/error envelope. LOW confidence with literal_only_result is not a warehouse benchmark.

NameRequiredDescriptionDefault
questionYesNatural-language cohort question.
conversation_idNoOptional continuation ID from this benchmark tool only.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the readOnly/non-destructive annotations by disclosing a refusal policy, the shape of the success envelope, the presence of refusal/error envelopes, and how to interpret LOW confidence with literal_only_result. These are exactly the behavioral traits an agent cannot infer from annotations or 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?

Four dense sentences, front-loaded with purpose and scope, then the refusal rule, then the return envelope. Every sentence carries information, though the return-field list is somewhat compressed and slightly redundant with the output 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 natural-language query tool with only two parameters, the description covers scope, acceptable question domains, refusal behavior, confidence interpretation, and output shape — the full set of things an agent needs before calling 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, but the description adds real semantics by spelling out what the free-text 'question' may express (industry, size, channel, ad format, cohort). It says nothing about conversation_id, leaving that to the schema.

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

Purpose4/5

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

States a specific verb and resource: reading cross-account cohort benchmarks from the Metadata analytics warehouse. The 'cross-account cohort' scope implicitly distinguishes it from the account-scoped sibling query_metadata_analytics_account, though the sibling is never named 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 concrete guidance on acceptable questions (industry, size, channel, ad format, audience cohort) and explicit exclusions (named-company queries and identity-bearing outputs are refused). It stops short of naming an alternative tool for those refused cases, which keeps it below a 5.

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

regenerate_flexible_backgroundRegenerate Flexible Creative BackgroundA
Destructive
Inspect

Generate a new AI background for a layered creative, optionally using the current background as a reference. Returns a hosted URL for a standalone background image that the caller can download or use independently. The tool does not modify the document or attach the image to an ad; the first-party editor can use the returned URL to replace its background. Existing text and logo layers are unchanged. The supplied aspect_ratio determines the new image shape. Registered brand characters shown in the source are kept unless characters is passed to change them; a result that loses one is returned as an error.

NameRequiredDescriptionDefault
domainYesCompany domain for brand DNA (e.g. 'metadata.io'). No protocol.
platformNoThe creative's channel (its document's `channel`); without aspect_ratio it also picks the shape, the channel's default. Default: 'linkedin'.linkedin
charactersNoThe brand characters the new background must show. Omit to keep the ones image_source shows; for a fresh scene pass the creative's provenance.quality.characters. [] drops them all.
aspect_ratioNoPass the creative's own canvas.aspect_ratio so the new background keeps its shape. Omitted, the channel's default shape is used (the one a new creative takes), which reshapes a creative made in another shape so its layers no longer fit. On a channel's canvas the new background comes back at that canvas's exact size.
image_sourceNoOptional URL of the current background to guide a same-style regeneration (image-to-image). Omit for a fresh scene.
instructionsYesDirection for the new background scene.
background_hexNoOptional 6-digit hex to pin the dominant background color (e.g. '#0A2540').

TDQS

A4.1/5.0
Behavior5/5

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

Goes well past the annotations by disclosing side-effect scope (document untouched, text/logo layers preserved), the return contract (hosted standalone URL), and an error condition (a result that drops a registered character fails). This meaningfully clarifies the destructiveHint=true flag, since the only destruction is of the background, not the source document.

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?

Purpose and the non-destructive scope are front-loaded, and each subsequent sentence carries a distinct fact (return value, layer preservation, aspect ratio, character rule). Slightly dense at six sentences, but 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?

With no output schema, the description still explains the return value (hosted URL usable independently) and the failure mode for lost brand characters. For a 7-parameter generator this covers everything an agent needs before invoking 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% and the per-parameter descriptions are already rich, so the schema does most of the work. The body adds some coupling detail (aspect_ratio determines image shape, characters are preserved by default), but the specific guidance for aspect_ratio, characters, and image_source largely restates what the schema already says.

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?

Opens with a specific verb+resource ("generate a new AI background for a layered creative") and immediately scopes what it does not do ("does not modify the document or attach the image to an ad"). This distinguishes it from full-creative generators like generate_flexible_brand_creative, though no sibling is named 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 selection rules for the optional paths: pass image_source for same-style regeneration, omit for a fresh scene; pass characters to change them, omit to keep them. It stops short of saying "use this instead of tool X," so it lands at 4 rather than 5.

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

register_brand_characterRegister Brand CharacterAInspect

Register a character the brand owns (a mascot, a team member, a recurring persona) so creatives can feature it faithfully, or replace the one of that name. Its images are cut out onto one reference sheet, the traits a viewer knows it by are read off them, and one test render is judged against those traits.

A brand keeps at most 5 characters. Before calling, confirm with the user that the brand owns the character or holds the rights and consent of the person shown, and pass rights_confirmed true. A real public figure (a celebrity, politician or historical figure) or hateful content is refused.

RETURNS: the stored character (name, traits, its own marks, style, and the test render's result: passed false names the traits it missed, so suggest clearer images), sheet_view_url (a link to show the user the character's reference sheet, valid for one hour) and the brand's character names.

NameRequiredDescriptionDefault
nameYesThe character's name, as the user gave it.
domainYesCompany domain whose brand kit keeps the character (e.g. 'metadata.io'). No protocol.
image_urlsYesPublic URLs of 1 to 4 images of this one character, ideally the face and the full body.
descriptionNoWho the character is and anything the images do not show, in the user's words.
rights_confirmedYesTrue only after the user confirmed the brand owns the character or holds the rights and consent to use it.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only give the generic readOnly=false / openWorld=true / destructive=false profile; the description adds the material substance: this is an upsert that overwrites an existing character of the same name, a 5-character cap, a legal/consent gate via rights_confirmed, and a refusal policy. It also explains that a failed test render names the missed traits, turning a possible failure into actionable guidance.

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 action and scope, then constraints, then returns — a logical order with no filler sentences. It is denser than strictly necessary (three paragraphs for a 5-parameter tool), which keeps it just below top marks.

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 the description compensates with a dedicated RETURNS section covering the stored character, traits/marks/style, test-render pass/fail semantics, the sheet_view_url (with its one-hour expiry), and the updated character name list. An agent has everything needed to call it and interpret the result.

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 still earns above it by explaining what happens to image_urls (cut out onto one reference sheet, traits read off, one test render judged) and why rights_confirmed must be true. It adds no detail about 'domain' beyond the schema, keeping it from a 5.

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 ('Register a character the brand owns') and clarifies the scope with concrete examples (mascot, team member, recurring persona). It also discloses upsert behavior ('or replace the one of that name'), which distinguishes it from remove_brand_character and from the creative-generation siblings like generate_brand_creative.

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 an explicit precondition ('Before calling, confirm with the user...') plus a hard quota ('A brand keeps at most 5 characters') and a refusal policy for public figures and hateful content. It does not name sibling alternatives (e.g., remove_brand_character or generate_brand_creative) for related tasks, 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.

remove_ad_from_campaignRemove Ad from CampaignC
Destructive
Inspect

Remove specific ads (ad groups) from one or more channels in an existing campaign.

NameRequiredDescriptionDefault
campaign_idYesThe unique identifier of the campaign
channel_adsYesMap of channel type to list of ad names to remove. Example: {"LINKEDIN": ["Ad A"], "FACEBOOK": ["Ad B"]}

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, but the description adds nothing beyond them: it does not say whether removal is permanent vs. an archival, whether creative assets survive, or what happens when a named ad is not found. For a destructive mutation these are material gaps.

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?

A single front-loaded sentence with no waste. It is terse rather than bloated, but the brevity comes at the cost of the missing behavioral detail noted elsewhere.

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?

A destructive, open-world mutation with a nested object parameter and no output schema needs more than one sentence: the fate of removed ads, error behavior for unknown ad names, and any auth/ownership requirements are all unstated.

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 nested channel_ads property has an inline example, so the schema does the heavy lifting. The description only reinforces the multi-channel aspect ('one or more channels'), adding little on matching semantics (case sensitivity, partial names).

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

Purpose4/5

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

States a specific verb (remove) and resource (ads) with scope (one or more channels in an existing campaign). The parenthetical '(ad groups)' muddies whether ads or ad groups are being removed, and no sibling such as archive_ad or remove_channels_from_campaign is distinguished.

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 indication of when to use this versus archive_ad (which likely preserves the ad) or remove_channels_from_campaign. No prerequisites are stated, e.g. whether the campaign must be paused or whether the ad names must already exist.

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

remove_audiences_from_campaignRemove Audiences from CampaignB
Destructive
Inspect

Remove specific audiences from one or more channels in an existing campaign.

NameRequiredDescriptionDefault
campaign_idYesThe unique identifier of the campaign
channel_audiencesYesMap of channel type to list of audience names to remove. Example: {"FACEBOOK": ["Audience A"], "LINKEDIN": ["Audience B"]}

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already disclose destructive=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is covered. The description adds batch scope ('one or more channels') and that the campaign must already exist, but it does not explain irreversibility, permissions, partial-failure behavior, or response behavior.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no redundant text. It efficiently states the action, resource, and scope without burying the key information.

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 full schema documentation and destructive/open-world annotations carry much of the context, and there is no output schema to explain. However, for a destructive batch mutation, the description omits prerequisites, error or partial-success semantics, and irreversibility details, leaving it adequate but not fully complete.

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

Parameters3/5

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

Schema coverage is 100%; campaign_id and the nested channel_audiences map are fully documented, including an example. The description adds only a high-level phrase about 'specific audiences' and does not provide format or constraint details beyond the schema.

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

Purpose4/5

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

Names the specific verb 'Remove', the resource 'audiences', and the scope 'one or more channels in an existing campaign', so the action is unambiguous. It does not explicitly name sibling tools such as remove_channels_from_campaign to route between them, so it falls short of the strongest sibling-differentiation standard.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisites, and no exclusion against sibling removal tools. Usage is only inferable from the verb and resource, which is weaker than clearly stated guidance.

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

remove_brand_characterRemove Brand CharacterA
Destructive
Inspect

Remove a registered brand character from the brand kit by name. Creatives already made with it are unchanged.

NameRequiredDescriptionDefault
nameYesThe registered character's name.
domainYesCompany domain whose brand kit keeps the character. No protocol.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds meaningful scope-of-destruction detail beyond that: existing creatives made with the character are unaffected, which tells the agent this is not a cascading delete. It stops short of saying whether removal is reversible or what happens if the name is not found.

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, front-loaded with the action and the key scope caveat. Nothing is redundant and every clause earns its place.

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

Completeness4/5

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

For a simple two-parameter destructive removal with full schema coverage and annotations declaring destructiveness, the description covers the essential non-obvious behavior (existing creatives unchanged). Minor gaps around irreversibility and behavior when the character is absent keep it from 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 both parameters are fully documented in the schema. The description reinforces the 'by name' lookup and the brand-kit context implied by 'domain', but adds no format, casing, or error semantics beyond what the schema already provides; baseline 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 gives a specific verb and resource ('Remove a registered brand character') plus the location ('from the brand kit') and lookup key ('by name'). It is clearly distinguishable from register_brand_character and get/update_brand_kit, though it does not explicitly name a sibling to contrast with.

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?

Use is implied by the inverse-of-register framing, but there is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives such as editing the brand kit. An agent can infer the purpose but gets no routing advice.

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

remove_channels_from_campaignRemove Channels from CampaignB
Destructive
Inspect

Disable one or more entire channels from an existing campaign.

NameRequiredDescriptionDefault
channelsYesList of channels to disable from the campaign. Example: ["FACEBOOK", "GOOGLE_ADS"]
campaign_idYesThe unique identifier of the campaign

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds only the nuance that channels are 'disabled' rather than hard-deleted, but says nothing about the fate of ads/keywords/audiences under those channels, reversibility, or whether the campaign must be paused first.

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?

A single front-loaded sentence with no filler, though it is arguably too thin for a destructive mutation rather than optimally concise.

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

Completeness3/5

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

With annotations covering destructiveness, no output schema needed, and both parameters fully documented, the core call is well specified. But side effects on dependent entities and reversibility are left unexplained, which matters for a destructiveHint tool in a large sibling set of remove_* tools.

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

Parameters3/5

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

Schema description coverage is 100%, with campaign_id and the enum-restricted channels array fully documented including an example. The description adds marginally ('one or more entire channels'), but nothing about the semantics of removing all channels or ordering beyond the schema baseline.

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

Purpose4/5

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

The description states a specific verb and resource (disable/remove entire channels from a campaign) and, with the name, an agent can distinguish it from siblings like remove_ad_from_campaign or remove_audiences_from_campaign. The only wrinkle is the name says 'remove' while the description says 'disable', which is informative but slightly ambiguous without elaboration.

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 versus alternatives such as remove_ad_from_campaign, archive_campaigns, or manage_campaign, and no stated preconditions (campaign state, whether it must be launched, whether channels can be re-enabled). The agent must infer all usage context.

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

remove_extensions_from_native_campaignRemove Extensions from Native-Structure CampaignA
Destructive
Inspect

Detach extensions from a native-structure Google Ads / Microsoft Ads campaign. The extension stays in the account library. only the campaign binding is removed.

NameRequiredDescriptionDefault
channelYesSearch channel. Ad extensions are a search-channel-only concept.
campaign_idYesThe wizard campaign id.
extension_idsYesInternal library extension ids from list_extensions. These are the `id` field, NOT `externalId` (the ad platform's own id).

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds important behavioral context: only the campaign binding is removed while the extension remains in the account library. It does not cover permissions, reversibility, or return behavior, but it meaningfully clarifies the destructive scope.

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, front-loads the main action, and immediately adds the key non-obvious constraint about the extension library. There is no wasted 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?

For a destructive mutation tool with full schema coverage and clear annotations, the description provides the essential context that the extension itself is not deleted. It could say more about outcomes or reversibility, but it is complete enough for correct 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%, and the parameters are well documented in the schema, including channel enum, campaign id, and extension ids. The description adds no parameter-specific meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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

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, and scope: detaching extensions from a native-structure Google Ads / Microsoft Ads campaign. It also clarifies that the extension remains in the account library, distinguishing this from deleting an extension.

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 implies when to use the tool by describing the binding-removal behavior and noting the extension stays in the library. It does not explicitly name alternatives or exclusions, but the usage context is clear enough for an agent.

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

remove_keywords_from_campaignRemove Keywords from CampaignB
Destructive
Inspect

Remove Google Ads keyword groups and/or negative keyword list attachments from a campaign's GOOGLE_ADS channel.

NameRequiredDescriptionDefault
channel_idNoOptional fast-path: numeric id of the GOOGLE_ADS channel on this campaign. When provided, the tool skips the full-campaign GET and fetches only this channel's keyword list. Use it when you already have the id from a recent campaign read; omit it and the tool resolves the channel by type.
campaign_idYesThe unique identifier of the campaign
channel_keywordsNoMap of channel type to list of positive keyword group names to remove. Only GOOGLE_ADS is supported. Example: {"GOOGLE_ADS": ["CRM Keywords"]}
channel_negative_keyword_listsNoMap of channel type to list of negative keyword list names to detach from the channel. Only GOOGLE_ADS is supported. Example: {"GOOGLE_ADS": ["Competitor Brands"]}

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: it does not say whether removal only detaches from the campaign, whether the underlying keyword groups persist, whether the operation is reversible, or what happens when a named group is missing.

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?

One sentence, front-loaded with the verb and resource, no filler. It is appropriately sized for what it contains, though its brevity is partly the cause of the missing behavioral detail.

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 destructive mutation with no output schema, the description should cover outcome semantics (detach vs. delete, error behavior on missing groups). With 100% schema coverage the parameter side is complete, but the behavioral side leaves a gap an agent would want filled before invoking a destructive 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 every parameter thoroughly (including the channel_id fast-path). The description's only added signal is the 'and/or' optionality of the two map parameters, which is marginal. Baseline 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?

States a specific verb (remove) and two specific resource types (keyword groups, negative keyword list attachments) scoped to the campaign's GOOGLE_ADS channel. It distinguishes itself from keyword-list tools like remove_keywords_from_negative_list by specifying the channel attachment, though the 'keyword groups' vs. tool-name 'keywords' wording creates mild ambiguity.

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 'and/or' phrasing implies the two removal modes are optional and combinable, which is useful. However, there is no explicit when-to-use or when-not-to-use guidance, and it never routes the agent toward or away from similar siblings like remove_keywords_from_negative_list.

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

remove_keywords_from_negative_listRemove Keywords from Negative ListB
Destructive
Inspect

Remove keywords from a single existing Google Ads negative keyword list, matched by text.

NameRequiredDescriptionDefault
listIdYesID of the negative keyword list (from list_negative_keywords_list).
channelNoAd channel scope. Both search channels are supported. These are PER-CHANNEL resources: GOOGLE_ADS and MICROSOFT_ADS hold separate sets, and one is invisible to the other. Defaults to GOOGLE_ADS when the user does not say which.GOOGLE_ADS
keywordsYesExact keyword texts to remove. Case-sensitive whole-text match.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation risk is known. The description adds the matching rule (text-based) but does not say what happens to non-matching or partially matching keywords (silent no-op vs. error) or whether removal is reversible, which matters for a destructive 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?

A single front-loaded sentence with no filler. It is efficient, but arguably too terse for a destructive operation, leaving no room for a safety or matching-failure note.

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?

No output schema is needed, and the channel-scoping nuance lives in the schema. Still, for a destructive per-channel operation the description omits what a successful removal returns, how unmatched keywords are handled, and cross-channel visibility caveats beyond the schema text.

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 listId, channel and keywords are already fully documented, including the per-channel isolation warning and case-sensitive whole-text matching. The description's 'matched by text' adds only marginal value beyond that, so baseline 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?

States a specific verb (remove), resource (negative keyword list), scope (single existing list) and matching semantics (by text). It implicitly separates itself from remove_keywords_from_campaign and delete_negative_keyword_lists, though it never names them explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the verb and the sibling naming, but there is no explicit when-to-use guidance, no prerequisite check (e.g., list must exist, obtain listId via list_negative_keywords_list), and no pointer to the campaign-level removal alternative.

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

remove_offers_from_campaignRemove Offers from CampaignC
Destructive
Inspect

Remove offers. Lead Gen forms OR Landing Pages. from one or more channels in an existing campaign.

NameRequiredDescriptionDefault
campaign_idYesThe unique identifier of the campaign
channel_offersYesMap of channel type to list of offer names (Lead Gen form or Landing Page) to remove. Example: {"FACEBOOK": ["Demo Form"], "GOOGLE_ADS": ["Pricing LP"]}

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is known; the description adds nothing beyond that. It never says whether the removal is immediate/irreversible, whether the campaign must be live or paused, or what happens if an offer name or channel key doesn't exist.

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

Conciseness3/5

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

It is short, but the sentence is broken into fragments with misplaced periods ('Remove offers. Lead Gen forms OR Landing Pages. from one or more channels...'), which hurts front-loading and readability. The core verb and resource are still first, so it is not wasteful, just sloppy.

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 destructive mutation taking a nested map with no output schema, the description should disclose result behavior (partial success, unknown keys, per-channel outcomes) and preconditions. Those gaps leave the agent under-informed about consequences of the call.

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 channel_offers map already includes an explicit example and per-key array constraints, so the schema carries the load. The description only restates that offers are Lead Gen forms or Landing Pages and that multiple channels may be targeted, without adding format or edge-case guidance for the nested map.

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

Purpose4/5

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

States a specific verb (remove) and resource (offers of Lead Gen form / Landing Page type) scoped to channels of an existing campaign, so the operation is unambiguous. It does not name or contrast with the closely related siblings (remove_audiences_from_campaign, remove_target_groups_from_campaign, remove_channels_from_campaign), leaving that distinction implicit.

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 when-to-use, prerequisites, or alternatives are given. The agent must infer from the name alone whether this is the right removal tool versus remove_channels_from_campaign or remove_target_groups_from_campaign.

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

remove_target_groups_from_campaignRemove Targeting Groups from CampaignC
Destructive
Inspect

Remove targeting groups from one or more channels in an existing campaign.

NameRequiredDescriptionDefault
campaign_idYesThe unique identifier of the campaign
channel_target_groupsYesMap of channel type to list of targeting group names to remove. Example: {"LINKEDIN": ["Tech Decision Makers"]}

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing beyond that: it does not say whether removal is reversible, whether removal fails if a named group is absent, whether targeting data/history is lost, or whether the campaign must be paused first.

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?

A single front-loaded sentence with no filler. It is efficient, though its brevity is part of why behavioral gaps remain.

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 destructive, open-world mutation with no output schema, the description should explain consequences and error conditions. With only two parameters fully documented in the schema, the missing piece is exactly the behavioral context an agent needs before invoking a destructive call.

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%, including an example for the nested channel_target_groups map, so the schema carries the burden. The phrase 'one or more channels' adds a mild clarification that the map is multi-channel, but no format or constraint details beyond the schema.

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

Purpose4/5

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

The description gives a specific verb (remove) and a specific resource (targeting groups) plus scope (one or more channels in an existing campaign), so the operation is unambiguous. It stops short of distinguishing itself from siblings such as remove_audiences_from_campaign or remove_channels_from_campaign, which an agent must infer on its own.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this versus the other remove_* tools or the corresponding add tools. The only hint is 'in an existing campaign', which implies a campaign must already exist but is never stated as a prerequisite or exclusion.

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

resize_imageResize ImageAInspect

Make a resized copy of an image at an exact pixel size. Deterministic image processing: no AI model runs and nothing in the image is redrawn.

USE FOR: fitting an existing image (an uploaded file, a library creative, a creative made earlier) to a placement's size, e.g. LinkedIn 1200x628 or 1200x1200, Meta feed 1080x1080 or 1440x1800, Stories 1080x1920, display 300x250 or 728x90.

SIZE: give width and height for an exact size, or only one of them to scale proportionally. Each side is at most 4096 px.

WHEN THE SHAPE CHANGES (width and height given, in an aspect ratio other than the source's), fit decides:

  • pad (default): keeps the whole image, scaled to fit inside the target, and fills the empty bands with background. Nothing is cut off or distorted.

  • crop: scales the image to cover the target and trims the overflow, keeping the part named by crop_focus. WARNING: text, logos or faces near the trimmed edges are lost.

  • stretch: scales each side independently. Distorts the image; use it only when asked to. A source within 1% of the target's shape is scaled straight to the exact size.

DOES NOT: redesign or re-lay out a creative for a new shape, change the source image, or save anything to the creatives library.

OUTPUT: the URL of a NEW image (s3_url), stored temporarily outside the creatives library, with its image_size, the source's source_size, fit_applied (none when the shape was kept), the pad's background, upscaled (true when the source was enlarged, which cannot add detail and looks softer) and format. To use it in an ad, upload the URL with upload_image_creative, which gives it a NEW library id.

NameRequiredDescriptionDefault
fitNoHow to reach a target of another shape: pad, crop or stretch, as the tool description explains. Ignored when only one side is given.pad
widthNoTarget width in pixels. Omit it to scale proportionally from `height`.
heightNoTarget height in pixels. Omit it to scale proportionally from `width`.
backgroundNoWhat fills the bands `pad` adds: 'auto' (the image's own edges extended into the bands, row by row beside it or column by column above and below, so the seam shows no jump: a plain background continues as one flat color and a gradient as itself; transparent edges stay transparent), 'blur' (a blurred, enlarged copy of the image), 'transparent', or a color such as '#FFFFFF'. Ignored by crop and stretch.auto
crop_focusNoThe part of the image `crop` keeps. Ignored by pad and stretch.center
image_sourceYesURL of the image to resize: a public http(s) URL of a PNG, JPEG, WebP, GIF, BMP or TIFF image (an animation gives its first frame), such as an uploaded file, a library creative's URL, or a URL returned by an earlier creative tool. At most 25 MB and 25 megapixels; a larger JPEG is accepted when the target is small enough to decode it at a reduced scale.
output_formatNo'auto' keeps a JPEG source as JPEG and writes PNG otherwise, switching to JPEG when an opaque PNG would pass 5 MB, the image limit of most ad channels. 'png' keeps transparency; 'jpeg' puts transparent areas on white.auto

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only say readOnly=false, destructive=false, openWorld=true, so the description carries real weight and delivers: deterministic processing with no model, source image untouched, nothing written to the creatives library, output stored temporarily at a separate URL, and the honest caveat that upscaling cannot add detail and looks softer. It also warns that crop discards text/logos/faces near trimmed edges.

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?

Front-loaded one-line summary, then labelled blocks (USE FOR, SIZE, WHEN THE SHAPE CHANGES, DOES NOT, OUTPUT) with the destructive warning placed right where the risky option is described. Length is justified by a 7-parameter tool with three interacting enums; no sentence is redundant.

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 the description compensates fully by enumerating every returned field (s3_url, image_size, source_size, fit_applied, background, upscaled, format) and its meaning. Combined with the fit trade-offs, source constraints, and the required follow-up call, an agent has everything needed to invoke and chain this 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, but the description goes further than the schema by explaining the sizing rule (both sides for exact, one side for proportional, 4096 cap) and the decision logic behind fit/crop_focus/background, including which choices are ignored in which mode. The only shortfall is that a few nuances (e.g. output_format auto behavior, the 25 MB/25 MP limits) live mainly in the schema text.

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?

Opens with a precise verb+resource+outcome ('make a resized copy of an image at an exact pixel size') and immediately scopes it against the sibling family by stating no AI model runs and nothing is redrawn, which separates it from generate_brand_creative / render_flexible_creative. The DOES NOT block further fences it off from redesign tools and from upload_image_creative.

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?

An explicit 'USE FOR' section names the exact scenario (fitting an existing image to a placement's size) with concrete channel dimensions, and 'DOES NOT' enumerates what to use something else for instead. It even routes the agent forward ('upload the URL with upload_image_creative'), leaving nothing to inference.

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

restart_experiment_keywordRestart Experiment KeywordB
Destructive
Inspect

Restart a specific paused keyword in an experiment.

NameRequiredDescriptionDefault
wizExperimentIdYesThe experiment ID where the keyword is running.
keywordExternalIdYesThe external ID of the keyword to restart.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds the useful precondition that the keyword must be paused, but does not explain the consequences of a 'destructive' restart (e.g. resumed spend, effect on stats) — a notable gap given the destructive hint.

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?

A single concise sentence with the action and object front-loaded and zero waste. It is arguably too terse for a destructive mutation, but structurally efficient.

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

Completeness3/5

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

The tool is low-complexity (two required params, no output schema) and the params are fully described. However, for a destructive open-world mutation, one sentence leaves out what restarting actually restores and whether it can be reversed, so an agent must infer behavior.

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 both required parameters are documented in the schema. The description adds no further semantics about ID formats or required relationships, so the schema does the heavy lifting and baseline 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?

States a specific verb (restart) and resource (experiment keyword) with a scope qualifier (paused). An agent can distinguish it from siblings like pause_experiment_keyword and list_experiment_keywords by the action, though the sibling is not named.

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

Usage Guidelines3/5

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

Usage is implied by the precondition 'paused keyword' — use this to undo a pause. There is no explicit statement of when not to use it, no mention of the pause_experiment_keyword counterpart, and no prerequisites such as the experiment needing to be active.

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

retrieve_target_group_by_idRetrieve Target Group by IDA
Read-only
Inspect

Get detailed target group information by ID.

NameRequiredDescriptionDefault
target_group_idYesThe unique ID of the target group to retrieve. Must be a positive integer. If you don't have the ID, use list_target_groups to search by name first.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds nothing beyond them – no indication of what 'detailed' includes, what happens on a missing ID, or expected response shape.

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; the resource and lookup key come first. Nothing is repeated or wasted.

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 one required parameter, full schema coverage, and rich annotations, only a thin description is needed – and the agent can call this correctly. The remaining gap is that 'detailed information' is undefined and there is no output schema to reveal the return shape, but that is a minor omission for a simple getter.

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 single parameter already documents the positive-integer constraint and the list_target_groups fallback. The description contributes no additional meaning about the ID parameter, so the baseline 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?

States a specific verb (retrieve/get) and resource (target group) qualified by ID, so the agent knows exactly what it fetches. It does not, however, distinguish itself from siblings like list_target_groups, get_retargeting_audiences, or get_audience_details, leaving the boundary to be inferred.

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

Usage Guidelines3/5

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

Usage is only implied: 'by ID' signals this is the lookup path when an ID is already known. The explicit guidance to use list_target_groups when the ID is unknown lives in the schema's parameter description, not in the tool description, so the description itself provides no when-to-use or when-not guidance.

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

search_ads_by_namesSearch Ads by NameC
Read-only
Inspect

Search for ads by name in the Metadata platform library, with pagination.

NameRequiredDescriptionDefault
pageNoZero-based page index (default: 0). Page numbering starts at 0.
sizeNoResults per page (default: 25, recommended max: 25). Larger windows blow LLM token budgets — only request more when the caller actually needs it.
sortNoSpring sort clause, e.g. 'createdDate,desc' (default), 'id,desc', or 'name,asc'.
statusNoWhich status bucket to return. 'active' (default) is the prior active-only behaviour. 'archived' returns ONLY archived (soft-deleted) ads, which is what you need to find an ad's id for unarchive_ad. 'all' returns both active and archived in one response. Maps to the platform's status query param semantics (Set<Boolean>): active=true, archived=false, all=omit.active
ad_namesYesArray of ad names or partial names to search for (case-insensitive, partial matching)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered without the description. Beyond that the description only adds 'with pagination', a detail already restated in the page/size schema, and says nothing about result volume, matching behaviour or what the response contains. With annotations carrying most of the load this is thin added value.

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

Conciseness4/5

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

A single short sentence with the verb and resource front-loaded and no filler. It is efficient, though its brevity comes at the cost of leaving useful routing information out rather than because everything necessary was said once.

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?

A five-parameter read tool with one required array and no output schema; the schema covers parameters well, so the description needn't explain return values. However, the description leaves the agent without scope limits (how many names are sensible), result ordering expectations, or sibling routing, which is a meaningful gap for a search tool in a large toolset.

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 property texts are unusually rich (sort syntax, page numbering, status-to-platform-boolean mapping), so the schema does the heavy lifting. The description adds nothing about ad_names, status, or pagination semantics, which is the baseline 3 when structured fields are complete.

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

Purpose4/5

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

States a specific verb (search) and resource (ads by name) plus the source library, which is a clear statement of purpose. It does not distinguish itself from near-neighbours such as get_ad_details or search_library_creatives_by_name, so an agent cannot tell from the description alone which one to reach for.

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 gives no when-to-use or when-not-to-use guidance and names no alternatives. The only routing hint in the whole definition (use the archived status to find an ad's id for unarchive_ad) lives in the schema property text, not the description, so the top-level text provides no usage context.

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

search_campaigns_by_namesSearch Campaigns by NameA
Read-only
Inspect

Find wizard campaigns by partial case-insensitive names. Returns matching campaign IDs, names, statuses, and available configuration details. This resolves a campaign name to an ID for later reads or authorized changes; it does not launch or modify a campaign.

NameRequiredDescriptionDefault
campaign_namesYesArray of campaign names or partial names to search for (case-insensitive, partial matching)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the read-only, non-destructive, closed-world profile, so the description's added value is the disclosure of what comes back (IDs, names, statuses, configuration details) and the explicit statement that it does not launch or modify. It does not mention result limits, pagination, or behavior when no campaign matches.

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, front-loaded with the verb and matching rule, followed by return content and the negative scope. 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 correctly compensates by enumerating returned fields, and it clarifies the read-only resolution role. Minor gap: no guidance on empty results or the fact that multiple names can be supplied in one call.

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?

Only one parameter and schema coverage is 100%, so the schema already documents the array of names and the case-insensitive partial matching. The description restates the matching behavior but adds no multi-name semantics (e.g. union vs. per-name results) beyond what the schema says.

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 (find/search) and resource (wizard campaigns) plus the matching semantics (partial, case-insensitive). It is clearly distinguishable from siblings like list_wizard_campaigns (enumerate all), get_campaign_by_wizard_id (lookup by ID), and search_campaigns_by_utm_value (different key).

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 frames the tool as name-to-ID resolution for later reads or authorized changes, and explicitly excludes launching or modifying campaigns. It stops short of naming the alternative siblings (list_wizard_campaigns, get_campaign_by_wizard_id, search_campaigns_by_utm_value) that an agent should pick when it already has an ID or UTM value.

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

search_campaigns_by_utm_valueSearch Campaigns By UTM ValueB
Read-only
Inspect

Find wizard campaign channels whose resolved UTM parameters contain a specified value. Returns matching campaigns, channels, values, and origin information with pagination. Inherited account or platform values are included; a stored mapping identical to its inherited default cannot be distinguished from inheritance.

TRACKING TIMING AND TOKEN MEANING: Leads using server-resolved campaign UTMs use the current saved mapping when the platform processes them, without waiting for an ad republish. Captured URL or caller-supplied values can follow a different ingestion path, so do not generalize this timing to every new lead. Native click-time macros retain values captured from the lead's click URL. Ad click URLs have a separate publication timeline: a draft uses the saved mapping at launch, and launched ads use it on their next campaign publish. Saving a launched Microsoft Ads campaign triggers a live UTM push. AD_NAME is a dynamic token, not necessarily an individual ad name: standard experiments use their ad group name when present, otherwise their creative name; native ad structures use the native ad's own name. CAMPAIGN_NAME uses the wizard campaign name. Saving a launched campaign can also queue an asynchronous existing-lead UTM refresh. Do not assume historical rows are immutable or that all old rows have already refreshed. Verify the saved mapping with get_campaign_utms and actual lead values and ingestion timing separately from live ad click URLs; a supplied or backfilled lead creation date alone does not prove when its UTMs were resolved.

NameRequiredDescriptionDefault
nameNoOptional: additional server-side campaign name substring filter.
pageNo0-based page index. Default: 0
sizeNoResults per page. Default: 25
statusNoCampaign-level status filter. Comma-separated subset of Draft, Launched, Finished. Omit to include all three.
sort_byNoField to sort by. Default: createdDate
utm_valueYesCase-insensitive substring to look for in the campaigns' effective UTM values (e.g. 'UPDATE ME'). Minimum 3 characters.
sort_orderNoSort order. Default: desc
visibilityNoOptional: filter by campaign visibility. Omit to include all.
experiment_statusesNoExperiment-level status filter. Comma-separated subset of Active, WithoutSpend, Paused, Completed, Failed. Omit to include all five.

TDQS

B3.2/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint/destructiveHint already cover the safety profile), the description adds genuinely useful behavior: paginated results containing campaigns, channels, values and origin, inclusion of inherited account/platform values, and the caveat that a stored mapping identical to its inherited default cannot be distinguished. It also warns that historical rows may not be immutable due to async refresh — real result-semantics information not present in structured fields.

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

Conciseness2/5

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

The first paragraph is well front-loaded, but the following 'TRACKING TIMING AND TOKEN MEANING' block is longer than the actual tool description and is mostly about lead ingestion timing, ad publish timelines and AD_NAME token expansion — background that does not help an agent select or invoke this search tool.

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

Completeness3/5

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

For a read-only search with full schema coverage and no output schema, the essential pieces (what matches, what is returned, pagination, inheritance caveat) are present. However, the disproportionate timing discussion crowds out the missing piece — explicit guidance on choosing this tool over its sibling searches — leaving the definition adequate but not fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so paging, status, sort and visibility semantics are already documented; baseline is 3. The description does clarify that matching runs against resolved/effective UTM values including inherited ones, which sharpens the meaning of the required utm_value parameter, but adds nothing about the other eight 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 opening sentence names a specific verb (find), resource (wizard campaign channels) and match criterion (resolved UTM parameters containing a value), plus the return shape. It is clear what the tool does, but it never names or contrasts the obvious siblings (search_campaigns_by_names, list_wizard_campaigns, get_campaign_utms), so sibling differentiation is left to inference.

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

Usage Guidelines2/5

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

There is no explicit statement of when to use this tool versus search_campaigns_by_names or list_wizard_campaigns; the only routing hint is a passing reference to verifying a saved mapping with get_campaign_utms. The bulk of the text is cautionary background about lead UTM timing rather than selection guidance.

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

search_experiment_recipesSearch Campaign RecipesA
Read-only
Inspect

Search aggregate historical campaign configurations by channel, format, audience type, and bid strategy. Returns recipes, tabular columns and rows, confidence, and suppressed_below_k. Results describe historical configurations, not guaranteed outcomes or the current account's performance. Named-company queries are refused and small cohorts are suppressed.

NameRequiredDescriptionDefault
queryYesNatural-language description of a campaign configuration.
channelNoOptional channel filter.
ad_formatNoOptional ad-format filter.
num_resultsNoNumber of recipes, default 5.
bid_strategyNoOptional bid-strategy filter.
audience_typeNoOptional audience-type filter.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior5/5

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

Beyond the readOnly/openWorld annotations, the description discloses substantive behavior: named-company queries are refused, small cohorts are suppressed, and responses carry confidence and suppressed_below_k metadata. It also sets an interpretive boundary that results are historical aggregates rather than live performance.

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?

Four sentences, front-loaded with purpose before return shape and caveats. Dense and mostly waste-free, though the caveat sentence could be tightened slightly.

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?

With an output schema present, the description needn't explain return fields — yet it still names the key outputs (recipes, columns/rows, confidence, suppressed_below_k) and covers refusal and suppression constraints. Nothing critical for a correct call 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 every parameter is already documented in the schema. The description echoes the filter dimensions (channel, format, audience type, bid strategy) but adds no syntax, allowed values, or semantics beyond what the schema provides, and omits num_results entirely — baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource — search aggregate historical campaign configurations — and enumerates the filter dimensions (channel, format, audience type, bid strategy). This distinguishes it from siblings like search_experiments, though it never names those alternatives explicitly.

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

Usage Guidelines3/5

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

It gives useful context about what the results represent ('historical configurations, not guaranteed outcomes or the current account's performance') and when queries are refused, which implicitly steers usage. However, it never says when to prefer this tool over a sibling like search_experiments or experiment_performance_stats, leaving the choice to inference.

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

search_experimentsSearch ExperimentsC
Read-only
Inspect

Search for experiments by name, status, and budget group with flexible filtering.

NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 0)
sizeNoNumber of results per page (default: 5)
sortNoSort criteria in format 'field,direction' (e.g., 'name,asc')
search_nameNoThe experiment or campaign name to search for (partial, case-insensitive matching). Optional - omit to skip name filtering.
budget_group_idsNoOptional array of budget group IDs to filter experiments. Only returns experiments that belong to these budget groups.
launched_experiment_statusesNoOptional array of experiment statuses to filter by. Valid values: Active, WithoutSpend, Paused, Completed, Failed, Disconnected

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered without description help. The description adds nothing beyond that - no pagination behavior, no result caps, no statement of what filtering combination is required (all optional).

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?

One short front-loaded sentence with the searchable dimensions stated early. The trailing 'with flexible filtering' is filler that does not add information, keeping it just below a top score.

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?

Six optional parameters with no required inputs and no output schema mean the agent must know what a result set looks like and how many come back by default - neither is stated in the description. Adequate for calling the tool, but short of what a conditional-filter search tool should disclose.

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%: every parameter, including defaults for page/size, sort format, partial matching for search_name, and the valid status enum, is documented in the schema. The description only restates three filter dimensions, so it adds no syntax or semantics beyond the structured fields - baseline 3.

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

Purpose4/5

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

Names a specific verb ('Search') and resource ('experiments') plus the three filter dimensions (name, status, budget group), so the operation is unambiguous. It does not distinguish itself from nearby siblings such as search_experiment_recipes or manage_experiment, so an agent still needs to infer which experiment tool fits.

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 statement of when to use this tool rather than manage_experiment, experiment_performance_stats, or search_experiment_recipes, and no prerequisites or exclusions. 'Flexible filtering' implies broad applicability but provides no decision criteria.

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

search_insights_criteria_fieldsSearch Insights Criteria FieldsA
Read-only
Inspect

Discover the fields an Insights (Spotlight) account-journey segment can filter on: the exact field names, their type, the operators each accepts, and the picklist options.

NameRequiredDescriptionDefault
search_keywordsNoOptional keywords matched against field names and labels, e.g. ['impressions', 'score']. Omit for the whole catalog.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish this as a safe read-only, non-destructive, non-open-world operation. The description adds useful behavioral context about what the tool returns: exact field names, types, accepted operators, and picklist options. It stops short of describing result shape or pagination, but that is a minor gap given the annotations and simple discovery scope.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. Its colon-delimited list efficiently communicates the returned field metadata.

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, read-only discovery tool with one fully described optional parameter and no output schema, the description is largely complete because it explains the returned metadata. It could be stronger if it clarified the result shape or the effect of omitting search_keywords, though the schema covers the latter.

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 single optional search_keywords parameter is fully documented in the schema. The description does not mention search_keywords or explain how keyword matching affects the catalog, so it adds no parameter semantics beyond the schema baseline.

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

Purpose4/5

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

The description states a specific verb (Discover) and resource (fields an Insights/Spotlight account-journey segment can filter on), and enumerates the returned metadata: field names, types, operators, and picklist options. It is clear, but it does not explicitly distinguish this from nearby criteria-search or segment-criteria siblings.

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

Usage Guidelines3/5

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

Usage is strongly implied: call this to discover filterable Insights segment fields before constructing criteria. However, the description gives no explicit when-to-use/when-not-to-use guidance and names no alternative tools such as search_target_group_criteria or get_segment_criteria.

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

search_library_creatives_by_nameSearch Creative Library (Images, Videos, GIFs, Documents)B
Read-only
Inspect

Search or list creative assets in the library by name, across ALL content types. images, videos, GIFs and documents. Returns detailed information about matching assets with pagination support.

NameRequiredDescriptionDefault
pageNoZero-based page index (default: 0).
sizeNoResults per page (default: 10, recommended max: 10). Larger windows blow LLM token budgets — only request more when the caller actually needs it.
sortNoSpring sort clause, 'field,direction' (default: 'id,desc'). The platform binds a full Pageable to this endpoint, so any ImageLibrary column works: labelName, createdDate, contentType, sizeInKb, width, height, status, id. WARNING: sort on labelName for the display name. 'name' holds the generated UUID that doubles as the S3 object key, so sorting on it produces an order no person can read.
contentTypesNoFilter by content types (comma-separated). Supported values: IMAGE,VIDEO,GIF,DOCUMENT. Example: IMAGE,VIDEO or IMAGE%2CVIDEO%2CGIF%2CDOCUMENT
creativeNameNoName or partial name of the creative to search for. Supports partial matching and is case-insensitive. Omit to list all creatives.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is settled. The description adds only that results come back 'with pagination support' and are 'detailed', which the schema's page/size fields already convey; it says nothing about result caps, match ranking, or auth scope.

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

Conciseness3/5

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

It is short and front-loaded, but the second sentence is punctuation-broken ('across ALL content types. images, videos, GIFs and documents.') and the content-type enumeration merely repeats the title and the contentTypes enum.

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, no-output-schema search tool, the description plus a very detailed schema covers what an agent needs to invoke it: what it searches, all content types by default, and that results are paginated. The missing pieces (what 'detailed information' means, match ordering) are minor given the schema richness.

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 parameter docs are unusually rich (sort warning about labelName vs the UUID 'name', token-budget advice on size, enum values for contentTypes). The description contributes no parameter meaning beyond 'by name', so the baseline 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?

States a specific verb and resource ('Search or list creative assets in the library') plus the scope qualifier 'across ALL content types', which is more than a restated name. It does not, however, distinguish itself from nearby siblings such as fetch_creative_details or search_ads_by_names, so an agent cannot tell from the description alone which one to pick.

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

Usage Guidelines3/5

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

Usage is implied by 'Search or list ... by name' and the schema note that omitting creativeName lists all, but the description itself gives no explicit when-to-use, when-not-to-use, or alternative tool (e.g. fetch_creative_details for full asset detail). The agent must infer the routing from the schema fields.

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

search_linkedin_engagement_sourcesSearch LinkedIn Engagement SourcesB
Read-only
Inspect

Find which LinkedIn campaigns or pages to retarget, for a chosen engagement source type.

NameRequiredDescriptionDefault
limitNoHow many candidates to return. Default 12, max 100. Results are the TOP N by engagement, not the whole account.
searchNoNarrow candidates by name (case-insensitive substring). Use when the user named a specific campaign, or when the account has more campaigns than `limit`.
engagement_triggerNoAn `engagementTrigger` valid for this source type. Pass together with lookback_window_days to get `engagementCount` per candidate, sorted highest-first. Use the same trigger you will create the audience with.
lookback_window_daysNoWindow the engagement counts are measured over. Pass together with engagement_trigger, and use the same value you will create the audience with.
engagement_source_typeYesAn `engagementSourceType` from get_linkedin_engagement_source_types (e.g. VIDEO_ADS, SINGLE_IMAGE_ADS, DOCUMENT_ADS, CONVERSATION_ADS, LEAD_GEN_FORMS, ORGANIZATION_PAGES). WEBSITE is not valid here — it has no sources to pick.

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so safety is covered. Beyond that the description adds almost nothing: it does not say results are capped to the top N by engagement (limit is per-the-schema), does not mention sorting when engagement_trigger is supplied, and offers no rate-limit, pagination, or empty-result context.

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?

A single front-loaded sentence with zero filler, and the scope qualifier is placed up front. It is efficient, but at one short sentence it leans toward under-specification rather than model conciseness for a five-parameter tool in a multi-step workflow.

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

Completeness3/5

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

With 100% schema coverage and no output schema, the structured fields do most of the work, so the bar is moderate. However, this tool sits inside a three-step LinkedIn retargeting flow (list source types -> search sources -> create audience) and the description never states that ordering, leaving the agent to reconstruct it from parameter text.

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 of 3 applies; each parameter's meaning, enum, defaults and the engagement_trigger/lookback_window_days pairing are fully documented in the schema itself. The description only echoes the required engagement_source_type constraint ('for a chosen engagement source type') and adds no syntax or format detail beyond the schema.

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

Purpose4/5

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

Specific verb ('Find') plus a specific resource ('LinkedIn campaigns or pages' as retargeting sources) scoped by a 'chosen engagement source type'. An agent can tell this is a candidate-discovery call rather than a create/list-types call, though it never names the closest siblings (get_linkedin_engagement_source_types, create_linkedin_engagement_retargeting_audience) to sharpen the boundary.

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 'to retarget, for a chosen engagement source type' implies this is a pre-step before building a retargeting audience, but that workflow is only inferred. There is no explicit when-to-use / when-not-to-use statement and no mention of the required prerequisite call to get_linkedin_engagement_source_types, which lives only in the schema text.

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

search_ma_listsSearch Marketing Automation ListsA
Read-only
Inspect

Search destination lists in the connected marketing-automation integration by name. Returns lists containing listId and name. An empty array indicates no matching list or no connected integration. List IDs belong to this account and can be used by set_default_ma_list.

NameRequiredDescriptionDefault
nameYesFree-text search string to filter destination lists by name.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover readOnly/non-destructive/closed-world, and the description adds value beyond them: it declares the return shape (listId and name) and, importantly, disambiguates an empty array as either no match or no connected integration. Scope/authorship of IDs ('belong to this account') is also 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?

Three short sentences, front-loaded with the action, then return shape, then the edge case and follow-on tool. No filler 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?

With no output schema, the description correctly carries the return-value burden (lists with listId and name) and covers the empty-result and integration-missing cases. Matching behavior is left entirely to the schema's 'free-text' wording, a minor gap for a single-parameter search 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?

With a single parameter and 100% schema description coverage, the schema already defines 'name' as a free-text filter. The description restates 'by name' but adds no matching semantics (substring vs. exact, case sensitivity), so it holds at the baseline.

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

Purpose4/5

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

States a specific verb and resource ('Search destination lists ... by name') scoped to the connected marketing-automation integration, which clearly separates it from generic list tools. It does not explicitly name the sibling it contrasts with (list_marketing_automation_lists), so differentiation is implied by 'by name' 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?

Explains the empty-array case ('no matching list or no connected integration') and names the downstream tool that consumes the result (set_default_ma_list), giving the agent clear context for using the output. It stops short of explicitly saying when to prefer this over enumerating via list_marketing_automation_lists.

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

search_reddit_criteriaSearch Reddit Target Group CriteriaA
Read-only
Inspect

Get available Reddit targeting criteria and their reference values (externalId + name) for target group creation.

NameRequiredDescriptionDefault
search_termsNoSearch keywords (min 2 characters). Required for communities/interests/keywords. Example: ['technology']
criteria_typeYesType of Reddit criteria to search. communities/interests/keywords require search_terms; locations returns countries/states (search_terms optional).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered; the description usefully adds that results come back as externalId + name pairs. It does not disclose result caps, pagination, or what happens when a search returns nothing — meaningful gaps for an external search tool, which is why it's a 3 rather than higher.

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 sentence that front-loads the resource and the return contract with no filler. Nothing could be removed without losing information.

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

Completeness4/5

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

There's no output schema, and the description compensates by stating the returned fields, which is the key thing an agent needs before wiring this into target group creation. Result volume and the differing behavior for 'locations' are left to the schema, a minor residual gap.

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

Parameters3/5

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

Schema description coverage is 100% and the enum plus the search_terms requirements (min 2 chars, required for communities/interests/keywords) are fully documented in the schema. The description adds nothing about parameters itself, so the baseline 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?

Names a specific verb and resource (get Reddit targeting criteria) and even specifies the returned shape (externalId + name) and the downstream use case (target group creation). It doesn't distinguish itself from the sibling search_target_group_criteria, so an agent could plausibly confuse the two.

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

Usage Guidelines4/5

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

The phrase 'for target group creation' gives a clear context in which to reach for this tool, which is more than most definitions in this set provide. It stops short of stating when to prefer it over search_target_group_criteria or when not to call it, so there are no explicit exclusions.

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

search_target_group_criteriaSearch Target Group CriteriaA
Read-only
Inspect

Get available criteria and their supported values (names and IDs) for target group creation/updates.

NameRequiredDescriptionDefault
channelYesThe advertising channel for which to retrieve criteria. Only LINKEDIN is supported.
exact_matchNoWhether to require exact matches in search (default: true). Set to false for broader/fuzzy matching.
search_termsNoArray of search keywords for search-based criteria (job-title, member-groups, interests, traits). Example: ['engineer', 'developer']
criteria_typeNoType of targeting criteria to retrieve or search. List-based (returns predefined options): - age-ranges: Age range segments - company-categories: Company type classifications - company-growth-rates: Company growth classifications - revenues: Company revenue ranges - employees: Employee count ranges - industry-taxonomy: Industry classification - jobFunctions: Job function categories - seniority: Seniority levels - followed-companies: Company follow options - locations: Geographic locations (countries, states, cities) - MANDATORY as first criteria for LinkedIn Search-based (requires search_terms): - job-title: Search job titles - member-groups: Search LinkedIn groups - member-skills: Search LinkedIn member skills - interests: Search interests/topics - traits: Search behaviors/characteristics
reference_typeNoSpecific reference type for search operations (LinkedIn only). Auto-determined from criteria_type and channel if not provided.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered and the bar is lower. The description contributes that names and IDs are returned, but says nothing about result size, pagination, or rate limits for a criteria-lookup that can return large option sets.

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?

One tightly written sentence with the resource and scope front-loaded and no filler. Every clause carries 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 read-only lookup with full schema coverage and safety annotations, plus no output schema, this covers enough: what it returns (names and IDs) and why you'd call it. A note on pagination or typical response volume would push it 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% and the detailed criteria_type enum documentation (search-based vs list-based, locations mandatory first) lives there, so the schema carries the semantics. The description adds only the parenthetical 'names and IDs', no new parameter meaning; baseline 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?

A specific verb (get) plus a clearly scoped resource (criteria and their supported values/IDs for target group creation/updates). It is distinct from create_target_group, update_target_group, and retrieve_target_group_by_id, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

The phrase 'for target group creation/updates' implies the context in which to call it, which is useful. However, there is no explicit statement about when to use this tool instead of retrieve_target_group_by_id, get_segment_criteria, or list_target_groups, and no exclusions — the agent must infer routing.

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

set_campaign_utmsSet Campaign UTMsA
Destructive
Inspect

Set or clear the UTM parameters for one channel of a wizard campaign, merging the supplied changes into the existing mapping. Returns the updated tracking settings or an error. Clearing a stored mapping restores inheritance from the account or platform defaults; it does not disable tracking. Account-level defaults remain unchanged. A saved mapping applies to incoming server-resolved leads immediately; publishing ad click URLs follows a separate timeline.

TRACKING TIMING AND TOKEN MEANING: Leads using server-resolved campaign UTMs use the current saved mapping when the platform processes them, without waiting for an ad republish. Captured URL or caller-supplied values can follow a different ingestion path, so do not generalize this timing to every new lead. Native click-time macros retain values captured from the lead's click URL. Ad click URLs have a separate publication timeline: a draft uses the saved mapping at launch, and launched ads use it on their next campaign publish. Saving a launched Microsoft Ads campaign triggers a live UTM push. AD_NAME is a dynamic token, not necessarily an individual ad name: standard experiments use their ad group name when present, otherwise their creative name; native ad structures use the native ad's own name. CAMPAIGN_NAME uses the wizard campaign name. Saving a launched campaign can also queue an asynchronous existing-lead UTM refresh. Do not assume historical rows are immutable or that all old rows have already refreshed. Verify the saved mapping with get_campaign_utms and actual lead values and ingestion timing separately from live ad click URLs; a supplied or backfilled lead creation date alone does not prove when its UTMs were resolved.

NameRequiredDescriptionDefault
utmsYesUTM key to value, e.g. {"UTM_SOURCE": "Linkedin", "UTM_MEDIUM": "paid-social", "UTM_CAMPAIGN": "DG_Touch-3_TAG", "UTM_CONTENT": "AD_NAME"}. Empty string clears a key.
channelYesThe enabled channel whose UTM mapping to edit.
campaign_idYesWizard campaign id (the `id` from list_wizard_campaigns).

TDQS

A4.4/5.0
Behavior5/5

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

Annotations mark it destructive/non-readonly, and the description adds substantial context: clearing restores inheritance rather than disabling tracking, account defaults are untouched, saved mappings apply immediately to server-resolved leads, ad click URLs follow a separate publish timeline, and a launched Microsoft Ads save triggers a live push plus async existing-lead refresh. This is exactly the extra context annotations cannot carry.

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

Conciseness3/5

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

The core action is front-loaded well, but the body is long and repetitive with multiple restated cautions about timing ('do not generalize this timing,' 'do not assume historical rows are immutable'). Some warnings could be consolidated without losing meaning.

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 3-parameter mutation tool with no output schema and destructive annotations, the description covers timing, inheritance, and verification well. It stops short of stating permission/auth requirements or the concrete error conditions it returns, which leaves a small 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 coverage is 100%, so the baseline is 3, but the description adds real value beyond the schema by defining what AD_NAME and CAMPAIGN_NAME tokens resolve to in different ad structures. It doesn't add much beyond the schema's own 'empty string clears a key' and merge notes, hence not a 5.

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?

Specific verb (set/clear) plus resource (UTM parameters for one channel of a wizard campaign) and scope, plus merge semantics are stated in the first sentence. It effectively distinguishes itself from the read counterpart by naming get_campaign_utms for verification and from account-level tools by noting account defaults remain unchanged.

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 implies when to use it (editing one channel's UTM mapping with partial merge) and points to get_campaign_utms to verify results. It explains what clearing does (restores inheritance) but doesn't explicitly contrast with sibling setters like set_search_channel_final_url_suffix or get_account_utm_defaults.

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

set_default_ma_listSet Default Marketing Automation ListAInspect

Set the account’s default marketing-automation destination list by a resolved list_id from search_ma_lists. The default affects newly created campaign channels; existing channels retain their captured values. Returns the updated setting or a failure such as PERMISSION_DENIED or DISCONNECTED. Account marketing-automation write access is required.

NameRequiredDescriptionDefault
list_idYesA concrete list id already resolved via search_ma_lists. Never invent or guess one.

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: the change is non-destructive in scope (existing channels keep their captured values), it requires marketing-automation write access, and it can return PERMISSION_DENIED or DISCONNECTED. The annotations only declare readOnly/destructive/openWorld flags; the description tells the agent what the mutation actually touches and what conditions can cause failure.

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?

Four short sentences with no filler. The core write action and its parameter source come first, followed by the effect scope, failure modes, and permission requirement in a logical order.

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?

No output schema exists, but the description covers the return shape (updated setting or PERMISSION_DENIED/DISCONNECTED) and the permission prerequisite. For a single-parameter mutation tool, an agent has everything needed 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 sole parameter is already documented as 'a concrete list id already resolved via search_ma_lists. Never invent or guess one.' The description's 'resolved list_id from search_ma_lists' restates that guidance, so it adds little beyond what structured data already provides. 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: 'Set the account's default marketing-automation destination list'. The description makes the object concrete enough to separate from get_default_ma_list (read) and clear_default_ma_list (unset) without consulting 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?

Clearly explains that the list_id must come from a prior search_ma_lists resolution and clarifies the scope of effect ('newly created campaign channels; existing channels retain their captured values'). However, it never mentions clear_default_ma_list as the way to unset the default, even though that sibling exists, leaving the inverse operation to inference.

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

set_landing_subdomainSet Landing Page SubdomainA
Destructive
Inspect

Set the account’s generated landing-page subdomain once. Returns the claim status or a validation error. Existing claims cannot be changed or released through this tool; an empty subdomain is rejected.

NameRequiredDescriptionDefault
subdomainYesNon-empty lowercase subdomain, 1 to 63 characters. Existing claims cannot be changed or released through this tool.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare a destructive, non-read-only, closed-world operation; the description adds real context beyond that: the one-shot irreversibility (existing claims cannot be changed or released) and the return shape (claim status or validation error). This is meaningful 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?

Three short sentences, front-loaded with the core action, then return behavior, then constraints. 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?

No output schema exists, and the description compensates by stating what is returned (claim status or validation error). For a single-parameter mutation with full annotation coverage, this is essentially 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?

Only one parameter and the schema already documents it fully at 100% coverage (pattern, length, non-empty). The description's note that empty subdomains are rejected is mildly additive but largely duplicates minLength/pattern constraints.

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

Purpose4/5

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

States a specific verb ('Set') and resource ('the account's generated landing-page subdomain') plus the one-time constraint. An agent knows exactly what it does, though there is no sibling overlap to explicitly differentiate against.

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 signals when the tool applies ('once') and when it does not ('Existing claims cannot be changed or released through this tool'), which functions as an explicit exclusion. No named alternative tool, but none is apparent among siblings.

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

set_search_channel_final_url_suffixSet Final URL Suffix on a Search ChannelA
Destructive
Inspect

Set or clear the Final URL Suffix on a wizard campaign's search channel (Google Ads or Microsoft Ads). The suffix is appended to every final URL the platform serves. typically UTM parameters for tracking (utm_source, utm_medium, utm_campaign, ...).

NameRequiredDescriptionDefault
channelYesWhich search channel on the campaign to update. Final URL Suffix is only supported on these two.
campaign_idYesThe unique identifier of the wizard campaign.
final_url_suffixYesTracking suffix appended to every final URL on this channel. Format: key=value pairs separated by `&`. Allowed characters: A–Z a–z 0–9 . _ ~ = & { } - or %XX percent-encoded. Pass empty string "" to clear.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the bar is lower; the description adds real value by explaining the blast radius ('appended to every final URL the platform serves') and that clearing is supported. It stops short of saying the existing suffix is overwritten wholesale or what validation errors occur, but the mutation scope is disclosed.

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

Conciseness4/5

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

Two sentences, front-loaded with the verb and resource, no filler. The second sentence is slightly malformed as a fragment ('The suffix is appended..., typically UTM parameters...'), which costs a point but not readability.

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?

No output schema, but the tool is a simple three-parameter mutation with fully documented parameters and a disclosed effect on served URLs. Missing only edge details such as overwrite semantics for an existing suffix and failure modes, which are minor for this operation.

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

Parameters3/5

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

Schema coverage is 100%, with format, allowed characters, max length, empty-string-clears behavior, and the channel enum all documented in the schema. The description's only addition is that the suffix is 'typically UTM parameters for tracking (utm_source, utm_medium, ...)', which is marginal but does illustrate intent.

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

Purpose4/5

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

States a specific verb (Set or clear) plus a precise resource (Final URL Suffix on a wizard campaign's search channel), and scopes the valid channels to Google Ads or Microsoft Ads. It is distinguishable from siblings like set_campaign_utms and set_search_channel_locations, though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

The phrase 'Set or clear' signals both operating modes, which is useful. However, it gives no guidance on when to use this versus set_campaign_utms or set_search_channel_locations, nor any prerequisites (e.g., campaign must be a wizard campaign, channel must be connected) beyond what the schema enum implies.

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

set_search_channel_locationsSet Geo Targeting on a Search ChannelB
Destructive
Inspect

Set the geographic targeting of a wizard campaign's search channel (Google Ads or Microsoft Ads). which countries/states the campaign serves in, and which countries to exclude.

NameRequiredDescriptionDefault
statesNoUS state NAMES to target, e.g. ["Texas", "California"]. REPLACES the channel's current states. Pass [] to clear. Omit to leave unchanged. US states only.
channelYesWhich search channel on the campaign to update. Geo targeting is set per channel and only these two carry it.
countriesNoCountry NAMES to target, e.g. ["United States", "Canada"]. REPLACES the channel's current countries. Pass [] to clear (targets all locations). Omit to leave unchanged.
campaign_idYesThe unique identifier of the wizard campaign.
excluded_countriesNoCountry NAMES the campaign must NOT serve in, e.g. ["India"]. REPLACES the channel's current exclusions. Pass [] to clear them all. Omit to leave unchanged. Country-level only — states cannot be excluded.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is carried by structured data. The description adds useful scoping (geo is set per channel and only these two channels carry it) but does not disclose the replace-vs-omit semantics, which live only in the schema parameter descriptions, nor what happens to prior targeting.

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

Conciseness3/5

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

Only two sentences and the core action is front-loaded, but the second sentence is a dangling fragment missing its verb ('which countries/states the campaign serves in...'), which slightly obscures rather than tightens the message.

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 5-parameter destructive mutation with no output schema, the description covers purpose and scope but is silent on return/confirmation behavior and on preconditions (e.g., whether the campaign must be unlaunched), leaving the agent to infer whether the call is a one-shot overwrite.

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 parameter descriptions are unusually rich (REPLACES / [] to clear / omit to leave unchanged / US states only / country-level exclusions only). The description adds nothing beyond that, so the baseline 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?

States a specific verb and resource: set geographic targeting on a wizard campaign's search channel, limited to Google Ads or Microsoft Ads, covering included countries/states and excluded countries. It's clear enough to distinguish from generic campaign tools, but it never names the natural read counterpart (get_campaign_targeting_locations), so sibling differentiation is only implied.

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

Usage Guidelines3/5

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

Usage is implied by the scope statement (per-channel geo on wizard campaigns) but there is no explicit when-to-use/when-not, no mention of checking existing targeting first via get_campaign_targeting_locations, and no prerequisite context such as campaign launch state.

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

unarchive_adUnarchive AdAInspect

Unarchive (restore) one or more previously archived ads.

NameRequiredDescriptionDefault
idsYesAd id(s) to unarchive. At least one integer required; pass multiple to restore in bulk.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so safety profile is covered. The description adds that the operation is a restore of previously archived ads and supports bulk restore, but says nothing about permissions, reversibility, or behavior on non-archived/invalid ids — relevant gaps for a mutation with no output 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?

One short sentence, front-loaded with the action and immediately followed by the object. Nothing redundant or padded.

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 one-parameter mutation with full schema coverage and annotations covering the safety profile, the description is adequate to call the tool correctly. It falls short only on edge-case behavior (invalid ids, ads not in archived state) which an agent might want before bulk-calling.

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 single parameter is fully documented, including bulk semantics and minItems, so the schema does the heavy lifting. The description's 'one or more' is consistent with the schema but adds no syntax or constraint detail beyond it; baseline 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?

Specific verb (unarchive/restore) plus resource (ads), with 'previously archived' clarifying the state transition. It does not name the inverse sibling archive_ad explicitly, so differentiation is inferred 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 Guidelines3/5

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

Usage is implied by 'previously archived' — the agent can infer this only applies to ads currently in the archived state. There are no explicit preconditions, no guidance on what happens if an ad is not archived, and no mention of alternatives such as re-creating or re-adding an ad via create_update_* tools.

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

unarchive_audienceUnarchive AudienceBInspect

Restore an archived custom audience by ID. Returns the platform operation result or an error.

NameRequiredDescriptionDefault
audience_nameNoThe name of the custom audience to unarchive. If provided without custom_audience_id, the tool will search for the audience by name to resolve the ID.
custom_audience_idNoThe numeric ID of the custom audience to unarchive.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare this is a non-readonly, non-destructive, closed-world mutation, so the safety profile is covered. The description adds only that it returns the platform operation result or an error, saying nothing about what happens if the audience is not archived or whether archived state is validated.

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 short sentences with the action front-loaded and no filler. The second sentence ('Returns the platform operation result or an error') is near-boilerplate but earns some place by hinting at the response shape.

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

Completeness3/5

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

With no output schema and zero required parameters, the description should state that at least one of audience_name or custom_audience_id is needed and what resolution behavior to expect; it leaves that entirely to the schema. Adequate but with a real gap for an agent choosing between the two identifiers.

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 full descriptions for both audience_name and custom_audience_id, so baseline is 3. The description's 'by ID' framing actually adds a misleading constraint that the schema's name-lookup fallback contradicts, rather than clarifying either parameter.

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?

Specific verb and resource ("Restore an archived custom audience by ID") that clearly reads as the inverse of archive_audience. It does not name or distinguish itself from near siblings such as unarchive_ad or unarchive_campaigns, though the resource type does most of that work.

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

Usage Guidelines2/5

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

No guidance on when to use this versus archive_audience, list_audiences, or get_audience_details, and no prerequisites (e.g., whether the audience must already be archived). The 'by ID' phrasing also undercuts the schema's documented name-based resolution path without explaining when to use which.

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

unarchive_campaignsUnarchive CampaignsBInspect

Put archived campaigns back, with a result per campaign.

NameRequiredDescriptionDefault
campaign_idsYesThe ids of the campaigns to unarchive (1 to 50)
confirm_pending_launch_idsNoCampaigns, among campaign_ids, whose pending launch (and spend) the user agreed to resume

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare the mutation is non-readonly, non-destructive, and open-world. The description adds useful behavioral context with 'with a result per campaign,' suggesting partial per-item outcomes, but does not discuss the pending-launch confirmation or any side effects around resumed spend.

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 efficient sentence with the core action front-loaded. It does not waste words, though the trailing 'with a result per campaign' is a bit vague for the complexity of the operation.

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

Completeness2/5

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

For a mutation tool with an optional parameter specifically about resuming pending launches and spend, the description omits this important behavior. No output schema exists, and 'result per campaign' is too vague to fully convey the partial-success semantics.

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, including the optional confirm_pending_launch_ids, are fully documented in the schema. The description does not add meaning 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.

Purpose4/5

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

The description states a specific verb phrase, 'Put archived campaigns back,' and names the resource, campaigns. It is clear what the tool does, though it does not explicitly distinguish itself from sibling archive_campaigns or unarchive_ad.

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 gives no explicit guidance on when to use this tool versus alternatives, no prerequisites, and no mention of when not to use it. The intended usage is only implied by the verb 'unarchive.'

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

update_brand_kitUpdate Brand KitC
Destructive
Inspect

Update existing brand kit with brand DNA parameters. Only company_url is required; all others are optional.

NameRequiredDescriptionDefault
dosNoBrand 'do' rules.
toneNoBrand tone description.
dontsNoBrand 'don't' rules.
fontsNoLegacy flat font list. Each: {name, type}. Layered creatives do not read it: use headline_font and body_font.
colorsNoLegacy flat color list. Each: {hex (with #), type, name?}.
taglineNoPrimary brand tagline.
cta_fontNoCTA/button font family. Layered creatives do not read it: their CTA uses body_font.
cta_sizeNoCTA/button font size.
logo_urlNoDirect URL to a single company logo image (back-compat; prefer logo_urls). Setting a permanent brand logo requires elevated Metadata permissions.
body_fontNoBody text font family. Layered creatives set the supporting line, the CTA and any other text in it.
body_sizeNoBody text font size.
logo_urlsNoOne or more direct URLs to logo images to set as the brand's permanent logo(s). Each uploaded logo is automatically expanded into clean, persisted variants (transparent, high-res, and both a light and dark version when the mark is a single color) so generated creatives have multiple usable options. Setting a permanent brand logo requires elevated Metadata permissions.
cta_weightNoCTA/button font weight.
body_weightNoBody text font weight.
clear_logosNoRemove the brand kit's permanent logo override entirely (no logo_url needed), so creatives fall back to the cached Brandfetch logo variants for the domain. Use when a manually set logo turned out wrong or low quality. Same elevated Metadata permissions as setting one.
company_urlYesCompany website URL or domain (e.g. 'ambient.ai').
logo_misuseNoList of logo misuse rules.
button_shapeNoButton shape description.
eyebrow_caseNoEyebrow text case rule.
eyebrow_fontNoEyebrow font family. Layered creatives do not read it: use body_font.
logo_on_darkNoLogo color rule on dark backgrounds.
primary_fontNoPrimary font family name. Layered creatives use it where headline_font or body_font is unset.
proof_pointsNoEvidence/social proof items.
accent_colorsNoAccent color palette.
cta_linespaceNoCTA/button line spacing.
cta_placementNoCTA placement guidance.
headline_caseNoHeadline text case rule.
headline_fontNoHeadline font family. Layered creatives set the headline in it.
headline_sizeNoHeadline font size range.
logo_on_lightNoLogo color rule on light backgrounds.
product_namesNoProduct name mapping (e.g. {platform: 'X', vlm: 'Y'}).
standard_ctasNoStandard CTA labels.
subtitle_fontNoSubtitle font family. Layered creatives do not read it: their supporting line uses body_font.
visual_motifsNoBrand visual motifs.
body_linespaceNoBody text line spacing.
button_paddingNoButton padding.
eyebrow_weightNoEyebrow font weight.
primary_colorsNoPrimary color palette.
secondary_fontNoSecondary/display font family name. Layered creatives do not read it: use headline_font or body_font.
channel_displayNo
cta_letterspaceNoCTA/button letter spacing.
headline_weightNoHeadline font weight.
primary_layoutsNoLayout system definitions.
search_keywordsNoSEO/search keywords for the brand.
semantic_colorsNoSemantic/status colors.
subtitle_weightNoSubtitle font weight.
body_letterspaceNoBody text letter spacing.
button_text_caseNoButton text case.
channel_facebookNo
channel_linkedinNo
extended_paletteNoExtended grayscale palette.
logo_clear_spaceNoLogo clear space rule.
long_descriptionNoCompany description for marketing use.
remove_old_logosNoWhen true (default), replace the brand's existing logos with the provided ones; when false, append to them.
secondary_colorsNoSecondary (supporting) color palette.
tagline_variantsNoAlternative taglines.
button_backgroundNoButton background style.
button_text_colorNoButton text color rule.
eyebrow_linespaceNoEyebrow line spacing.
headline_formulasNoHeadline writing patterns.
photography_avoidNoPhotography anti-patterns.
photography_styleNoPhotography style description.
tagline_placementNoTagline placement guidance.
button_text_weightNoButton text weight.
headline_linespaceNoHeadline line spacing.
primary_font_usageNoPrimary font usage description.
subtitle_linespaceNoSubtitle line spacing.
value_propositionsNoCore value propositions.
website_backgroundNo6-digit hex color (e.g. '#FFFFFF') of the brand website's background. generate_brand_creative uses it as the default dominant background for ads (use_website_background). Set it when the user wants ads to match their site's background or the auto-detected value is wrong.
eyebrow_letterspaceNoEyebrow letter spacing.
headline_letterspaceNoHeadline letter spacing.
photography_subjectsNoRecommended photo subjects.
promotional_elementsNoPromotional proof points.
secondary_font_usageNoSecondary font usage description.
subtitle_letterspaceNoSubtitle letter spacing.
photography_treatmentNoPhoto treatment rules.
content_hierarchy_orderNoContent element ordering.
content_hierarchy_spacingNoSection spacing guidance.
content_hierarchy_text_max_widthNoMax text block width.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds only required/optional framing and does not explain partial-update semantics, whether omitted fields are preserved, or the impact of the destructive mutation.

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-loaded with the core action and followed by the key required/optional distinction. There is no wasted language.

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 high-complexity mutation tool with 79 parameters, no output schema, and a destructive annotation. The description is too sparse to explain update semantics, destructive behavior, or operational context beyond basic required/optional information.

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 96%, so parameter semantics are largely documented by the schema itself. The description only restates that company_url is required and all others are optional, adding little beyond the structured 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 states a specific verb and resource: update an existing brand kit with brand DNA parameters. The word 'existing' helps distinguish it from generate_brand_kit, but it does not explicitly name sibling alternatives or scope what kinds of updates are supported.

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?

It only states that company_url is required and others are optional, with no guidance on when to use this tool versus generate_brand_kit, get_brand_kit, or edit_brand_creative. There are no exclusions, prerequisites, or warnings about destructive updates.

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

update_experiment_end_dateUpdate Experiment End DateA
Destructive
Inspect

Move the end date of ONE running Google Ads or Microsoft Ads experiment, leaving the campaign's other experiments as they are.

            KEYWORDS: experiment, end date, extend, shorten, schedule, stop date, run until

            WHEN TO USE:
            - User wants experiment X to run until a later or earlier date
            - User wants to change one experiment's end date without touching the rest of its campaign

            WHAT THE PLATFORM ALLOWS:
            - Google Ads and Microsoft Ads experiments that are running (Active): this tool.
            - A Completed experiment, any channel: manage_experiment(action="reactivate",
              end_date=...), which runs it again until that date.
            - A LinkedIn, Facebook, Instagram or Reddit experiment: the platform moves its
              end date only campaign-wide (add_and_edit_campaign_elements or
              add_and_edit_native_campaign_elements, which move every experiment of that
              campaign). This tool refuses them and changes nothing.
            - A Paused experiment: its end date moves only while it runs; restart it
              (manage_experiment) only if the user wants it running again.
            - Google Ads re-applies the experiment's saved countries and states with the
              date, so the tool refuses Performance Max, an experiment that excludes
              locations, and one with no saved countries or states.

            PARAMETERS:
            - experiment_id: experimentId from search_experiments
            - end_date: YYYY-MM-DD, today or later and within a year; the experiment runs
              through that day

            RESULT:
            status="submitted" means the change was sent: the channel applies it in the
            background, and search_experiments shows the new end date once the channel
            confirms. Say it was requested, not that it changed, until a read shows it.
            status="unchanged" means it already ended on that date and nothing was sent.
            success=false comes with an error that says why nothing was changed.

            WARNING: This changes the live schedule of the experiment on the ad channel.
NameRequiredDescriptionDefault
end_dateYesThe new end date, YYYY-MM-DD, today or later and within a year. The experiment runs through that day.
experiment_idYesThe experiment to change (experimentId from search_experiments).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructive=true and openWorld=true, but the description goes further: it discloses the asynchronous submit-then-confirm behavior ('Say it was requested, not that it changed, until a read shows it'), the platform-specific refusal cases (Performance Max, excluded locations, no saved countries), and the live-schedule mutation warning.

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 action and organized under clear headers, so it is scannable despite its length. It is somewhat verbose (repeated keyword list, long refusal enumeration), but for a tool with this many channel/state edge cases most sentences earn their 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?

No output schema exists, so the description compensates by explaining the status='submitted'/'unchanged' and success=false return semantics and the eventual-consistency read path. Combined with the platform-allowance matrix, an agent has everything needed to call and interpret this 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% and both params are documented there, so baseline is 3; the description adds the provenance of experiment_id (experimentId from search_experiments), the inclusive 'runs through that day' semantics, and the today-or-later/within-a-year constraint, all of which reinforce rather than merely repeat 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?

Opens with a specific verb+resource+scope: 'Move the end date of ONE running Google Ads or Microsoft Ads experiment,' and immediately contrasts with the campaign's other experiments. It is distinguishable from siblings like manage_experiment and add_and_edit_campaign_elements without opening any 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?

Provides an explicit WHEN TO USE list plus a WHAT THE PLATFORM ALLOWS matrix that routes by channel and state (Active vs Completed vs Paused vs LinkedIn/Meta/Reddit), naming the alternative tool for each. It even states which inputs cause a refusal, which is unusually complete routing guidance.

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

update_experiments_daily_budgetsUpdate Experiments Daily BudgetsA
Destructive
Inspect

Update daily budgets for the specified experiment IDs, including live experiments. Requires confirm_budget_impact=true for these exact amounts; otherwise returns requires_confirmation and proposed_changes without writing. Values accept numbers or decimal strings using a dot or comma and are normalized to two decimal places. Returns the platform update result or validation errors.

NameRequiredDescriptionDefault
budgetsYesDictionary mapping experiment IDs to new daily budget values. Keys are experiment IDs (integers or strings), values are budget amounts (numbers or strings with comma/dot separators). Example: {'12345': 100.50, '12346': '150,75'}
confirm_budget_impactNoExplicit authorization for these spend changes. False returns a confirmation request without writing.

TDQS

A4/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and openWorldHint=true; the description adds genuine value on top by disclosing the dry-run/confirmation gate, the no-write behavior when confirmation is withheld, format normalization to two decimals, and validation-error returns. It omits rate limits and any note on reversibility or downstream effects on live pacing.

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?

Four sentences, front-loaded with the action, then the confirmation rule, then value formatting, then return behavior. Every sentence carries operational information, though the final sentence about return values is the least essential given it restates the obvious success/error dichotomy.

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 destructive, open-world mutation with a nested-object parameter and no output schema, the description covers the confirmation mechanism, value coercion, and error surfacing, which is most of what an agent needs. Missing only edge-case behavior such as invalid or unknown experiment IDs mid-batch and whether partial updates occur.

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 still earns more by stating that values accept numbers or decimal strings with dot or comma and are normalized to two decimals, and by framing the amounts as exact impact values rather than a pool to be redistributed. The dictionary-of-experiment-IDs structure is left to the schema's example.

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?

Opens with a specific verb and resource (update daily budgets for specified experiment IDs) and clarifies a non-obvious scope point: live experiments are included, which separates it from read-only or draft-only experiment tools. It never names a sibling (e.g. update_experiment_end_date or manage_experiment) to sharpen the boundary, 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 Guidelines4/5

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

Gives concrete operating guidance: exact amounts require confirm_budget_impact=true, and otherwise the call returns requires_confirmation and proposed_changes without writing. That effectively documents the two-step safe invocation pattern an agent must follow. It does not explicitly say when to prefer this over sibling budget tools such as create_budget_group or manage_experiment.

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

update_linkedin_channel_settingsUpdate LinkedIn Channel SettingsA
Destructive
Inspect

Update the LinkedIn channel settings of an existing DRAFT wizard campaign: native objective, bidding optimization goal (including Reach), bid strategy with manual bid amount, and the LinkedIn conversion actions the campaign optimizes toward.

NameRequiredDescriptionDefault
objectiveNoLinkedIn native objective. Brand Awareness (CTR) campaigns only; Lead Gen campaigns derive it from the offer at launch. Resets the bidding optimization goal to the objective's default.
bid_amountNoManual bid amount in the account currency. Applied only with MANUAL_BID.
campaign_idYesThe unique identifier of the wizard campaign
bid_strategyNoAUTO_BID = LinkedIn maximum delivery (required for CTV ads); MANUAL_BID needs bid_amount (required for Spotlight and Text ads).
conversion_action_idsNoLinkedIn conversion action ids from list_linkedin_conversions. REPLACES the channel's selection; [] clears it.
bidding_optimization_goalNoWhat LinkedIn optimizes delivery for. Must fit the channel's objective: BRAND_AWARENESS takes IMPRESSIONS or REACH, WEBSITE_VISIT takes LANDING_PAGE_CLICKS or IMPRESSIONS, ENGAGEMENT takes ENGAGEMENT_CLICKS or IMPRESSIONS, VIDEO_VIEW takes VIDEO_VIEWS or IMPRESSIONS.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this as a non-read-only, destructive, open-world mutation. The description adds the DRAFT-campaign scope, which is useful context, but does not explain overwrite behavior, validation failure modes, required permissions, or what exactly gets destroyed when conversion actions are replaced (the schema notes replacement, not the description).

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

Conciseness5/5

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

A single front-loaded sentence states the action, target, and affected settings with no filler. Every clause corresponds to a parameter group, so no sentence is wasted.

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 fully described schema, mutation annotations, and absence of an output schema, the description supplies enough context to identify the tool and its DRAFT-only scope. It could be slightly richer about post-update behavior or prerequisites, but it is largely complete for 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 six parameters in detail, including enum constraints and side effects like resetting the bidding goal. The description mostly mirrors those fields and adds little semantic detail beyond what the schema provides.

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 ('Update') and resource ('LinkedIn channel settings'), and scopes it to an 'existing DRAFT wizard campaign.' It clearly enumerates the settings affected, making the purpose unambiguous, though it does not explicitly name or differentiate against sibling tools such as update_reddit_channel_settings or manage_campaign.

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 'existing DRAFT wizard campaign' phrase implies usage context and implicitly excludes live or non-LinkedIn campaigns. However, there is no explicit when-to-use guidance, no stated exclusions, and no pointer to alternatives for live campaign updates.

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

update_meta_placementsUpdate Meta Placements (Facebook / Instagram)A
Destructive
Inspect

Set the channel-level Meta placement default of an existing DRAFT wizard campaign's Facebook or Instagram channel: automatic placements (Meta decides where ads serve) or a manual list of surfaces (Feed, Stories, Reels, ...).

NameRequiredDescriptionDefault
modeYesAUTO = automatic placements (Meta decides, clears the manual set). MANUAL = serve only on the placements listed in `placements`.
channelYesWhich campaign channel to edit. Meta placements only exist on Facebook and Instagram channels.
placementsNoPlacement codes to serve on. Required when mode=MANUAL (at least one); ignored for AUTO. Companion rules apply — see the tool description.
campaign_idYesThe unique identifier of the wizard campaign

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutating nature is covered; the description usefully adds scope (DRAFT only, channel-level default). The gap is significant, though: the schema says "Companion rules apply — see the tool description," yet the description contains no companion rules at all — a dangling pointer to guidance that does not exist — and it does not warn that AUTO wipes an existing manual selection beyond what the schema enum already says.

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 that names the target object first and then the two operating modes. No filler, no restatement of the title.

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 destructive, no-output-schema mutation with 4 parameters, the description covers what is changed and on what object, which is most of the job. It falls short by omitting the "companion rules" it is explicitly referenced as the source of, and by not indicating failure modes (e.g., non-draft campaign, mismatched channel/placement codes).

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 both enums are fully documented with their own semantics, so the baseline applies. The description's parenthetical "(Feed, Stories, Reels, ...)" lightly illustrates the placement concepts but adds no format or constraint detail beyond the schema's enum list.

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 ("Set") and a precise resource ("channel-level Meta placement default of an existing DRAFT wizard campaign's Facebook or Instagram channel"), including scope limits (DRAFT, channel-level). It is clearly distinguishable from the LinkedIn and Reddit channel-settings siblings by naming the platform and the exact object being changed.

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 real preconditions: the campaign must be an existing DRAFT wizard campaign, and only Facebook/Instagram channels qualify. However, it never names an alternative tool (e.g., update_linkedin_channel_settings / update_reddit_channel_settings) or explains when an agent should reach for those instead, leaving routing to inference.

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

update_reddit_channel_settingsUpdate Reddit Channel SettingsA
Destructive
Inspect

Update the Reddit channel settings of an existing DRAFT wizard campaign: native objective, allow comments, placements (feed/conversations), conversion pixel, and (for manual-bid objectives) the bid amount.

NameRequiredDescriptionDefault
objectiveNoReddit native objective. IMPRESSIONS = Brand awareness and Reach; CLICKS = Traffic (the only objective allowed on Lead Gen campaigns); VIDEO_VIEWABLE_IMPRESSIONS_6S = Video Views 6s (video-only channels).
bid_amountNoManual bid amount, applied only when the effective objective uses MANUAL_BID (IMPRESSIONS / Video Views).
placementsNoWhere the ads serve. At least one placement must stay selected; conversations is forced off when the channel has video ads.
campaign_idYesThe unique identifier of the wizard campaign
allow_commentsNoAllow Redditors to comment on the promoted post. Platform default is true.
conversion_pixel_idNoReddit conversion pixel id (created in Reddit Ads Manager). Empty string clears the pixel.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the mutation risk is known. The description adds real value by limiting scope to DRAFT campaigns and flagging the conditional bid_amount requirement. But it never says whether this is a partial patch (omitted fields preserved) or a full replace, which is the critical behavioral question for a destructive update tool, and it omits error/precondition behavior for non-draft campaigns.

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?

Single sentence, front-loaded with the verb and resource, then the scope restriction, then the field list. Efficient and readable; only mildly dense with parenthetical asides that could be trimmed.

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 nested, destructive, 6-parameter update with no output schema and no annotation detail beyond hints, the description covers what can change but not how the update behaves — partial vs. full replacement, whether the channel must already be connected, or what the response contains. Adequate but leaves meaningful gaps for a destructive operation.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (including the enum objective, placements sub-fields, and the pixel-clearing empty string) is already documented in the schema. The description restates the same field list and the manual-bid condition without adding syntax, defaults, or constraints beyond it, so 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 ('Update the Reddit channel settings') and scopes it to 'an existing DRAFT wizard campaign', then enumerates the exact settings touched. An agent can immediately separate it from update_linkedin_channel_settings and the generic add_and_edit_*_campaign_elements siblings.

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

Usage Guidelines3/5

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

The 'existing DRAFT wizard campaign' phrase implies a precondition (campaign must exist and be a draft), which is useful. However there is no explicit when-not guidance, no mention of what to do for launched campaigns, and no routing to an alternative such as update_linkedin_channel_settings for other channels or create_native_structure_campaign for new setup.

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

update_target_groupUpdate Target GroupA
Destructive
Inspect

Update a LinkedIn target group by ID. Name is required, and a targeting update supplies the complete include and exclude configuration. Returns the updated group or an error. Existing targeting omitted from a replacement can be removed.

NameRequiredDescriptionDefault
nameYesREQUIRED: Target group name. CRITICAL - This is a PUT request so you MUST provide the name even if not changing it. Use retrieve_target_group_by_id to get the current name if you don't have it.
targetingNoUpdated targeting configuration (optional). Structure must match create_target_group format. Only update criteria that have isModifiable=true in the current configuration. All criteria IDs/references must come from search_target_group_criteria tool. REQUIRED: Must estimate this targeting first and verify isMatchCountTooSmall is false. NOTE: This is a PUT request - if the target group has targeting, you should provide the complete targeting object.
target_group_idYesThe unique ID of the target group to update. Must be a positive integer. Use list_target_groups to find the ID by name.

TDQS

A4.1/5.0
Behavior4/5

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

The description goes beyond the structural hints by explaining the 'replacement' semantics of the targeting field. This operational detail informs the agent of the significant behavioral change—that omission means removal—which is vital for a destructive 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 definition is appropriately structured, starting with the primary action and ending with the critical consequences and result. The information is dense but logically ordered.

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 extreme complexity of the `targeting` input schema, the description is highly complete because it summarizes the entire behavioral contract: the field must be fully supplied, and it performs a complete replacement operation.

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?

Although the schema coverage is 100%, the description adds crucial meaning by mandating that 'Name is required' and that the `targeting` parameter must be a full replacement set, preventing common schema misinterpretations.

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

Purpose4/5

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

The description clearly states the action (Update) and the resource (LinkedIn target group) and the identifier (by ID). While the target group update context is clear, it doesn't explicitly distinguish itself from the sibling `create_target_group`.

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 definition provides critical guidance by stating that a targeting update must supply the 'complete include and exclude configuration.' It also warns about the risk: 'Existing targeting omitted from a replacement can be removed.'

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

upload_account_list_csv_audienceUpload Account List CSV and Create AudienceAInspect

Create a firmographic audience from company account records, supplied inline or through a CSV URL, with optional contact-targeting filters. Company rows contain companyname and companywebsite; this is not the personal-contact upload endpoint. Returns the audience creation result or validation errors; matching occurs asynchronously.

NameRequiredDescriptionDefault
companiesNoInline map of company names to website URLs (optional). Example: {"Acme Corp": "https://acme.com", "Globex": "https://globex.com"}. MUTUALLY EXCLUSIVE with `companies_source_csv_url` — provide exactly one.
audience_nameYesName for the new audience (required).
job_title_excludesNoFree text keywords for job titles to exclude (optional). Example: ['Senior', 'Lead']
job_title_includesNoFree text keywords for job titles to include (optional). Example: ['Software Engineer', 'Manager']
location_state_idsNoState IDs for geographic targeting (optional). Valid US State IDs: 1 (Alabama), 2 (Alaska), 3 (Arizona), 4 (Arkansas), 5 (California), 6 (Colorado), 7 (Connecticut), 8 (Delaware), 9 (Florida), 10 (Georgia), 11 (Hawaii), 12 (Idaho), 13 (Illinois), 14 (Indiana), 15 (Iowa), 16 (Kansas), 17 (Kentucky), 18 (Louisiana), 19 (Maine), 20 (Maryland), 21 (Massachusetts), 22 (Michigan), 23 (Minnesota), 24 (Mississippi), 25 (Missouri), 26 (Montana), 27 (Nebraska), 28 (Nevada), 29 (New Hampshire), 30 (New Jersey), 31 (New Mexico), 32 (New York), 33 (North Carolina), 34 (North Dakota), 35 (Ohio), 36 (Oklahoma), 37 (Oregon), 38 (Pennsylvania), 39 (Rhode Island), 40 (South Carolina), 41 (South Dakota), 42 (Tennessee), 43 (Texas), 44 (Utah), 45 (Vermont), 46 (Virginia), 47 (Washington), 48 (West Virginia), 49 (Wisconsin), 50 (Wyoming), 52 (District of Columbia). Example: [5] for California, [32] for New York
location_country_idsNoCountry IDs for geographic targeting (optional). Valid IDs: 1 (Afghanistan), 2 (Albania), 3 (Algeria), 4 (American Samoa), 5 (Andorra), 6 (Angola), 7 (Anguilla), 8 (Antarctica), 9 (Antigua and Barbuda), 10 (Argentina), 11 (Armenia), 12 (Aruba), 13 (Australia), 14 (Austria), 15 (Azerbaijan), 16 (Bahamas), 17 (Bahrain), 18 (Bangladesh), 19 (Barbados), 20 (Belarus), 21 (Belgium), 22 (Belize), 23 (Benin), 24 (Bermuda), 25 (Bhutan), 26 (Bolivia), 27 (Bosnia and Herzegovina), 28 (Botswana), 29 (Brazil), 30 (British Indian Ocean Territory), 31 (British Virgin Islands), 32 (Brunei), 33 (Bulgaria), 34 (Burkina Faso), 35 (Burundi), 36 (Cambodia), 37 (Cameroon), 38 (Canada), 39 (Cape Verde), 40 (Cayman Islands), 41 (Central African Republic), 42 (Chad), 43 (Chile), 44 (China), 45 (Christmas Island), 46 (Cocos Islands), 47 (Colombia), 48 (Comoros), 49 (Cook Islands), 50 (Costa Rica), 51 (Croatia), 53 (Curacao), 54 (Cyprus), 55 (Czech Republic), 56 (Democratic Republic of the Congo), 57 (Denmark), 58 (Djibouti), 59 (Dominica), 60 (Dominican Republic), 61 (East Timor), 62 (Ecuador), 63 (Egypt), 64 (El Salvador), 65 (Equatorial Guinea), 66 (Eritrea), 67 (Estonia), 68 (Ethiopia), 69 (Falkland Islands), 70 (Faroe Islands), 71 (Fiji), 72 (Finland), 73 (France), 74 (French Polynesia), 75 (Gabon), 76 (Gambia), 77 (Georgia), 78 (Germany), 79 (Ghana), 80 (Gibraltar), 81 (Greece), 82 (Greenland), 83 (Grenada), 84 (Guam), 85 (Guatemala), 86 (Guernsey), 87 (Guinea), 88 (Guinea-Bissau), 89 (Guyana), 90 (Haiti), 91 (Honduras), 92 (Hong Kong), 93 (Hungary), 94 (Iceland), 95 (India), 96 (Indonesia), 98 (Iraq), 99 (Ireland), 100 (Isle of Man), 101 (Israel), 102 (Italy), 103 (Ivory Coast), 104 (Jamaica), 105 (Japan), 106 (Jersey), 107 (Jordan), 108 (Kazakhstan), 109 (Kenya), 110 (Kiribati), 111 (Kosovo), 112 (Kuwait), 113 (Kyrgyzstan), 114 (Laos), 115 (Latvia), 116 (Lebanon), 117 (Lesotho), 118 (Liberia), 119 (Libya), 120 (Liechtenstein), 121 (Lithuania), 122 (Luxembourg), 123 (Macau), 124 (Macedonia), 125 (Madagascar), 126 (Malawi), 127 (Malaysia), 128 (Maldives), 129 (Mali), 130 (Malta), 131 (Marshall Islands), 132 (Mauritania), 133 (Mauritius), 134 (Mayotte), 135 (Mexico), 136 (Micronesia), 137 (Moldova), 138 (Monaco), 139 (Mongolia), 140 (Montenegro), 141 (Montserrat), 142 (Morocco), 143 (Mozambique), 144 (Myanmar), 145 (Namibia), 146 (Nauru), 147 (Nepal), 148 (Netherlands), 149 (Netherlands Antilles), 150 (New Caledonia), 151 (New Zealand), 152 (Nicaragua), 153 (Niger), 154 (Nigeria), 155 (Niue), 157 (Northern Mariana Islands), 158 (Norway), 159 (Oman), 160 (Pakistan), 161 (Palau), 162 (Palestine), 163 (Panama), 164 (Papua New Guinea), 165 (Paraguay), 166 (Peru), 167 (Philippines), 168 (Pitcairn), 169 (Poland), 170 (Portugal), 171 (Puerto Rico), 172 (Qatar), 173 (Republic of the Congo), 174 (Reunion), 175 (Romania), 176 (Russia), 177 (Rwanda), 178 (Saint Barthelemy), 179 (Saint Helena), 180 (Saint Kitts and Nevis), 181 (Saint Lucia), 182 (Saint Martin), 183 (Saint Pierre and Miquelon), 184 (Saint Vincent and the Grenadines), 185 (Samoa), 186 (San Marino), 187 (Sao Tome and Principe), 188 (Saudi Arabia), 189 (Senegal), 190 (Serbia), 191 (Seychelles), 192 (Sierra Leone), 193 (Singapore), 194 (Sint Maarten), 195 (Slovakia), 196 (Slovenia), 197 (Solomon Islands), 198 (Somalia), 199 (South Africa), 200 (South Korea), 201 (South Sudan), 202 (Spain), 203 (Sri Lanka), 205 (Suriname), 206 (Svalbard and Jan Mayen), 207 (Swaziland), 208 (Sweden), 209 (Switzerland), 211 (Taiwan), 212 (Tajikistan), 213 (Tanzania), 214 (Thailand), 215 (Togo), 216 (Tokelau), 217 (Tonga), 218 (Trinidad and Tobago), 219 (Tunisia), 220 (Turkey), 221 (Turkmenistan), 222 (Turks and Caicos Islands), 223 (Tuvalu), 224 (U.S. Virgin Islands), 225 (Uganda), 226 (Ukraine), 227 (United Arab Emirates), 228 (United Kingdom), 229 (United States), 230 (Uruguay), 231 (Uzbekistan), 232 (Vanuatu), 233 (Vatican), 234 (Venezuela), 235 (Vietnam), 236 (Wallis and Futuna), 237 (Western Sahara), 238 (Yemen), 239 (Zambia), 240 (Zimbabwe), 241 (Guadeloupe). Example: [29] for Brazil, [229] for United States
seniority_exclude_idsNoSeniority level IDs to exclude (optional). Valid IDs: 2-11 as listed above
seniority_include_idsNoSeniority level IDs to include (optional). Valid IDs: 2 (Manager), 3 (Director), 4 (VP), 5 (CXO), 6 (Unpaid), 7 (Training), 8 (Senior), 9 (Owner), 10 (Entry), 11 (Partner). Example: [10, 7] for Entry and Training
companies_source_csv_urlNoPublic URL of a CSV file with header EXACTLY `companyname,companywebsite` (case-insensitive); only the `companywebsite` values are required, the name column may be empty. The MCP server downloads, validates, and parses the file. Use this when the user attached a CSV to the chat — the URL is surfaced via `AudienceBrief.attached_file_urls`. MUTUALLY EXCLUSIVE with `companies`.
job_function_exclude_idsNoJob function IDs to exclude (optional). Valid IDs: 1-28 as listed above
job_function_include_idsNoJob function IDs to include (optional). Valid IDs: 1 (Marketing), 2 (Sales), 3 (Customer Service), 4 (Finance), 5 (HR), 6 (PR), 7 (Media), 8 (Design), 9 (Engineering), 10 (Operations), 11 (Legal), 12 (Education), 13 (Health), 14 (Real Estate), 15 (Accounting), 16 (Administrative), 17 (Business Development), 18 (Community Services), 19 (Consulting), 20 (Entrepreneurship), 21 (IT), 22 (Military Services), 23 (Product Management), 24 (Program/Project Management), 25 (Purchasing), 26 (QA), 27 (Research), 28 (Trades). Example: [9] for Engineering
contacts_per_company_limitNoMaximum number of contacts to target per company (optional). Example: 20

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is partly covered; the description adds genuinely new behavior — that matching occurs asynchronously and that the response is either an audience creation result or validation errors. It does not mention credit consumption or whether an audience object exists before matching completes, keeping it below 5.

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, front-loaded with the action and resource, then the sourcing modes, then the sibling exclusion and return behavior. No sentence is redundant and the CSV/company-name column format detail lives where it belongs, in 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 12-parameter mutation with a nested object and no output schema, the description covers what the tool creates, how input is supplied, what it returns, that matching is asynchronous, and which sibling it is not. The remaining detail (enum ID lists, column format) is fully documented in the schema.

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 carries full parameter semantics including the mutual exclusivity of companies vs companies_source_csv_url. The description only restates the two sourcing modes and mentions 'optional contact-targeting filters' generically, adding little beyond the structured data — 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 a specific verb and resource ('Create a firmographic audience from company account records') plus the two input modes, and explicitly distinguishes itself from the personal-contact upload sibling. An agent can tell it apart from create_firmographic_audience and upload_contact_list_csv_audience without opening a schema.

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

Usage Guidelines4/5

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

Names the alternative it is NOT ('this is not the personal-contact upload endpoint') and indicates inline vs CSV-URL sourcing, with the schema further noting the attached-file path. It gives clear selection context but does not explicitly contrast against criteria-based siblings like create_firmographic_audience, so no full when/when-not matrix.

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

upload_contact_list_csv_audienceUpload Contact List CSV and Create Contact List AudienceAInspect

Create a contact-list audience from either inline contacts over the authenticated MCP connection or a private, expiring CSV URL. Exactly one source is required. Signed URLs must use S3/GCS signatures or an Azure read-only HTTPS SAS, expire within one hour of issue, and refer to an object inaccessible without its signature. Public URLs and redirects are rejected.

The CSV header is exactly email,firstname,lastname,jobtitle,employeecompany,country,appleidfa,googleaid (case-insensitive and whitespace-trimmed). Email is required; other columns can be blank. Accepts 300 to 300,000 contacts. The server validates the file and uploads it through the platform's upload flow. Returns the audience creation result and ID or validation errors. Audience readiness and channel matching occur asynchronously.

NameRequiredDescriptionDefault
contactsNoInline array of contact objects (optional). Each object represents one person/contact with fields: email (required), firstname, lastname, jobtitle, employeecompany, country, appleidfa, googleaid. Minimum 300 contacts, maximum 300,000 contacts. MUTUALLY EXCLUSIVE with `contacts_source_csv_url` — provide exactly one.
audience_nameYesName for the new contact list audience (required).
contacts_source_csv_urlNoPrivate S3/GCS signed HTTPS URL or Azure read-only SAS valid for at most one hour. The object must not allow anonymous access. Public URLs and redirects are rejected. Mutually exclusive with inline contacts.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only say non-read-only, non-destructive, open-world; the description adds substantial extra behavior: signature type requirements, one-hour expiry, no anonymous access, header format, row count bounds, server-side validation, and asynchronous audience readiness. That is exactly the kind of operational context annotations cannot carry.

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 action and the source-choice constraint, then constraints, then format, then return behavior. Every sentence carries information, though the CSV-format sentence is dense and could be broken for readability.

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 explains what comes back ('the audience creation result and ID or validation errors') and warns that readiness and channel matching are asynchronous. Combined with full source constraints and format rules, an agent has everything needed 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 already 100%, but the description still adds value the schema does not: the exact CSV header order and case/whitespace handling, that only email is required while other columns may be blank, the 300–300,000 range, and the source exclusivity rule. This goes beyond 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 first sentence states a specific verb and resource ('Create a contact-list audience') and immediately frames the two possible sources. It is clearly distinguishable from upload_account_list_csv_audience (account lists) and the various create_*_native_audience siblings because it is contact-list plus CSV sourced.

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?

'Exactly one source is required' plus the mutual-exclusivity rule tells the agent precisely how to choose between the two input paths. Public URLs and redirects being rejected is an explicit exclusion. It stops short of naming sibling tools like upload_account_list_csv_audience as the alternative for account-level lists, so not quite a 5.

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

upload_document_creativeUpload Document CreativeBInspect

Upload PDF documents to the Metadata platform library so they can be promoted as LinkedIn Document Ads. Downloads each PDF from its URL and uploads it to the platform library as a DOCUMENT asset.

NameRequiredDescriptionDefault
namesNoOptional library labels, one per document in the same order.
documentsYesArray of PDF URLs to upload to the platform library.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the safety profile is covered. The description usefully adds that each PDF is fetched from its URL and stored as a DOCUMENT asset, which reinforces the open-world/network behavior. It says nothing about failures mid-batch (partial uploads), duplicate handling, size/page limits, or whether re-uploads create new assets.

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 the core action and target front-loaded and the mechanism (download-then-upload) following. No filler, though the second sentence largely restates the first's 'upload' action with added mechanics.

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

Completeness3/5

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

With no output schema, the description should say what the agent gets back (e.g., asset IDs/handles usable in create_update_document_ad). It also omits batch failure semantics for the required array of URLs, leaving a meaningful gap for a mutation tool that an agent must chain into ad creation.

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 both parameters are documented inline, including the URL format, PDF content-type requirement, and the order-alignment rule for names. The description adds no parameter detail beyond that, so the baseline 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?

States a specific verb and resource ('Upload PDF documents to the Metadata platform library') and the downstream purpose (promotion as LinkedIn Document Ads). It distinguishes itself implicitly via 'PDF' from upload_image_creative and upload_video_creative, but never names or contrasts those siblings directly.

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 intended use case — building a library asset for Document Ads — is implied clearly enough to act on. However, there is no explicit when-to-use/when-not guidance, no mention of how it differs from upload_image_creative/upload_video_creative, and no note that the returned asset still needs create_update_document_ad.

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

upload_image_creativeUpload Image CreativeAInspect

Download images from the supplied URLs and upload them to the Metadata creative library. Returns library asset IDs and image information, or upload errors. This does not create or launch an ad.

NameRequiredDescriptionDefault
namesNoOptional library name per image, positional against `images`. Pass one whenever you know what the creative is: without it the name is taken from the URL, which for a generated creative is an opaque key like `brand_creative_20260814_211126_66d8a83e.png` and leaves the user unable to tell their creatives apart in the library. Use `<brand-domain>-<channel>-<width>x<height>.png`, e.g. `stripe-com-linkedin-1200x1200.png`. A name MUST end in one of .jpg/.jpeg/.png/.gif/.mov/.mp4/.html/.pdf.
imagesYesArray of image URLs to upload to platform

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly=false, destructive=false, openWorld=true), and the description adds real value on top: it discloses that it performs an outbound fetch, what it returns (library asset IDs and image info, or upload errors), and what it does NOT do. It stops short of stating failure modes for unreachable/oversized URLs or whether uploads are deduplicated.

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, zero redundancy: the action first, the return contract second, the scope boundary last. Nothing would be lost by keeping every 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?

With no output schema, the description correctly compensates by explaining the return value and error case, and the 100%-covered input schema removes the need for param detail. Only gap is operational constraints on the fetch (size limits, public-accessibility requirements, supported source formats).

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 `names` parameter is documented in depth (positional mapping, naming convention, required extension). The description only alludes to 'supplied URLs' and adds nothing beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource chain (download from URLs -> upload to the Metadata creative library) and explicitly scopes itself out of ad creation ('This does not create or launch an ad'), distinguishing it from create_update_image_ad and upload_video_creative/upload_document_creative without requiring a schema read.

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 exclusion sentence gives clear context for when this tool is the wrong call, implicitly routing the agent to the ad-creation siblings for that step. It handles the main ambiguity well, but never names the follow-up tool or states prerequisites (e.g. that URLs must be publicly reachable, that this is a pre-launch step).

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

upload_video_creativeUpload Video CreativeAInspect

Upload videos directly to the Metadata platform library to create video creatives. Downloads videos from provided URLs and uploads them to the platform. Success means the library accepted the file; Meta uploads continue asynchronously, so read per-channel status with fetch_creative_details before creating a Facebook or Instagram video ad.

NameRequiredDescriptionDefault
videosYesArray of video URLs to upload to the platform library.
usage_typeNoSet to CTV when the video is for a LinkedIn Connected TV ad; the platform validates the CTV spec at upload. Omit for in-feed video ads.
thumbnail_library_idNoOptional existing imageLibraryId to attach as the video's platform thumbnail.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the two-stage async model: success only means the library accepted the file, while Meta-side processing continues and must be polled via fetch_creative_details. That is exactly the non-obvious behavior an agent would otherwise get wrong. Annotations (readOnly=false, destructive=false, openWorld=true) do not convey any of this.

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: purpose first, mechanism second, the critical async caveat and next step last. No repetition of the title 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?

Covers purpose, mechanism, and async success semantics for a write tool with no output schema. The one gap is that it never says what identifier comes back (e.g., a library/creative ID) to feed into fetch_creative_details, which matters for chaining.

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 videos, usage_type (CTV enum) and thumbnail_library_id are already fully documented in the schema. The description only restates that URLs are downloaded and uploaded, adding no format, size, or validation detail beyond the schema. 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?

Specific verb+resource: uploads video files into the Metadata platform library, and explicitly states it downloads from provided URLs first. It is clearly separable from upload_image_creative / upload_document_creative (different media) and from create_update_video_ad (which builds the ad, not the asset).

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 routes the agent: after upload, use fetch_creative_details to read per-channel status before creating a Facebook or Instagram video ad, and the schema-level usage_type covers the CTV case. It gives clear context but no explicit exclusions (e.g., when to prefer an already-uploaded library creative or search_library_creatives_by_name).

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

website_engagement_statsGet Website Engagement StatisticsC
Read-only
Inspect

Website visitor engagement metrics: session data, page views, visitor behavior analytics.

NameRequiredDescriptionDefault
pageNoPage number for pagination (0-based). Example: page=0 for the first page.
sizeNoResults per page from 1 to 100; default 15. Use successive zero-based page values and response pagination metadata for more results.
sortNoSorting criteria. Examples: 'sessions,desc' (default), 'pageViews,desc', 'uniqueVisitors,desc', 'conversionRate,desc'. Format: field,direction where direction is 'asc' or 'desc'.sessions,desc
dateRangeYesTimeframe for engagement data. Options: YESTERDAY, LAST_7_DAYS, LAST_14_DAYS, LAST_30_DAYS, LAST_MONTH, MONTH_TO_DATE (default), LIFETIME. REQUIRED parameter.MONTH_TO_DATE

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description contributes nothing further: no word on how far back LIFETIME reaches, whether data is real-time or lagged, or how pagination interacts with the date scope.

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

Conciseness3/5

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

One short fragment with no padding. It is appropriately sized in the literal sense, but the brevity reflects under-specification rather than disciplined editing, so it lands at the minimum-viable mark.

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

Completeness3/5

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

With four fully documented parameters, no nested objects, and a clear read-only annotation profile, the structured fields cover most of what an agent needs. The missing piece is disambiguation from the many sibling stats tools, which the description leaves entirely to the reader.

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%: pagination, sorting, and the dateRange enum are fully documented inline with defaults and examples. The description adds no parameter meaning beyond the schema, which is the expected baseline of 3 when the schema does the work.

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

Purpose3/5

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

The description names the resource ('website visitor engagement metrics') and lists the metric families (session data, page views, visitor behavior), so the domain is clear. However, it is a noun phrase with no verb, and it does not distinguish itself from overlapping siblings such as performance_metrics, account_level_stats, or deep_funnel_stats.

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 call this tool versus performance_metrics, account_level_stats, or demographic_country_stats. An agent must infer from the name alone that this is a website-side report rather than a campaign-side one.

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. 2 tool updates
    • Removedstop_impersonation
    • Removedswitch_account
  2. 2 tool updates
    • Addedstop_impersonation
    • Addedswitch_account
  3. 26 tool updates
    • Changedaccount_funnel_reports2 fields changed
      • changedInput schema / properties / size / description
        Previous value: -"Number of results per page. Default: 15, Max: 10000 — raise it to pull the full funnel set in one call."New value: +"Results per page from 1 to 100; default 15. Use successive zero-based page values and response pagination metadata for more results."
      • changedInput schema / properties / size / maximum
        Previous value: -10000New value: +100
    • Changedaccount_list_performance2 fields changed
      • changedInput schema / properties / size / description
        Previous value: -"Number of results per page. Default: 25; raise it (up to 10000) to pull every account list in one call."New value: +"Results per page from 1 to 100; default 25. Use successive zero-based page values and response pagination metadata for more results."
      • changedInput schema / properties / size / maximum
        Previous value: -10000New value: +100
    • Changedbudget_group_performance2 fields changed
      • changedInput schema / properties / size / description
        Previous value: -"Number of experiments per page. Default is 10. Use larger values (up to 10000) for comprehensive analysis — pull the whole set rather than a sample."New value: +"Results per page from 1 to 100; default 10. Use successive zero-based page values and response pagination metadata for more results."
      • changedInput schema / properties / size / maximum
        Previous value: -10000New value: +100
    • Changedcreate_budget_group2 fields changed
      • addedInput schema / properties / confirm_budget_impact
        Added value: +{
        +  "default": false,
        +  "description": "Explicit authorization for these spend changes. False returns a confirmation request without writing.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / data / properties / autoApplyBudget / default
        Previous value: -trueNew value: +false
    • Changedcreate_reddit_target_group13 fields changed
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / properties
        Added value: +{
        +  "criteria": {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "data": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "externalId": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "id": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "name": {
        +                    "type": "string"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "countries": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                },
        +                "states": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Channel criterion values returned by the criteria search tools."
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "data"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "inactive": {
        +    "type": "boolean"
        +  },
        +  "matchCount": {
        +    "type": [
        +      "integer",
        +      "null"
        +    ]
        +  },
        +  "matchCountType": {
        +    "type": "string"
        +  },
        +  "mdAudienceId": {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  "name": {
        +    "type": "string"
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / required
        Added value: +[
        +  "mdAudienceId"
        +]
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / properties
        Added value: +{
        +  "data": {
        +    "anyOf": [
        +      {
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "externalId": {
        +              "type": [
        +                "string",
        +                "integer"
        +              ]
        +            },
        +            "id": {
        +              "type": [
        +                "string",
        +                "integer"
        +              ]
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": true,
        +        "properties": {
        +          "countries": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "type": "array"
        +          },
        +          "states": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ],
        +    "description": "Channel criterion values returned by the criteria search tools."
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / required
        Added value: +[
        +  "type",
        +  "data"
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / properties
        Added value: +{
        +  "criteria": {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "data": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "externalId": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "id": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "name": {
        +                    "type": "string"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "countries": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                },
        +                "states": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Channel criterion values returned by the criteria search tools."
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "data"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "inactive": {
        +    "type": "boolean"
        +  },
        +  "matchCount": {
        +    "type": [
        +      "integer",
        +      "null"
        +    ]
        +  },
        +  "matchCountType": {
        +    "type": "string"
        +  },
        +  "mdAudienceId": {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  "name": {
        +    "type": "string"
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / required
        Added value: +[
        +  "mdAudienceId"
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / properties / data / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "externalId": {
        +          "type": [
        +            "string",
        +            "integer"
        +          ]
        +        },
        +        "id": {
        +          "type": [
        +            "string",
        +            "integer"
        +          ]
        +        },
        +        "name": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "countries": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "type": "array"
        +      },
        +      "states": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / properties / data / description
        Added value: +"Channel criterion values returned by the criteria search tools."
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / required
        Added value: +[
        +  "type",
        +  "data"
        +]
    • Changedcreate_segment6 fields changed
      • addedInput schema / properties / criteria / additionalProperties
        Added value: +false
      • removedInput schema / properties / criteria / description
        Removed value: -"Criteria group: {\"operator\": \"AND\"|\"OR\", \"match\": [criterion | nested group]}. See VALUES BY TYPE."
      • removedInput schema / properties / criteria / properties / match / description
        Removed value: -"Criteria: {field, operator, type, value} objects, or nested {operator, match} groups."
      • addedInput schema / properties / criteria / properties / match / items / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": false,
        +    "anyOf": [
        +      {
        +        "required": [
        +          "field"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "property",
        +          "entity"
        +        ]
        +      }
        +    ],
        +    "properties": {
        +      "entity": {
        +        "type": "string"
        +      },
        +      "field": {
        +        "type": "string"
        +      },
        +      "operator": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "property": {
        +        "type": "string"
        +      },
        +      "type": {
        +        "type": "string"
        +      },
        +      "value": {
        +        "anyOf": [
        +          {
        +            "type": [
        +              "string",
        +              "number",
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "days": {
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "endDate": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "label": {
        +                "type": "string"
        +              },
        +              "name": {
        +                "type": "string"
        +              },
        +              "startDate": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "type": [
        +                    "string",
        +                    "number"
        +                  ]
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "label": {
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "type": [
        +                        "string",
        +                        "number"
        +                      ]
        +                    }
        +                  },
        +                  "required": [
        +                    "name"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "type": "array"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "value"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "match": {
        +        "items": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "anyOf": [
        +                {
        +                  "required": [
        +                    "field"
        +                  ]
        +                },
        +                {
        +                  "required": [
        +                    "property",
        +                    "entity"
        +                  ]
        +                }
        +              ],
        +              "properties": {
        +                "entity": {
        +                  "type": "string"
        +                },
        +                "field": {
        +                  "type": "string"
        +                },
        +                "operator": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "property": {
        +                  "type": "string"
        +                },
        +                "type": {
        +                  "type": "string"
        +                },
        +                "value": {
        +                  "anyOf": [
        +                    {
        +                      "type": [
        +                        "string",
        +                        "number",
        +                        "boolean",
        +                        "null"
        +                      ]
        +                    },
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "days": {
        +                          "minimum": 1,
        +                          "type": "integer"
        +                        },
        +                        "endDate": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        },
        +                        "label": {
        +                          "type": "string"
        +                        },
        +                        "name": {
        +                          "type": "string"
        +                        },
        +                        "startDate": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "items": {
        +                        "anyOf": [
        +                          {
        +                            "type": [
        +                              "string",
        +                              "number"
        +                            ]
        +                          },
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "label": {
        +                                "type": "string"
        +                              },
        +                              "name": {
        +                                "type": [
        +                                  "string",
        +                                  "number"
        +                                ]
        +                              }
        +                            },
        +                            "required": [
        +                              "name"
        +                            ],
        +                            "type": "object"
        +                          }
        +                        ]
        +                      },
        +                      "type": "array"
        +                    }
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "value"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "match": {
        +                  "items": {
        +                    "additionalProperties": false,
        +                    "anyOf": [
        +                      {
        +                        "required": [
        +                          "field"
        +                        ]
        +                      },
        +                      {
        +                        "required": [
        +                          "property",
        +                          "entity"
        +                        ]
        +                      }
        +                    ],
        +                    "properties": {
        +                      "entity": {
        +                        "type": "string"
        +                      },
        +                      "field": {
        +                        "type": "string"
        +                      },
        +                      "operator": {
        +                        "type": [
        +                          "string",
        +                          "null"
        +                        ]
        +                      },
        +                      "property": {
        +                        "type": "string"
        +                      },
        +                      "type": {
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": [
        +                              "string",
        +                              "number",
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "days": {
        +                                "minimum": 1,
        +                                "type": "integer"
        +                              },
        +                              "endDate": {
        +                                "type": [
        +                                  "string",
        +                                  "null"
        +                                ]
        +                              },
        +                              "label": {
        +                                "type": "string"
        +                              },
        +                              "name": {
        +                                "type": "string"
        +                              },
        +                              "startDate": {
        +                                "type": [
        +                                  "string",
        +                                  "null"
        +                                ]
        +                              }
        +                            },
        +                            "type": "object"
        +                          },
        +                          {
        +                            "items": {
        +                              "anyOf": [
        +                                {
        +                                  "type": [
        +                                    "string",
        +                                    "number"
        +                                  ]
        +                                },
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "label": {
        +                                      "type": "string"
        +                                    },
        +                                    "name": {
        +                                      "type": [
        +                                        "string",
        +                                        "number"
        +                                      ]
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "name"
        +                                  ],
        +                                  "type": "object"
        +                                }
        +                              ]
        +                            },
        +                            "type": "array"
        +                          }
        +                        ]
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "minItems": 1,
        +                  "type": "array"
        +                },
        +                "operator": {
        +                  "enum": [
        +                    "AND",
        +                    "OR"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "operator",
        +                "match"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "operator": {
        +        "enum": [
        +          "AND",
        +          "OR"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "operator",
        +      "match"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / criteria / properties / match / items / type
        Removed value: -"object"
      • removedInput schema / properties / criteria / properties / operator / description
        Removed value: -"Logical operator combining the match entries."
    • Changedcreate_target_group13 fields changed
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / properties
        Added value: +{
        +  "criteria": {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "data": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "externalId": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "id": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "name": {
        +                    "type": "string"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "countries": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                },
        +                "states": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Channel criterion values returned by the criteria search tools."
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "data"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "inactive": {
        +    "type": "boolean"
        +  },
        +  "matchCount": {
        +    "type": [
        +      "integer",
        +      "null"
        +    ]
        +  },
        +  "matchCountType": {
        +    "type": "string"
        +  },
        +  "mdAudienceId": {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  "name": {
        +    "type": "string"
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / required
        Added value: +[
        +  "mdAudienceId"
        +]
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / properties
        Added value: +{
        +  "data": {
        +    "anyOf": [
        +      {
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "externalId": {
        +              "type": [
        +                "string",
        +                "integer"
        +              ]
        +            },
        +            "id": {
        +              "type": [
        +                "string",
        +                "integer"
        +              ]
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": true,
        +        "properties": {
        +          "countries": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "type": "array"
        +          },
        +          "states": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ],
        +    "description": "Channel criterion values returned by the criteria search tools."
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / required
        Added value: +[
        +  "type",
        +  "data"
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / properties
        Added value: +{
        +  "criteria": {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "data": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "externalId": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "id": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "name": {
        +                    "type": "string"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "countries": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                },
        +                "states": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Channel criterion values returned by the criteria search tools."
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "data"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "inactive": {
        +    "type": "boolean"
        +  },
        +  "matchCount": {
        +    "type": [
        +      "integer",
        +      "null"
        +    ]
        +  },
        +  "matchCountType": {
        +    "type": "string"
        +  },
        +  "mdAudienceId": {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  "name": {
        +    "type": "string"
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / required
        Added value: +[
        +  "mdAudienceId"
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / properties / data / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "externalId": {
        +          "type": [
        +            "string",
        +            "integer"
        +          ]
        +        },
        +        "id": {
        +          "type": [
        +            "string",
        +            "integer"
        +          ]
        +        },
        +        "name": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "countries": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "type": "array"
        +      },
        +      "states": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / properties / data / description
        Added value: +"Channel criterion values returned by the criteria search tools."
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / required
        Added value: +[
        +  "type",
        +  "data"
        +]
    • Changeddemographic_country_stats3 fields changed
      • changedInput schema / properties / size / default
        Previous value: -250New value: +100
      • changedInput schema / properties / size / description
        Previous value: -"Number of results per page. Default: 250; raise it (up to 10000) to pull every country in one call."New value: +"Results per page from 1 to 100; default 100. Use successive zero-based page values and response pagination metadata for more results."
      • changedInput schema / properties / size / maximum
        Previous value: -10000New value: +100
    • Changedestimate_target_group14 fields changed
      • changedInput schema / properties / channel / description
        Previous value: -"Channel to estimate for. LINKEDIN (default) takes criteria ids from search_target_group_criteria; REDDIT takes them from search_reddit_criteria and is estimated the same way (PRD-31759). Omit for LinkedIn."New value: +"Channel to estimate for. LINKEDIN (default) takes criteria ids from search_target_group_criteria; REDDIT takes them from search_reddit_criteria and is estimated the same way. Omit for LinkedIn."
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / properties
        Added value: +{
        +  "criteria": {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "data": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "externalId": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "id": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "name": {
        +                    "type": "string"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "countries": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                },
        +                "states": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Channel criterion values returned by the criteria search tools."
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "data"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "inactive": {
        +    "type": "boolean"
        +  },
        +  "matchCount": {
        +    "type": [
        +      "integer",
        +      "null"
        +    ]
        +  },
        +  "matchCountType": {
        +    "type": "string"
        +  },
        +  "mdAudienceId": {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  "name": {
        +    "type": "string"
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / required
        Added value: +[
        +  "mdAudienceId"
        +]
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / properties
        Added value: +{
        +  "data": {
        +    "anyOf": [
        +      {
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "externalId": {
        +              "type": [
        +                "string",
        +                "integer"
        +              ]
        +            },
        +            "id": {
        +              "type": [
        +                "string",
        +                "integer"
        +              ]
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": true,
        +        "properties": {
        +          "countries": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "type": "array"
        +          },
        +          "states": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ],
        +    "description": "Channel criterion values returned by the criteria search tools."
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / required
        Added value: +[
        +  "type",
        +  "data"
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / properties
        Added value: +{
        +  "criteria": {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "data": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "externalId": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "id": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "name": {
        +                    "type": "string"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "countries": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                },
        +                "states": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Channel criterion values returned by the criteria search tools."
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "data"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "inactive": {
        +    "type": "boolean"
        +  },
        +  "matchCount": {
        +    "type": [
        +      "integer",
        +      "null"
        +    ]
        +  },
        +  "matchCountType": {
        +    "type": "string"
        +  },
        +  "mdAudienceId": {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  "name": {
        +    "type": "string"
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / required
        Added value: +[
        +  "mdAudienceId"
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / properties / data / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "externalId": {
        +          "type": [
        +            "string",
        +            "integer"
        +          ]
        +        },
        +        "id": {
        +          "type": [
        +            "string",
        +            "integer"
        +          ]
        +        },
        +        "name": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "countries": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "type": "array"
        +      },
        +      "states": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / properties / data / description
        Added value: +"Channel criterion values returned by the criteria search tools."
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / required
        Added value: +[
        +  "type",
        +  "data"
        +]
    • Changedexperiment_performance_stats2 fields changed
      • changedInput schema / properties / size / description
        Previous value: -"Number of results per page. RULES: size=1 for 'top' singular questions, size=requested number for 'top X' questions, size=50 for plural questions (e.g. 'campaigns'), size=30+ for multiple metrics analysis, size=15 as default when not specified. Raise it freely for full-dataset analytics — there is no small ceiling."New value: +"Results per page from 1 to 100; default 10. Use successive zero-based page values and response pagination metadata for more results."
      • changedInput schema / properties / size / maximum
        Previous value: -10000New value: +100
    • Changedexperiments_keywords_stats2 fields changed
      • changedInput schema / properties / size / description
        Previous value: -"Number of keywords per page. Default: 50; raise it (up to 10000) to pull the full keyword set in one call."New value: +"Results per page from 1 to 100; default 50. Use successive zero-based page values and response pagination metadata for more results."
      • changedInput schema / properties / size / maximum
        Previous value: -10000New value: +100
    • Changedget_account_opportunities_insights2 fields changed
      • changedInput schema / properties / size / description
        Previous value: -"Items per page (default 25, max 10000). Raise it to pull the full set in one call."New value: +"Results per page from 1 to 100; default 25. Use successive zero-based page values and response pagination metadata for more results."
      • changedInput schema / properties / size / maximum
        Previous value: -10000New value: +100
    • Changedlaunch_campaign1 field changed
      • addedInput schema / properties / confirm_budget_impact
        Added value: +{
        +  "default": false,
        +  "description": "Explicit authorization for these spend changes. False returns a confirmation request without writing.",
        +  "type": "boolean"
        +}
    • Changedlist_user_accounts2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Exact account id to look up. Use instead of `name` when the search term is numeric; it satisfies the super-user search requirement on its own."New value: +"Optional exact account ID within current memberships."
      • changedInput schema / properties / name / description
        Previous value: -"Partial account name to search for. Optional for regular users (acts as a filter); required for super users unless `account_id` is given (acts as the search query against the whole platform)."New value: +"Optional partial account name within current memberships."
    • Changedmanage_campaign1 field changed
      • addedInput schema / properties / confirm_budget_impact
        Added value: +{
        +  "default": false,
        +  "description": "Explicit authorization for these spend changes. False returns a confirmation request without writing. Required for restart; pause does not require it.",
        +  "type": "boolean"
        +}
    • Changedperformance_metrics2 fields changed
      • changedInput schema / properties / size / description
        Previous value: -"Number of results per page. Default 100; raise it freely (up to 10000) for comprehensive full-dataset analysis."New value: +"Results per page from 1 to 100; default 100. Use successive zero-based page values and response pagination metadata for more results."
      • changedInput schema / properties / size / maximum
        Previous value: -10000New value: +100
    • Changedquery_metadata_analytics_account1 field changed
      • changedInput schema / properties / question / description
        Previous value: -"Natural-language question about the caller's account."New value: +"Natural-language question about the current account."
    • Changedquery_metadata_analytics_benchmarks2 fields changed
      • changedInput schema / properties / conversation_id / description
        Previous value: -"Optional. Pass the value returned from a prior\n`_benchmarks` call to keep the query context warm. The two\nknowledge-base tools never share conversation_ids — pass\nonly IDs returned by `_benchmarks` here."New value: +"Optional continuation ID from this benchmark tool only."
      • changedInput schema / properties / question / description
        Previous value: -"Natural-language question. Should describe a COHORT\n(industry × size × channel × format / audience), not a\nspecific company."New value: +"Natural-language cohort question."
    • Removedrender_flexible_creative
    • Changedsearch_experiment_recipes6 fields changed
      • changedInput schema / properties / ad_format / description
        Previous value: -"Optional exact filter — \"image\", \"video\", \"document\",\n\"carousel\", \"text\"."New value: +"Optional ad-format filter."
      • changedInput schema / properties / audience_type / description
        Previous value: -"Optional exact filter, e.g. \"firmographic_include\",\n\"linkedin_retargeting\", \"native_targeting_dynamic\"."New value: +"Optional audience-type filter."
      • changedInput schema / properties / bid_strategy / description
        Previous value: -"Optional exact filter, e.g. \"auto_bid\", \"manual_bid\",\n\"metadata_bid_agent\"."New value: +"Optional bid-strategy filter."
      • changedInput schema / properties / channel / description
        Previous value: -"Optional exact filter — \"linkedin\", \"facebook\",\n\"google_ads\", \"instagram\". Omit to search every channel."New value: +"Optional channel filter."
      • changedInput schema / properties / num_results / description
        Previous value: -"How many recipes to return (default 5)."New value: +"Number of recipes, default 5."
      • changedInput schema / properties / query / description
        Previous value: -"Natural-language description of the campaign you are building,\ne.g. \"lead gen campaign targeting IT decision makers\", \"top of\nfunnel awareness push for a new product launch\"."New value: +"Natural-language description of a campaign configuration."
    • Changedset_landing_subdomain4 fields changed
      • changedInput schema / properties / subdomain / description
        Previous value: -"The subdomain label only, without any zone suffix or scheme (\"zoom\", not \"zoom.ad.live\"). Empty string releases the current claim."New value: +"Non-empty lowercase subdomain, 1 to 63 characters. Existing claims cannot be changed or released through this tool."
      • addedInput schema / properties / subdomain / maxLength
        Added value: +63
      • addedInput schema / properties / subdomain / minLength
        Added value: +1
      • addedInput schema / properties / subdomain / pattern
        Added value: +"^(?![0-9]+$)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"
    • Changedupdate_brand_kit12 fields changed
      • addedInput schema / properties / channel_display / additionalProperties
        Added value: +true
      • removedInput schema / properties / channel_display / description
        Removed value: -"Display ads channel config."
      • addedInput schema / properties / channel_display / properties
        Added value: +{
        +  "cta_preference": {
        +    "type": "string"
        +  },
        +  "focus": {
        +    "type": "string"
        +  },
        +  "size": {
        +    "type": "string"
        +  },
        +  "text_overlay_limit": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / channel_facebook / additionalProperties
        Added value: +true
      • removedInput schema / properties / channel_facebook / description
        Removed value: -"Facebook channel config."
      • addedInput schema / properties / channel_facebook / properties
        Added value: +{
        +  "cta_preference": {
        +    "type": "string"
        +  },
        +  "focus": {
        +    "type": "string"
        +  },
        +  "size": {
        +    "type": "string"
        +  },
        +  "text_overlay_limit": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / channel_linkedin / additionalProperties
        Added value: +true
      • removedInput schema / properties / channel_linkedin / description
        Removed value: -"LinkedIn channel config."
      • addedInput schema / properties / channel_linkedin / properties
        Added value: +{
        +  "cta_preference": {
        +    "type": "string"
        +  },
        +  "focus": {
        +    "type": "string"
        +  },
        +  "size": {
        +    "type": "string"
        +  },
        +  "text_overlay_limit": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / primary_layouts / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / primary_layouts / items / properties
        Added value: +{
        +  "background": {
        +    "type": "string"
        +  },
        +  "best_for": {
        +    "type": "string"
        +  },
        +  "frequency": {
        +    "type": "string"
        +  },
        +  "name": {
        +    "type": "string"
        +  },
        +  "structure": {
        +    "type": "string"
        +  },
        +  "text_alignment": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / product_names / additionalProperties
        Added value: +{
        +  "type": "string"
        +}
    • Changedupdate_experiments_daily_budgets1 field changed
      • addedInput schema / properties / confirm_budget_impact
        Added value: +{
        +  "default": false,
        +  "description": "Explicit authorization for these spend changes. False returns a confirmation request without writing.",
        +  "type": "boolean"
        +}
    • Changedupdate_target_group13 fields changed
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / properties
        Added value: +{
        +  "criteria": {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "data": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "externalId": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "id": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "name": {
        +                    "type": "string"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "countries": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                },
        +                "states": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Channel criterion values returned by the criteria search tools."
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "data"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "inactive": {
        +    "type": "boolean"
        +  },
        +  "matchCount": {
        +    "type": [
        +      "integer",
        +      "null"
        +    ]
        +  },
        +  "matchCountType": {
        +    "type": "string"
        +  },
        +  "mdAudienceId": {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  "name": {
        +    "type": "string"
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / exclude / properties / audiences / items / required
        Added value: +[
        +  "mdAudienceId"
        +]
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / properties
        Added value: +{
        +  "data": {
        +    "anyOf": [
        +      {
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "externalId": {
        +              "type": [
        +                "string",
        +                "integer"
        +              ]
        +            },
        +            "id": {
        +              "type": [
        +                "string",
        +                "integer"
        +              ]
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": true,
        +        "properties": {
        +          "countries": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "type": "array"
        +          },
        +          "states": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ],
        +    "description": "Channel criterion values returned by the criteria search tools."
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / exclude / properties / criteria / items / required
        Added value: +[
        +  "type",
        +  "data"
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / properties
        Added value: +{
        +  "criteria": {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "data": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "externalId": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "id": {
        +                    "type": [
        +                      "string",
        +                      "integer"
        +                    ]
        +                  },
        +                  "name": {
        +                    "type": "string"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "countries": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                },
        +                "states": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Channel criterion values returned by the criteria search tools."
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "data"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "inactive": {
        +    "type": "boolean"
        +  },
        +  "matchCount": {
        +    "type": [
        +      "integer",
        +      "null"
        +    ]
        +  },
        +  "matchCountType": {
        +    "type": "string"
        +  },
        +  "mdAudienceId": {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  "name": {
        +    "type": "string"
        +  },
        +  "type": {
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / targeting / properties / include / items / properties / audiences / items / required
        Added value: +[
        +  "mdAudienceId"
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / properties / data / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "externalId": {
        +          "type": [
        +            "string",
        +            "integer"
        +          ]
        +        },
        +        "id": {
        +          "type": [
        +            "string",
        +            "integer"
        +          ]
        +        },
        +        "name": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "countries": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "type": "array"
        +      },
        +      "states": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / properties / data / description
        Added value: +"Channel criterion values returned by the criteria search tools."
      • addedInput schema / properties / targeting / properties / include / items / properties / criteria / items / required
        Added value: +[
        +  "type",
        +  "data"
        +]
    • Changedupload_contact_list_csv_audience1 field changed
      • changedInput schema / properties / contacts_source_csv_url / description
        Previous value: -"Public URL of a contacts CSV file with header EXACTLY `email,firstname,lastname,jobtitle,employeecompany,country,appleidfa,googleaid` (case-insensitive). The MCP server downloads, validates, and uploads the file. Use this when the user attached a CSV to the chat — the URL is surfaced via `AudienceBrief.attached_file_urls`. MUTUALLY EXCLUSIVE with `contacts`."New value: +"Private S3/GCS signed HTTPS URL or Azure read-only SAS valid for at most one hour. The object must not allow anonymous access. Public URLs and redirects are rejected. Mutually exclusive with inline contacts."
    • Changedwebsite_engagement_stats2 fields changed
      • changedInput schema / properties / size / description
        Previous value: -"Number of results per page. Default: 15; raise it (up to 10000) to pull the full engagement set in one call."New value: +"Results per page from 1 to 100; default 15. Use successive zero-based page values and response pagination metadata for more results."
      • changedInput schema / properties / size / maximum
        Previous value: -10000New value: +100
  4. 2 tool updates
    • Removedimpersonate_account
    • Removedstop_impersonation
  5. 2 tool updates
    • Addedimpersonate_account
    • Addedstop_impersonation
  6. 2 tool updates
    • Removedimpersonate_account
    • Removedstop_impersonation
  7. 2 tool updates
    • Addedimpersonate_account
    • Addedstop_impersonation
  8. 1 tool update
    • Changedgenerate_flexible_brand_creative1 field changed
      • addedInput schema / properties / reference_images
        Added value: +{
        +  "description": "URLs of the images (PNG, JPG, WebP, GIF, BMP or TIFF) the user gave as references for this creative, at most 12: images they attached and asked a new creative to follow. A creative with brand characters takes fewer, and the call says how many. The background follows their style, medium, mood and composition in place of the brand's own reference ads, and their subject when the instructions ask for it; their text and logos are never painted. An animated GIF or WebP is read from frames across its animation. A URL that cannot be read fails the call, naming it, before anything is generated. Omit when the user gave no reference image.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 12,
        +  "type": "array"
        +}
  9. 5 tool updates
    • Changedfix_flexible_creative1 field changed
      • addedInput schema / properties / characters
        Added value: +{
        +  "description": "The brand characters the edit must keep. Omit to keep the ones the image shows; [] drops them all, a list keeps only those names.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
    • Changedgenerate_flexible_brand_creative1 field changed
      • addedInput schema / properties / characters
        Added value: +{
        +  "description": "Names of brand characters (registered with register_brand_character) the creative must show, as the user named them. Their sheets guide every draft and a draft that loses one is not returned. An unknown name is refused with the closest registered one: confirm it with the user, never pick one for them. Omit when the user named no character.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
    • Changedregenerate_flexible_background1 field changed
      • addedInput schema / properties / characters
        Added value: +{
        +  "description": "The brand characters the new background must show. Omit to keep the ones image_source shows; for a fresh scene pass the creative's provenance.quality.characters. [] drops them all.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
    • Addedregister_brand_character
    • Addedremove_brand_character
  10. 1 tool update
    • Changedgenerate_flexible_brand_creative2 fields changed
      • addedInput schema / properties / layout
        Added value: +{
        +  "description": "How the copy is set: column (a left- or right-aligned column at the side) or centered (a centered stack across the top or bottom). In a batch, give the creatives different layouts. The copy goes where the scene leaves calm space for that layout, else where it is calmest. Omit it to let the calmest space decide.",
        +  "enum": [
        +    "column",
        +    "centered"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / style
        Added value: +{
        +  "description": "How the user said the creative should look (style, medium, mood, colors, people, composition), copied word for word from them, never paraphrased. Every background draft follows it, and when no draft does, the call fails with an error saying so. Omit it when the user described no look.",
        +  "maxLength": 500,
        +  "type": "string"
        +}
  11. 2 tool updates
    • Removedimpersonate_account
    • Removedstop_impersonation
  12. 2 tool updates
    • Addedimpersonate_account
    • Addedstop_impersonation
  13. 3 tool updates
    • Changedgenerate_flexible_brand_creative1 field changed
      • changedInput schema / properties / cta / description
        Previous value: -"Optional call-to-action button text (e.g. 'Learn more', 'Try Metadata in ChatGPT'): any number of words that fits on one line of the button at the format's CTA size, about 25 characters on 9:16, 29 on the 6:5 banner, 38 on 4:5, 42 on 1:1, 57 on 4:3, 82 on 16:9 and 89 on 1.91:1. A longer one is rejected with the limit named, so it can be shortened and resent."New value: +"Optional call-to-action button text (e.g. 'Learn more', 'Try Metadata in ChatGPT'): any number of words that fits on one line of the button at the format's CTA size, including padding. The format-specific character limit is computed from that size. A longer one is rejected with the limit named, so it can be shortened and resent."
    • Removedimpersonate_account
    • Removedstop_impersonation
  14. 1 tool update
    • Changedgenerate_flexible_brand_creative1 field changed
      • addedInput schema / properties / background_tone
        Added value: +{
        +  "description": "Base tone of the background scene, drawn from the brand palette. In a batch, give each creative a different tone so no two share one. Omit it to anchor the scene on the brand's website background.",
        +  "enum": [
        +    "light",
        +    "mid",
        +    "dark"
        +  ],
        +  "type": "string"
        +}
  15. 2 tool updates
    • Changedgenerate_flexible_brand_creative7 fields changed
      • changedInput schema / properties / aspect_ratio / description
        Previous value: -"Canvas shape, one of the shapes 'platform' takes; the creative comes out at that channel's own size for it. Each platform's shapes and sizes: linkedin (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 720x900; facebook (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1.91:1 at 1200x628; instagram (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1.91:1 at 1200x628; reddit (default 4:3): 4:3 at 1440x1080, 1:1 at 1080x1080, 4:5 at 1080x1350, 16:9 at 1920x1080; display (default 1.91:1): 1.91:1 at 1200x628, 1:1 at 1200x1200, 4:5 at 960x1200, 9:16 at 1080x1920; general (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 1440x1800, 9:16 at 1080x1920, 16:9 at 1920x1080, 4:3 at 1440x1080. A shape the platform does not list is refused before anything is generated. Pass this whenever the user names a size or shape: '1:1' square, '1.91:1' landscape (LinkedIn, Meta, Google and Microsoft), '16:9' wide, '4:3' Reddit's landscape, '4:5' portrait, '9:16' full-height story. Omit to take the platform's default shape."New value: +"Canvas shape, one of the shapes 'platform' takes; the creative comes out at that channel's own size for it. Each platform's shapes and sizes: linkedin (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 720x900; facebook (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1.91:1 at 1200x628; instagram (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1.91:1 at 1200x628; reddit (default 4:3): 4:3 at 1440x1080, 1:1 at 1080x1080, 4:5 at 1080x1350, 16:9 at 1920x1080; display (default 1.91:1): 1.91:1 at 1200x628, 1:1 at 1200x1200, 4:5 at 960x1200, 9:16 at 1080x1920; general (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 1440x1800, 9:16 at 1080x1920, 16:9 at 1920x1080, 4:3 at 1440x1080, 6:5 at 300x250. A shape the platform does not list is refused before anything is generated. Pass this whenever the user names a size or shape: '1:1' square, '1.91:1' landscape (LinkedIn, Meta, Google and Microsoft), '16:9' wide, '4:3' Reddit's landscape, '4:5' portrait, '9:16' full-height story, '6:5' the 300x250 banner of LinkedIn Message and Conversation ads ('general' only). Omit to take the platform's default shape."
      • changedInput schema / properties / aspect_ratio / enum
        Previous value: -[
        -  "1:1",
        -  "1.91:1",
        -  "4:5",
        -  "9:16",
        -  "16:9",
        -  "4:3"
        -]New value: +[
        +  "1:1",
        +  "1.91:1",
        +  "4:5",
        +  "9:16",
        +  "16:9",
        +  "4:3",
        +  "6:5"
        +]
      • changedInput schema / properties / cta / description
        Previous value: -"Optional call-to-action button text (e.g. 'Learn more'): at most 3 words and 18 characters so the button stays on one line."New value: +"Optional call-to-action button text (e.g. 'Learn more', 'Try Metadata in ChatGPT'): any number of words that fits on one line of the button at the format's CTA size, about 25 characters on 9:16, 29 on the 6:5 banner, 38 on 4:5, 42 on 1:1, 57 on 4:3, 82 on 16:9 and 89 on 1.91:1. A longer one is rejected with the limit named, so it can be shortened and resent."
      • removedInput schema / properties / cta / maxLength
        Removed value: -18
      • changedInput schema / properties / headline / description
        Previous value: -"Headline copy to place as an editable layer. Image copy, not ad text: at most 45 characters and 8 words on a 1:1, 4:3, 4:5 or 9:16 canvas, 55 characters and 10 words on 16:9 or 1.91:1. Longer copy is rejected with the limit named, so it can be shortened and resent."New value: +"Headline copy to place as an editable layer. Image copy, not ad text: at most 45 characters and 8 words on a 1:1, 4:3, 4:5 or 9:16 canvas, 55 characters and 10 words on 16:9 or 1.91:1, 35 characters and 6 words on the 6:5 banner. Longer copy is rejected with the limit named, so it can be shortened and resent."
      • addedInput schema / properties / headline_accent
        Added value: +{
        +  "description": "Optional key phrase of the headline, copied word for word from it, shown in the brand accent color (e.g. 'final say' in 'You keep the final say'). It must be part of the headline, not all of it. When the accent color would not read on the background the phrase is shown in the headline color.",
        +  "type": "string"
        +}
      • addedInput schema / properties / label
        Added value: +{
        +  "description": "Optional short tag set small above the headline, at most 24 characters: a product name or a category ('Metadata AI', 'Campaign Builder'). Longer is rejected with the limit named.",
        +  "type": "string"
        +}
    • Changedregenerate_flexible_background1 field changed
      • changedInput schema / properties / aspect_ratio / enum
        Previous value: -[
        -  "1:1",
        -  "1.91:1",
        -  "4:5",
        -  "9:16",
        -  "16:9",
        -  "4:3"
        -]New value: +[
        +  "1:1",
        +  "1.91:1",
        +  "4:5",
        +  "9:16",
        +  "16:9",
        +  "4:3",
        +  "6:5"
        +]

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Perplexity for social: ask what competitors are running across social and get answers grounded in real ad and creative data, not guesses.
    2
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    4 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources