Opus Growth, Ad Platforms MCP Connector
Server Details
Run Google, Meta, Microsoft, TikTok and LinkedIn Ads from Claude or ChatGPT. Writes need approval.
- Status
- Healthy
- Uptime
- 55.0% over 58 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- opusgrowth/Opus-Growth-The-MCP-Connector-for-Ad-Platforms
- GitHub Stars
- 0
- Server Listing
- Opus Growth MCP Connector
TDQS
Scored across 11 tools
The core split is clear: call_tool (reads) vs call_write_tool (writes), and get_report (metrics) vs list_entities (entities) are well-separated. However, a large cluster of discovery/listing tools (search, search_tools, fetch, describe, list_accounts, list_entities, list_servers) overlaps in purpose — search vs search_tools in particular is an easy misselection. list_accounts being Google-Ads-specific while list_entities spans all platforms adds further inconsistency.
Names are uniformly snake_case with a mostly predictable verb_noun shape (get_report, list_entities, call_tool, report_issue). A few tools are bare single-word verbs (describe, fetch, search), which is a minor deviation from the verb_noun pattern but still readable and unambiguous in style.
11 tools sits comfortably in the well-scoped range, and the gateway pattern (call_tool/call_write_tool/search_tools) keeps the visible surface small while covering many platforms. A few entries feel tangential to the ad-platform domain (report_issue, list_servers for hosting/WordPress), slightly diluting focus.
The gateway design means read and write coverage is effectively broad — get_report/list_entities/list_accounts/search/fetch cover reads and call_write_tool plus the searchable catalog cover writes and lifecycle actions. Core workflows are reachable, though specific operations depend entirely on discovering hidden tools via search_tools rather than being directly exposed.
Available Tools
477 toolsaccount_auditAccount AuditBRead-onlyIdempotentInspect
Account hygiene audit: finds wasteful keywords and low Quality Score. DATE: period ('today','last_30_days'… or 'YYYY-MM-DD[:...]') overrides days; days=0 = today.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| period | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered by structured data. The description adds no behavioral context beyond that — no scope of what the audit scans, no mention that results are advisory — so it neither extends nor contradicts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the purpose front-loaded and the date semantics following. The 'DATE:' prefix is a slightly dense shorthand but keeps it compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described. However, for a 3-parameter audit tool with 0% schema coverage, the description omits the required customer_id and any guidance on choosing this audit over sibling audits, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It usefully explains that 'period' overrides 'days', that days=0 means today, and gives example date formats, but 'customer_id' (the sole required parameter) is never mentioned and 'period' enum values are only hinted with '…'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('Account hygiene audit') and names what it surfaces ('wasteful keywords and low Quality Score'), so an agent knows it is a diagnostic read. It does not distinguish itself from close siblings like instant_audit or keyword_quality_report, leaving the agent to guess which audit to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no routing to alternatives, despite several audit-shaped siblings (instant_audit, seo_audit, keyword_quality_report). The only context is implicit in the phrase 'account hygiene audit'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
account_snapshotAccount SnapshotRead-onlyIdempotentInspect
ONE-CALL ACCOUNT PICTURE for an ad platform — use it before any account review, health check or "what is going on in my account" answer. For every campaign it joins: what it is (status, whether it is actually serving, type, daily budget, bidding and the platform's own learning status where exposed), WHEN it was created, started and last changed, its age in days, its performance SINCE IT STARTED (lifetime: spend, impressions, clicks, conversions, CPC, CTR, cost per conversion, average daily spend) and over the last recent_days full days, plus account totals. platform: google_ads | meta | tiktok | linkedin | microsoft. account = that platform's account id (empty = connected default). include_inactive=false lists serving/active campaigns and any campaign that spent in the lifetime window; true lists every non-removed campaign. Lifetime starts at the earliest campaign start/creation date, capped by how far each platform's reporting API goes back (stated in lifetime_window). Meta conversions are reported per action type (leads, messaging_conversations, purchases, registrations, link_clicks) because Meta has no single conversion count. LinkedIn rows are API campaigns = what Campaign Manager calls ad sets. Microsoft's report has no campaign id, so its rows are joined by campaign name. Costs the credits of the underlying list_entities and get_report calls. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| platform | No | google_ads | |
| recent_days | No | ||
| include_inactive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
add_keywordsAdd KeywordsAInspect
ADD POSITIVE KEYWORDS to a Google Ads ad group (bulk) — the keywords your ads should SHOW for. This is NOT the negative-keyword tool: use add_negative_keyword only to BLOCK traffic. match_type: PHRASE | EXACT | BROAD, applied to every item that does not carry its own. PER-KEYWORD MATCH TYPE: suffix an item with '|EXACT', '|PHRASE' or '|BROAD' and that one overrides the default — keywords=['yeminli tercume|EXACT', 'noter onayli tercume|PHRASE', 'tercume burosu'] adds a mixed set in ONE call, the same suffix syntax add_negative_keyword already uses. Without it a mixed set needs one call per match type. To MOVE keywords between ad groups, add them here on the target ad group and then remove them from the old one with manage_keywords(action='remove'). To pause/enable/re-bid an EXISTING keyword use manage_keywords. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| keywords | Yes | ||
| match_type | No | PHRASE | |
| ad_group_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only, non-idempotent, non-destructive, but the description adds real behavioral context the annotations lack: bulk application of a default match_type to items without their own suffix, and confirm=false producing a dry-run. It does not discuss auth requirements or rate limits, but the dry-run and mixed-set-in-one-call behavior are valuable disclosures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then usage routing, then parameter syntax. Dense and information-rich, though the all-caps emphasis and repeated restatement of the suffix syntax add slight length without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. The description covers purpose, alternatives, dry-run, and match-type semantics; only edge cases like duplicate-keyword handling or error behavior are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the load and largely does: it defines match_type values (PHRASE | EXACT | BROAD), the per-keyword '|EXACT' suffix override syntax with a concrete example, and confirm=false as dry-run. customer_id and ad_group_id are left implicit, which is a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (ADD POSITIVE KEYWORDS to a Google Ads ad group), including bulk scope, and explicitly distinguishes itself from the negative-keyword tool. An agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not guidance (add_negative_keyword is only for BLOCKING traffic), names manage_keywords for pause/enable/re-bid of existing keywords, and describes the move workflow (add on target, remove from old). Clear alternatives and triggers throughout.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_location_assetsAdd Location AssetsAInspect
Attaches Google Business Profile LOCATION assets (store address, map pin, "Get directions", call-from-map) to the account's ads. In Google Ads, location assets are created AUTOMATICALLY once the Business Profile is LINKED to the Google Ads account, then serve account-wide. This tool: (1) detects whether a linked location asset set (LOCATION_SYNC / Business-Profile location group) exists in the account; (2) if it exists AND a campaign_id is given, pins that asset set to the campaign (otherwise Google already serves it account-wide — nothing to do); (3) if none exists, returns the exact steps to link the Business Profile. confirm=false → dry-run. AD GROUP LEVEL: pass ad_group_id to pin the location asset set to ONE ad group (AdGroupAssetSet) instead of the whole campaign, e.g. a branch ad group that should show only that branch's address. asset_set_id picks a specific location asset set (a location group such as "Bağcılar", from the location_asset_sets list this tool returns); without it the Business Profile sync set is used. NOTE: creating the Business-Profile↔Ads link itself needs Business Profile API access (pending Google approval); until then the customer links it once in the Google Ads UI (~2 minutes).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| ad_group_id | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| asset_set_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), and the description adds substantially beyond them: confirm=false triggers a dry-run, location assets are created automatically once the Business Profile is linked, pinning is idempotent-ish account-wide vs campaign/ad-group scoping, and there is an external auth dependency on Business Profile API approval. That is real behavioral context not derivable 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and numbers the three decision branches, so it reads well despite its length. It is denser than most definitions need and some parenthetical detail (e.g. the full set of asset types in the first sentence) could be trimmed, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately complex, non-idempotent mutation tool with an output schema present, the description covers prerequisites, the dry-run path, the scoping options, and the fallback when no link exists. Return values are covered by the output schema, so nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, and it does: confirm (dry-run toggle), campaign_id (pin asset set to campaign), ad_group_id (pin to a single ad group via AdGroupAssetSet, with a concrete branch example), and asset_set_id (select a specific location group like "Bağcılar", sourced from the tool's own location_asset_sets output). Only customer_id is left implicit, which is standard boilerplate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource (attaches Google Business Profile LOCATION assets) and immediately scopes what the tool actually does: detect an existing linked location asset set, optionally pin it, or return link instructions. It is clearly distinguishable from siblings like connect_business_profile, manage_extension_assets, and add_microsoft_location_target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the three branching conditions (asset set exists + campaign_id given → pin; exists without campaign_id → nothing to do; none exists → return linking steps) and names the ad-group-level alternative via ad_group_id. It also flags the upstream prerequisite (Business Profile API access pending approval) so the agent knows when this tool cannot complete the job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_microsoft_ad_extensionsAdd Microsoft Ad ExtensionsAInspect
Adds SITELINK and/or CALLOUT ad extensions to a Microsoft (Bing) campaign — the extra links and highlights that make the ad taller and lift CTR. sitelinks: lines in 'Display text|https://url' or 'text|url|description1|description2' format (display text ≤25 chars). callouts: short highlight phrases like ['Free shipping', 'Same-day support'] (≤25 chars). Creates them in the account library and attaches them to the campaign in one call. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| callouts | No | ||
| sitelinks | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a non-read-only, non-idempotent, open-world mutation, so the description's main added value is the two-phase confirm=false preview / confirm=true apply behavior and the fact that it writes to the account library and then attaches in one call. It does not mention rate limits or auth scopes, so it lands above baseline but not maximal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose first, then compact format specs for sitelinks and callouts, then the confirm semantics in one trailing clause. No filler sentences; every clause carries information an agent needs to format the call correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param mutation with an output schema present, the definition covers the semantics of the two content params, the confirm flag, and the attach behavior. The missing bits are the untouched identifier params (campaign_id/account_id/customer_id) and any note on error/partial-attach behavior, which are real but modest gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the meaning of every parameter, and it does document sitelinks format ('Display text|https://url' or 4-pipe variant, <=25 chars), callouts ('Free shipping'), and confirm (preview vs apply). It leaves account_id, campaign_id, and especially customer_id (which is optional and undocumented) without explanation, so it is not fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (adds) plus resource (SITELINK/CALLOUT ad extensions) on a Microsoft (Bing) campaign, with a plain-language gloss of what a sitelink and a callout are. Clearly distinguishable from siblings like list_microsoft_ad_extensions and remove_microsoft_ad_extensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Defines what each extension type is and gives format examples, and distinguishes this add-tool from the remove/list siblings by implication. It does not explicitly state when NOT to use it or explain the preview-vs-apply tradeoff beyond the confirm flag, so it falls just short of a full routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_microsoft_ad_scheduleMicrosoft Ad ScheduleAInspect
Sets WHEN a Microsoft (Bing) campaign is allowed to serve — e.g. business hours only. Without an ad schedule the campaign runs 24/7 and burns budget at night when nobody converts.
days = comma-separated: Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday (or 'weekdays' / 'weekend' / 'all'). from_hour / to_hour = 0-24 in the account's time zone. bid_adjustment = optional % bid modifier for those hours (e.g. 20 = bid 20% more). confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | ||
| confirm | No | ||
| to_hour | No | ||
| from_hour | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| bid_adjustment | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: confirm=false previews (a dry-run mode) and that hours are interpreted in the account's time zone. It does not state whether the call replaces an existing schedule or errors if one exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and rationale are front-loaded, then parameters are documented compactly with no filler. Every sentence adds information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described. For a mutation tool with a 7-parameter schema and annotations covering safety, the description supplies the missing parameter syntax, semantics, dry-run behavior, and motivation — nothing critical is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and largely meets it: it defines days syntax including the 'weekdays'/'weekend'/'all' shorthands, from_hour/to_hour range and time-zone basis, and the bid_adjustment percentage convention with an example. account_id and campaign_id are left undocumented but are self-evident identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Sets WHEN a Microsoft (Bing) campaign is allowed to serve') and scopes it to Microsoft, which implicitly separates it from the sibling set_ad_schedule (Google) and get_ad_schedule (read). An agent can identify the operation immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the operational context clearly ('Without an ad schedule the campaign runs 24/7 and burns budget at night'), which tells the agent when this is warranted. It stops short of explicitly naming the alternative tools or prerequisites, so it is clear context without full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_microsoft_demographic_targetMicrosoft Demographic TargetAInspect
Adds a demographic bid adjustment. criterion_type: Age | Gender. value: age range (e.g. TwentyFiveToThirtyFour) or gender (Male | Female). bid_multiplier: bid adjustment (%). confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| customer_id | No | ||
| bid_multiplier | Yes | ||
| criterion_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, non-idempotent, non-destructive write but say nothing about workflow. The description adds genuinely new behavior: confirm=false previews, confirm=true applies, which is critical for a mutation tool. It stops short of permissions/rate-limit/error context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact clauses, operation first, each parameter annotation in-line; zero filler sentences. The confirm semantics land last, which is the right place for a workflow note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be explained, and the preview/apply contract covers the main safety concern. Gaps are the identity parameters (account_id/campaign_id/customer_id usage) and whether the adjustment is applied at campaign or ad-group level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and does partially compensate: it supplies the criterion_type domain (Age | Gender), a value format example (TwentyFiveToThirtyFour, Male | Female) and the unit for bid_multiplier (%). It says nothing about account_id, campaign_id or customer_id, leaving 4 of 7 parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Adds a demographic bid adjustment' with the exact Microsoft surfaces it touches (Age | Gender criterion, bid multiplier). An agent can tell it apart from add_microsoft_device_target or add_microsoft_location_target by subject matter, but the description never explicitly names or contrasts a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the criterion/value enumeration rather than stated: no 'use this when' or 'prefer X instead' and no prerequisite (e.g. campaign must exist, account must be connected via connect_microsoft_ads). The confirm=false/true preview workflow is the only workflow guidance offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_microsoft_device_targetMicrosoft Device TargetAInspect
Adds device bid adjustments (all THREE TOGETHER — required by Microsoft). Values are % bid adjustments (0 = no change for that device). confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| tablets | No | ||
| computers | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| customer_id | No | ||
| smartphones | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-destructive, non-idempotent write (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds meaningful behavior beyond that: the mandatory three-value constraint, that values are percent bid adjustments with 0 meaning no change, and the preview/apply semantics of confirm.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that lead with the action and the mandatory constraint, then the value semantics and confirm modes. No filler, though the parenthetical formatting is slightly compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema covering return values, the description only needs to cover invocation concerns. It handles the mutation behavior, the required-together constraint, and preview vs apply, leaving only identifier parameters unaddressed, which is a minor gap for a 7-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. It does well for the device values (percent adjustments, 0=no change, send all three together) and for confirm, but account_id, campaign_id, and customer_id are never explained even though two are required. Partial compensation warrants a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (adds) and resource (device bid adjustments for Microsoft), which is enough to distinguish it from siblings like add_microsoft_demographic_target or manage_device_targeting. It does not explicitly name an alternative sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: all three device values must be sent together (a Microsoft requirement) and confirm=false previews while confirm=true applies. It does not compare against the closest sibling manage_device_targeting, so it provides clear context but no explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_microsoft_keywordsAdd Microsoft KeywordsAInspect
Adds keywords to an ad group. match_type: Broad | Phrase | Exact. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| keywords | Yes | ||
| account_id | Yes | ||
| match_type | No | Phrase | |
| ad_group_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is partly covered. The description adds the important non-obvious behavior that this is a staged two-phase write (preview vs apply), which the annotations do not encode. It does not mention idempotency (annotations say false, so re-adding duplicates may occur) or per-call keyword limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight fragments with zero filler; the core action comes first, followed by the match_type values and the confirm semantics. Every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. But for a 6-parameter mutation tool with 0% schema coverage and no annotations covering the staged-write behavior, gaps remain around keyword format, account/customer identifier roles, and duplicate handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it only partly does: it enumerates match_type values (Broad | Phrase | Exact) and explains confirm, but says nothing about account_id, ad_group_id, customer_id, or the keyword string format. Half the parameters remain undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Adds keywords to an ad group.' The tool name/title carries the Microsoft platform, so an agent knows it targets Microsoft Ads. However, it does not distinguish itself from the sibling add_keywords (generic) or manage_keywords, leaving the platform routing partly implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'confirm=false = preview, confirm=true applies' line gives a real usage rule for the dry-run flow, which is the closest thing to when-to-use guidance. But it never states when to prefer this tool over add_keywords or manage_keywords, and there is no prerequisite or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_microsoft_location_targetMicrosoft Location TargetAInspect
Adds a geographic location target to a campaign using Bing LocationIds. location_ids are numeric Microsoft LocationIds from microsoft_location_search (e.g. 'İstanbul' → 136887). If bid_multiplier>0, applies a bid adjustment (%). confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| customer_id | No | ||
| location_ids | Yes | ||
| bid_multiplier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false, so the description carries real weight — and it delivers by disclosing the preview/apply semantics of confirm, plus the conditional bid adjustment triggered when bid_multiplier>0. It stops short of explaining what happens to pre-existing location targets or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and resource, then ID sourcing, then optional-parameter behavior. No filler. Slightly dense with parenthetical example, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with an output schema present (so return values need no explanation), the description covers the non-obvious inputs and the confirm gating. The remaining gap is whether adding a target merges with or overrides existing campaign targeting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: it specifies that location_ids are numeric Microsoft LocationIds (with a concrete example) sourced from microsoft_location_search, and defines bid_multiplier's unit (%) and confirm's effect. account_id, campaign_id and customer_id are left undefined but are self-evident identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Adds a geographic location target to a campaign') and immediately distinguishes itself from the sibling targeting tools by naming the ID namespace ('Bing LocationIds'). An agent can route here versus add_microsoft_device_target or add_microsoft_demographic_target without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to microsoft_location_search for obtaining the numeric LocationIds and explains the confirm=false/true workflow, which is the key when-to-use decision. It does not state when this tool should NOT be used (e.g. replacing existing geo targets vs. adding), so it falls short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_microsoft_negative_keywordsAdd Microsoft Negative KeywordsInspect
Adds negative keywords to a campaign or ad group. entity_type: Campaign | AdGroup. keywords: a list, or a comma-separated string ("staj, kurs"). match_type: Exact | Phrase (negatives support only these two). confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| keywords | Yes | ||
| entity_id | Yes | ||
| account_id | Yes | ||
| match_type | No | Exact | |
| customer_id | No | ||
| entity_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
add_negative_keywordAdd Negative KeywordAInspect
Adds negative keywords at CAMPAIGN or AD GROUP level (to stop wasted spend) — ONE keyword or a WHOLE BATCH in a single call.
BULK (use this whenever there is more than one keyword — one call, one confirmation, one credit): keywords=['ucuz|BROAD', 'iş ilanı|EXACT', 'kariyer'] — each item is 'text' (takes match_type, default PHRASE) or 'text|EXACT' / 'text|PHRASE' / 'text|BROAD', exactly like manage_shared_negative_list. A comma- or newline-separated string is accepted too. Up to 5000 per call. NEVER loop this tool one keyword at a time: the batch goes to Google as a single mutate with partial failure ON, so one bad or duplicate keyword can no longer take the rest of the batch down, every keyword comes back with its own ok/criterion_id/error, and nothing can be silently dropped between hand-made batches.
skip_existing=true (default) first reads the negatives already live on that campaign/ad group and skips exact (text + match type) duplicates — repeat daily runs then stay idempotent and do not burn the 10.000-negatives-per-campaign limit. Set false to write them anyway.
Give campaign_id to block the term across the whole campaign, or ad_group_id to block it in ONE ad group only — the latter is what cross-negation needs (each ad group serves only its own theme, negating the other groups' core terms inside a single campaign). If both are given, ad_group_id wins. Undo: remove_negative_keyword (bulk: criterion_ids=[...] or keywords=[...]) at campaign level; manage_keywords(action='remove') at ad group level — list_negative_keywords returns the ids. If confirm=false, returns a dry-run preview of the WHOLE batch.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| confirm | No | ||
| keywords | No | ||
| match_type | No | PHRASE | |
| ad_group_id | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| skip_existing | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: partial-failure semantics (one bad keyword can't kill the batch), per-keyword ok/criterion_id/error returns, the 10,000-negatives-per-campaign limit, idempotency via skip_existing, and dry-run behavior when confirm=false. Annotations declare idempotentHint=false, but the description clarifies that skip_existing=true makes repeated runs effectively idempotent, which is a coherent refinement rather than a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then batched into scannable paragraphs for bulk, skip_existing, targeting, and undo. Dense but every block is load-bearing; minor redundancy between the intro and the BULK section costs it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-param mutation tool with no output schema documentation in the description, every behavioral trait an agent needs is present: scope, batching, dedupe, limits, precedence, dry-run, and undo path. Nothing material is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden — and it delivers: per-item format ('text' or 'text|MATCH_TYPE'), comma/newline string acceptance, the 5000-item cap, skip_existing semantics, campaign_id vs ad_group_id precedence, and confirm=false dry-run behavior. All 8 params are effectively documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicit verb+resource (adds negative keywords) with scope stated up front: campaign or ad group level, single or batch. An agent can distinguish it from remove_negative_keyword, list_negative_keywords, and the Microsoft/TikTok variants without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Prescribes exactly when to use bulk (more than one keyword), when to pass campaign_id vs ad_group_id (cross-negation semantics), which wins if both are given, and explicitly warns against looping. Routing to remove_negative_keyword/manage_keywords for undo is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_pmax_imagesAdd PMax ImagesAInspect
Attaches IMAGES to a Performance Max asset group (required for the campaign to be eligible to run). Each parameter is a list of asset resource_names returned by upload_image_asset. marketing_image (1.91:1 landscape), square_image (1:1 square), logo (1:1). PMax requires at least 1 landscape + 1 square image + 1 logo. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| customer_id | Yes | ||
| logo_assets | No | ||
| asset_group_id | Yes | ||
| square_image_assets | No | ||
| marketing_image_assets | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-read-only, open-world, non-destructive write. The description adds the meaningful behavior the annotations cannot: the confirm=false dry-run switch and the hard requirement that at least one landscape + one square image + one logo be present. It does not say whether re-adding duplicates or how repeated calls behave beyond the idempotentHint flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every clause earns its place: purpose, eligibility stake, parameter meaning, aspect ratios, minimum requirements, and dry-run semantics, all front-loaded with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter write tool with an output schema (so return values need no explanation), the description covers the asset-type semantics, the resource-name source, the eligibility requirement, and the dry-run flag. It omits permission/auth requirements and what happens to previously attached images, which would round it out fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description has to carry the load and largely does: it explains marketing_image (1.91:1), square_image (1:1), logo (1:1), states the values are asset resource_names from upload_image_asset, and defines confirm=false as dry-run. customer_id and asset_group_id are left purely to the schema, a minor gap given they are self-evident IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Attaches IMAGES to a Performance Max asset group') and immediately conveys why it matters. It also names the upstream dependency (upload_image_asset) and the sibling category (PMax asset operations) an agent needs to place it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear context for use (required for campaign eligibility, minimum asset mix) and explains the dry-run path via confirm=false. It stops short of naming alternatives or exclusions relative to update_pmax_assets / update_pmax_asset_group, 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.
add_siteAdd Website To ServerAInspect
Adds ANOTHER website to the user's existing server, on its own domain. Use this instead of
telling them to buy a second server: one server hosts as many sites as its disk allows, at no
extra cost. domain is the new site's own domain (e.g. ikincisite.com); key is an optional
short name used to address the site in later tool calls (defaults to a slug of the domain).
confirm=false previews, confirm=true creates it. We take the domain onto our own DNS: the
only thing the customer does is change the nameservers (NS) at their registrar to the ones
this tool returns — never hand them CNAME/A records. If the domain's zone is already ours
(e.g. blog.theirsite.com) there is nothing for them to do at all. Then write the pages with
site_write_file(site='', …).
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| domain | Yes | ||
| server | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, non-idempotent), so the bar is lower, yet the description adds substantial behavior: confirm=false previews vs confirm=true creates, the DNS/nameserver handoff, the explicit warning never to hand out CNAME/A records, and the no-extra-cost hosting model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and tightly written across several dense sentences; the DNS and follow-on guidance earn their place. Slightly long, with some explanatory copy ('at no extra cost') that borders on persuasive rather than operational.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, open-world tool this is thorough: creation flow, preview vs commit, DNS responsibility, edge case, and downstream tool routing are all covered. An output schema exists, so return-value explanation is legitimately omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It documents domain (new site's own domain, with example), key (optional short name, defaults to a slug), and confirm (preview vs create). However, the `server` parameter is never mentioned, leaving one of four parameters unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Adds ANOTHER website to the user's existing server, on its own domain') and explicitly distinguishes this from the alternative of buying a second server. It also implicitly separates itself from siblings like create_trial_site, scaffold_site, and remove_site.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ('Use this instead of telling them to buy a second server') and routes the follow-on step to a named sibling ('Then write the pages with site_write_file'). It even covers the edge case where no registrar action is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_recommendationApply RecommendationADestructiveInspect
Applies or dismisses Google recommendations. resource_names: comma-separated values from list_recommendations. action: apply | dismiss. apply can make costly changes such as budget increases (subject to the same budget guardrails as set_campaign_budget). confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | apply | |
| confirm | No | ||
| customer_id | Yes | ||
| resource_names | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds the crucial facts beyond them: apply can trigger costly changes such as budget increases, those changes fall under the same guardrails as set_campaign_budget, and confirm=false produces a dry run. The dry-run default and cost warning are exactly the behavioral context an agent needs before a destructive write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four terse fragments, each carrying a distinct piece of operational meaning (verb pair, parameter provenance, action values, cost/dry-run semantics). Nothing is padding and the riskiest information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the write risk, the dry-run path, and parameter sourcing. It stops short of saying whether applied changes can be rolled back or how partial failures across multiple resource_names are handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for the two risky parameters: resource_names is described as comma-separated values sourced from list_recommendations, action is constrained to apply|dismiss, and confirm is explained as a dry-run switch. Only customer_id is left unstated, which is a minor gap given how conventional it is.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair and resource ('Applies or dismisses Google recommendations'), which is far better than the title alone. The only ambiguity is the overlap with the sibling dismiss_recommendations, which the description never addresses, so an agent must guess which entry point to use for dismissal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent to list_recommendations as the source of resource_names and gives the action enum values, which is concrete usage guidance. It does not say when to prefer this tool over dismiss_recommendations or list_recommendations, 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.
attach_linkedin_conversionAttach LinkedIn ConversionADestructiveInspect
Attaches an existing conversion tracking rule to a LinkedIn campaign so it reports/optimizes for that conversion. conversion_id: the numeric id from list_linkedin_conversions. A MAX_CONVERSION (automated 'Maximum Delivery') campaign REQUIRES a conversion attached before it can go ACTIVE. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| conversion_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true and idempotentHint=false, and the description adds value beyond them by disclosing confirm=false = preview (a dry-run path) and the MAX_CONVERSION dependency. It does not, however, explain why the operation carries a destructive hint or what state changes when confirm=false is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler, with the core action and its effect front-loaded, followed by parameter sourcing and the preview flag. Every sentence adds signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the description covers the key prerequisite, the preview flag, and parameter sourcing. Missing only account/campaign identifier semantics and any permission/eligibility requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden. It explains the two non-obvious parameters (conversion_id sourced from list_linkedin_conversions, confirm as a preview toggle), though account_id and campaign_id are left to name inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (attaches), resource (conversion tracking rule), target (LinkedIn campaign), and the outcome (reporting/optimization for that conversion). It is immediately distinguishable from the sibling detach_linkedin_conversion and list_linkedin_conversions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: an existing rule must be attached to a MAX_CONVERSION campaign before it can go ACTIVE, and conversion_id comes from list_linkedin_conversions. It stops short of naming an explicit alternative or when-not-to-use condition, but the routing guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
block_ip_addressesBlock IP AddressesDestructiveInspect
Excludes IP addresses from a Google Ads campaign by adding them as IP exclusion (negative IP_BLOCK) campaign criteria, for example addresses that produce repeated invalid clicks. ips = comma-separated IPv4/IPv6 addresses, at most 200 per call; Google Ads allows up to 500 IP exclusions per campaign. confirm=false returns a preview, confirm=true applies. Use unblock_ip_addresses with the criterion ids from list_ip_exclusions to undo.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | No | ||
| confirm | No | ||
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
budget_pacing_alertsBudget Pacing AlertsARead-onlyIdempotentInspect
BUDGET PACING — projects this month's spend against the daily budget; flags campaigns that will OVERspend (over) or UNDERspend (under) by month-end. threshold_pct: deviation threshold (%). pace_pct = actual daily average / daily budget. READ-ONLY.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | ||
| threshold_pct | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint/idempotentHint, so 'READ-ONLY' adds little, but the description usefully defines the projected behavior (month-end spend projection), the meaning of the over/under flags, and the pace_pct formula. It stops short of stating time-range or account-scope constraints beyond customer_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the tool identity in caps, then the computation, then the flag semantics, then the parameter note. Dense and largely waste-free, though the em-dash fragments and trailing parameter/formula notes read as terse rather than cleanly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not enumerate return fields, and it still explains what the flags mean and how pace_pct is derived. What is missing is scope/permission context (which ad platforms, what customer_id refers to) and any indication of result volume.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with 2 parameters, so the description must compensate. It defines threshold_pct as the deviation threshold in percent (consistent with the schema default of 20), but customer_id is never explained and pace_pct is an output field, not an input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: projects this month's spend against daily budget and flags over/under-spending campaigns. That is clearly distinct from write siblings like set_campaign_budget or reporting siblings like performance_report, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool computes but gives no when-to-use guidance, no prerequisites (e.g. account must be connected), and no routing away from alternatives such as performance_report or get_report. Usage is only inferable from the purpose sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_ads_ad_previewChatGPT Ads Ad PreviewARead-onlyIdempotentInspect
Renders how an existing ChatGPT Ads ad looks, plus the delivery blockers OpenAI reports for it.
The preview shows appearance only — OpenAI is explicit that it does not prove the ad is eligible to serve — so this also requests the ad's serving issues and review status, which is what actually answers "why is this not running". Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavioral context: the preview is appearance-only and does not prove eligibility to serve, which is a real semantic caveat an agent would otherwise get wrong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short paragraphs, front-loaded with what the tool does before the caveat about eligibility. The second paragraph is slightly discursive but each sentence carries a distinct point (appearance-only, not proof of eligibility, adds serving issues).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and annotations cover the safety profile. The description supplies the key behavioral caveat, but its silence on the two input parameters is the one material gap for calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, and the description never mentions ad_id or the optional account parameter. ad_id is inferable from the name, but account's purpose and default behavior are undocumented in both the schema and the description, leaving the agent without compensation for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('renders how an existing ChatGPT Ads ad looks') and clarifies the additional payload (delivery blockers and review status). It distinguishes itself from a pure rendering tool by stating it does NOT prove eligibility, but it never names the closely-related siblings (chatgpt_ads_details, diagnose_chatgpt_ads_delivery) it could be confused with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use context — this is what 'actually answers why is this not running' — which implies when to reach for it. However, it names no alternatives and gives no when-not-to-use guidance, so the agent must infer its place among chatgpt_ads_status and diagnose_chatgpt_ads_delivery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_ads_conversion_setupChatGPT Ads Conversion SetupARead-onlyIdempotentInspect
Shows ChatGPT Ads conversion tracking: pixels (data sources), conversion event settings with the campaigns they are attached to, and events received in the last ~15 minutes.
Use it to answer "is my pixel firing" and "which campaigns measure which action". Recent events come from OpenAI's test stream (up to 50 events from roughly the last 15 minutes, per pixel; browser events show channel pixel_sdk, server events server_to_server) — an empty list only means nothing arrived in that window. If OpenAI has not enabled the stream for the account it answers 404 and this tool says so. Standard events can be the goal of a conversions-objective campaign; custom events can only be measured. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| check_recent_events | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring it read-only and idempotent, the description adds substantial behavioral context beyond them: the 50-event / ~15-minute window, the pixel_sdk vs server_to_server channel labels, that an empty list only means nothing arrived in that window, and that a 404 is surfaced when OpenAI has not enabled the stream. It also distinguishes standard (usable as a campaign goal) from custom (measure-only) events.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense but well ordered: purpose first, then the questions it answers, then the caveats about the test stream and 404. No sentence is filler, though the parenthetical channel details make it longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the important edge cases (empty window, disabled stream). The one real gap is that the `account` parameter is never addressed, leaving the agent to infer which account is queried.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither parameter is named in the description; the `account` parameter is never explained at all. The discussion of recent events implicitly maps to `check_recent_events`, but the description does not compensate for the documentation gap on account scoping or on how the two parameters interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource set: it shows conversion tracking pixels (data sources), event settings and their attached campaigns, plus recently received events. That is much more specific than the title. It does not, however, explicitly differentiate itself from near-siblings like chatgpt_ads_details or conversion_tracking_health, so a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage contexts in the form of the questions it answers ("is my pixel firing", "which campaigns measure which action"), which tells the agent when to reach for it. It stops short of naming an alternative tool or stating when not to use it, so no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_ads_detailsChatGPT Ads Object DetailsARead-onlyIdempotentInspect
Full details of one ChatGPT Ads campaign, ad group or ad by id, including everything that decides delivery.
Campaign (cmpn_…): budget, schedule, objective, full location/platform/audience targeting, attached conversion events, serving issues. Ad group (adgrp_…): bid strategy and bid in the account currency, bid_too_low (with the 24-hour caveat: OpenAI does not raise it within 24 hours of an ad-group edit, so the time it becomes evaluable is returned), serving issues, its parent campaign and the context hints (paged by hints_limit/hints_offset). Ad (ad_…): the full creative — title, body, destination URL, image — plus review status, the review reason (for example a regulated health category) and serving issues with plain explanations. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| account | No | ||
| hints_limit | No | ||
| hints_offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive profile, so the bar is lower. The description still adds real value beyond them: the entity-type field inventory, pagination behavior for context hints, and especially the 24-hour bid_too_low caveat explaining when the value becomes evaluable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose before the per-entity breakdown, and the structure is scannable. It is on the long side and 'including everything that decides delivery' is slightly padded, but every substantive clause (prefixes, caveat, paging) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not strictly required, yet the description usefully previews it. Given four parameters at 0% schema coverage, the only real gap is the unexplained `account` parameter; otherwise the definition is complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It does well for id (revealing the cmpn_/adgrp_/ad_ prefix convention, which is critical for correct invocation) and for hints_limit/hints_offset paging, but the `account` parameter is never mentioned, leaving one of four parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Full details of one ChatGPT Ads campaign, ad group or ad by id') and enumerates exactly what 'details' means for each of the three id prefixes. This cleanly separates it from list_*/create_*/update_chatgpt_ads_* siblings without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'full details of one ... by id' — the agent can infer it is a single-object read. But no explicit when-to-use guidance or alternatives (e.g., chatgpt_ads_status, chatgpt_ads_insights) are named, leaving the agent to guess which read tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_ads_geo_lookupChatGPT Ads Location LookupARead-onlyIdempotentInspect
Finds ChatGPT Ads location ids (countries, regions, markets, postal codes) to use in campaign location targeting.
Returns id, name, type, country and region code. Pass the id (or a plain ISO country code such as TR) to update_chatgpt_ads_campaign include_locations / exclude_locations. Search in English or the local name ('Istanbul', 'England'); a country name can also match postal codes elsewhere, so check country_code. A valid location does not mean ads are allowed in that country — OpenAI's pilot country list and category policies still apply. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, so the trailing 'Read-only' is redundant, but the description adds real behavioral context beyond them: the ambiguous country-name matching against postal codes and the fact that a valid location id does not imply ad eligibility under OpenAI policy. That is genuinely useful pre-call knowledge.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the purpose and the chaining target, then caveats. Dense but each sentence carries information; the only waste is restating 'Read-only' already covered by annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-value documentation is not strictly required, yet the description still usefully sketches the returned fields for chaining. It covers the ambiguity and policy gotchas an agent needs; only the limit/account parameters remain unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the param burden. It does explain the query parameter well (English/local names, ISO codes like TR), but says nothing about the limit or account parameters, leaving two of three undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (finds) and resource (ChatGPT Ads location ids) plus the enumerated location types. It is clearly distinguishable from the many sibling geo tools (geo_target_search, microsoft_location_search, tiktok_region_search) by naming the ChatGPT Ads platform explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the downstream consumption path (pass the id or ISO code to update_chatgpt_ads_campaign include_locations/exclude_locations), tells the agent what input forms work (English or local name, ISO code), and warns about the postal-code false-match and the pilot-country/category-policy caveat. When-to-use and when-not-to-trust are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_ads_insightsChatGPT Ads InsightsARead-onlyIdempotentInspect
ChatGPT Ads delivery report with every option OpenAI offers: hourly/daily/monthly buckets, platform/country/device breakdowns, zero-impression rows and conversion metrics.
scope_id narrows to one campaign/ad group/ad (cmpn_/adgrp_/ad_); empty = whole account. level: account | campaign | ad_group | ad — one row per entity at that level. granularity: none (period total) | hourly (about 30 days of history) | daily | monthly; times are in the account time zone. segment: platform (android_app, android_web, desktop_web, ios_app, ios_web, web) | country | device | product — one at a time, not with hourly, not with conversions. include_zero=true adds campaigns/groups/ads that got no impressions (unsegmented only), which is how you see what is NOT delivering. conversions=true (granularity none or daily only) adds conversions, cpa, post_click_cvr, attributed sales and ROAS (null means not computable, not zero; conversions settle over about a day). Spend, CPC and CPM are in the account currency. Dates are YYYY-MM-DD (end inclusive); without dates the last days days. Rows are paged with limit/offset. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| level | No | campaign | |
| limit | No | ||
| offset | No | ||
| account | No | ||
| segment | No | ||
| end_date | No | ||
| scope_id | No | ||
| start_date | No | ||
| conversions | No | ||
| granularity | No | none | |
| include_zero | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnly/idempotent/non-destructive, and the description confirms read-only while adding real behavioral context beyond them: hourly history limited to ~30 days, timestamps in the account time zone, currency for spend/CPC/CPM, conversion lag ('settle over about a day') and the null-vs-zero distinction. Missing only data freshness/pagination limits beyond what limit/offset imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then organized clause-by-clause around parameters, with zero filler sentences. It runs long, but nearly every clause encodes a constraint or behavior an agent needs, so the density justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter analytics tool with an output schema, the description covers scope, level, granularity, segmentation, zero-impression semantics, conversion caveats, time zone, currency, date handling and paging. Nothing required for a correct invocation is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with 12 parameters, so the description carries the full load and does so: scope_id prefixes (cmpn_/adgrp_/ad_), level values, granularity values with history caveat, segment enum values (android_app, ios_web, etc.) that the schema lacks, date format and defaults, and paging via limit/offset.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific artifact (ChatGPT Ads delivery report) and enumerates the dimensions it reports (time buckets, breakdowns, zero-impression rows, conversions), which clearly separates it from siblings like chatgpt_ads_details, chatgpt_ads_status and diagnose_chatgpt_ads_delivery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to reach for each option, including the diagnostic use case ('include_zero=true ... is how you see what is NOT delivering') and incompatibility rules (segment not with hourly or conversions; conversions only at granularity none/daily). It does not, however, state when to prefer this tool over sibling reporting tools such as diagnose_chatgpt_ads_delivery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_ads_spend_limitsChatGPT Ads Spend LimitsARead-onlyIdempotentInspect
Shows the ChatGPT Ads account-level spending limits: date-range windows and the recurring daily limit, with spend so far.
An account limit caps spend across ALL campaigns; a campaign can have budget left and still stop because the account limit is used up. Amounts are in the account currency; end dates are exclusive (the limit ends at midnight of that day, account time zone). OpenAI only exposes these to an ad-account ADMIN key with billing permission — with an ordinary key the tool says exactly that instead of failing. Account limits exist only on postpaid (invoice) billing. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds what the annotations provide. Annotations only declare safe/idempotent/read-only; the description adds the auth requirement (ad-account ADMIN key with billing permission), the graceful non-failure behavior for ordinary keys ('says exactly that instead of failing'), the billing-plan restriction (postpaid invoice only), currency units, and exclusive end-date semantics in the account time zone. This is exactly the operational context an agent needs to interpret a result or an unexpected response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense but front-loaded sentences: what it shows first, then the account-vs-campaign caveat, then data semantics, then auth. Every clause except the trailing 'Read-only' earns its place; that last sentence duplicates readOnlyHint and could be dropped. No filler otherwise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure needn't be described, and the description covers currency, date exclusivity, billing-plan scope, and auth behavior thoroughly. The one real gap is the unexplained `account` parameter, which matters because the tool is account-scoped.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter, `account`, with 0% schema description coverage and a bare empty-string default, so the schema does not carry the burden — this is not the zero-parameter baseline-4 case. The description never explains what `account` accepts or what the empty default resolves to (all accounts? default account?), leaving the agent to guess how to target an account.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Shows the ChatGPT Ads account-level spending limits') and enumerates what is returned: date-range windows, recurring daily limit, spend so far. It also draws the crucial account-vs-campaign scope boundary, which is what separates it conceptually from the campaign budget tools. It does not name the obvious sibling `manage_chatgpt_ads_spend_limit` (the write counterpart), so the read/write routing is only implied by 'Read-only'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-it-matters context: an account limit caps spend across ALL campaigns, so a campaign can have budget left and still stop — this tells an agent exactly which diagnostic question this tool answers. It also states preconditions (admin key with billing permission, postpaid/invoice billing only), which is strong usage guidance. It stops short of naming the alternative tool to use for changing limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_ads_statusChatGPT Ads StatusADestructiveInspect
Pauses, activates or archives a ChatGPT Ads campaign, ad group or ad.
kind: campaign | ad_group | ad. action: pause | activate | archive. Archiving is not reversible through the API, so it needs the same explicit confirmation as the others. confirm=false returns a dry run naming exactly what will change; confirm=true applies it and reads the object back so the new status is confirmed rather than assumed.
account = the ChatGPT Ads ad account id; leave it empty to use your connected/default account. Each OpenAI Ads API key is scoped to one ad account, so connect one key per account with connect_chatgpt_ads.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| kind | Yes | ||
| action | Yes | ||
| account | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint/openWorldHint annotations: it warns that archiving is not reversible via the API, states that confirmation is required, and describes the two-mode behavior (confirm=false dry-run naming what will change vs confirm=true applying and reading back to verify). This is exactly the behavioral context an agent needs before a destructive write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: the primary action leads, followed by the parameter enums, then the confirm workflow, then account scoping. Every sentence adds information, though the backtick-heavy formatting is slightly dense for prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive multi-entity mutation tool, the description covers actions, target kinds, confirmation flow, reversibility, and account scoping thoroughly. An output schema exists so return values need no explanation, leaving no material gap for an agent to call this safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and no enums are defined in the schema, so the description carries the full burden; it supplies the allowed values for `kind` and `action`, explains `account` semantics and its default-account behavior, and documents `confirm`'s dry-run meaning. Only `id` is left unexplained, which is minor and self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (pauses, activates, archives) and the exact resource scope (ChatGPT Ads campaign, ad group, or ad), and the enum framing for `kind` resolves the ambiguity of the generic name 'status'. An agent can immediately tell this is a status-mutation tool rather than a status-reader like chatgpt_ads_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the confirm dry-run/apply workflow and how to select account, which is genuine usage guidance, but it never says when to use this versus siblings such as update_chatgpt_ads_campaign, update_ad_status, or pause_campaign. Usage is implied by the action enums rather than stated explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
client_reportClient Report (White-Label)ARead-onlyIdempotentInspect
CLIENT REPORT (agency, white-label) — aggregates an account's period performance in a CLIENT-READY format: overall KPIs (cost/clicks/conversions/ROAS/CPA/CTR) + % change vs. the PREVIOUS period + top-spending campaigns. brand_name appears in the report title. For a shareable page, use client_report_link. READ-ONLY.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| brand_name | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the description's 'READ-ONLY' line is largely redundant. It does add one useful behavioral fact — brand_name appears in the report title — but says nothing about permissions, latency, or whether the report is generated on demand.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense, front-loaded sentence that puts the tool's identity and the sibling alternative in the right order. It is information-rich rather than padded, though the em-dash stacking makes it slightly heavy for a single sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the description still previews the KPI set. Combined with annotations covering safety, the definition is complete enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning and it only partially does: it explains brand_name's effect on the title and implies days through 'period performance' vs 'previous period'. customer_id (the required parameter) and the exact meaning/default of days are left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (aggregates an account's period performance) and enumerates the exact outputs (cost/clicks/conversions/ROAS/CPA/CTR plus % change vs previous period). It explicitly distinguishes itself from the sibling client_report_link by labeling the latter the 'shareable page' option, so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context (agency, white-label, client-ready) and names the alternative with a condition: 'For a shareable page, use client_report_link.' However it offers no when-not guidance (e.g., when a raw internal report is preferable) and does not describe account/period selection beyond defaults.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
client_report_linkShareable Report LinkBDestructiveInspect
SHAREABLE CLIENT REPORT LINK (white-label) — generates client_report, stores it as a frozen snapshot, and returns a PUBLIC, printable (PDF from browser) page URL you can send to your client. brand_name appears in the report title. READ-only (+ stores a snapshot).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| brand_name | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=true, idempotentHint=false and openWorldHint=true. The description helpfully discloses the snapshot write and the public (open-world) URL, but leads with 'READ-only (+ stores a snapshot)', which is at odds with readOnlyHint=false, and never explains the destructiveHint=true implication (e.g. what an existing snapshot is replaced or what is overwritten). The tension is compounded by an unexplained destructive flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the key differentiator (public shareable link) and compact. Some redundancy in the all-caps framing and the trailing 'READ-only (+ stores a snapshot)' clause dilutes rather than informs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a tool with a hidden write side effect (snapshot storage, destructive flag) and zero parameter documentation, the description leaves important operational context unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three parameters. The description only clarifies one: brand_name appears in the report title. Neither `days` (default 30) nor `customer_id` (required) is given any meaning, so the description does not compensate for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource combination: it generates client_report, freezes a snapshot, and returns a public URL. This is clearly distinct in output shape from the sibling `client_report`, though the description never names that sibling to draw the contrast explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'a page URL you can send to your client' implies the use case (client-facing deliverable), but there is no explicit when-to-use/when-not guidance and no routing away from the closely related `client_report` sibling. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
competitor_adsCompetitor AdsARead-onlyIdempotentInspect
Competitor AD intelligence — fetches a brand's/domain's LIVE ads from public ad libraries. platform: google (Ads Transparency Center) | meta (Meta Ad Library; requires a connected Meta account) | linkedin. Returns only publicly available ad creatives/copy; competitors' ORGANIC keywords are NOT available in Google's APIs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| region | No | TR | |
| platform | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/open-world, so safety is covered. The description adds real value beyond them: the data is LIVE from public ad libraries, only publicly available creatives/copy are returned, and the Meta path requires a connected account (auth prerequisite).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then platform details and the negative-keyword caveat. Dense but each clause contributes; the platform list is compact and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return format needn't be described, and annotations cover the safety profile. The description supplies the important operational caveats (live public data, auth requirement for Meta), leaving only the non-platform parameter semantics thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the param burden. It documents the platform enum values well and implies the query is a brand/domain, but leaves limit and region (default TR) entirely unexplained. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetches) and resource (a brand's/domain's LIVE ads from public ad libraries), with the platform scope enumerated (google/meta/linkedin). It is clearly distinguishable from sibling data tools like seo_paid_keywords or keyword_opportunities because it targets competitors' live ad creatives from public libraries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for each platform path, including the prerequisite that meta requires a connected Meta account, and a useful exclusion (competitors' organic keywords are NOT available). It stops short of naming a specific alternative tool to use instead for organic keywords, so no explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_site_smtpSet Up Site Contact-Form EmailADestructiveInspect
Sets up a CONTACT FORM → EMAIL relay for the user's hosted (static) site using the user's OWN Gmail or Yandex — with NO third-party dashboard: the user configures everything here, in chat. A static page can't speak SMTP itself, so its form POSTs to our thin relay and we forward the message through the user's own Gmail/Yandex (Gmail/Yandex does the actual sending). The site OWNER sets BOTH the sender (from_email) and recipient (to_email); the visitor filling the form cannot change them (so it can't be abused as an open relay). provider: 'yandex' (smtp.yandex.com:465) | 'gmail' (smtp.gmail.com:465 — requires a Google APP PASSWORD, not the normal password) | 'other' (give smtp_host + smtp_port). from_email must be the SMTP account (or a verified alias) or Gmail/Yandex rejects the send. By default sends a TEST email to to_email to verify the credentials and reports the result. Returns the form endpoint URL + a ready-to-paste HTML snippet (with honeypot). Re-running reconfigures the same server's form. The SMTP password is stored encrypted; only the site owner's fixed to_email ever receives mail.
READ-ONLY STATUS: call with only server (no smtp_user / smtp_pass / to_email) to see whether
that site's form is already set up, its endpoint URL and the field contract, without entering
any password. A new site has no endpoint yet — it is created on the first real setup, so build
the form with the action in one place and fill it in after setup.
Field contract of the endpoint: POST as a normal HTML form (form-urlencoded or multipart; JSON
is not read). Every field whose name does not start with "_" is forwarded in the e-mail;
email becomes Reply-To, subject sets the subject line. _gotcha is the hidden honeypot
(filled = silently dropped). _redirect = an absolute https URL to send the visitor to after
sending, with ?sent=1 or ?sent=0 appended; without it a small thank-you page is shown (HTTP 200,
502 if the mail account refused). No CORS headers are sent, so use a plain form submit (or
fetch with mode:"no-cors", where the reply cannot be read). Limit: 20 submissions per hour per
form (HTTP 429); a GET on the endpoint answers 404/405 by design.
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | ||
| subject | No | ||
| provider | No | yandex | |
| to_email | No | ||
| send_test | No | ||
| smtp_host | No | ||
| smtp_pass | No | ||
| smtp_port | No | ||
| smtp_user | No | ||
| from_email | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations (destructiveHint=true, idempotentHint=false): password stored encrypted, only the owner's fixed to_email receives mail, honeypot anti-relay protection, default test email, 20/hour rate limit with 429, GET returns 404/405 by design, no JSON body accepted, no CORS headers, and 502 when the mail account refuses. Consistent with the destructive/idempotent hints (re-running reconfigures the same form).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long and dense, but the length is justified by a genuinely complex tool (10 params, relay semantics, endpoint field contract, rate limits). It is mostly front-loaded, though the endpoint-contract material is jumbled into the same paragraphs as the config guidance rather than separately structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values (endpoint URL + HTML snippet) need no further unpacking, and the description still delineates the endpoint field contract, redirect semantics, and failure modes. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage on 10 params, the description compensates well: provider values and ports ('yandex' smtp.yandex.com:465, 'gmail' requires an app password, 'other' needs smtp_host+smtp_port), from_email alias constraint, to_email as fixed recipient, send_test default, and the read-only trigger via smtp_user/smtp_pass. Minor gap: `subject` and `smtp_user` are not clearly explained as configuration parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (sets up a contact-form→email relay for the user's hosted static site) and makes the mechanism explicit (form POSTs to a thin relay forwarded through the user's own Gmail/Yandex). It is clearly distinguishable from siblings like wordpress_contact_forms and create_lead_form.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use modes: read-only mode ('call with only `server` ... to see whether that site's form is already set up') versus full setup, plus the static-site scoping that separates it from WordPress/CRM form tools. It stops short of naming a sibling alternative for non-static sites, so it falls just under a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_business_profileConnect Business ProfileAInspect
Generates an authorization link to connect Google Business Profile (My Business) — editing business info/hours/website, publishing posts, and replying to reviews. Stored with a separate encrypted token; does not touch the Google Ads connection.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false. The description adds meaningful context beyond annotations: the authorization link is stored with a separate encrypted token and does not affect the Google Ads connection, which is important for an authentication/connect tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the core action: generating an authorization link. Every clause adds relevant information about scope and behavior, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter connection tool with an output schema and annotations, the description is largely complete. It explains what is generated, what capabilities the connection enables, and how the token is isolated, though it could mention any prerequisite admin access or authorization flow details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline of 4 applies. There are no parameter semantics to document, and the description correctly does not invent or omit any parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: generating an authorization link to connect Google Business Profile. It also names the enabled capabilities (editing business info/hours/website, publishing posts, replying to reviews) and explicitly distinguishes the tool from the Google Ads connection, making it easy to tell apart from sibling connect_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the context clearly: use this to connect a Google Business Profile account. It provides a useful exclusion by noting it does not touch the Google Ads connection, which helps route away from connect_google_ads, but it does not explicitly state when to choose this over other GBP-related tools or list prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_chatgpt_adsConnect ChatGPT AdsDestructiveInspect
Connects a ChatGPT Ads (OpenAI) ad account so campaigns can be managed from chat.
Get the key in OpenAI Ads Manager > Settings > Ads API key. Each key is scoped to ONE ad account, so connect one key per account. The key is verified against the account before it is stored (a key that cannot read its own account is rejected rather than saved), and it is stored encrypted. Re-running this for an account you already connected replaces the stored key, which is how you rotate it. confirm=false shows which account the key belongs to without storing anything.
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
connect_ga4Connect Google AnalyticsBInspect
Generates a one-time authorization link to connect Google Analytics 4. READS reports (traffic, users, conversions, channels, top pages) AND lets you set up GA4: mark conversions (key events), link the property to Google Ads, and create custom dimensions. Stored with a separate encrypted token; does not touch the Ads / Search Console / Business Profile connections.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), the description discloses that the link is one-time, that the token is separately encrypted, and that it does not touch other platform connections. These are useful behavioral details not encoded in the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first sentence, but the second sentence is long and lists read/setup capabilities that are handled by sibling tools, so it does not fully earn its place in a connect tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-parameter connect tool with an output schema and annotations, the description covers the purpose, one-time link, and token isolation. But it fails to route the agent to the actual read/setup tools and instead claims those capabilities, leaving a meaningful gap in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so the baseline is 4. The description does not need to explain parameter behavior, and it adds no misleading parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a concrete verb and resource ('Generates a one-time authorization link to connect Google Analytics 4'), but the second sentence claims the tool READS reports and lets you set up GA4 — functions that belong to sibling tools like ga4_report, ga4_create_conversion, and ga4_link_google_ads. That conflation muddies the selection signal even though the core connect action is stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the usage context by naming the connection purpose and scoping it away from Ads, Search Console, and Business Profile connections. However, it never says when to use this tool versus ga4_report or other connect_* siblings, and it names no explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_google_adsConnect Google AdsAInspect
Generates a one-time authorization link to connect a Google Ads account. Once the user clicks the link and approves with Google, the refresh token is stored encrypted.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-idempotent, non-destructive, non-open-world behavior. The description adds genuinely useful context beyond that: the link is one-time, requires the user to click and approve with Google, and the resulting refresh token is stored encrypted. It does not mention link expiry or re-issuance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with what the tool produces and followed by the post-approval consequence. Every clause earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter OAuth-initiation tool with an output schema (so return shape needn't be described) and full annotation coverage, the description is nearly complete. It omits only peripheral details like link lifetime, required user permissions, and what happens on repeat calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema has nothing to document; per the baseline for a parameterless tool, a 4 applies. The description correctly adds no parameter detail because none exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Generates') and a precise artifact (a one-time authorization link for a Google Ads account), plus the outcome of the flow. It is clearly distinct from connect_meta_ads/connect_ga4 by resource, though it never explicitly contrasts itself with siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: call this when a Google Ads account needs to be connected, and the two-step click/approve flow is described. However, there is no explicit when-not guidance, no mention of prerequisites or of alternatives such as create_google_ads_account or select_google_resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_linkedin_adsConnect LinkedIn AdsAInspect
Generates a one-time authorization link to connect a LinkedIn ad account. Once the user clicks the link and approves via LinkedIn, the access/refresh token is stored encrypted.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish the non-read-only, non-destructive, non-openWorld profile. The description adds genuinely non-obvious behavior beyond them: the link is one-time, a user must click and approve externally, and the resulting token is stored encrypted. It stops short of stating idempotency/link expiry, which would round it out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the primary effect (generating the link) front-loaded and the consequence (approval flowing into encrypted token storage) second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema covering return values, the description supplies the essential context an agent needs: the tool produces an authorization URL and hands control to the user. It could note what happens on re-invocation, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline there is nothing for the description to document. The 100% schema coverage is vacuous but the description correctly implies no inputs are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (generates an authorization link) and resource (LinkedIn ad account), plus the end outcome (token stored). It is clearly distinguishable from the large connect_* family and from list_linkedin_ad_accounts, which require an already-connected account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by describing the flow but never states when to call it (e.g., before any LinkedIn Ads operation) or what to do if the account is already connected. With ~15 connect_* siblings, explicit routing guidance would have been valuable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_meta_adsConnect Meta AdsAInspect
Generates a one-time authorization link to connect a Meta (Facebook/Instagram) ad account. Note: Meta issues a 60-day token (no refresh token) — when it expires, reconnect with the same tool.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' safety hints, the description adds important behavioral context: the authorization link is one-time, the token lasts 60 days, no refresh token is issued, and reconnection requires this same tool. These details are essential for correctly using and revisiting the connection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly written sentences. The core action is front-loaded, and the token-lifetime caveat is placed immediately after without any filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema is provided, the description covers what the agent needs: what the tool does, what it returns conceptually (an authorization link), and the token lifecycle limitation. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema has nothing to document and the description appropriately does not discuss parameter semantics. The baseline for a no-parameter tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Generates') and resource ('one-time authorization link to connect a Meta (Facebook/Instagram) ad account'), making the tool's purpose immediately clear and distinguishable from other platform-connection siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly implies the primary usage context — connecting a Meta ad account — and explicitly tells the agent to reuse the same tool when the token expires. It does not name alternatives or when-not conditions, but the reconnection guidance is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_microsoft_adsConnect Microsoft AdvertisingAInspect
Generates a one-time authorization link to connect a Microsoft Advertising (Bing Ads) ad account. After authorizing, you can query the accessible ad accounts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false), so the bar is lower. The description still adds valuable behavior beyond the schema: the link is ONE-TIME (matching idempotentHint=false) and the post-authorization outcome is querying accessible ad accounts. It omits link expiry, permission requirements, and what happens on re-invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the primary action front-loaded and the follow-on capability second. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only zero parameters and an output schema that documents the returned link, the description covers the essential purpose and the downstream flow. It could go further by noting the link must be surfaced to the user for authorization and that it expires/single-use, but nothing critical is missing for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline a 4 applies. There is no parameter surface for the description to compensate for, and it correctly describes the no-argument behavior (generates a link, no inputs).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generates a one-time authorization link to connect a Microsoft Advertising (Bing Ads) ad account') and disambiguates from sibling connect_* tools by naming the platform. An agent can tell this apart from connect_google_ads or connect_meta_ads 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (use this to establish the connection, then you can query accounts) but never states when-not-to-use it, e.g., what to do if the account is already connected or that list_microsoft_accounts should be used afterward. No prerequisites or alternative routing are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_search_consoleConnect Search ConsoleAInspect
Generates a one-time authorization link to connect Google Search Console (organic search queries/clicks/impressions/position + sitemap management + URL index inspection). Stored with a separate encrypted token; does not touch the Google Ads connection.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply the safety profile (readOnlyHint=false, idempotentHint=false, non-destructive). The description adds meaningful context beyond them: the link is one-time, credentials are stored under a separate encrypted token, and the Ads connection is untouched. It does not explain link expiry handling or whether re-invocation regenerates the link, which idempotentHint=false suggests matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and scope, then a second sentence covering the two things an agent would otherwise have to guess (token isolation, non-interference with Ads). No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers the operation's scope and its key boundary (Search Console only, not Ads). What remains thin is the follow-through: nothing about how the returned link is consumed or what state the account must be in beforehand.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate, and schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (generates) plus resource (one-time authorization link for Google Search Console), and enumerates the data scope it unlocks: organic queries/clicks/impressions/position, sitemap management, URL index inspection. An agent can distinguish it from the many connect_* siblings (connect_google_ads, connect_ga4, etc.) 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — call it to link Search Console — and it helpfully notes it is separate from the Google Ads connection, which partially routes the agent away from connect_google_ads. However, it never explicitly states when to use this versus other connect tools, nor any prerequisites (admin access, which account must be selected first). Guidance is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_tag_managerConnect Tag ManagerAInspect
Generates a one-time authorization link to connect Google Tag Manager (full A-to-Z management: accounts/containers/workspaces, tags/triggers/variables, versioning + PUBLISH). Stored with a separate encrypted token; does NOT touch the Google Ads / Search Console / Business Profile / Analytics / YouTube connections.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the non-read-only, non-idempotent, non-destructive profile. The description adds real value beyond that: the link is one-time, the credential is stored as a separate encrypted token, and the scope of granted access is enumerated. It stops short of describing the auth flow steps or link expiry window.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the core action, then the scope breadth, then the isolation constraint. Every clause carries distinct information with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description covers the auth behavior, credential storage, and scope boundaries. Complete enough for a parameterless connect tool, though it could note what the returned link looks like or how long it is valid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter syntax for the description to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Generates a one-time authorization link to connect Google Tag Manager') and immediately scopes the breadth of access ('full A-to-Z management'). It also explicitly distinguishes itself from the many connect_* siblings by naming what it does NOT touch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope statement ('does NOT touch the Google Ads / Search Console / Business Profile / Analytics / YouTube connections') cleanly routes the agent among the crowded connect_* family. It lacks an explicit 'use this when the user wants to connect GTM' phrasing or prerequisites, but the alternative-isolation is clear enough to select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_tiktok_adsConnect TikTok AdsAInspect
Generates a one-time authorization link to connect a TikTok (TikTok for Business) ad account. After authorization you can query the accessible ad accounts (advertisers).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds meaningful behavior beyond that: the link is 'one-time', which explains why the operation is non-idempotent, and it describes the downstream flow to advertiser accounts. It stops short of describing auth requirements or link expiry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with zero filler; the core action (generating the auth link) is front-loaded ahead of the follow-up context. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is not required, and for a zero-parameter tool the description covers purpose and the natural next step. It is nearly complete, missing only minor behavioral detail such as link expiry or permission prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters (schema coverage trivially 100%), so there is no parameter semantics to convey and the baseline of 4 applies. The description correctly adds nothing about inputs since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Generates a one-time authorization link') and resource ('a TikTok ad account'), so the agent knows exactly what the tool produces. The TikTok platform qualifier separates it from the many other connect_* siblings, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence implies usage context by noting that after authorization you can query accessible ad accounts (advertisers), essentially pointing to list_tiktok_ad_accounts. However, it gives no explicit when-to-use/when-not guidance or named alternative, leaving the routing inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_youtubeConnect YouTubeAInspect
Generates a one-time authorization link to connect YouTube (channel + video performance: views, watch time, subscribers, traffic sources — read-only). Separate encrypted token; does not touch the Ads / Search Console / Business Profile / Analytics connections.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond annotations: a one-time link, a separate encrypted token, and isolation from other platform connections. Note the surface tension with readOnlyHint=false — the description's 'read-only' refers to the granted YouTube data scope, not the operation, which itself creates a token/connection; this is not an actual contradiction. It doesn't explain link expiry or what happens on re-run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight clauses with zero filler, front-loading the primary action and following with the scope and isolation guarantees. Every fragment earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations present, an existing output schema, and no parameters, the description covers what the connection grants and how it is isolated. Adequate for an agent to decide and call it; only the mechanics of the link lifecycle are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the tool takes zero parameters, so there is nothing for the description to compensate for. This is the expected baseline for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Generates a one-time authorization link to connect YouTube') and immediately scopes the connection ('channel + video performance: views, watch time, subscribers, traffic sources — read-only'). An agent can distinguish it from the other connect_* and youtube_* siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second clause carves out clear boundaries against alternatives by naming what it does NOT touch (Ads / Search Console / Business Profile / Analytics connections). This gives strong context for choosing this connection over the others, though it stops short of an explicit 'use this when you need YouTube data' trigger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_tracking_healthConversion Tracking HealthARead-onlyIdempotentInspect
Conversion tracking health — audits conversion actions: paused/removed, and zero recorded data over the lookback window. It reports include_in_conversions_metric (the REAL Primary/Secondary flag in goal-based accounts — biddable = counted in the Conversions column); the legacy primary_for_goal is also returned but can be misleading (it is true on hidden auto-goals and false on the genuinely Primary action in goal-based accounts). A zero-conversion alert is raised ONLY for Primary (included) actions — a Secondary/observation action recording 0 is expected, not broken. The UI 'Tracking status' diagnostic (Active / Needs attention / No recent conversions) is computed by Google and is NOT a single API field; for the full per-action table use list_conversion_actions. days: lookback window for the conversion-volume check (default 30). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds real value beyond them: the include_in_conversions_metric vs. misleading legacy primary_for_goal semantics, the zero-conversion alert condition, and the note that the UI 'Tracking status' diagnostic is not a single API field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and then layers the field-semantics caveats; every sentence is information-bearing rather than filler. It is dense and somewhat long, but the detail is justified given the confusing underlying fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Given the complexity of conversion-status semantics, the description supplies exactly the caveats needed for correct interpretation and points to the sibling for detail work, leaving no critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It explains days well ('lookback window for the conversion-volume check, default 30'), but customer_id is left undocumented in both schema and description. Partial compensation for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('audits conversion actions') and immediately scopes the check to paused/removed actions and zero-data over the lookback window. It clearly differentiates itself from the sibling list_conversion_actions by naming it as the tool for the full per-action table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'for the full per-action table use list_conversion_actions', establishing when to use this narrow health check vs. the sibling listing tool. It also clarifies the alert logic (zero-conversion alerted ONLY for Primary/included actions), removing the main ambiguity an agent would face.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_ad_groupCopy Ad GroupInspect
Copies one or more Google Ads AD GROUPS, with their contents, into another campaign of the same account (or duplicates them inside the same campaign) — instead of rebuilding each group with create_ad_group + add_keywords + create_responsive_search_ad + manage_extension_assets. Copied per group: the ad group settings (default CPC / target CPA / target ROAS, ad rotation, tracking template, final URL suffix, custom parameters, targeting setting), keywords with match type, status, bid and URLs, ad-group negative keywords, responsive search ads with headlines, descriptions, pins, paths, final URLs and tracking, linked ad-group assets (sitelinks, callouts, snippets, calls, images...), audience and demographic criteria with bid modifiers, and device bid adjustments. ad_group_ids: one id or several comma-separated (up to 25 per call). target_campaign_id must be in the same account and of the same campaign type. status: PAUSED (default, nothing serves until you enable it), ENABLED, or KEEP (same as the source). new_name renames a single copy; name_suffix is appended to every copy name (default: same name, or ' (copy)' when copying inside the same campaign). cpc_bid > 0 overrides the copy's default max CPC. Ad types other than responsive search ads are listed as skipped. The group, its keywords and its ads are created in ONE atomic request (all or nothing); assets, audiences and device adjustments follow and any that fail are reported one by one. The source is never changed. confirm=false returns a per-group preview of what will be copied.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | PAUSED | |
| confirm | No | ||
| cpc_bid | No | ||
| new_name | No | ||
| customer_id | Yes | ||
| include_ads | No | ||
| name_suffix | No | ||
| ad_group_ids | Yes | ||
| include_assets | No | ||
| include_keywords | No | ||
| include_audiences | No | ||
| include_negatives | No | ||
| target_campaign_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
copy_meta_entityCopy Meta EntityAInspect
Copies a Meta campaign/ad set/ad (the 'Duplicate' action in Ads Manager). kind: campaign | adset | ad. deep_copy=true copies a campaign (or ad set) along with all of its child items. The copy comes out PAUSED. If rename_prefix is provided, a prefix is added to the copy. Meta only allows 3 objects per deep-copy call (error 100 / subcode 1885194), so a campaign/ad set with more children used to fail outright; now the tool detects that limit and finishes the deep copy automatically by copying each child ad set and ad one at a time — the result reports how many were copied (deep_copy:"chunked"). confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| confirm | No | ||
| deep_copy | No | ||
| entity_id | Yes | ||
| account_id | Yes | ||
| rename_prefix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-read-only, non-destructive mutation, but the description adds substantial context beyond them: the copy is created PAUSED, deep-copy is limited to 3 objects per call (error 100/subcode 1885194), the tool auto-chunks oversized deep copies and reports deep_copy:'chunked', and rename_prefix behavior is described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action before edge cases, and each sentence adds distinct information (paused state, limit, chunking, preview). It is dense and slightly long, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the description still notes the result reports chunked versus non-chunked copies. For a 6-param mutation tool it is nearly complete, with only the obvious account/entity identifiers and connection prerequisites left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load; it documents meaningful semantics for kind, deep_copy, rename_prefix, and confirm (including default-driven preview behavior). account_id and entity_id are left implicit, but they are self-evident identifiers, so this is a strong rather than complete compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Copies a Meta campaign/ad set/ad') and anchors it to the real-world Ads Manager 'Duplicate' action, which removes any ambiguity for an agent choosing among the many create_/update_/delete_meta_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when deep_copy applies (campaign/ad set with children), what confirm=false does, and the valid kind values, giving clear context for invocation. It does not explicitly name an alternative tool (e.g., create_meta_campaign) for cases where duplication is not wanted, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
core_web_vitalsCore Web VitalsARead-onlyIdempotentInspect
Real Core Web Vitals & performance for a page — FREE, no credits. Runs Google PageSpeed Insights (Lighthouse lab data + real-user CrUX field data): LCP, CLS, INP/TBT, a 0–100 performance score, and the top opportunities to make the page faster. Use it as a quality gate when building or fixing a website. strategy: 'mobile' (default) or 'desktop'.
resources=true adds Lighthouse's RAW RESOURCE LISTS, which is what turns a score into actual work: which stylesheets block rendering, which files carry unused CSS or JS and how many bytes of each are wasted, which images are oversized or not in a modern format, the full network request list, and the LCP element itself. Without it you know a page needs "less unused CSS" but not which file, so critical CSS cannot be targeted and an oversized image cannot be found. limit caps rows per audit (default 20).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| limit | No | ||
| strategy | No | mobile | |
| resources | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial value beyond them: no credit cost, the two data sources (lab + CrUX field), and a detailed account of what resources=true changes—raw resource lists, unused CSS/JS bytes, oversized images, network requests, LCP element—with the consequence of omitting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the free/no-credit hook, and every sentence about resources genuinely earns its place given the 0% schema coverage. The middle paragraph is dense but not padded, so it is appropriately sized rather than excessively verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation; safety is covered by annotations; and all non-trivial parameters are explained. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full burden and does so: strategy accepts 'mobile' (default) or 'desktop', resources toggles raw resource output, and limit caps rows per audit with default 20. Only url is left implicit, which is self-evident from the tool's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Real Core Web Vitals & performance for a page") and names the underlying source and metrics (Google PageSpeed Insights, LCP, CLS, INP/TBT, 0–100 score, opportunities). It is clearly distinguishable from adjacent siblings like seo_technical_audit or wordpress_performance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use context ("quality gate when building or fixing a website") and notes it is free with no credit cost. It does not explicitly name an alternative tool or state when NOT to use it, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ad_groupCreate Ad GroupAInspect
Creates a new AD GROUP inside a Google Ads campaign — the layer between the campaign and its keywords/ads. This is the missing middle step when building a search campaign end to end: create_search_campaign (campaign + budget) → create_ad_group (this, one per theme) → add_keywords (positive keywords for that group) → create_responsive_search_ad (the RSA, which needs the ad_group_id this returns). cpc_bid = the group's default max CPC in the account currency. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| cpc_bid | No | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false), lowering the bar. The description still adds non-obvious behavior: confirm=false triggers a dry-run, and the call returns an ad_group_id that downstream tools require. It does not cover auth scopes or rate limits, but the dry-run default is the key behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by workflow context and parameter notes. The arrow-chain sentence is dense but each tool it names earns its place by disambiguating the sequencing, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no prose explanation, and annotations carry the safety profile. For a create tool with a clear workflow and the two tricky params documented, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains the two ambiguous params well — cpc_bid as the group's default max CPC in account currency, and confirm=false as dry-run — while customer_id, campaign_id, and name are self-evident from their names, so the remaining gap is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a new AD GROUP inside a Google Ads campaign') and immediately scopes it ('the layer between the campaign and its keywords/ads'). The Google Ads qualifier cleanly distinguishes it from siblings like create_microsoft_ad_group, create_tiktok_adgroup, and create_meta_adset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly places the tool in an end-to-end workflow (create_search_campaign → create_ad_group → add_keywords → create_responsive_search_ad), naming the sibling tools it depends on and follows. It also gives the 'one per theme' heuristic, so an agent knows both when and how often to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_app_campaignCreate App CampaignAInspect
Creates an App (UAC) campaign (PAUSED). app_id = store app ID. app_store: GOOGLE_APP_STORE | APPLE_APP_STORE. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| app_id | Yes | ||
| confirm | No | ||
| app_store | No | GOOGLE_APP_STORE | |
| target_cpa | No | ||
| customer_id | Yes | ||
| daily_budget | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), but the description adds real behavioral context beyond them: the campaign is created in PAUSED state and confirm=false triggers a dry-run. These are meaningful operational traits an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely terse and front-loaded: verb+resource first, then parameter clarifications, then dry-run behavior. Every clause carries information, though the telegraphic style borders on under-specification for a 7-parameter write tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation. However, for a mutation tool creating a campaign with required budget and targeting-adjacent params, the description says nothing about budget units, target_cpa meaning, or the customer_id scope, leaving gaps an agent would need to guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the description must compensate. It clarifies three parameters (app_id as store app ID, app_store enum values, confirm dry-run semantics) but leaves name, customer_id, daily_budget, and target_cpa unexplained. Partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Creates an App (UAC) campaign'. The 'App (UAC)' qualifier distinguishes it from sibling campaign creators like create_search_campaign, create_demand_gen_campaign, and create_pmax_campaign, though it does not name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the brief operational notes (dry-run via confirm=false, created PAUSED), but there is no explicit when-to-use or when-not-to-use guidance relative to the many other create_*_campaign siblings. An agent must infer platform routing from 'App (UAC)'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_chatgpt_ads_adCreate ChatGPT Ads AdAInspect
Creates a ChatGPT Ads ad (chat card) inside an ad group.
title and body are the text a person sees in ChatGPT; target_url is where the click goes; image_url is uploaded for you, so you pass a normal URL rather than a file id. An image is REQUIRED for a chat card — the API refuses the ad without one, even though the schema marks the field optional. Creating an ad submits its creative for review, so the text, the image and the destination should be final. Created paused unless activate=true. confirm=false returns a dry run showing the exact card.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| name | Yes | ||
| title | Yes | ||
| account | No | ||
| confirm | No | ||
| activate | No | ||
| image_url | No | ||
| target_url | No | ||
| ad_group_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, openWorld=true, idempotent=false, and destructive=false, but the description adds critical hidden behavior: image_url is fetched/uploaded automatically, an image is required despite the schema marking it optional, creating submits the creative for review, the ad is created paused unless activate=true, and confirm=false returns a dry run. This is exactly the extra context an agent needs to invoke the tool safely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then moves through concise operational details with no redundant sentences. The length is appropriate for a creation tool with several hidden rules and a dry-run mode.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations already cover the safety profile. However, with 0% schema coverage across 9 parameters, missing explanations for name and account and no explicit sibling routing leave minor gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage across 9 parameters, the description must compensate and mostly does. It clarifies title, body, target_url, image_url, confirm, and activate semantics, but name and account remain unexplained. The important creative and control parameters are covered, though two parameters lack any definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (creates) and resource (ChatGPT Ads ad / chat card) scoped inside an ad group. Distinguishes clearly from create_chatgpt_ads_ad_group and create_chatgpt_ads_campaign, and from other platform-specific ad creation tools, by naming ChatGPT Ads ad.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides useful operational context: requires an ad group, image is required for a chat card, and creative should be final before submission. However, it does not explicitly say when to use this versus update_chatgpt_ads_ad, chatgpt_ads_ad_preview, or other ad creation tools. The dry-run behavior is noted but not framed as an alternative workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_chatgpt_ads_ad_groupCreate ChatGPT Ads Ad GroupAInspect
Creates an ad group under a ChatGPT Ads campaign and sets its maximum bid and context hints.
max_bid is the most you will pay for one click (or one thousand impressions when billing_event is impression), in the account currency. It is checked against two rules: a bid can never exceed the campaign's own daily budget — one click cannot consume the whole day — and there is a sanity ceiling that catches a decimal slip like 3500 for 3.5. A deliberate high bid passes with allow_high_bid=true. context_hints decides which ChatGPT conversations the ads can match: short natural sentences describing the product, the use case or the need, in the language your buyers actually chat in, up to 2000 of them. They are not exact-match keywords and they do not replace country or platform targeting. Created paused unless activate=true. confirm=false returns a dry run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| account | No | ||
| confirm | No | ||
| max_bid | No | ||
| activate | No | ||
| campaign_id | Yes | ||
| billing_event | No | click | |
| context_hints | No | ||
| allow_high_bid | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply the generic safety profile (not read-only, not idempotent, not destructive), while the description adds substantial behavior: the two bid-validation rules, the allow_high_bid escape hatch, the meaning of context_hints, the default paused state, and dry-run via confirm=false. This is rich disclosure well beyond what the structured fields provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and follow-on sentences are dense with decision-relevant detail rather than filler. It is longer than typical, but each sentence adds binding rules or defaults, so the length is mostly earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers the risky mechanics (bidding, dry-run, activation default) for this mutation tool. Remaining gaps are the undescribed name/account/campaign_id params and the parenthetical treatment of billing_event.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry parameter meaning, and it does so for the non-obvious ones: max_bid (currency, per-click vs per-impression), billing_event behavior, context_hints (natural-language, up to 2000, not keyword match), allow_high_bid, activate, and confirm. It leaves name, account, and campaign_id undefined, but those are largely self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb + resource ("Creates an ad group under a ChatGPT Ads campaign") and locates it in the campaign hierarchy, which distinguishes it from create_chatgpt_ads_campaign and create_chatgpt_ads_ad. It also names the two things it configures (max bid and context hints), so an agent knows exactly what this call produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through operational notes ("Created paused unless `activate=true`", "confirm=false returns a dry run"), which tells the agent how to invoke safely but not when to prefer this tool over siblings like create_ad_group or update_chatgpt_ads_ad_group. No explicit when-to-use/when-not or alternative routing is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_chatgpt_ads_campaignCreate ChatGPT Ads CampaignAInspect
Creates a ChatGPT Ads campaign in your connected ChatGPT Ads account.
Give a daily_budget or a lifetime_budget (or both) in the account currency — not micros, the conversion is handled here. objective: clicks | reach | conversions. The campaign is created PAUSED; pass activate=true only when you mean spending to start the moment it is created, because it does. A campaign alone never serves: it needs an ad group (create_chatgpt_ads_ad_group) and an ad (create_chatgpt_ads_ad) under it.
Budgets pass the same safety cap as every other platform, so a mistyped amount is refused rather than spent. confirm=false returns a dry run of exactly what will be created.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| account | No | ||
| confirm | No | ||
| activate | No | ||
| objective | No | clicks | |
| daily_budget | No | ||
| lifetime_budget | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only a generic annotation set (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description carries the real behavioral detail: campaigns are created PAUSED, activate=true starts immediate spend, budget safety caps reject mistyped amounts rather than overspending, and confirm=false returns a dry run. This is exactly the beyond-annotations context the dimension rewards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short paragraphs, each front-loaded with its key constraint (budget units, then objective values, then the paused/activate warning, then the dry-run note). No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, yet the description adds the dry-run response behavior anyway. All the operational facts an agent needs to avoid accidental spend and to correctly sequence creation are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for most parameters: budgets are in account currency (not micros) with conversion handled internally, objective enumeration is spelled out as clicks | reach | conversions (the schema declares no enums), and activate/confirm semantics are explained. It does not clarify 'name' or the 'account' parameter, leaving two of seven undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Creates a ChatGPT Ads campaign') and scopes it to the connected ChatGPT Ads account. It further distinguishes itself from the sibling creation tools by naming create_chatgpt_ads_ad_group and create_chatgpt_ads_ad as the follow-on pieces required under the campaign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions for the risky parameter ('pass activate=true only when you mean spending to start the moment it is created'), states the default paused behavior, and tells the agent the campaign alone never serves so it must be followed by an ad group and ad. Also names the dry-run path via confirm=false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_chatgpt_ads_event_settingCreate ChatGPT Ads Conversion EventAInspect
Creates a ChatGPT Ads conversion event setting (which tracked action counts as a conversion) on one pixel source.
event_type: one of OpenAI's standard events — appointment_scheduled, lead_created, order_created, registration_completed, subscription_created, trial_started, checkout_started, items_added, contents_viewed, page_viewed, app_installed, app_opened — or custom with custom_event_name (lowercase letters, digits, _ or -, up to 64 characters, not a built-in name). source_id is the pixel source id (cds_…) from chatgpt_ads_conversion_setup; left empty it uses the account's only source. The attribution window is 30 days, as OpenAI requires. A setting does not send events by itself — the site's pixel or server must send that event — and only a STANDARD event can be the goal of a conversions-objective campaign. Attach it to campaigns with update_chatgpt_ads_campaign. confirm=false returns a dry run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| account | No | ||
| confirm | No | ||
| source_id | No | ||
| event_type | Yes | ||
| custom_event_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is a non-read-only, non-destructive, non-idempotent write, but the description adds substantial behavior the annotations cannot: the fixed 30-day attribution window, the fact that a setting does not emit events itself, the standard-event-only constraint for campaign goals, and that confirm=false yields a dry run. That is exactly the extra context the annotations leave open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then organized as a scoped walkthrough of parameters and behavior. Sentences are dense and occasionally run long, but no line is filler given the 0% schema documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description supplies the behavioral constraints an agent needs to call this correctly (dry run, attribution window, event semantics). Only the unexplained 'name' and 'account' parameters keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description carries the full parameter burden, and it covers event_type (all enum values listed, custom fallback, name-format constraints), custom_event_name, source_id (format and empty-default behavior), and confirm. It leaves 'name' and 'account' (default empty) unaddressed, a modest gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First sentence states a specific verb and resource ('Creates a ChatGPT Ads conversion event setting') and immediately scopes it with the parenthetical defining what a conversion setting represents. It is clearly distinguishable from chatgpt_ads_conversion_setup and update_chatgpt_ads_campaign, which it references by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states what to do downstream ('Attach it to campaigns with update_chatgpt_ads_campaign') and where source_id comes from (chatgpt_ads_conversion_setup), plus the constraint that only a STANDARD event can be a campaign goal. It does not give an explicit when-not-to-use or say what to do instead if the pixel source is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_customer_match_audienceCreate Customer Match AudienceAInspect
Customer Match audience — creates an EMPTY list shell. upload_key_type: CONTACT_INFO | CRM_ID | MOBILE_ADVERTISING_ID. NOTE: member (hashed email/phone) UPLOAD is a separate step and requires Customer Match eligibility; this tool only creates the list. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| customer_id | Yes | ||
| membership_days | No | ||
| upload_key_type | No | CONTACT_INFO |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only, non-idempotent, non-destructive, but say nothing about the dry-run default or eligibility gate. The description supplies both, including that the default confirm=false performs a dry-run — critical behavior an agent must know before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely dense: the shell-vs-upload distinction is front-loaded, enum values are inline, and the dry-run hint is last. Every clause carries decision-relevant information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool, it covers the dry-run, eligibility prerequisite, and scope boundary; an output schema exists so return values need no explanation. Remaining gaps are the meaning of membership_days and which account customer_id refers to.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 params, so the description must compensate. It documents upload_key_type's allowed values and confirm's dry-run meaning, but leaves name, customer_id, and membership_days (540-day default) unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('creates an EMPTY list shell' for a Customer Match audience), and the word EMPTY plus 'this tool only creates the list' distinguishes it from audience-creation siblings that also populate membership.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: member upload is a separate step requiring Customer Match eligibility, and confirm=false yields a dry-run. It does not name a specific alternative tool for the upload step or for other audience types, so it falls just short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_demand_gen_adCreate Demand Gen Video AdAInspect
Creates the VIDEO ad inside a Demand Gen ad group — the last step that makes a Demand Gen campaign able to serve, and therefore the only way to run a click-oriented YouTube campaign now that Google moved Video Action campaigns into Demand Gen.
youtube_video accepts a bare video id, a watch URL, a youtu.be link or a /shorts/ link; the matching video asset in the account is reused if it already exists and created once if it does not. headlines and descriptions are comma-separated (headline <=40 chars, long_headline <=90, description <=90). business_name and a square logo are REQUIRED by Google for this ad type: pass logo_asset_id from an image asset you already have, or leave it empty and the account's square image asset is used; if none exists, upload one first with upload_image_asset. call_to_action is optional (LEARN_MORE, SIGN_UP, GET_QUOTE, CONTACT_US, SUBSCRIBE, DOWNLOAD, BOOK_NOW, SHOP_NOW, BUY_NOW, DONATE_NOW, ORDER_NOW, APPLY_NOW). The ad is created PAUSED so nothing spends before you look at it. confirm=false -> preview.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_name | No | ||
| confirm | No | ||
| final_url | Yes | ||
| headlines | Yes | ||
| ad_group_id | Yes | ||
| customer_id | Yes | ||
| descriptions | Yes | ||
| business_name | No | ||
| logo_asset_id | No | ||
| long_headline | No | ||
| youtube_video | Yes | ||
| call_to_action | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write/open-world/non-idempotent/not-destructive; the description adds real behavior: the ad is created PAUSED so nothing spends, confirm=false yields a preview, and an existing matching video asset is reused rather than recreated. These are consequential traits an agent cannot infer from the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose before diving into parameter details, and every clause is substantive. Some sentences are long and run-on (the video-format sentence), but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers the risky/ambiguous inputs (video formats, asset dedup, required business_name/logo, confirm preview). Minor gaps remain for ad_name and final_url, but the tool is callable correctly from this text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage across 12 params, the description carries the load well: youtube_video accepted formats (bare id, watch URL, youtu.be, /shorts/), comma-separated headlines/descriptions with char limits (40/90/90), business_name and logo_asset_id requirements with fallback, and the full call_to_action enum. It leaves ad_name, final_url, customer_id, and ad_group_id unexplained, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (creates the VIDEO ad inside a Demand Gen ad group) and positions it against the ecosystem ('the last step that makes a Demand Gen campaign able to serve'). An agent can distinguish it from create_demand_gen_campaign and the various create_*_ad siblings without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when this tool is the right one ('the only way to run a click-oriented YouTube campaign now that Google moved Video Action campaigns into Demand Gen') and gives a prerequisite path (upload_image_asset if no square logo exists). It does not explicitly say when NOT to use it or contrast directly with create_demand_gen_campaign, so not 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_demand_gen_campaignCreate Demand Gen CampaignAInspect
Creates a Demand Gen campaign (PAUSED) + a daily budget. Ads/assets are added separately. bid_strategy: MAXIMIZE_CONVERSIONS (default) | MAXIMIZE_CLICKS (for a traffic/click objective — this is what a migrated Video Action campaign wants) | TARGET_CPA (target_cpa required, account currency). A CPC ceiling is NOT accepted on Demand Gen: Google rejects it with OPERATION_NOT_PERMITTED_FOR_CONTEXT on this channel (measured), so there is no cpc_bid_ceiling parameter — the cap only exists on Search/Display. To change the strategy after creation use manage_bidding_strategies.
GEOGRAPHY IS NOT SET HERE AND THE DEFAULT IS EVERY COUNTRY. Demand Gen keeps location and language on the AD GROUP, not the campaign, so this call cannot take them: a campaign created here and enabled without a further step runs worldwide. That happened on a live account — 714 clicks in six hours, one of them from the target continent. After creating the ad group, set the targeting with set_ad_group_targeting(ad_group_id=..., locations=...) and verify it with get_campaign_targeting(ad_group_id=...). Connected TV inventory is also on by default; for a traffic objective exclude it with manage_device_targeting(device='CONNECTED_TV', bid_modifier_pct=-100). confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| target_cpa | No | ||
| customer_id | Yes | ||
| bid_strategy | No | MAXIMIZE_CONVERSIONS | |
| daily_budget | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give the basic safety profile (non-read-only, non-destructive, non-idempotent, closed-world). The description adds critical behavior beyond that: campaign is created PAUSED, confirm=false triggers a dry-run, Google rejects CPC ceilings with OPERATION_NOT_PERMITTED_FOR_CONTEXT, and CTV inventory is on by default. The worldwide-geo incident with '714 clicks in six hours' is exactly the kind of operational hazard an agent needs disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but front-loaded with the core action, then strategy semantics, then the geography hazard. Nearly every sentence earns its place given the mutation's risk profile, though the CPA-ceiling explanation could be tightened without losing the key fact (no cpc_bid_ceiling parameter exists).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a high-stakes campaign-creation tool, the coverage of defaults, hazards, follow-up steps, and dry-run behavior leaves nothing an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: bid_strategy gets three enumerated values with use cases, target_cpa is flagged as required for TARGET_CPA and in account currency, and confirm is documented as dry-run. It does not explicitly describe name/customer_id/daily_budget semantics, though daily_budget is implied by '+ a daily budget'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a Demand Gen campaign (PAUSED) + a daily budget') and immediately distinguishes scope from siblings by noting ads/assets are added separately. An agent can tell this apart from create_search_campaign, create_pmax_campaign, and create_demand_gen_ad without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use each alternative: MAXIMIZE_CLICKS for a migrated Video Action campaign, manage_bidding_strategies for post-creation strategy changes, set_ad_group_targeting/get_campaign_targeting for geo, and manage_device_targeting for CTV exclusion. It also states what the tool cannot do (no cpc_bid_ceiling, no geo/lang parameters) and why.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_google_ads_accountCreate Google Ads Account (under MCC)ADestructiveInspect
Creates a NEW Google Ads client account under a manager (MCC) account — for agencies onboarding a client without leaving the chat.
manager_customer_id is the MCC that will own the account (see list_accounts). The new account is linked to that manager automatically and can be used straight away for campaigns.
CURRENCY AND TIME ZONE ARE PERMANENT: Google does not allow changing them after the account exists, so getting them wrong means starting over with a new account. Confirm both with the user before creating. confirm=false → dry-run showing exactly what will be created.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| time_zone | No | Europe/Istanbul | |
| currency_code | No | TRY | |
| manager_customer_id | Yes | ||
| tracking_url_template | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds information annotations cannot convey: currency and time zone are permanent, and confirm=false produces a dry-run of the exact payload. It does not mention required auth/permissions or what a failure leaves behind, keeping it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short paragraphs, purpose front-loaded, the permanence warning capitalized and placed where it will be read before the call. No filler sentences; each one either scopes the tool or prevents an irreversible mistake.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a destructive, non-idempotent mutation the description covers the irreversible fields, the dry-run escape hatch, and auto-linking to the manager. Missing only permission/authorization prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the load. It explains manager_customer_id (the owning MCC), confirm (dry-run toggle), and the consequence of getting currency_code/time_zone wrong. Only name and tracking_url_template go unexplained, so it compensates well without being complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a NEW Google Ads client account under a manager (MCC) account') plus the target audience (agencies onboarding a client). This is clearly distinguishable from siblings like connect_google_ads or create_search_campaign, which operate on existing accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use it (onboarding a new client under an MCC) and routes the agent to list_accounts for the manager_customer_id, plus a confirm-before-creating instruction. It never explicitly states when NOT to use it or names the alternative for an existing account, so it falls short of 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_gtm_containerCreate GTM ContainerAInspect
Creates a new web CONTAINER in a GTM account — a fresh, isolated space (its own tags/triggers/variables + 'GTM-XXXX' id). account = a list_gtm_accounts value or name/id (empty if only one). SAFETY: confirm=false → preview; confirm=true → creates it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| account | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, non-destructive mutation, but the description adds real value beyond them by disclosing the two-phase safety model: confirm=false previews and confirm=true actually creates. This preview semantics is not derivable from the annotations or schema, and the mention of a generated 'GTM-XXXX' id hints that repeated calls produce distinct resources.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose before parameters and safety, and every clause carries information. The dense em-dash formatting is slightly cluttered but not wasteful; a separate line for SAFETY would improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with an output schema (so return values needn't be described), the definition covers purpose, the account prerequisite, and the confirm safeguard. Only the 'name' parameter lacks explicit documentation, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden. It fully explains 'account' (list_gtm_accounts value or name/id, empty if only one) and 'confirm' (preview vs create), covering the two non-obvious parameters; only 'name' is left to obvious inference as the container name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Creates') and resource ('web CONTAINER in a GTM account') and clarifies what a container is (isolated space with its own tags/triggers/variables and a 'GTM-XXXX' id). This clearly distinguishes it from create_gtm_tag, create_gtm_trigger, create_gtm_variable, and create_gtm_workspace without needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an actionable prerequisite by directing the agent to list_gtm_accounts for the account value and explaining the empty-string fallback when only one account exists. It does not explicitly state when-not to use it (e.g., versus create_gtm_workspace), but the creation context is clear and well-scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_gtm_tagCreate GTM TagAInspect
Creates a TAG in a workspace. tag_type = GTM type string: 'html' (Custom HTML → parameters='{"html":"..."}'), 'gaawc' (GA4 Configuration → '{"measurementId":"G-XXXX"}'), 'gaawe' (GA4 Event → '{"measurementIdOverride":"G-XXXX","eventName":"purchase"}'), 'sp' (Google Ads Conversion), 'img' (Custom Image Pixel → '{"url":"https://..."}'). parameters is JSON: an object {key:value} (each wrapped as a template param) OR a raw GTM parameter list for complex types. firing_trigger_ids = comma-separated triggerId(s) from list_gtm_triggers (e.g. the All-Pages trigger). SAFETY: confirm=false → preview; confirm=true → creates it (staged in the workspace; goes live only after publish_gtm_container).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| tag_type | Yes | ||
| container | No | ||
| workspace | No | ||
| parameters | No | ||
| firing_trigger_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false; the description adds real behavioral context beyond that: confirm=false previews vs confirm=true commits, and that creation is staged in the workspace until a publish occurs. It still doesn't mention auth/permission requirements or error behavior, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and tag_type enumeration are front-loaded, and the safety semantics close the description, so the ordering is sensible. It is a dense single paragraph with several inline JSON examples that are long but each earns its place by removing ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with an output schema (so returns need no explanation), the description covers the type system, the payload format, the trigger wiring, and the staging/publish lifecycle. The only real gaps are the container/workspace parameters and permission requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it delivers the hard parts: tag_type string semantics with per-type parameter examples, parameters accepting either a {key:value} object or a raw GTM parameter list, firing_trigger_ids as a comma-separated list, and confirm's preview/commit meaning. The container and workspace parameters are only implicitly referenced ('in a workspace') and never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Creates a TAG in a workspace') and the description immediately distinguishes GTM tags from the sibling create_gtm_trigger / create_gtm_variable tools by enumerating tag_type values. An agent can identify the tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational context: firing_trigger_ids come 'from list_gtm_triggers (e.g. the All-Pages trigger)' and the created tag 'goes live only after publish_gtm_container'. It does not explicitly state when to prefer create_gtm_tag over update_gtm_entity, but the alternatives it needs to route to are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_gtm_triggerCreate GTM TriggerInspect
Creates a TRIGGER in a workspace. trigger_type = GTM type string: 'pageview' (All Pages), 'domReady', 'windowLoaded', 'click' (All Elements), 'linkClick', 'customEvent', 'formSubmission', 'scrollDepth', 'timer', 'historyChange'.
For 'customEvent' just pass event_name='cf7_success' and the event filter is built for you. If you build it by hand, customEventFilter items are CONDITIONS, not maps: parameters='[{"type":"list","key":"customEventFilter","list":[{"type":"EQUALS","parameter":[{"type":"template","key":"arg0","value":"{{_event}}"},{"type":"template","key":"arg1","value":"cf7_success"}]}]}]' Condition types (filter/customEventFilter/autoEventFilter): equals, contains, startsWith, endsWith, matchRegex, greater, greaterOrEquals, less, lessOrEquals, cssSelector, urlMatches; to negate add {"type":"boolean","key":"negate","value":"true"}. SAFETY: confirm=false → preview only; confirm=true → creates it (staged in the workspace until you publish_gtm_container).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| container | No | ||
| workspace | No | ||
| event_name | No | ||
| parameters | No | ||
| trigger_type | No | pageview |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_gtm_variableCreate GTM VariableAInspect
Creates a user-defined VARIABLE. variable_type = GTM type string: 'c' (Constant → parameters='{"value":"..."}'), 'v' (Data Layer Variable → parameters='{"name":"ecommerce.value"}' plus optional dataLayerVersion), 'jsm' (Custom JavaScript → parameters='{"javascript":"function(){return ...}"}'), 'u' (URL), 'k' (1st-party Cookie → '{"name":"_ga"}'). parameters is JSON: an object {key:value} (wrapped as template) or a raw GTM parameter list. SAFETY: confirm=false → preview; confirm=true → creates it (staged until publish).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| container | No | ||
| workspace | No | ||
| parameters | No | ||
| variable_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds genuinely new behavior: a two-phase preview/commit workflow via confirm and the fact that creation is staged until a publish step. It omits auth/permission requirements and duplicate-name behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then type semantics, then safety. The middle sentence is dense but every clause carries mapping information an agent needs to build a valid payload; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the mutation's staging and preview semantics plus payload construction. The remaining gap is scoping (container/workspace defaults) and post-create publish flow, which are minor for a creation tool with annotated safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for the two hardest parameters: variable_type is enumerated with worked examples and parameters gets concrete JSON payloads per type. It leaves container and workspace undocumented, though those are conventional GTM scoping fields, and confirm is only covered via the SAFETY note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Creates a user-defined VARIABLE') and immediately scopes it to the GTM variable domain, distinguishing it from sibling creators like create_gtm_tag, create_gtm_trigger, and create_gtm_container. The type taxonomy ('c', 'v', 'jsm', 'u', 'k') makes the exact artifact unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: confirm=false previews, confirm=true creates, and results are staged until publish. It does not, however, route the agent away from alternatives such as update_gtm_entity for modifying an existing variable, nor state prerequisites (e.g., an existing container/workspace).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_gtm_workspaceCreate GTM WorkspaceAInspect
Creates a new WORKSPACE in a container — an isolated draft area to stage tag/trigger/variable changes before publishing (GTM lets you run several in parallel). container = 'GTM-XXXX' / container name / full path (empty if only one). SAFETY: confirm=false → preview; confirm=true → creates it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| account | No | ||
| confirm | No | ||
| container | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by disclosing the confirm-based preview-vs-create behavior and the workspace lifecycle role, which the readOnly/destructive/idempotent hints do not convey. It doesn't address idempotency (creating a duplicate-named workspace) or auth requirements, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and definition, then details container format and safety. Dense but every clause carries information; the only minor cost is a compound first sentence that packs definition, staging purpose, and parallelism together.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be explained, and annotations cover the safety profile. Purpose, container identification, and the confirm preview are covered; the gaps are the undocumented name/account parameters and idempotency behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents container format well ('GTM-XXXX' / container name / full path, empty if only one) and the confirm flag, but leaves the required 'name' and 'account' parameters entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a new WORKSPACE in a container') and defines what a GTM workspace is — an isolated draft area staged before publishing. This clearly separates it from create_gtm_container/tag/trigger, though it does not name any sibling for explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives usable context — a workspace is where you stage tag/trigger/variable changes before publishing, and GTM allows several in parallel. It also defines the confirm workflow (false=preview, true=create). No explicit when-not-to-use guidance or named alternatives, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_lead_formCreate Lead FormAInspect
Creates a Google Ads LEAD FORM — the form that opens INSIDE the ad, so someone can leave their name and phone number without ever reaching the website — and optionally attaches it to a campaign or ad group in the same call.
business_name, headline, description and privacy_policy_url are required by Google; a form without a privacy policy link is rejected. LENGTH LIMITS, checked before the call so a long name costs no round trip: business_name ≤25, headline ≤30, description ≤200 characters. The 25 for business_name is the one that surprises people — it is shorter than the RSA headline limit, so a company name that fits an ad may not fit the form. cta is the button on the ad: LEARN_MORE | GET_QUOTE | APPLY_NOW | SIGN_UP | CONTACT_US | SUBSCRIBE | DOWNLOAD | BOOK_NOW | GET_OFFER | REGISTER | GET_INFO | REQUEST_DEMO | JOIN_NOW | GET_STARTED.
fields = the boxes the person fills in, comma separated: FULL_NAME, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, WORK_EMAIL, WORK_PHONE, COMPANY_NAME, JOB_TITLE, CITY, POSTAL_CODE, COUNTRY, STREET_ADDRESS and more.
questions = your own QUALIFYING questions, one string each as "question|answer|answer|...", e.g. "Hangi sınava hazırlanıyorsunuz?|YKS|LGS|Diğer". They are what separate a real prospect from a curious click, so a form aimed at a specific programme usually wants one or two.
post_submit_headline / post_submit_description are the thank-you message, post_submit_cta is VISIT_SITE | DOWNLOAD | LEARN_MORE | SHOP_NOW. webhook_url (with webhook_secret) pushes each lead to your own endpoint the moment it arrives; without it, read them with list_lead_form_submissions.
ONE-TIME STEP GOOGLE DOES NOT ALLOW OVER THE API: the account must accept the Lead Form Terms of Service once, in the Google Ads interface. Until that is done every create is refused, and this tool says so plainly rather than returning a vague error. confirm=false → preview.
| Name | Required | Description | Default |
|---|---|---|---|
| cta | No | GET_INFO | |
| name | No | ||
| fields | No | FULL_NAME,PHONE_NUMBER,EMAIL | |
| confirm | No | ||
| headline | Yes | ||
| final_url | No | ||
| questions | No | ||
| ad_group_id | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| description | Yes | ||
| webhook_url | No | ||
| business_name | Yes | ||
| webhook_secret | No | ||
| cta_description | No | ||
| post_submit_cta | No | VISIT_SITE | |
| privacy_policy_url | Yes | ||
| post_submit_headline | No | ||
| post_submit_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the read/write/open-world/idempotency profile; the description adds substantial non-obvious behavior: the one-time Google Ads ToS acceptance that blocks every create until done, pre-call length validation to avoid round trips, and webhook delivery of leads. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but dense and front-loaded: the resource is defined first, then the required-field rules and length limits, then enums, then the gotchas. A few editorial asides ('the one that surprises people') add flavor rather than confusion, but slightly exceed strict conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 19-param mutation tool whose safety profile is in annotations and whose return shape is covered by an output schema, the description supplies the missing operational context — required fields, validation limits, enum values, the ToS blocker, preview mode, and the webhook alternative. Nothing essential to calling it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% on 19 params, so the description carries the burden and mostly does: it explains business_name/headline/description/privacy_policy_url requirements and the 25/30/200 char limits, enumerates cta and fields values, defines the questions 'question|answer|...' format, and covers post-submit and webhook params. It omits name, final_url, and cta_description, so not fully complete, but the critical and surprising constraints are documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Creates) and resource (Google Ads LEAD FORM), and even explains what the artifact is (opens inside the ad, collects name/phone without a website visit). An agent can immediately distinguish it from create_meta_lead_form and the list_lead_form_submissions sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear routing context: webhook_url pushes leads in real time, 'without it, read them with list_lead_form_submissions', and confirm=false yields a preview. Lacks an explicit statement of when NOT to use it versus the Meta/other lead-form creators, but the Google Ads scoping is implicit and the alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_linkedin_campaignCreate LinkedIn CampaignInspect
Creates a LinkedIn campaign. campaign_type: TEXT_AD | SPONSORED_UPDATES | SPONSORED_INMAILS | DYNAMIC | EVENT_AD. cost_type: CPC | CPM | CPV | CPS. Targeting: country ('TR','US','DE'… 36 verified country codes) sets the geo target; for finer targeting pass comma-separated 'urn:li:geo:...' values to geo_urns (found via linkedin_targeting_search). language sets the interface language (en/tr/de/fr/es). Budget is processed in the account's own currency (TRY on a TRY account). If total_budget>0 the total budget is used, otherwise daily_budget. associated_entity: the Company Page URN required for SPONSORED_UPDATES / SPONSORED_INMAILS / DYNAMIC / EVENT_AD campaigns, e.g. 'urn:li:organization:1234567'; if left empty it is auto-filled from the account's organization reference, otherwise an error is returned. Not needed for TEXT_AD. objective_type (LinkedIn's enum is SINGULAR — live-verified): WEBSITE_CONVERSION | WEBSITE_VISIT | WEBSITE_TRAFFIC | LEAD_GENERATION | BRAND_AWARENESS | ENGAGEMENT | VIDEO_VIEW | JOB_APPLICANT | CONVERSATION_STARTER | TALENT_LEAD | CREATIVE_ENGAGEMENT. Plural spellings (WEBSITE_CONVERSIONS / VIDEO_VIEWS / JOB_APPLICANTS) are auto-corrected. The objective CANNOT be changed after creation, so pick it now. ad_format is a SEPARATE axis from campaign_type and decides what the ad looks like: STANDARD_UPDATE (single image) | SPONSORED_UPDATE_NATIVE_DOCUMENT (document ad) | SPONSORED_UPDATE_NATIVE_CAROUSEL | SINGLE_VIDEO | SPOTLIGHT | FOLLOW_COMPANY | JOBS | SPONSORED_UPDATE_EVENT | TEXT_AD | SPONSORED_INMAIL | SPONSORED_MESSAGE. Leave it empty and LinkedIn falls back to a single-image ad set, which can then only be corrected in the UI — and that edit wipes the targeting, so set it here. Friendly spellings are accepted (DOCUMENT, CAROUSEL, SINGLE_IMAGE, VIDEO). RUN SCHEDULE: start_date / end_date ('YYYY-MM-DD'; end date runs to the end of that day, UTC). Empty start = now. With total_budget and no end_date LinkedIn's 90-day default end applies and spend is paced over 90 days — set end_date for event or short campaigns. NOTE: the 'I certify this is not a political ad' declaration (politicalIntent=NOT_POLITICAL) is sent automatically — political ads are not supported by this tool. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | DRAFT | |
| confirm | No | ||
| country | No | US | |
| end_date | No | ||
| geo_urns | No | ||
| language | No | en | |
| ad_format | No | ||
| cost_type | No | CPC | |
| unit_cost | No | ||
| account_id | Yes | ||
| start_date | No | ||
| daily_budget | No | ||
| total_budget | No | ||
| campaign_type | No | TEXT_AD | |
| objective_type | No | WEBSITE_VISIT | |
| associated_entity | No | ||
| campaign_group_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_linkedin_campaign_groupCreate LinkedIn Campaign GroupInspect
Creates a LinkedIn campaign group — a 'Campaign' in the Campaign Manager UI. status: DRAFT | ACTIVE. If total_budget>0 is given, a total budget is assigned in the account's currency. RUN SCHEDULE: start_date / end_date ('YYYY-MM-DD'; end date runs to the end of that day, UTC). Empty start = now. With a total budget and no end_date LinkedIn's 90-day default end applies, so the budget is paced over 90 days — give end_date for event or short campaigns. LEAVE objective_type EMPTY unless you really want the whole group locked to one objective: an objective set at GROUP level constrains EVERY ad set inside it, so a group created with ENGAGEMENT can never host a Lead Generation or Website Visit ad set, and LinkedIn normally refuses to change it afterwards. Empty is the default and keeps the group open to every objective — set the objective on the individual campaign instead.
objective_type (LinkedIn's enum is SINGULAR — live-verified): WEBSITE_CONVERSION | WEBSITE_VISIT | WEBSITE_TRAFFIC | LEAD_GENERATION | BRAND_AWARENESS | ENGAGEMENT | VIDEO_VIEW | JOB_APPLICANT | CONVERSATION_STARTER | TALENT_LEAD | CREATIVE_ENGAGEMENT. Plural spellings (WEBSITE_CONVERSIONS / VIDEO_VIEWS / JOB_APPLICANTS) are auto-corrected. Objective CANNOT be changed after creation. If confirm=false, only a preview is returned; to apply, use confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | DRAFT | |
| confirm | No | ||
| end_date | No | ||
| account_id | Yes | ||
| start_date | No | ||
| total_budget | No | ||
| objective_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_linkedin_post_adCreate LinkedIn Post AdInspect
Turns an existing Company Page post into an ad (Sponsored Content) for a SPONSORED_UPDATES campaign. THIS IS THE WAY TO RUN AN IMAGE AD ON LINKEDIN: there is no direct image upload (LinkedIn needs an organization permission this connector does not have), so the image is posted on the Company Page first and then sponsored here. post_urn: 'urn:li:share:' or 'urn:li:ugcPost:' — the numeric id from the post's LinkedIn URL. The campaign must be tied to an organization (associatedEntity). intended_status: leave EMPTY (auto) and the ad follows its ad set like Campaign Manager does — under a DRAFT ad set it is created ACTIVE, so it starts serving the moment you activate the campaign and ad set, while nothing spends before that; under an ad set that is already ACTIVE or PAUSED it is created DRAFT so it never goes live unasked. Pass ACTIVE / DRAFT / PAUSED to force a status. A DRAFT ad does NOT serve even when its ad set is ACTIVE — activate it with update_linkedin_creative_status. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| post_urn | Yes | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| intended_status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_linkedin_text_adCreate LinkedIn Text AdInspect
Creates a text ad (creative) for a TEXT_AD campaign — does not require an organization page. headline ≤25, description ≤75 characters. intended_status: leave EMPTY (auto) and the ad follows its ad set like Campaign Manager does — under a DRAFT ad set it is created ACTIVE, so it starts serving the moment you activate the campaign and ad set, while nothing spends before that; under an ad set that is already ACTIVE or PAUSED it is created DRAFT so it never goes live unasked. Pass ACTIVE / DRAFT / PAUSED to force a status. A DRAFT ad does NOT serve even when its ad set is ACTIVE — activate it with update_linkedin_creative_status. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| headline | Yes | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| description | Yes | ||
| landing_page | Yes | ||
| intended_status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_lookalike_audienceCreate Lookalike AudienceAInspect
Creates a Lookalike audience from seed audiences. seed_user_list_ids and country_codes are comma-separated lists (e.g. '9343436766' and 'TR,DE'). expansion_level: NARROW | BALANCED | BROAD. Run list_audiences first for valid seed ids. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| customer_id | Yes | ||
| country_codes | Yes | ||
| expansion_level | No | BALANCED | |
| membership_days | No | ||
| seed_user_list_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-idempotent write (readOnlyHint=false, idempotentHint=false). The description adds meaningful context beyond that: 'confirm=false → dry-run' tells the agent that creation will not execute without explicit confirmation, which is an important behavioral safeguard not captured by 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences/segments with no filler, and the core purpose is front-loaded before the format and workflow details. Efficient for a 7-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers creation, seed prerequisites, format conventions, expansion options, and the dry-run safety behavior; it is nearly complete for an agent to invoke correctly, with only minor gaps like membership_days semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden and does well for the tricky parameters: it specifies comma-separated list formats with examples for seed_user_list_ids and country_codes, and enumerates expansion_level values (NARROW | BALANCED | BROAD), which the schema lacks as an enum. customer_id, name, and membership_days remain undocumented, but the critical format ambiguities are resolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a Lookalike audience from seed audiences'). However, it does not distinguish itself from platform-specific siblings like create_meta_lookalike_audience or create_tiktok_lookalike_audience, leaving ambiguity about which of the three tools to choose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Run list_audiences first for valid seed ids' provides a useful workflow prerequisite, but there is no explicit guidance on when to use this tool versus the platform-specific lookalike tools, nor any stated exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_ab_testCreate Meta A/B TestAInspect
Creates a Meta SPLIT TEST (A/B) that compares two existing campaigns 50/50 on non-overlapping audiences and reports a statistically fair winner. campaign_a / campaign_b from list_meta_campaigns. start_time / end_time in ISO 8601 (2026-08-15T09:00:00+03:00) or unix seconds. For a clean read the two campaigns should differ in ONE variable (creative, audience, or placement). confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| end_time | Yes | ||
| account_id | Yes | ||
| campaign_a | Yes | ||
| campaign_b | Yes | ||
| start_time | Yes | ||
| control_name | No | A | |
| treatment_name | No | B |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, non-idempotent, non-destructive write. The description adds real behavioral context beyond that: 50/50 split on non-overlapping audiences, statistical winner reporting, and the confirm=false preview mode. It does not cover auth requirements or side effects on the source campaigns, but the added context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then layers in input sourcing, time format, best-practice advice, and preview semantics. Each sentence carries information with no filler, though the middle is dense enough that a reader must parse several distinct facts in one block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 9-parameter creation tool, the description covers purpose, key behaviors, preview mode, and time formatting, and an output schema exists so return values need not be explained. Remaining gap is that several parameters (account_id, name, control/treatment names) are undocumented anywhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it only partly does: it explains campaign_a/campaign_b sourcing, the ISO 8601 / unix-seconds format for start_time/end_time, and confirm. account_id, name, control_name, and treatment_name are left undefined, including the meaningful default labels 'A'/'B' for the split.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a Meta SPLIT TEST (A/B)') plus the scope ('compares two existing campaigns 50/50 on non-overlapping audiences'). This clearly distinguishes it from sibling create tools like create_meta_campaign or create_meta_adset, which create new entities rather than a test over existing ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides actionable setup guidance: campaign_a/campaign_b should come from list_meta_campaigns, and the two campaigns should differ in ONE variable for a clean read. It also flags the preview path (confirm=false). It stops short of explicitly saying when NOT to use it or naming a formal alternative, so it is clear context rather than full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_adsetCreate Meta Ad SetInspect
Creates a Meta ad set. optimization_goal: LINK_CLICKS | LANDING_PAGE_VIEWS | IMPRESSIONS | REACH | POST_ENGAGEMENT | OFFSITE_CONVERSIONS | LEAD_GENERATION | THRUPLAY | CONVERSATIONS | APP_INSTALLS | VALUE | QUALITY_LEAD | PAGE_LIKES | QUALITY_CALL | PROFILE_VISIT. FOLLOWER / PROFILE GROWTH (Instagram): use optimization_goal PROFILE_VISIT + billing_event IMPRESSIONS + promoted_object page_id (the Facebook Page linked to the target Instagram account); build the ad with cta_type VIEW_INSTAGRAM_PROFILE and the Instagram actor, and favour Instagram Reels/Feed placements (publisher_platforms=instagram). This drives profile visits that convert to followers; there is no direct "gain followers" objective on Meta. countries: comma-separated country codes (TR,US); empty = TR when no other location is given. LOCAL TARGETING: regions / cities take the numeric key from search_meta_interests(kind="adgeolocation") — pass that key, NOT the place name (Meta rejects a name). Leave countries EMPTY when targeting regions/cities inside that country: Meta rejects a country together with a city or region inside it ("Remove a conflicting location"). RADIUS / POINT TARGETING: places = a JSON list of pinned places WITH a radius, e.g. [{"key":"2034720566774469","radius":5.7,"distance_unit":"mile"}] — the key is the adgeolocation key (like a city, but with a drop-radius around it), distance_unit "mile" (1-50) or "kilometer" (1-80); custom_locations = a JSON list of raw coordinates with a radius, e.g. [{"latitude":41.01,"longitude":28.97,"radius":10,"distance_unit":"kilometer"}]. COPYING A WINNING SET VERBATIM: geo_locations = the raw Meta geo_locations object read from an existing ad set (list_meta_adsets → targeting.geo_locations) passed through unchanged (countries/regions/cities/places/custom_locations all preserved) — the exact way to reproduce a proven radius/place target on a new ad set; it overrides countries/regions/cities/places/custom_locations when given (the deprecated location_types key is dropped and radius is clamped for you). BUDGET: give EITHER daily_budget OR lifetime_budget (main currency) — leave BOTH empty if the campaign has a budget (CBO). A lifetime_budget REQUIRES end_time. SCHEDULING: start_time / end_time in ISO 8601 (e.g. 2026-08-15T09:00:00+0300). BIDDING: bid_strategy LOWEST_COST_WITHOUT_CAP (automatic, default) | LOWEST_COST_WITH_BID_CAP | COST_CAP — the last two REQUIRE bid_amount (max bid / target cost per result, main currency). Bidding/budget live on the CAMPAIGN when it is CBO. Age 18-65. DETAILED TARGETING: genders (1=male,2=female), interest_ids (from search_meta_interests). DEMOGRAPHICS & BEHAVIOURS (Ads Manager’s "Relationship status", "Parents", "Life events", "Industry", "Behaviours" boxes). HOW THEY COMBINE: relationship_statuses and education_statuses are ALWAYS AND-ed with everything else (Meta gives no choice), so "married AND interested in couples therapy" is expressible. interest_ids, behaviors, family_statuses, life_events and industries are combined by combine_mode: "or" (default, and what Ads Manager itself does) puts them in ONE flexible_spec block so someone matching ANY of them qualifies; "and" puts each in its own block, which requires ALL of them at once and shrinks reach a lot. Use "and" only when you deliberately want the intersection. Codes: relationship_statuses = comma-separated codes 1=single 2=in a relationship 3=MARRIED 4=engaged 5=not specified 6=civil union 7=domestic partnership 8=open relationship 9=complicated 10=separated 11=divorced 12=widowed; education_statuses = codes 1=in high school 2=in college 3=graduated 4=some college 5=associate degree 6=some grad school 7=master’s 8=professional degree 9=doctorate 10=unspecified 11=some high school 12=high-school grad 13=bachelor’s; family_statuses / life_events / industries / behaviors = comma-separated numeric IDs looked up with search_meta_interests(kind="adTargetingCategory", category_class="family_statuses" | "life_events" | "industries" | "behaviors" | "income") — e.g. parents of toddlers, newly-weds, recently moved. Names do not work, only IDs. custom_audience_ids / excluded_custom_audience_ids (from list_meta_audiences), publisher_platforms (facebook,instagram,audience_network,messenger,whatsapp,threads — empty=automatic). PLACEMENTS (which slot inside a platform): facebook_positions / instagram_positions / whatsapp_positions / messenger_positions / audience_network_positions / threads_positions, comma-separated. Leave empty and Meta runs every slot of the chosen platform (Feed, Reels, Explore, Search...). Story-only setup: publisher_platforms="facebook,instagram,whatsapp" + facebook_positions="story" + instagram_positions="story" + whatsapp_positions="status". Valid slots — facebook: feed, profile_feed, story, facebook_reels, marketplace, video_feeds, search, instream_video, right_hand_column, notification; instagram: stream, story, reels, explore, explore_home, profile_feed, profile_reels, ig_search; messenger: messenger_home, story, sponsored_messages; audience_network: classic, rewarded_video; whatsapp: status; threads: threads_feed. Narrowing placements turns Advantage+ placements OFF, which is intended but reduces reach. For conversion/lead promoted_object: OFFSITE_CONVERSIONS → pixel_id + custom_event_type (PURCHASE|LEAD|COMPLETE_REGISTRATION|ADD_TO_CART...) OR custom_conversion_id (from list_meta_custom_conversions) to optimize for a specific Meta CUSTOM CONVERSION — custom_conversion_id is MUTUALLY EXCLUSIVE with pixel_id/custom_event_type (Meta rejects the combination with "Promoted Object Invalid"), pass one or the other; LEAD_GENERATION → page_id; app → application_id + object_store_url. CATALOG SALES / DPA: product_catalog_id + product_set_id (from list_meta_catalogs / list_meta_product_sets) with optimization_goal OFFSITE_CONVERSIONS — build the dynamic creative with create_meta_dynamic_ad. MESSAGING (Click-to-WhatsApp / click-to-Messenger): use campaign objective OUTCOME_ENGAGEMENT, optimization_goal CONVERSATIONS, destination_type WHATSAPP (or MESSENGER / INSTAGRAM_DIRECT) and page_id (the Page must have a WhatsApp number connected for WHATSAPP). Then build the ad with create_meta_link_ad/create_meta_video_ad using the CTA that matches the destination — WHATSAPP → WHATSAPP_MESSAGE, MESSENGER → SEND_MESSAGE, INSTAGRAM_DIRECT → INSTAGRAM_MESSAGE — so the button opens a chat (a mismatched button creates the ad but Meta never delivers it). CALL ADS (phone-call campaigns): optimization_goal QUALITY_CALL + billing_event IMPRESSIONS + page_id (the Page that carries the phone number); destination_type defaults to PHONE_CALL. EU/EEA TARGETING (DSA): when the ad set targets any EU country, Meta requires who the ad is for and who pays for it. Pass dsa_beneficiary (the business benefiting, e.g. the brand name) and dsa_payor (who pays, defaults to the beneficiary). Without them Meta rejects the ad set with error 100 and nothing is created. Non-EU targeting is unaffected. AUDIENCE EXPANSION: audience_expansion="on" turns Meta’s Advantage+ audience on (Meta may show the ad beyond your targeting). It is OFF by default here on purpose — expansion often brings low-intent leads and junk messages — so turn it on deliberately, e.g. when the audience is small or you are chasing volume. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| cities | No | ||
| places | No | ||
| status | No | PAUSED | |
| age_max | No | ||
| age_min | No | ||
| confirm | No | ||
| genders | No | ||
| page_id | No | ||
| regions | No | ||
| end_time | No | ||
| pixel_id | No | ||
| behaviors | No | ||
| countries | No | ||
| dsa_payor | No | ||
| account_id | Yes | ||
| bid_amount | No | ||
| industries | No | ||
| start_time | No | ||
| campaign_id | Yes | ||
| life_events | No | ||
| bid_strategy | No | LOWEST_COST_WITHOUT_CAP | |
| combine_mode | No | or | |
| daily_budget | No | ||
| interest_ids | No | ||
| billing_event | No | IMPRESSIONS | |
| geo_locations | No | ||
| application_id | No | ||
| product_set_id | No | ||
| dsa_beneficiary | No | ||
| family_statuses | No | ||
| lifetime_budget | No | ||
| custom_locations | No | ||
| destination_type | No | ||
| object_store_url | No | ||
| custom_event_type | No | ||
| optimization_goal | No | LINK_CLICKS | |
| threads_positions | No | ||
| audience_expansion | No | ||
| education_statuses | No | ||
| facebook_positions | No | ||
| product_catalog_id | No | ||
| whatsapp_positions | No | ||
| custom_audience_ids | No | ||
| instagram_positions | No | ||
| messenger_positions | No | ||
| publisher_platforms | No | ||
| custom_conversion_id | No | ||
| relationship_statuses | No | ||
| audience_network_positions | No | ||
| excluded_custom_audience_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_meta_campaignCreate Meta CampaignAInspect
Creates a Meta campaign. objective: OUTCOME_TRAFFIC | OUTCOME_SALES | OUTCOME_LEADS | OUTCOME_ENGAGEMENT | OUTCOME_AWARENESS | OUTCOME_APP_PROMOTION. daily_budget in main currency units (TRY/USD) — if provided, the campaign becomes budget-optimized (CBO) and its ad sets are not given separate budgets. special_ad_categories: comma-separated list (HOUSING, EMPLOYMENT, CREDIT...) — declaration is required for housing/employment/credit/finance/politics ads; empty = none. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | PAUSED | |
| confirm | No | ||
| objective | No | OUTCOME_TRAFFIC | |
| account_id | Yes | ||
| daily_budget | No | ||
| special_ad_categories | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, not destructive, not idempotent). The description goes beyond that by disclosing real behavioral effects: supplying daily_budget switches the campaign to CBO and removes separate ad-set budgets, and confirm=false produces a preview rather than a live creation. It doesn't discuss permissions or error modes, so 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and the rest is dense parameter documentation with no filler. The prose is packed into run-on clauses rather than cleanly separated points, which slightly hurts scannability but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations cover the mutation safety profile. The description supplies the high-value omissions (objective enum, CBO behavior, preview flag, ad-category rules). Minor gaps remain, such as not mentioning the default PAUSED status, but overall it is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it does for the non-obvious parameters: it enumerates the objective values (which the schema does not), explains daily_budget's currency units and CBO side effect, and defines the special_ad_categories format and when declaration is required. It leaves name/status/account_id unexplained, but those are self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Creates a Meta campaign" states a specific verb and resource, and the resource (campaign) is distinct from siblings like create_meta_adset or create_meta_carousel_ad. It does not, however, explicitly contrast itself against those siblings, so it lands at clear-but-undifferentiated rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit "use this when / use X instead" guidance. Usage is only implied through the parameter notes (e.g., preview via confirm=false, CBO triggered by daily_budget). An agent can infer context but is not told when to prefer preview mode or how this relates to create_meta_adset for the ad sets it references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_carousel_adCreate Meta Carousel AdAInspect
Creates a Meta carousel ad (2-10 cards). cards: a list where each item is {link, headline, description} plus ONE image source: image_hash (from upload_meta_image), image_base64 (the file itself) or image_url. cta_type: LEARN_MORE | SHOP_NOW | SIGN_UP | BOOK_TRAVEL | GET_OFFER | CONTACT_US | WHATSAPP_MESSAGE | SEND_MESSAGE | INSTAGRAM_MESSAGE... — leave EMPTY to auto-pick from the ad set's messaging destination, else the campaign objective. page_id is REQUIRED. For Click-to-WhatsApp/Messenger/Instagram-DM carousels (cta_type WHATSAPP_MESSAGE / SEND_MESSAGE / INSTAGRAM_MESSAGE): welcome_message = pre-filled compose text, greeting = optional in-thread greeting, ice_breakers = up to 4 tappable quick replies (≤80 chars each; replace the auto-fill if given). confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| cards | Yes | ||
| status | No | PAUSED | |
| confirm | No | ||
| message | Yes | ||
| page_id | Yes | ||
| adset_id | Yes | ||
| cta_type | No | ||
| greeting | No | ||
| account_id | Yes | ||
| ice_breakers | No | ||
| welcome_message | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, open-world, non-idempotent, so the safety bar is lower. The description adds real behavioral value beyond that: confirm=false means preview (so the agent knows the default call does not actually publish), page_id is REQUIRED, and ice_breakers replace the auto-fill when given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and card constraint, then moves into parameter specifics. It is dense and long but every clause carries actionable detail; the enum list is verbose but bounded by '...'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation. For a 12-param, 6-required creation tool the description covers the genuinely tricky parts (card structure, image source choice, CTWA fields, preview mode), leaving only trivial params to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the load and largely does: it documents the cards item shape and the one-image-source rule, lists cta_type values, and explains welcome_message, greeting, and ice_breakers (≤80 chars, up to 4). It is silent on name, message, status, adset_id, and account_id, but those are self-evident or supplied by the schema defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a Meta carousel ad') and immediately scopes it with '(2-10 cards)', which distinguishes it from the sibling create_meta_link_ad, create_meta_video_ad, and create_meta_dynamic_ad tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful conditional guidance — leave cta_type EMPTY to auto-pick from the ad set's messaging destination, and use welcome_message/greeting/ice_breakers for Click-to-WhatsApp/Messenger/Instagram-DM carousels — but never states when to choose this tool over a sibling ad-creation tool or any prerequisites beyond page_id being required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_custom_conversionCreate Meta Custom ConversionAInspect
Creates a custom conversion on a pixel. Give url_contains (visitors whose page URL contains this, e.g. '/tesekkurler' — the classic thank-you / lead-page conversion), or event (a standard pixel event name), or BOTH (that event fired on that page).
event must be a STANDARD Meta pixel event and is matched case-sensitively; any casing you pass is normalized: PageView, ViewContent, Search, AddToCart, AddToWishlist, InitiateCheckout, AddPaymentInfo, Purchase, Lead, CompleteRegistration, Contact, CustomizeProduct, Donate, FindLocation, Schedule, StartTrial, SubmitApplication, Subscribe.
custom_event_type categorizes it for reporting/optimization (PURCHASE | LEAD | COMPLETE_REGISTRATION | ADD_TO_CART | CONTENT_VIEW | SEARCH | OTHER); leave it out and it is derived from the event. pixel_id from list_meta_pixels. confirm=false = preview.
An EVENT rule always carries a URL condition, because Meta rejects an event-only rule: if you pass no url_contains, an all-pages condition is added so the conversion means "this event anywhere on the site". custom_event_type must match the event, so leave it out and it is set correctly for you.
DELETING IS NOT POSSIBLE THROUGH THE API: Meta refuses custom-conversion deletion for this app (OAuthException 200), so a wrong one can only be removed by the user in Meta Events Manager → Custom conversions. Confirm the name and rule with the user BEFORE calling with confirm=true, and do not create throwaway test conversions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| event | No | ||
| confirm | No | ||
| pixel_id | Yes | ||
| account_id | Yes | ||
| url_contains | No | ||
| custom_event_type | No | OTHER |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only say readOnly=false, destructive=false, idempotent=false) by disclosing that deletion is impossible via the API (OAuthException 200), that event-only rules get an implicit all-pages condition, that casing is normalized, and that custom_event_type is auto-derived. These are exactly the hidden behaviors an agent needs. Minor gap: it does not state auth/permission requirements or whether the call is safe to retry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and dense — the rule-construction logic comes first, then the irreversibility warning. Slightly redundant: the 'leave custom_event_type out and it is derived/set for you' point is made twice in adjacent paragraphs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers everything else an agent needs: valid inputs, auto-applied defaults, preview vs commit, and the irreversibility constraint. Nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it does: it documents the full enum of standard pixel events (absent from the schema), the meaning and derivation of custom_event_type, the semantics of url_contains, pixel_id's source, and confirm as preview. Only account_id and name are left without explicit semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource ('Creates a custom conversion on a pixel') with the object of creation named precisely. It is clearly distinguishable from sibling update_meta_custom_conversion and list_meta_custom_conversions, and the description immediately scopes what a custom conversion consists of (URL rule and/or event rule).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to pass url_contains, when to pass event, and that both can be combined ('that event fired on that page'). It names the prerequisite source (pixel_id from list_meta_pixels), explains confirm=false as preview, and mandates confirming name/rule with the user before confirm=true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_dynamic_adCreate Meta Dynamic AdAInspect
Creates a dynamic product ad (DPA) — one creative that automatically pulls products from the catalog. The ad set must be catalog-bound (create_meta_adset with product_set_id). page_id from list_meta_pages, product_set_id from list_meta_product_sets. message/description may use macros like {{product.name}}, {{product.price}}; leave empty to let Meta fill product fields. call_to_action: SHOP_NOW | LEARN_MORE | BUY_NOW... confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | PAUSED | |
| confirm | No | ||
| message | No | ||
| page_id | Yes | ||
| adset_id | Yes | ||
| account_id | Yes | ||
| description | No | ||
| fallback_link | No | ||
| call_to_action | No | SHOP_NOW | |
| product_set_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, openWorld=true and non-destructive. The description adds genuinely new behavioral context: 'confirm=false = preview', which tells the agent the call can be safely dry-run, plus the macro-fill behavior where empty message/description delegates to Meta.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then prerequisites, then formatting details in a compact sequence. Dense but each clause carries information; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A create tool with an output schema, so return values need no explanation, and the description covers prerequisites, macro syntax, CTA options, and the preview flag. Remaining gaps (status default semantics, fallback_link purpose) are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It documents message/description macros, call_to_action enum values, and confirm preview semantics, but leaves name, status, adset_id, account_id, and especially fallback_link unexplained. Partial compensation for an 11-parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a dynamic product ad (DPA)') and immediately defines the distinguishing characteristic — one creative that pulls products from the catalog — which separates it from sibling ad creators like create_meta_carousel_ad and create_meta_link_ad.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete prerequisite (the ad set must be catalog-bound, created via create_meta_adset with product_set_id) and routes the agent to list_meta_pages and list_meta_product_sets for required IDs. It stops short of explicitly naming when to prefer this over the other Meta ad-type creators, but the DPA framing implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_engagement_audienceCreate Meta Engagement AudienceAInspect
Builds a Meta retargeting audience from ENGAGEMENT instead of website traffic — people who watched your video, interacted with your Facebook Page or Instagram profile, or opened your lead form. NO PIXEL AND NO WEBSITE TRAFFIC NEEDED, which makes it the only realistic retargeting option for accounts with a small or brand-new site (and the best lookalike seed you can get early on).
source: video | page | ig | lead_form source_id: the video id (list_meta_page_posts), page id (list_meta_pages), Instagram account id, or lead form id. event (optional, sensible default per source): • video → ThruPlay | 10s | 25% | 50% | 75% | 100% (Meta'da %95 eşiği YOKTUR) • page → page_engaged | page_visited | page_messaged | page_cta_clicked | post_engaged • ig → ig_business_profile_engaged | ig_business_profile_visited | ig_business_profile_all • lead_form → lead_form_opened | lead_form_submitted | lead_form_not_submitted retention_days: 1-365 (how long someone stays in the audience). confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| event | No | ||
| source | Yes | ||
| confirm | No | ||
| source_id | Yes | ||
| account_id | Yes | ||
| retention_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a mutating, non-idempotent, non-destructive write with openWorldHint=false, and the description adds real context beyond that: the 'confirm=false previews' dry-run behavior and the no-pixel prerequisite. It omits permissions/auth needs and what happens on repeated calls, so it is strong 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The leading paragraph is front-loaded with the differentiator, and the per-source bullet list is easy to scan. Minor deductions for the stray mixed-language aside ('Meta'da %95 eşiği YOKTUR') and some redundancy between the prose and the bullets.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation with an output schema present, the description covers the tricky parts: source/event vocabulary, retention bounds, and the preview flag. It lacks account_id/name guidance and any note on where the audience ID is returned, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it maps source→source_id provenance (list_meta_page_posts, list_meta_pages), enumerates valid event values per source, and gives retention_days bounds (1-365) and confirm semantics. It leaves name and account_id undocumented, so it is not fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('builds a Meta retargeting audience from ENGAGEMENT') and immediately scopes it against the website-traffic audience siblings ('instead of website traffic', 'NO PIXEL AND NO WEBSITE TRAFFIC NEEDED'). An agent can distinguish this from create_meta_website_audience, create_website_audience, or create_meta_lookalike_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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use context ('the only realistic retargeting option for accounts with a small or brand-new site' and 'best lookalike seed you can get early on'). It strongly implies the alternative (website-traffic audiences) but never names it or states the explicit selection condition, so it stops short of a full routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_instagram_post_adCreate Meta Instagram Post AdAInspect
Turns an EXISTING Instagram post/Reel into an ad (Ads Manager's "Use existing post → Instagram"). No new creative — the organic Instagram media runs as-is. This WORKS TODAY and needs no Instagram content permission: it is a pure Marketing API write (AdCreative source_instagram_media_id + instagram_user_id, no object_story_id). ig_media_id is the Instagram media id — from list_meta_instagram_posts (media_id, including its advertised_media list) or from Ads Manager → Use existing post → Instagram. The connected Instagram account is resolved automatically from page_id, or from the ad account when neither page_id nor ig_user_id is given; pass ig_user_id directly (list_meta_instagram_accounts) when the account has no Facebook Page. CLICK-TO-WHATSAPP / MESSENGER FROM AN ORGANIC POST: welcome_message = the ready-written text that auto-populates the person's WhatsApp/Messenger compose box (without it the thread opens empty, so it looks like the business started the conversation and the business's auto-reply never fires), greeting = optional in-thread greeting, ice_breakers = up to 4 tappable quick replies (≤80 chars each; they replace the auto-fill). Engagement still accrues on the ORGANIC post. Leave cta_type empty and the button is derived from the ad set's destination_type — that is the normal path; only pass cta_type (WHATSAPP_MESSAGE / SEND_MESSAGE) together with link when you want to override it, because Meta rejects a call-to-action with no link on this creative. To add a welcome message to an ad that ALREADY exists, use update_meta_instagram_post_ad — it keeps the organic post, the ad id and its learning. The ad is created PAUSED and goes through Meta review. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | ||
| name | Yes | ||
| status | No | PAUSED | |
| confirm | No | ||
| page_id | No | ||
| adset_id | Yes | ||
| cta_type | No | ||
| greeting | No | ||
| account_id | Yes | ||
| ig_user_id | No | ||
| ig_media_id | Yes | ||
| ice_breakers | No | ||
| welcome_message | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: the ad is created PAUSED and goes through Meta review, confirm=false yields a preview, no Instagram content permission is needed, engagement still accrues on the organic post, and Meta rejects a CTA without a link on this creative. These are real behavioral facts not derivable from readOnlyHint=false / openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and scope constraint, and every paragraph carries distinct operational detail. It is dense and somewhat long with heavy capitalization, but almost no sentence is filler; a small amount of the WhatsApp/Messenger passage could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers the mutation semantics, gating (PAUSED, review, preview), auth/permission posture, and id sourcing needed to invoke a 13-parameter write tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 0% across 13 parameters, the description carries the full burden and does so: it explains ig_media_id sourcing, page_id/ig_user_id resolution, welcome_message auto-fill behavior and the empty-thread failure mode, greeting, ice_breakers limits (≤4, ≤80 chars, replace auto-fill), and cta_type interaction with link. Only name/status/account_id/adset_id are left to obvious inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource+source ('Turns an EXISTING Instagram post/Reel into an ad') and immediately pins down the underlying API mechanism (AdCreative source_instagram_media_id + instagram_user_id, no object_story_id). This clearly separates it from siblings like create_meta_post_ad, create_meta_link_ad and create_meta_video_ad.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use update_meta_instagram_post_ad to add a welcome message to an existing ad, and points to list_meta_instagram_posts / list_meta_instagram_accounts for the required ids. It also states the normal path for cta_type (leave empty, derived from destination_type) versus the override case, and when ig_user_id must be passed directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_lead_formCreate Meta Lead FormAInspect
Creates an INSTANT FORM (lead form) on a Facebook Page, with custom questions, and returns the form id to attach to a lead ad. questions: each entry is EITHER a standard field Meta pre-fills from the user's profile — FULL_NAME, FIRST_NAME, LAST_NAME, EMAIL, PHONE, CITY, COMPANY_NAME, JOB_TITLE, DOB, GENDER … — OR a custom question written as 'Question text?|Option 1|Option 2' (with options it renders as a choice list, without options it is a free-text answer). privacy_policy_url is REQUIRED by Meta on every form. Optional: intro_headline / intro_description (the card shown before the questions), thank_you_text, follow_up_url (where the thank-you button goes). locale is the form's language (default TR) — give it in Meta's full form, e.g. EN_US, EN_GB, DE_DE, AR_AR; it sets BOTH Meta's own interface strings AND the three texts this tool supplies for you (the privacy-policy link text and the intro-card / thank-you buttons), so an EN_US form reads "Privacy Policy" / "Continue" / "Go to site". confirm=false shows those three under form_button_texts, so you can check the language before the form exists. higher_intent=true creates a 'Higher intent' Instant Form (Meta's is_optimized_for_quality — it adds a review/confirm step before submission, giving fewer but more qualified leads); the default is 'More volume'. Meta does NOT allow the form type to change after the form is published, so choose it at creation, and note Meta's API cannot create a form as an unpublished draft — use confirm=false to preview the fields (and see form_type) before it exists. After creating it, build the ad with create_meta_link_ad(..., lead_gen_form_id=) on an ad set whose optimization_goal is LEAD_GENERATION and whose promoted_object page_id is this Page. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| locale | No | TR | |
| confirm | No | ||
| page_id | Yes | ||
| questions | Yes | ||
| follow_up_url | No | ||
| higher_intent | No | ||
| intro_headline | No | ||
| thank_you_text | No | ||
| intro_description | No | ||
| privacy_policy_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: Meta requires privacy_policy_url, Meta's API cannot create an unpublished draft, form type is immutable once published, higher_intent adds a review step and trades volume for quality. Doesn't address auth/permission requirements or rate limits, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, but the flow is dense and the trailing 'confirm=false = preview' is stated twice, which is minor redundancy. For an 11-parameter tool with nontrivial semantics, the length is largely justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covering a mutation tool with 11 params, no schema descriptions, and an output schema present, the description supplies the return id, the confirm=false preview behavior, and the form_button_texts preview, so an agent has everything needed to call and chain it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage the description carries the full burden and mostly delivers: the questions format (standard field OR 'text?|opt1|opt2'), privacy_policy_url being required, locale syntax with concrete examples and its dual effect on interface and supplied button texts, and the meaning of confirm/higher_intent. Only name and page_id are left undocumented, which are self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates an INSTANT FORM (lead form) on a Facebook Page') and adds the return value (form id) that an agent needs to chain into ad creation. It is clearly distinguishable from list_meta_lead_forms and from the platform-generic create_lead_form sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes usage: use confirm=false to preview before the form exists, choose higher_intent at creation because Meta forbids changing form type after publish, and attach the returned id via create_meta_link_ad with optimization_goal LEAD_GENERATION. Both when-to-use and constraints are stated rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_link_adCreate Meta Link AdAInspect
Creates a Meta link ad (creative + ad in one step). page_id is REQUIRED — every Meta ad runs on behalf of a Facebook Page (find it with list_meta_pages). For the image give ONE of: image_hash (already uploaded via upload_meta_image — reusable, no re-upload), image_base64 (the file itself, e.g. one the user dropped into the chat) or image_url (public link). JPEG/PNG/GIF/WebP, ≤8MB. cta_type = the button: LEARN_MORE | SHOP_NOW | SIGN_UP | BUY_NOW | GET_OFFER | GET_QUOTE | CONTACT_US | APPLY_NOW | ORDER_NOW | SEND_MESSAGE | WHATSAPP_MESSAGE | INSTAGRAM_MESSAGE | VIEW_INSTAGRAM_PROFILE | CALL_NOW | BOOK_TRAVEL | DOWNLOAD | SUBSCRIBE | NO_BUTTON — leave EMPTY to auto-pick from the campaign objective (SALES→SHOP_NOW, LEADS→SIGN_UP, else LEARN_MORE). WHATSAPP_MESSAGE / SEND_MESSAGE / INSTAGRAM_MESSAGE make the button OPEN A CHAT (WhatsApp / Messenger / Instagram Direct) instead of a website — pair with a messaging ad set (optimization_goal CONVERSATIONS, destination_type WHATSAPP / MESSENGER / INSTAGRAM_DIRECT). THE BUTTON MUST MATCH THE AD SET'S destination_type: INSTAGRAM_DIRECT needs INSTAGRAM_MESSAGE (a link button such as LEARN_MORE is accepted at creation but the ad then NEVER delivers, error 1487891; MESSAGE_PAGE/SEND_MESSAGE is rejected on Instagram, subcode 2875003). Leave cta_type empty and it is derived from destination_type automatically. For those messaging ads you can PRE-FILL the chat: welcome_message = the text that auto-populates the user's WhatsApp/Messenger compose box (the ready-written message they'll tap 'send' on, e.g. 'Merhaba, indirimli fiyatlarınızdan yararlanmak istiyorum'); greeting = an optional greeting shown in the thread; ice_breakers = up to 4 tappable quick-reply options (each ≤80 chars) shown when the chat first opens (if given, these replace the auto-fill — Meta allows one or the other). These only apply when cta_type is WHATSAPP_MESSAGE / SEND_MESSAGE / INSTAGRAM_MESSAGE. BACKGROUND MUSIC / AUDIO / SOUNDTRACK: music=true is Ads Manager's "Add music" (Advantage+ audio enrollment) — Meta turns the still image into a short video with an auto-picked track; enhancements=['animate_image','image_enhancement',...] enrolls the other Advantage+ creative features. The response reports enhancements_applied vs enhancements_not_applied, so a request Meta ignores is never reported as success. INSTAGRAM IDENTITY: by default Meta derives the Instagram account from page_id, which silently picks one when the Page has several — pass instagram_user_id (from list_meta_instagram_accounts) to choose it explicitly. Either way the response returns the instagram_user_id the ad ACTUALLY runs from, so you can confirm the identity without opening Ads Manager. For a SPECIFIC song, embed it in a video and use create_meta_video_ad (or upload_meta_video + update_meta_ad_creative(video_id=...)) — the Marketing API has no field to pick a Sound Collection track. The ad is created PAUSED and goes through Meta review. LEAD ADS (Instant Form): pass lead_gen_form_id and the button opens Meta's instant form instead of a website — pair it with a LEAD_GENERATION ad set (promoted_object page_id) and cta_type SIGN_UP / APPLY_NOW / GET_QUOTE. You can build the form itself here too (create_meta_lead_form) or reuse one made in Meta Ads Manager (Page > Instant Forms) by passing its ID. If Meta answers (#200) the account was connected before this permission was granted — reconnect Meta from the panel once. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| link | Yes | ||
| name | Yes | ||
| music | No | ||
| status | No | PAUSED | |
| confirm | No | ||
| message | Yes | ||
| page_id | Yes | ||
| adset_id | Yes | ||
| cta_type | No | ||
| greeting | No | ||
| headline | No | ||
| image_url | No | ||
| account_id | Yes | ||
| image_hash | No | ||
| enhancements | No | ||
| ice_breakers | No | ||
| image_base64 | No | ||
| welcome_message | No | ||
| lead_gen_form_id | No | ||
| instagram_user_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations: ad is created PAUSED and goes through Meta review, confirm=false returns a preview, specific error codes surfaced (1487891, 2875003, #200 requiring reconnect), and the response reports enhancements_applied vs enhancements_not_applied so ignored requests are not falsely reported as success. These disclosures go well past the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with purpose and cta/behavior, and every sentence is information-dense, but it is a single run-on paragraph heavy with ALL-CAPS and parenthetical asides that make it hard to scan. The length is partly justified by tool complexity, but the lack of structure costs it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be documented, and annotations cover the safety profile. For a 20-parameter, high-complexity creation tool the description supplies the pairing rules, defaults, and failure modes an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage across 20 params, the description carries the burden and covers the tricky ones thoroughly: page_id required rationale, the three mutually exclusive image sources, the full cta_type enum and auto-derivation, plus welcome_message/greeting/ice_breakers/music/enhancements/instagram_user_id. However generic params (account_id, adset_id, name, message, link, headline, status) are left to inference, so it does not fully compensate for 0% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and scope: 'Creates a Meta link ad (creative + ad in one step).' It directly distinguishes itself from siblings like create_meta_video_ad (named explicitly for specific songs) and implies the link-ad role versus post/carousel/video ads. An agent can identify 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when/when-not/alternatives: it names list_meta_pages for the required page_id, upload_meta_image for reusing image_hash, and redirects to create_meta_video_ad / upload_meta_video + update_meta_ad_creative for specific songs. It gives conditional pairing rules for messaging ad sets (CONVERSATIONS, destination_type) and lead ads (LEAD_GENERATION ad set).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_lookalike_audienceCreate Meta Lookalike AudienceAInspect
Creates a lookalike audience from a source custom audience. source_audience_id from list_meta_audiences. country ISO alpha-2. ratio 0.01-0.20 (1%-20%; smaller = more similar). confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| ratio | No | ||
| confirm | No | ||
| country | Yes | ||
| account_id | Yes | ||
| source_audience_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is largely covered. The description adds a non-obvious behavioral trait beyond the annotations: the confirm=false dry-run mode, which lets the agent preview without creating anything. Auth and rate-limit details are absent, but the preview mechanic is a genuinely useful disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a compact, front-loaded set of fragments led by the core purpose. Every clause carries information and nothing is wasted, though the telegraphic style is dense and could benefit from slightly clearer sentence structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the annotations cover the safety profile. The description supplies the essential workflow (preview/confirm) and the meaning of the key parameters, leaving only minor gaps such as account_id and the duplicate-creation implication of idempotentHint=false.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the burden and does well: it explains source_audience_id origin (list_meta_audiences), country format (ISO alpha-2), ratio's valid range and semantic direction (0.01–0.20, smaller = more similar), and confirm's preview behavior. Only name and account_id are left implicit, which is acceptable for self-evident fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Creates a lookalike audience from a source custom audience") that clearly describes the operation. It does not explicitly differentiate from siblings like create_lookalike_audience or create_tiktok_lookalike_audience, but the Meta context and source-custom-audience constraint point the agent in the right direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "confirm=false = preview" fragment implies a two-step preview-then-confirm workflow, and "source_audience_id from list_meta_audiences" tells the agent where to source the prerequisite. However, there is no explicit when-not guidance or named alternative, so usage is only 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.
create_meta_post_adCreate Meta Post AdAInspect
Turns an existing Facebook/Instagram Page post into an ad (boosts an organic post). object_story_id: '{page_id}_{post_id}' — found via list_meta_page_posts. Keeps the post's own text and media.
link + cta_type = the "Boost post AND add a button" option in Ads Manager: a website button is attached on top of the organic post (e.g. cta_type=LEARN_MORE, link=https://…). Give link and the button appears; leave both empty and the post runs exactly as posted. A link is also what makes boosting possible in sales/leads campaigns, where Meta requires a destination URL. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | ||
| name | Yes | ||
| status | No | PAUSED | |
| confirm | No | ||
| adset_id | Yes | ||
| cta_type | No | ||
| account_id | Yes | ||
| object_story_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it as a non-read-only, non-idempotent, open-world write, so the description isn't carrying the safety burden alone. It adds genuinely useful behavior beyond that: 'confirm=false = preview' discloses a dry-run mode, and it explains that a destination URL is mandatory in sales/leads campaigns. It does not mention the PAUSED default state or permission/auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core identity is front-loaded in the first clause, followed by the object_story_id mechanics and then the link/cta behavior. It is dense but each paragraph earns its place; the Ads Manager analogy is slightly verbose but aids interpretation rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation here. For an 8-parameter write tool with zero schema descriptions, the description covers the identity, the prerequisite lookup, the object_story_id construction, the link/cta interaction, and the preview switch — everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does well for the hardest parameters: object_story_id format ('{page_id}_{post_id}'), the link + cta_type pairing with an example enum value, and confirm. But account_id, adset_id, name, and status (default PAUSED) are never addressed, leaving roughly half the parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Turns an existing Facebook/Instagram Page post into an ad (boosts an organic post)'), which immediately distinguishes it from siblings like create_meta_link_ad, create_meta_carousel_ad, and create_meta_dynamic_ad that build ads from scratch. It also clarifies the organic-post origin, which is the key differentiator among the many create_meta_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a concrete prerequisite path ('found via list_meta_page_posts') and explains the condition under which link/cta_type matter versus leaving them empty. What is missing is explicit guidance on when to pick this tool over create_meta_instagram_post_ad or create_meta_link_ad, so it stops 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_meta_video_adCreate Meta Video AdAInspect
Creates a Meta video ad. Give EITHER video_id (already uploaded via upload_meta_video — reusable) OR video_url (Meta fetches and processes it asynchronously). Thumbnail: image_hash, image_base64 or image_url — Meta REQUIRES a cover image; if you omit it, one is auto-generated from the video's own frame. To reuse a video already published on the Page (including Reels), take video_url from list_meta_page_posts and pass it here. page_id REQUIRED. cta_type = the button (LEARN_MORE | SHOP_NOW | SIGN_UP | BUY_NOW | WHATSAPP_MESSAGE | SEND_MESSAGE | INSTAGRAM_MESSAGE | ...) — leave EMPTY to auto-pick from the ad set's messaging destination, else the campaign objective. INSTAGRAM DM ADS: an ad set with destination_type=INSTAGRAM_DIRECT only delivers with cta_type INSTAGRAM_MESSAGE; LEARN_MORE creates the ad but Meta kills delivery with 1487891, and MESSAGE_PAGE/SEND_MESSAGE is rejected on Instagram (2875003). For Click-to-WhatsApp/Messenger/Instagram-DM video ads (cta_type WHATSAPP_MESSAGE / SEND_MESSAGE / INSTAGRAM_MESSAGE) you can pre-fill the chat: welcome_message = the ready-written text that auto-populates the user's compose box, greeting = optional in-thread greeting, ice_breakers = up to 4 tappable quick replies (≤80 chars each; if given they replace the auto-fill). MUSIC / AUDIO / SOUNDTRACK: a video ad already carries the audio embedded in the video file — that is how you ship a SPECIFIC song. enhancements=['ai_music','subtitles','video_auto_crop',...] (or music=true) enrol the video in Meta's Advantage+ creative features; the response reports enhancements_applied vs enhancements_not_applied. INSTAGRAM IDENTITY: by default Meta derives the Instagram account from page_id, which silently picks one when the Page has several — pass instagram_user_id (from list_meta_instagram_accounts) to choose it explicitly. Either way the response returns the instagram_user_id the ad ACTUALLY runs from, so you can confirm the identity without opening Ads Manager. LEAD ADS (Instant Form): pass lead_gen_form_id and the button opens Meta's instant form instead of a website — pair it with a LEAD_GENERATION ad set (promoted_object page_id) and cta_type SIGN_UP / APPLY_NOW / GET_QUOTE. You can build the form itself here too (create_meta_lead_form) or reuse one made in Meta Ads Manager (Page > Instant Forms) by passing its ID. If Meta answers (#200) the account was connected before this permission was granted — reconnect Meta from the panel once. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | ||
| name | Yes | ||
| music | No | ||
| status | No | PAUSED | |
| confirm | No | ||
| message | No | ||
| page_id | Yes | ||
| adset_id | Yes | ||
| cta_type | No | ||
| greeting | No | ||
| headline | No | ||
| video_id | No | ||
| image_url | No | ||
| video_url | No | ||
| account_id | Yes | ||
| image_hash | No | ||
| enhancements | No | ||
| ice_breakers | No | ||
| image_base64 | No | ||
| welcome_message | No | ||
| lead_gen_form_id | No | ||
| instagram_user_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly=false, destructive=false, openWorld=true, idempotent=false), and the description goes well beyond them: async fetch/processing for video_url, auto-generated cover images, specific Meta error codes (1487891, 2875003, #200) with remediation, enhancements_applied vs enhancements_not_applied in the response, silent Instagram-account derivation from page_id, and confirm=false as preview.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose is front-loaded, but the body is sprawling multi-paragraph prose dense with ALL-CAPS fragments and parenthetical error codes. The complexity partially justifies the length, yet it is not concise and hides key rules (e.g., cta_type selection) inside long run-on sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 22-param, 0%-schema-coverage, high-complexity ad-creation tool, the description is remarkably complete, and an output schema exists so return values need not be explained. It covers the edge cases (Instagram DM delivery, lead forms, identity derivation, preview mode) an agent would otherwise fail on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and it explains most of the non-obvious params (video_id, video_url, image_hash/base64/url, cta_type enum values, welcome_message, greeting, ice_breakers, enhancements, music, instagram_user_id, lead_gen_form_id, confirm). It leaves link, message, headline, status, name, account_id and adset_id undocumented, so coverage is strong but incomplete across 22 params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Creates a Meta video ad') that an agent immediately distinguishes from the other Meta ad creators in the sibling list. However, it never explicitly contrasts itself against create_meta_link_ad, create_meta_post_ad, create_meta_carousel_ad, etc., so routing among Meta ad types still leans on the tool name rather than the text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Extremely explicit about alternatives and conditions: video_id vs video_url, taking video_url from list_meta_page_posts to reuse Page/Reels videos, pairing lead_gen_form_id with a LEAD_GENERATION ad set, instagram_user_id to disambiguate identity, and the Click-to-WhatsApp/Messenger/Instagram-DM branches. Each path names the sibling tool or the ad-set condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_website_audienceCreate Meta Website AudienceAInspect
Creates a website retargeting audience from a pixel. pixel_id from list_meta_pixels. retention_days 1-180. event: which pixel event a visitor must fire to enter the audience — PageView (default, all visitors), ViewContent (product viewers), AddToCart / InitiateCheckout (cart/checkout abandoners — the core e-commerce retargeting audience), Purchase (buyers, e.g. to exclude or seed a lookalike), also Search/AddToWishlist/AddPaymentInfo/Lead/CompleteRegistration. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| event | No | PageView | |
| confirm | No | ||
| pixel_id | Yes | ||
| account_id | Yes | ||
| retention_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=false, destructive=false, openWorld=false. The description adds genuinely useful behavioral context beyond that: confirm=false acts as a preview/dry-run, and retention_days has a 1-180 validation range. It does not mention required permissions or post-creation effects, keeping it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose immediately, then layers the parameter guidance. The event enumeration is long but every value earns its place by tying to a distinct retargeting intent. It is dense but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a non-idempotent mutation tool, the description covers preview behavior, input constraints, and the key parameter value space, leaving only permission requirements unstated. Adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents pixel_id's source, retention_days' valid range, and extensively enumerates and interprets event values (which lack an enum in the schema), plus confirm's preview semantics. Only account_id and name go unmentioned, but they are largely self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Creates a website retargeting audience from a pixel.' This clearly distinguishes it from siblings like create_meta_lookalike_audience, create_meta_engagement_audience, and create_website_audience. An agent can identify the tool's function 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use specific event values (cart/checkout abandoners, buyers to exclude or seed lookalikes) and points to list_meta_pixels as the source for pixel_id. However, it names no alternative tool and gives no explicit when-not guidance versus the other audience-creation siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_microsoft_ad_groupCreate Microsoft Ad GroupAInspect
Creates an ad group in a campaign (starts PAUSED by default). cpc_bid = default click bid. language = ad group language (e.g. English, Turkish) — required by Microsoft. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| cpc_bid | Yes | ||
| language | No | English | |
| account_id | Yes | ||
| campaign_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, non-idempotent write. The description adds meaningful behavior beyond them: the entity is created PAUSED by default and confirm gates a dry-run preview. It omits auth/permission requirements, but the added context is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense, front-loaded sentence that packs the operation, default state, and both key parameter meanings with no filler. Efficient, though it reads as a run-on string of facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and annotations cover the safety profile. The description supplies the key behavioral facts (paused default, preview mode) and the trickiest param semantics, leaving only minor gaps for a straightforward create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the description must compensate. It explains cpc_bid, language (with examples and the Microsoft requirement), and confirm, but leaves account_id, campaign_id, customer_id, and name undefined. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates an ad group in a campaign') and scopes it to the Microsoft platform via the name and language example. It does not explicitly distinguish itself from generic siblings like create_ad_group, but the platform context is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The confirm=false/confirm=true hint effectively describes a preview-vs-apply usage mode, which is genuine guidance. However, it never states when to choose this tool over siblings like create_ad_group or create_microsoft_campaign; usage 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.
create_microsoft_campaignCreate Microsoft CampaignAInspect
Creates a campaign in Microsoft Advertising (starts PAUSED). campaign_type: Search | Audience | Shopping | DynamicSearchAds. daily_budget is in the account's currency. Subject to the absolute budget cap (parity with Google/Meta). confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| account_id | Yes | ||
| customer_id | No | ||
| daily_budget | Yes | ||
| campaign_type | No | Search |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/safety profile (readOnlyHint=false, destructiveHint=false, non-idempotent), so the description adds real value beyond them: the campaign starts PAUSED, budget is in account currency, and an absolute budget cap applies. The dry-run vs apply semantics of confirm are also disclosed. It does not discuss auth/permission needs, but the added behavioral context is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short, front-loaded statements with no filler; each clause (state, type values, budget units, cap, confirm semantics) delivers distinct information. Well structured for scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a create-mutation with annotations, the description covers the operationally critical points (paused start, budget units, confirm gate). Only the account_id vs customer_id distinction and the name param are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 params, so the description carries the burden. It documents campaign_type (enumerated values), daily_budget (currency), and confirm (preview/apply), but leaves name, account_id, and customer_id completely unexplained, so it only partially compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a campaign in Microsoft Advertising') and the platform qualifier cleanly separates it from the many sibling campaign creators (create_meta_campaign, create_linkedin_campaign, create_tiktok_campaign). The PAUSED initial state is an extra precise detail that confirms scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the confirm=false preview / confirm=true apply workflow, which is genuine usage guidance, but it never says when to choose this tool over alternatives like create_pmax_campaign or create_search_campaign, nor any prerequisites (e.g. account must be connected). Usage is implied rather than delimited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_microsoft_conversion_goalCreate Microsoft Conversion GoalAInspect
Creates a URL-based conversion goal. uet_tag_id is REQUIRED (first run create_microsoft_uet_tag or list_microsoft_uet_tags). operator: Contains|BeginsWith|Equals|RegularExpression. goal_category: Purchase|AddToCart|Signup|Subscribe|Lead|Other. url_expression e.g. 'opus-growth.com/tesekkur'. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| operator | No | Contains | |
| account_id | Yes | ||
| uet_tag_id | Yes | ||
| customer_id | No | ||
| goal_category | No | Purchase | |
| revenue_value | No | ||
| url_expression | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=false). The description adds meaningful behavior beyond them: the dry-run/apply semantics of confirm and the hard prerequisite on uet_tag_id. It omits that non-idempotent calls may create duplicates on retry, a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the critical required-parameter warning, then value sets and the confirm semantics. Dense and terse with zero filler, though the enum listings make it feel slightly crammed rather than cleanly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described. The description covers the create intent, the prerequisite, and the preview/apply mechanics. A few parameters remain undescribed, but for a 9-param tool with an output schema this is close to sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It documents operator and goal_category value sets, gives a url_expression example, and explains confirm, but leaves name, account_id, customer_id, and revenue_value completely unspecified. Useful but incomplete compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a URL-based conversion goal'), which distinguishes it from sibling listing/update tools and from create_microsoft_uet_tag. It does not explicitly contrast with update_conversion_goal or create_meta_custom_conversion, but the URL-based Microsoft framing is specific enough for confident selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides the key prerequisite routing: uet_tag_id is REQUIRED and instructs to first run create_microsoft_uet_tag or list_microsoft_uet_tags. It also explains the confirm=false preview vs confirm=true apply fork. No explicit when-not-to-use guidance, but the dependency chain is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_microsoft_remarketing_listMicrosoft Remarketing AudienceAInspect
Creates a remarketing audience — visitors of a specific page (URL). uet_tag_id is REQUIRED (list_microsoft_uet_tags / create_microsoft_uet_tag). url_contains e.g. '/products'. operator: Contains|Equals|BeginsWith. membership_duration = membership duration (days). confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| operator | No | Contains | |
| account_id | Yes | ||
| uet_tag_id | Yes | ||
| customer_id | No | ||
| url_contains | Yes | ||
| membership_duration | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnly=false, destructive=false, idempotent=false), so the bar is lower, and the description still adds genuinely useful behavior beyond them: 'confirm=false = preview, confirm=true applies' discloses a dry-run/commit gate not visible in the schema or annotations. It omits auth/permission requirements and rate-limit behavior, keeping it out of the top band.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded, leading with the core purpose before the parameter notes, and every clause carries information (requirement, example, enum, units, preview semantics). The heavy fragment/parenthetical style is efficient but slightly telegraphic, leaving a bit of readability on the table.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool whose annotations carry the safety profile and which has an output schema covering return values, the description supplies the needed extras: the required dependency, key field semantics, and the confirm preview/apply behavior. Only peripheral params (account_id, customer_id) remain unaddressed, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage the description must compensate, and it does for most parameters: it supplies an example for url_contains ('/products'), enumerates the operator values (Contains|Equals|BeginsWith) that the schema lacks, specifies membership_duration units (days), and explains confirm's preview/apply meaning. It leaves name, account_id, and customer_id undocumented, though these are largely self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Creates a remarketing audience' — and clarifies the defining trait as page-visitor (URL) based. It is far more specific than a name restatement, though it never explicitly distinguishes itself from sibling audience-creators like create_website_audience or create_customer_match_audience, relying on the tool name for that separation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete context by flagging that uet_tag_id is REQUIRED and routing the agent to list_microsoft_uet_tags / create_microsoft_uet_tag to obtain it. It does not, however, state when to choose this audience type over the many alternative audience-creation tools, so no exclusion or alternative guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_microsoft_responsive_search_adCreate Microsoft RSAAInspect
Creates a Responsive Search Ad (RSA). headlines: 3-15 headlines, descriptions: 2-4 descriptions, final_url required. path1/path2 are optional display URL paths. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| path1 | No | ||
| path2 | No | ||
| confirm | No | ||
| final_url | Yes | ||
| headlines | Yes | ||
| account_id | Yes | ||
| ad_group_id | Yes | ||
| customer_id | No | ||
| descriptions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true. The description adds real value beyond that: asset-count constraints (3-15 headlines, 2-4 descriptions), which fields are required, and the dry-run preview semantics of confirm=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action, then the required asset shape, then the confirm workflow. No filler; every clause adds operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a rich annotation set and an output schema (which removes any need to describe return values), the description covers the essential creative constraints and the preview/apply behavior. The only real gap is the uncharted account-scoping parameters and any permission prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for the core creative parameters: headline/description count limits (which the schema does not express as minItems/maxItems), final_url required, path1/path2 optional display paths, and confirm as a preview flag. It leaves account_id, ad_group_id, and customer_id semantics undocumented, which keeps it out of 5 territory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Creates a Responsive Search Ad (RSA)") and immediately enumerates the required asset shape, so an agent knows exactly what entity is produced. It does not, however, explicitly differentiate itself from the sibling create_responsive_search_ad (the Google counterpart) beyond the tool name/title, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The confirm=false preview / confirm=true apply workflow is genuinely useful usage guidance and implies a safe two-step pattern. However, there is no statement of prerequisites (an existing ad group/account) or when to prefer update_microsoft_responsive_search_ad over creating a new ad.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_microsoft_uet_tagCreate Microsoft UET TagAInspect
Creates a UET (conversion tracking) tag. Once its script is installed on the site, conversion goals + remarketing become available. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| account_id | Yes | ||
| customer_id | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the annotations: the confirm=false preview vs confirm=true apply dry-run semantics, plus the dependency that tracking becomes active only after the script is installed. Annotations already cover the safety profile (non-read-only, non-destructive), so this is valuable supplementary detail, though idempotency and rate/limit behavior are unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the action front-loaded, followed by the consequence and the confirm semantics. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need no explanation, and annotations cover safety, but for a five-parameter mutation tool with zero schema descriptions, the definition leaves required identifiers (account_id, customer_id) undocumented, which is a meaningful completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, yet it only explains confirm. The other four parameters (name, account_id, customer_id, description) receive no explanation of format or source, leaving an agent to guess how to obtain account_id and customer_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Creates a UET tag") and helpfully expands the UET acronym as conversion tracking. It does not differentiate itself from siblings like list_microsoft_uet_tags or create_microsoft_conversion_goal, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the downstream consequence ("Once its script is installed... conversion goals + remarketing become available"), which implies when this tool is a prerequisite, but never explicitly says when to use it versus alternatives like create_microsoft_conversion_goal. 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_pmax_campaignCreate Performance Max CampaignAInspect
Creates a Performance Max campaign (PAUSED): budget + campaign + asset group + text and image assets. Google REJECTS an asset group that is missing anything, so all of these are required: at least 3 headlines (≤30 chars), 1 long headline (≤90), 2 descriptions (≤90), plus at least one landscape image (1.91:1), one square image (1:1) and one square logo. Upload the images first with upload_image_asset and pass the returned resource_names in marketing_image_assets / square_image_assets / logo_assets.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| final_url | Yes | ||
| headlines | Yes | ||
| customer_id | Yes | ||
| logo_assets | No | ||
| daily_budget | Yes | ||
| descriptions | Yes | ||
| business_name | Yes | ||
| long_headlines | Yes | ||
| square_image_assets | No | ||
| marketing_image_assets | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses two critical behavioral traits: the campaign is created PAUSED (safe default despite destructiveHint=false), and Google rejects an asset group missing any required element. That validation behavior is exactly the kind of context an agent cannot get from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with what gets created and the paused state, then requirements, then the dependency. No filler; every clause carries actionable constraint information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-value explanation is unnecessary, and the description covers asset requirements and the upload dependency well. It leaves the confirm flag and the basic identity/budget parameters undocumented, which for a 12-parameter mutation tool is a noticeable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry parameter meaning, and it does for the hardest ones: minimum counts and character limits for headlines, long_headlines and descriptions, plus aspect-ratio requirements for the three image arrays and their exact parameter names. It omits meaning for customer_id, name, daily_budget, final_url, business_name and especially confirm, so it is strong but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a Performance Max campaign') and immediately clarifies the scope: budget + campaign + asset group + assets. It also distinguishes the output state ('PAUSED'), which separates it from the many other create_*_campaign siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisite ordering ('Upload the images first with upload_image_asset and pass the returned resource_names') and names the exact parameter slots to use. It does not say when to choose PMax over other campaign types or what happens if confirm is omitted, so it stops short of full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_responsive_search_adCreate Responsive Search AdAInspect
Adds a Responsive Search Ad (RSA) to an ad group. status: 'PAUSED' (default) | 'ENABLED'. NOTE: the ad's own status is INDEPENDENT of the campaign — a PAUSED ad stays paused even after the campaign is switched on, so a draft handed over with paused ads serves nothing until someone also enables them. When you are building a campaign for review, pass status='ENABLED': the campaign itself is created PAUSED, which already guarantees nothing spends, and the reviewer then needs a single campaign-level switch to go live. Use update_ad_status later to change it. At least 3 headlines, 2 descriptions. DISPLAY URL PATHS: path1 / path2 are the two segments shown after the domain — ftapi.com/sicherer/datenraum comes from path1="sicherer", path2="datenraum". Up to 15 characters each, no slashes, and they do NOT have to exist as real pages. They are not decoration: the display URL is an expected-CTR signal, so an ad left on a bare domain is measurably weaker than the rest of the account. Optional: final_mobile_url (separate mobile landing page) and tracking_url_template (ad-level tracking template). PINNING: headline_pins / description_pins are optional lists in the SAME ORDER as headlines/descriptions; each entry pins that text to a fixed position — headline 1/2/3, description 1/2 (0 or empty = unpinned, Google rotates it). E.g. headlines=["Free Shipping","B","C"], headline_pins=[1,0,0] always shows "Free Shipping" as headline 1. Assets pinned to the same position compete only for that position; Google cannot fill the others. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| path1 | No | ||
| path2 | No | ||
| status | No | PAUSED | |
| confirm | No | ||
| final_url | Yes | ||
| headlines | Yes | ||
| ad_group_id | Yes | ||
| customer_id | Yes | ||
| descriptions | Yes | ||
| headline_pins | No | ||
| description_pins | No | ||
| final_mobile_url | No | ||
| tracking_url_template | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (non-readonly, non-idempotent, non-destructive), but the description discloses far more: ad status is independent of campaign status, a PAUSED draft serves nothing until enabled, and confirm=false triggers a dry-run. It also explains pinning mechanics and CTR impact of display URL paths, which an agent cannot infer 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then organized into labeled sections (STATUS, DISPLAY URL PATHS, PINNING) that make it scannable. It is dense and long, but nearly every sentence adds distinct operational value; only the CTR rationale for display URLs is somewhat editorial.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter mutation tool with 0% schema coverage and an output schema present, the description supplies the missing behavioral and parameter context an agent needs to call it correctly. Return values are legitimately omitted given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and largely succeeds: it defines status values/default, path1/path2 character limits and semantics, the order-aligned pinning lists, final_mobile_url, tracking_url_template, and confirm. Only customer_id/ad_group_id/final_url are left to implication, which is a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Adds a Responsive Search Ad (RSA) to an ad group'), which cleanly distinguishes it from siblings like create_microsoft_responsive_search_ad, update_rsa, and create_demand_gen_ad. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditional guidance ('When you are building a campaign for review, pass status=ENABLED') and routes follow-up changes to update_ad_status. It stops short of contrasting against sibling ad-creation tools (e.g. why this vs. a demand-gen ad), so it is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_search_campaignCreate Search CampaignAInspect
Creates a new Search campaign (starts PAUSED for safety) + daily budget. locations: comma-separated location names/geo IDs (e.g. 'Türkiye'); languages: language codes (tr,en...). search_partners=False → Search Partners OFF (set True to enable). Display expansion always starts off. presence_only=True → location type PRESENCE (people PRESENT in the target area; Google's default is PRESENCE_OR_INTEREST i.e. "people interested too", set False to revert to that). You can also change these 3 settings later via manage_campaign_settings. IMPORTANT: if no locations are given the campaign targets the ENTIRE WORLD — you can add them later via set_campaign_targeting. BRANDING: business_name (≤25 chars) and logo_asset_id (a square logo ≥128x128 already uploaded with upload_image_asset) are linked to the campaign so the ad shows your brand name and logo on the SERP, which also lifts Ad Strength. Leave them empty and the campaign inherits whatever is set at ACCOUNT level; if the account has none either, the result says so explicitly instead of launching an unbranded campaign silently. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| languages | No | ||
| locations | No | ||
| customer_id | Yes | ||
| daily_budget | Yes | ||
| business_name | No | ||
| logo_asset_id | No | ||
| presence_only | No | ||
| search_partners | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark it non-read-only, non-destructive and non-idempotent, so the description carries real weight and delivers: campaigns start PAUSED, confirm=false is a dry-run, absent locations means worldwide targeting, and missing branding fails loudly rather than launching unbranded. These are exactly the behavioral facts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and safety behavior are front-loaded, and the rest is dense with actionable detail rather than filler. It is long and occasionally parenthetical-heavy ('set True to enable'), but nearly every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with an output schema present, the description covers targeting, branding, dry-run and failure modes, so nothing material is left to inference. Return values are legitimately handled by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it does: it defines locations format, languages codes, the inverted booleans search_partners and presence_only (with Google's default spelled out), business_name length and logo_asset_id requirements. Only the self-evident name, customer_id and daily_budget go unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb and resource ('Creates a new Search campaign ... + daily budget') and immediately distinguishes itself from the many sibling campaign creators via the Search qualifier. The 'starts PAUSED for safety' clause adds scope an agent can act on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions for behavior: no locations targets the entire world and can be fixed later via set_campaign_targeting, and the 3 targeting settings can be changed later via manage_campaign_settings. It does not explicitly route between this and the other create_*_campaign siblings, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tiktok_adCreate TikTok AdInspect
Creates an ad inside a TikTok ad group. identity_id is required (list_tiktok_identities); the ad runs under that TikTok account identity. Give exactly one creative source: tiktok_item_id (promote an existing TikTok post as a Spark ad; the identity must own the post), or video_id (an uploaded video) with ad_text and landing_page_url, or image_ids. For click-to-WhatsApp ad groups pass whatsapp_number (with country code) and optionally whatsapp_message; for Direct Message ad groups pass auto_message_id. call_to_action e.g. LEARN_MORE, SHOP_NOW, SIGN_UP, CONTACT_US, BOOK_NOW, SEND_MESSAGE. The ad is created paused. confirm=false returns a preview, confirm=true creates it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| ad_text | No | ||
| confirm | No | ||
| video_id | No | ||
| image_ids | No | ||
| adgroup_id | Yes | ||
| automation | No | AUTO | |
| identity_id | Yes | ||
| display_name | No | ||
| advertiser_id | Yes | ||
| identity_type | No | ||
| call_to_action | No | LEARN_MORE | |
| identity_bc_id | No | ||
| tiktok_item_id | No | ||
| auto_message_id | No | ||
| whatsapp_number | No | ||
| landing_page_url | No | ||
| whatsapp_message | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_tiktok_adgroupCreate TikTok Ad GroupAInspect
Creates a TikTok ad group — targeting/budget/billing event. Starts DISABLED (paused). location_ids REQUIRED (comma-separated; from tiktok_region_search). optimization_goal: CLICK|CONVERT|REACH|VIDEO_VIEW|LEAD_GENERATION|CONVERSATION|... billing_event: CPC|CPM|OCPM|CPV. Use optimization_goal=CONVERSATION for TikTok Direct Message (messaging) ad groups — promotion_type defaults to LEAD_GEN_CLICK_TO_TT_DIRECT_MESSAGE, billing_event to OCPM and optimization_event to MESSAGE automatically; no pixel is needed. age_groups: AGE_18_24,AGE_25_34... genders: GENDER_MALE|GENDER_FEMALE. For CONVERT, pixel_id + optimization_event are required. placements (optional, comma-separated): PLACEMENT_TIKTOK,PLACEMENT_PANGLE,PLACEMENT_GLOBAL_APP_BUNDLE — leave empty for TikTok's automatic placement. schedule_start / schedule_end: 'YYYY-MM-DD HH:MM:SS' in the ad account's timezone — leave schedule_start empty to start now, schedule_end empty to run open-ended. search_result_enabled=true also serves on TikTok Search results. promotion_type (what is being advertised — TikTok requires it): WEBSITE|APP_ANDROID|APP_IOS|LEAD_GEN_INSTANT_FORM|LEAD_GEN_CLICK_TO_CALL|LEAD_GEN_CLICK_TO_TT_DIRECT_MESSAGE|LEAD_GEN_CLICK_TO_SOCIAL_MEDIA_APP_MESSAGE|LEAD_GEN_EXTERNAL_WEBSITE|FOLLOWERS|LIVESTREAM. INSTANT MESSAGING APPS (WhatsApp / Messenger / LINE / Zalo, per TikTok's official API guide "Create a Lead Generation ad with optimization location as instant messaging apps"): campaign objective LEAD_GENERATION + promotion_type=LEAD_GEN_CLICK_TO_SOCIAL_MEDIA_APP_MESSAGE, then messaging_app_type (cannot be changed later): IM_URL (default) = a custom chat link set on each ad, e.g. https://wa.me/ via create_tiktok_ad(whatsapp_number=...), works with no extra setup, CLICK only; WHATSAPP = TikTok fills the chat from messaging_phone (international format, e.g. +14155550123; phone_region_code only when the calling code is shared, like +1), but TikTok requires that number to be connected to its Messaging Management Tool (MMT); MESSENGER = messaging_app_account_id is the Facebook Page ID; LINE = messaging_app_account_id is the LINE Business ID (CLICK only); ZALO = messaging_phone (CLICK only). optimization_goal CONVERSATION is allowlist-only at TikTok and only for MESSENGER/WHATSAPP. BUDGET MINIMUMS: TikTok sets the ad group daily minimum per currency (base 20 USD, converted with each currency's budget ratio); when a budget is too low TikTok's error states the exact minimum for that account's currency — leave empty for website campaigns (TRAFFIC/REACH/VIDEO_VIEWS/ENGAGEMENT/WEB_CONVERSIONS) and it is derived from the campaign objective; set it explicitly for app/catalog/lead-form campaigns. bid_type: BID_TYPE_NO_BID (automatic bidding, default) | BID_TYPE_CUSTOM (manual bid — bid_price required, in the account currency, e.g. manual CPC). pacing: PACING_MODE_SMOOTH (standard delivery, default — spreads the budget over the day) | PACING_MODE_FAST (accelerated; only valid with BID_TYPE_CUSTOM, TikTok rejects it with automatic bidding). automation: AUTO (default) reads the campaign and uses the matching endpoint — TikTok refuses classic ad-group creation inside a Smart+ campaign, so this is what makes an ad group possible there at all; MANUAL or SMART_PLUS force one path. In a Smart+ ad group TikTok requires a real placement list (automatic placement is rejected, so PLACEMENT_TIKTOK is used when none is given) and treats your targeting as a starting point it can widen; pacing and search_result_enabled do not apply. confirm=false previews, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| budget | No | ||
| pacing | No | ||
| confirm | No | ||
| genders | No | ||
| bid_type | No | ||
| pixel_id | No | ||
| bid_price | No | ||
| age_groups | No | ||
| automation | No | AUTO | |
| placements | No | ||
| budget_mode | No | BUDGET_MODE_DAY | |
| campaign_id | Yes | ||
| audience_ids | No | ||
| location_ids | Yes | ||
| schedule_end | No | ||
| advertiser_id | Yes | ||
| billing_event | No | CPC | |
| promotion_type | No | ||
| schedule_start | No | ||
| messaging_phone | No | ||
| optimization_goal | No | CLICK | |
| phone_region_code | No | ||
| messaging_app_type | No | ||
| optimization_event | No | ||
| excluded_audience_ids | No | ||
| interest_category_ids | No | ||
| search_result_enabled | No | ||
| messaging_app_account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that the ad group starts DISABLED (paused), the confirm=false preview / confirm=true apply gate, how automation=AUTO switches endpoints, Smart+ restrictions (real placement list required, targeting can be widened, pacing/search disabled), currency-derived budget minimums and that TikTok's error reports the exact minimum. This is unusually rich behavioral 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the essentials (creates ad group, starts paused, location_ids required), and most sentences carry parameter-specific value. But it is a single ~450-word wall of text with no bullets or grouping, making it hard to scan under a 29-parameter surface. Length is partly justified by complexity, but structure is weak.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers the conditional logic (billing events, promotion types, messaging paths, budget minimums, preview/apply) an agent needs to invoke it correctly. A few targeting-related parameters remain undocumented, leaving minor gaps 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are no enums in the schema, so the description carries the full burden — and it largely does, enumerating allowed values for optimization_goal, billing_event, promotion_type, age_groups, genders, placements, bid_type, pacing, scheduling formats, and messaging_app_type semantics. However audience_ids, excluded_audience_ids, interest_category_ids and budget_mode are never explained, so it doesn't fully compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb (Creates) and resource (TikTok ad group) plus the scope of what it configures (targeting/budget/billing event). The resource is distinct enough that an agent can tell it apart from create_tiktok_campaign, create_tiktok_ad and update_tiktok_adgroup without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives rich conditional guidance: use optimization_goal=CONVERSATION for messaging ad groups, automation=AUTO to work inside Smart+ campaigns, confirm=false to preview. It also points to prerequisite/sibling helpers (tiktok_region_search for location_ids, create_tiktok_ad for whatsapp_number). It stops short of explicitly contrasting this tool with the sibling update_tiktok_adgroup or stating ordering vs create_tiktok_campaign, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tiktok_auto_messageCreate TikTok Welcome-Chat TemplateAInspect
Creates a TikTok WELCOME-CHAT (automated message) template: the greeting a user sees the moment they tap a Direct Message ad, plus optional tappable 'suggested question → automatic answer' pairs (e.g. "Services and prices?" → your price list). TikTok requires such a template on every messaging ad, so without this no DM campaign can go live.
title = internal template name. content = the greeting message. suggested_questions = [{"question": "...", "answer": "..."}] — both fields are mandatory in each pair. TikTok reviews the template (audit_status); once it PASSes, pass its auto_message_id to create_tiktok_ad. confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| confirm | No | ||
| content | Yes | ||
| advertiser_id | Yes | ||
| suggested_questions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that TikTok reviews the template via audit_status, that it must pass before use, the confirm=false preview mode, and the hand-off to create_tiktok_ad. Annotations only supply the generic openWorld/non-idempotent/create flags; the description supplies the operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool does and why it matters before drilling into parameters and workflow. Slightly dense with an inline JSON example, but each sentence adds information rather than restating the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the description still usefully mentions audit_status. It covers the nested suggested_questions structure and the workflow hand-off, leaving only advertiser_id and rate/error behavior unspecified for this 5-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description carries the burden well: it defines title, content, and the suggested_questions shape including that both question and answer are mandatory, plus confirm=false previewing. It omits any explanation of advertiser_id, the one required parameter left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a TikTok WELCOME-CHAT (automated message) template') and clarifies exactly what it produces, the greeting plus optional suggested-question/answer pairs. It is clearly distinguishable from sibling list_tiktok_auto_messages and the various create_tiktok_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use context ('TikTok requires such a template on every messaging ad, so without this no DM campaign can go live') and describes the downstream workflow (pass the auto_message_id to create_tiktok_ad once audit_status PASSes). The confirm=false preview guidance further clarifies invocation modes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tiktok_campaignCreate TikTok CampaignAInspect
Creates a TikTok campaign. objective_type: TRAFFIC | REACH | VIDEO_VIEWS | ENGAGEMENT | LEAD_GENERATION | WEB_CONVERSIONS | PRODUCT_SALES | APP_PROMOTION. FOUR OF THOSE OBJECTIVES HAVE A HARD EXPIRY: TikTok stops accepting campaign, ad group and ad creation for PRODUCT_SALES, WEB_CONVERSIONS, APP_PROMOTION and LEAD_GENERATION on 1 January 2027 (legacy manual flow; the request will simply error and nothing is created). TRAFFIC, REACH, VIDEO_VIEWS and ENGAGEMENT are not affected, and neither is anything you do to a campaign that already exists — updates, status changes and reporting keep working. budget_mode: BUDGET_MODE_DAY | BUDGET_MODE_TOTAL | BUDGET_MODE_INFINITE. budget = MAIN unit of the account currency (e.g. 50 = 50.00). Delivery is enabled at the ad-group level — a campaign alone does not spend. automation: MANUAL (default, the classic flow) or SMART_PLUS — TikTok's Smart+ (Upgraded Smart Plus) campaign, the replacement for the expiring manual flow. Smart+ needs a campaign-level budget (TikTok enforces a per-account minimum), accepts only a daily or lifetime budget, and does not support PRODUCT_SALES. sales_destination (Smart+ WEB_CONVERSIONS only): WEBSITE | APP | WEB_AND_APP. First returns a preview with confirm=false; to confirm, use confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| budget | No | ||
| confirm | No | ||
| automation | No | MANUAL | |
| budget_mode | No | BUDGET_MODE_DAY | |
| advertiser_id | Yes | ||
| objective_type | No | TRAFFIC | |
| sales_destination | No | WEBSITE |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: the 1 January 2027 objective expiry, the fact that a campaign alone does not spend, Smart+ campaign-level budget requirements, and the preview/confirm two-step behavior are all material behavioral facts not present in readOnlyHint/destructiveHint/idempotentHint. No contradiction with the declared non-read-only, non-idempotent profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and every sentence is substantive, but the expiry passage is verbose and repeats itself ('legacy manual flow', the reassurance about existing campaigns). Slightly dense but not padded with filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 8-parameter creation tool with an output schema and annotations, the description covers the decision-critical constraints an agent needs (objective validity, budget mode/semantics, automation choice, confirmation flow). Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description carries the whole burden and delivers: full enum lists for objective_type, budget_mode, automation and sales_destination, budget units ('50 = 50.00'), the confirm preview flow, and conditional applicability of sales_destination (Smart+ WEB_CONVERSIONS only). Only name and advertiser_id are left undocumented, both self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a TikTok campaign') and implicitly distinguishes itself from sibling tools like create_meta_campaign and create_linkedin_campaign by platform, and from create_tiktok_adgroup by noting 'Delivery is enabled at the ad-group level'. An agent can identify its role 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-not-to-use guidance: four objective types have a hard expiry and 'will simply error and nothing is created', while TRAFFIC/REACH/VIDEO_VIEWS/ENGAGEMENT are unaffected. It also frames Smart+ as the replacement flow and states its exclusions (no PRODUCT_SALES).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tiktok_customer_file_audienceCreate TikTok Customer-List AudienceAInspect
Creates a TikTok custom audience from a CUSTOMER LIST (retarget your CRM contacts / build a lookalike seed). identifiers = comma- or newline-separated emails or phone numbers; id_type: EMAIL | PHONE. Identifiers are SHA-256 hashed ON THE SERVER before upload — raw PII never leaves. TikTok needs roughly 1000+ matching users for the audience to be usable. confirm=false previews, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| id_type | No | ||
| identifiers | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only define safety flags (readOnly=false, destructive=false, idempotent=false); the description adds meaningful context beyond them — server-side SHA-256 hashing so raw PII never leaves, the ~1000-user match threshold, and the confirm=false preview vs confirm=true apply distinction. It does not address what happens on repeated calls (idempotency), leaving one gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but tightly organized, leading with purpose before dropping into identifier format, hashing, threshold, and confirm behavior. Every clause carries information; the parenthetical aside is the only slight fold-in of optional framing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation tool with an output schema, the description covers the non-obvious parameters, the data-handling behavior, and the preview/apply switch. Only the mundane name/advertiser_id params and idempotency behavior are unaddressed, which is a minor shortfall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the burden and largely does: it defines identifiers as comma- or newline-separated emails/phone numbers, enumerates id_type values (EMAIL | PHONE), and explains confirm's preview/apply semantics. name and advertiser_id remain unexplained, keeping it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a TikTok custom audience from a CUSTOMER LIST') and immediately distinguishes it from the sibling create_tiktok_lookalike_audience by framing the customer list as a lookalike seed rather than a lookalike itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to reach for it (retargeting CRM contacts, seeding a lookalike) and a concrete viability threshold (roughly 1000+ matching users). It does not explicitly name a competing audience-creation tool for when this is the wrong choice, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tiktok_lookalike_audienceCreate TikTok Lookalike AudienceAInspect
Creates a TikTok lookalike audience from a source custom audience. location_ids is comma-separated (from tiktok_region_search). audience_size: NARROW | BALANCED | BROAD. confirm=false previews, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| location_ids | Yes | ||
| advertiser_id | Yes | ||
| audience_size | No | BALANCED | |
| source_audience_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the description's job is smaller. It still adds real behavioral context by disclosing the dry-run/preview pattern via confirm, which is not visible in annotations and materially changes how an agent should invoke it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three terse sentences with no filler; the core action, the location_ids constraint, and the confirm contract are all front-loaded and immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with 4 required fields and an output schema present, the description covers the non-obvious parameters and the preview/apply contract. Return-value explanation is unnecessary because the output schema handles it, leaving nothing an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden for 6 parameters, and it delivers on the tricky ones: location_ids format (comma-separated) plus its source tool, audience_size enum values (NARROW|BALANCED|BROAD), and confirm semantics. advertiser_id, name, and source_audience_id remain undocumented but are largely self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Creates a TikTok lookalike audience') and identifies the required input as a source custom audience, which separates it from TikTok customer-file or shared audiences. It never names a sibling tool explicitly, so an agent must infer that this is the TikTok counterpart to create_meta_lookalike_audience / create_customer_match_audience.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable operational context: location_ids must come from tiktok_region_search, and confirm=false previews while confirm=true applies, which tells the agent the safe call order. It does not state when to choose this tool over other audience-creation siblings, 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_tiktok_pixelCreate TikTok PixelAInspect
Creates a TikTok conversion PIXEL. Without a pixel you cannot optimise for conversions (CONVERT) or build website audiences — on a fresh account this is the first thing to set up. After creating it, install the pixel code on the site (or send events server-side with send_tiktok_conversion_event). confirm=false previews, confirm=true creates.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, idempotent=false, so safety is largely covered. The description adds genuinely new behavioral context beyond that: the confirm=false dry-run/staging mode and confirm=true commit, plus the post-creation install requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and necessity, then next steps, then the confirm flag semantics. Dense and useful, though the em-dash clauses and parenthetical make it slightly longer than strictly needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers purpose, prerequisites, follow-on steps, and the confirm preview behavior, which is sufficient for an agent to invoke this three-parameter mutation correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries extra burden. It explains confirm's preview-vs-create semantics well, but says nothing about advertiser_id or name, leaving a third of the parameters undocumented anywhere. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a TikTok conversion PIXEL') and immediately distinguishes it from siblings by naming the listener/consumer tools (send_tiktok_conversion_event, and implicitly list_tiktok_pixels). An agent can route to it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context ('on a fresh account this is the first thing to set up') and a follow-on action (install code or send events server-side). It stops short of explicit exclusions or naming a sibling to prefer instead, so it is clear guidance rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_trial_siteCreate Free Trial WebsiteDestructiveInspect
Creates a free trial website on a xxx.kriptap.com subdomain — no plan or payment needed. The account gets its own isolated server. The trial auto-deletes after 3 days. One free trial per account. To keep a site permanently, upgrade to a paid server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_website_audienceCreate Website AudienceAInspect
Creates a rule-based remarketing audience from website visitors (by page URL). string_operator: CONTAINS | EQUALS | STARTS_WITH | ENDS_WITH. membership_days = membership duration, lookback_days = look-back window. confirm=false → dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| customer_id | Yes | ||
| url_contains | Yes | ||
| lookback_days | No | ||
| membership_days | No | ||
| string_operator | No | CONTAINS |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and the description adds a genuinely non-obvious behavior beyond them: the confirm=false dry-run mode. It still omits whether the write is reversible, whether duplicate names conflict, or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the purpose and then parameter semantics; no filler. The colon-separated terse style is cryptic in places but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the dry-run and key params are covered. The gap is platform disambiguation and the absence of guidance on when to prefer this tool over the platform-specific audience-creation siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it partially does: it supplies the string_operator enum values (absent from the schema) and defines membership_days, lookback_days, and confirm. It leaves name, customer_id, and url_contains undefined, so a third of the parameters remain opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb + resource: creates a rule-based remarketing audience scoped to website visitors by page URL. However it never names the ad platform, so an agent cannot tell it apart from create_meta_website_audience or create_microsoft_remarketing_list 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It hints at workflow via 'confirm=false → dry-run preview', which implies a preview-then-commit pattern, but there is no when-to-use guidance and no explicit routing to the platform-specific audience-creation siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_gtm_containerDelete GTM ContainerADestructiveInspect
DELETES an entire GTM container permanently (IRREVERSIBLE — removes all its tags/triggers/variables/versions). SAFETY: confirm=false → preview only (nothing deleted); confirm=true → deletes. container = 'GTM-XXXX' / container name / full path (list it first with list_gtm_containers).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| confirm | No | ||
| container | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds the specific consequence they don't convey: permanent/IRREVERSIBLE destruction and exactly what is removed (tags, triggers, variables, versions). The confirm=false dry-run vs confirm=true real-deletion semantics are a valuable behavioral disclosure beyond the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, all-caps front-loading of the destructive action, then safety/workflow, then parameter format. No filler; every clause adds operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the annotations plus description cover the safety profile, irreversibility, preview mode, and parameter format. Only the undocumented account parameter leaves a small completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden, and it does well: it documents the accepted container value formats ('GTM-XXXX', name, full path) and the confirm flag's preview/execute meaning. It leaves the account parameter entirely unexplained, which keeps it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('DELETES an entire GTM container') and scopes it explicitly ('entire ... all its tags/triggers/variables/versions'), which cleanly distinguishes it from the sibling delete_gtm_entity that removes individual entities. An agent can tell the two apart without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete workflow: preview with confirm=false, then delete with confirm=true, and a prerequisite to list the container first via list_gtm_containers. It stops short of explicitly naming the sibling alternative (delete_gtm_entity) as the non-container path, so it is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_gtm_entityDelete GTM EntityADestructiveInspect
DELETES a GTM tag / trigger / variable / workspace by its full path (IRREVERSIBLE). kind = tag|trigger|variable|workspace. Get the path from list_gtm_tags/triggers/variables/workspaces. SAFETY: confirm=false → preview; confirm=true → deletes. (For a whole container use delete_gtm_container; the container's Default Workspace can't be deleted.)
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| path | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false; the description goes beyond them by spelling out irreversibility and the confirm=false preview / confirm=true execute gate, which is the critical behavioral contract for a delete. It also discloses the Default Workspace protection rule, a real constraint the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verb and resource, then packs path sourcing and the safety toggle into compact fragments with zero filler. Every clause (kind values, list-tool sourcing, confirm gate, container exclusion) carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the remaining gaps for a destructive tool: irreversibility, dry-run vs execute, param sourcing, and the sibling alternative. 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.
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 load and does: it enumerates the allowed `kind` values despite no enum in the schema, explains that `path` is the full path sourced from the list tools, and defines the `confirm` toggle's semantics. All three parameters gain meaning not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (DELETES), the resource class (GTM tag/trigger/variable/workspace), the keying mechanism (full `path`), and flags irreversibility. It explicitly separates itself from delete_gtm_container, so an agent can route between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the prerequisite for obtaining `path` (list_gtm_tags/triggers/variables/workspaces), names the alternative for whole-container deletion, and states an exclusion (the container's Default Workspace can't be deleted). When-to-use, when-not-to-use, and the alternative are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_linkedin_campaignDelete LinkedIn CampaignADestructiveInspect
Deletes a LinkedIn campaign (permanent if DRAFT; otherwise marked for deletion; reporting data is preserved). confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds rich behavior beyond the annotations: it discloses that deletion is permanent only for DRAFT campaigns, that non-draft campaigns are merely marked for deletion, and that reporting data is preserved. These are exactly the consequences an agent needs to know before invoking a destructive tool, and they go well past the destructiveHint=true annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with parenthetical specifics; every clause earns its place by conveying a distinct behavioral fact (conditional permanence, soft-delete fallback, data preservation, preview flag). No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values and the preview response need not be described. The description covers the conditional deletion semantics thoroughly. Minor gaps remain around required IDs or permissions, but annotations (openWorldHint, destructiveHint) cover the safety profile adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains the confirm parameter ('confirm=false = preview'), which covers the one non-obvious param; account_id and campaign_id are self-explanatory by name. It compensates partially but leaves those two identifiers undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Deletes a LinkedIn campaign'), which is unambiguous and distinguishable from siblings like delete_linkedin_campaign_group or delete_linkedin_creative by the resource named. It does not explicitly contrast with adjacent tools such as pause_campaign or update_campaign_status, but the resource specificity carries most of the routing weight.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There's no explicit when-to-use vs alternatives guidance (e.g., versus pausing or updating status). However, the 'confirm=false = preview' note gives a concrete usage behavior for a dry run, which is a useful implicit guideline. Overall usage context 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.
delete_linkedin_campaign_groupDelete LinkedIn Campaign GroupADestructiveInspect
Deletes a LinkedIn campaign group (permanent if DRAFT; otherwise marked for deletion). confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| group_id | Yes | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description goes further by disclosing state-dependent behavior: permanent removal for DRAFT groups versus a soft 'marked for deletion' outcome otherwise, plus the confirm=false preview gate. That is exactly the extra context an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact, front-loaded sentences with no filler; the destructive behavior leads and the parameter nuance is parenthetical. Every clause conveys actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. The description supplies the permanence and preview semantics, but omits whether confirm=true is required to execute and any permission requirements. Nearly complete for a three-parameter mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains the semantics of confirm (false = preview), but says nothing about account_id or group_id beyond their self-evident names. Partial compensation for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Deletes a LinkedIn campaign group'), and the resource name alone separates it from the sibling delete_linkedin_campaign. An agent can identify exactly what object type is affected 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clarifies the safe-preview path ('confirm=false = preview'), which is genuinely usage-relevant, but never states when to use this versus update_linkedin_campaign_group or list_linkedin_campaign_groups, nor any prerequisite. Usage 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.
delete_linkedin_creativeDelete LinkedIn CreativeADestructiveInspect
Deletes a creative (ad) — permanent if DRAFT, otherwise marked for deletion. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| creative_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, but the description adds genuinely new behavior: deletion is permanent for DRAFT creatives and only 'marked for deletion' otherwise, plus a preview mode. This is exactly the kind of nuance an agent needs before invoking an irreversible operation; only auth/rate-limit context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact clauses with zero filler; the destructive/permanence condition and the preview switch are both front-loaded. Every phrase carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the mutation's severity, soft-vs-hard delete distinction, and preview toggle. It omits dependency/permission context and does not explicitly state that confirm=true is required to execute the deletion.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 3 parameters, so the description must compensate. It explains the semantically non-obvious 'confirm' flag (false = preview) but says nothing about account_id or creative_id beyond self-evident naming, leaving the coverage gap partly unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Deletes a creative (ad)') and immediately distinguishes the tool from generic deletes by explaining the DRAFT-vs-published behavior. It does not name sibling alternatives such as update_linkedin_creative_status, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'confirm=false = preview' clause gives real usage guidance about a safe dry-run mode, which is the main when-to-use signal. However, it never says when to prefer this over update_linkedin_creative_status (e.g., pausing) or what prerequisites exist, so routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_meta_adDelete Meta AdADestructiveInspect
Deletes a Meta ad. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| confirm | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavioral context by revealing the confirm=false preview/dry-run mode, which annotations do not expose, but it omits whether deletion is permanent or recoverable and whether scoped permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, front-loaded with the action and immediately followed by the mode switch — nothing wasted. It is arguably clipped to the point of dropping prerequisites, but it is efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations carry the destructive/non-idempotent profile. The description covers the one non-obvious behavior (preview via confirm=false); it is slightly thin on consequences of a real delete but adequate for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain the pivotal 'confirm' parameter semantics (false = preview), which is not in the schema, but account_id and ad_id are left wholly undocumented even though they are required identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Deletes) and resource (a Meta ad), which cleanly separates it from delete_meta_adset, delete_meta_campaign, and delete_meta_audience by name alone. It does not explicitly contrast itself with those siblings, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The preview mode ('confirm=false = preview') gives the agent a real usage cue, effectively describing the safe dry-run path. However, it never states when to prefer this over alternatives like pausing via update_ad_status or deleting a parent campaign, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_meta_adsetDelete Meta Ad SetBDestructiveInspect
Deletes a Meta ad set. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| adset_id | Yes | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is carried by structured data. The description adds the dry-run/preview semantics, which is genuinely useful and not in the annotations, but it omits cascade effects (does deleting an ad set remove its ads?) and what confirm=true triggers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler and the action stated first. It is telegraphic rather than padded, though the fragment 'confirm=false = preview' is terse enough to risk ambiguity about what preview returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and annotations carry the destructive/idempotency profile. Still, for a high-blast-radius delete, the absence of any note on cascade effects or irreversibility leaves a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it explains the non-obvious confirm flag's dual preview/execute role. It leaves adset_id and account_id undocumented, though both are self-describing by name and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Deletes a Meta ad set'), so the action is unambiguous. It does not explicitly distinguish itself from the numerous sibling delete tools (delete_meta_ad, delete_meta_campaign, delete_meta_audience), though the resource name does most of that work implicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'confirm=false = preview' gives real conditional guidance on how to invoke it safely, which is above the bare minimum. It still says nothing about prerequisites (e.g., whether dependent ads must be removed first) or when deletion is preferable to pausing via update_meta_adset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_meta_audienceDelete Meta AudienceADestructiveInspect
DELETES a Meta custom/lookalike audience — the cleanup for lists built by mistake, duplicates, or audiences you must remove on a privacy request. We could create audiences but never delete them, so bad ones piled up permanently. NOTE: an audience still attached to an ad set cannot be deleted; detach it first. audience_id from list_meta_audiences. confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| audience_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds real operational context beyond that: the ad-set-attachment blocker that will cause failure and the confirm=false preview/dry-run behavior. It does not state whether deletion is permanent/irreversible, which is a minor residual gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its key constraint, and most sentences are dense and actionable. The backstory sentence ('We could create audiences but never delete them, so bad ones piled up permanently') is motivational filler that does not help the agent act and could be cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the destructive nature is covered by annotations. Combined with the precondition, preview mode, and ID source, the definition is nearly complete for a two-parameter destructive call; only reversibility/error behavior is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and largely meets it: it identifies the source of audience_id ('from list_meta_audiences') and explains the non-obvious semantics of confirm ('confirm=false previews'). It does not specify the ID format or explicitly state that confirm=true commits the deletion, leaving slight inference required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('DELETES a Meta custom/lookalike audience') and narrows scope to Meta custom/lookalike lists, which separates it from delete_meta_ad, delete_meta_campaign, and delete_microsoft_audience. An agent can identify the target 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use scenarios (mistaken builds, duplicates, privacy-request removal) and an explicit when-NOT precondition: an audience attached to an ad set cannot be deleted and must be detached first. It also routes the agent to list_meta_audiences for obtaining the ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_meta_campaignDelete Meta CampaignADestructiveInspect
Deletes a Meta campaign (reporting data remains readable in Meta). confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring destructiveHint=true and readOnlyHint=false, the description adds useful context beyond the structured fields: reporting data remains readable in Meta, and confirm=false provides a safe preview. It does not mention permissions or irreversibility, but the core destructive behavior is well supplemented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences, front-loads the operation, and then adds the most important behavioral caveats. Every phrase earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with annotations covering safety hints and an output schema covering return values, the description provides the essential behavioral context: deletion scope, retained reporting data, and preview mode. The main gap is parameter-level detail, but the required IDs are largely self-explanatory.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains only confirm=false as preview mode, while the two required parameters account_id and campaign_id receive no added semantics beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: deleting a Meta campaign. It distinguishes the target from sibling delete tools such as delete_meta_ad, delete_meta_adset, and delete_meta_audience by naming the entity type directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies use when a Meta campaign should be deleted and explains the confirm=false preview mode. However, it gives no explicit when-to-use guidance versus alternatives like pause_campaign or update_meta_campaign, and names no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_microsoft_audienceDelete Microsoft AudienceADestructiveInspect
Deletes a Microsoft audience (remarketing list, etc.). confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| audience_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so safety is covered. The description adds genuinely new behavioral context beyond the annotations: a dry-run/preview mode via confirm=false, which an agent would not otherwise know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and the destructive object, followed immediately by the confirmation semantics. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the destructive/non-idempotent profile. The preview-vs-apply detail is the key missing piece and it is present; only minor gaps remain (permission requirements, whether deletion is reversible, customer_id meaning).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description carries the burden. It fully explains the non-obvious 'confirm' flag but leaves customer_id (optional, defaults to empty) and the two ID parameters undocumented; the ID names are largely self-explanatory, which keeps this at baseline rather than below it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (deletes a Microsoft audience) and clarifies the object with '(remarketing list, etc.)', which distinguishes it from delete_microsoft_campaign. It does not explicitly contrast with other delete_* siblings, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The confirm=false preview / confirm=true applies contract effectively tells the agent how to invoke it safely, but there is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as pausing or removing targeting instead of deleting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_microsoft_campaignDelete Microsoft CampaignADestructiveInspect
Deletes a Microsoft campaign (irreversible). confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so safety is partly covered. The description adds genuinely new behavior: deletion is irreversible and there is a two-phase preview/apply gate via confirm. It still omits cascade effects (ad groups, ads, keywords) and any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, both earning their place, with the destructive consequence and the confirm gate front-loaded. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an irreversible delete with 0% schema coverage, the description covers the critical irreversibility and confirm semantics, and an output schema exists so return values need no explanation. However, cascade scope of the deletion and the undocumented IDs leave meaningful gaps for a mutation this dangerous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It explains the non-obvious `confirm` parameter well (preview vs. apply) but says nothing about account_id, campaign_id, or customer_id, leaving three of four parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Deletes a Microsoft campaign") that cleanly separates it from sibling deletes like delete_meta_campaign and delete_linkedin_campaign. It is clear, though it does not explicitly call out those siblings or the scope of what is deleted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "confirm=false = preview, confirm=true applies" sentence gives invocation context and implies a safe dry-run-then-apply workflow. It stops short of when-to-use guidance, e.g. when to delete vs. pause via update_microsoft_campaign_status, or prerequisites before deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_site_zipDeploy Site From ZIPADestructiveInspect
Deploy an ENTIRE website from a .zip onto the user's AI Server in one step. Give the zip as zip_base64 (a file the user dropped into chat — base64-encode it; only practical up to a few MB) OR zip_url (a public link, fetched SERVER-SIDE with no chat cost — the way to do LARGE files up to 300 MB). zip_url accepts a Google Drive or Dropbox SHARE link directly (the file must be shared 'anyone with the link'); it is auto-converted to a direct download and Drive's large-file confirmation is handled — so the user just uploads to Drive and pastes the link. It uploads the zip to the user's own isolated server, unzips it and PUBLISHES it live at /data/site over HTTPS.
If the zip is ALREADY a static site (index.html at the root) it is published as-is — instant, no
build. If it is a source project it is BUILT on the server and the static output is published:
Next.js → STATIC EXPORT (output:'export' is injected automatically) from out/; Vite → dist/;
Create-React-App → build/. Sites are served statically: NO Node/SSR process runs at runtime, so
Next.js features that REQUIRE a live server are NOT supported (getServerSideProps/SSR, API routes
/api/*, ISR/revalidate, middleware, Server Actions, next/image default optimization). If the
project needs those, the static build fails and this returns a clear explanation; the fix is to
make the app statically exportable or use a runtime host. Everything under /data/site is REPLACED
(a version snapshot is taken first, so site_restore can undo it). Build cap ~10 min, zip ≤ 300 MB
(for anything above a few MB use zip_url — a 300 MB base64 will not fit the chat context).
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| server | No | ||
| zip_url | No | ||
| zip_base64 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far beyond the annotations: it discloses that /data/site is fully REPLACED with a version snapshot taken first (matching destructiveHint=true), that site_restore can undo it, the ~10 min build cap, the 300 MB limit, the server-side fetch behavior, and the Google Drive/Dropbox share-link auto-conversion. It does not state required permissions or where the success/failure result surfaces, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The paragraph is long but front-loaded with the core action, then the input-mode tradeoff, then build behavior and constraints. Nearly every sentence adds decision-relevant information; the unsupported-Next.js-feature list is lengthy but justified given the failure mode it prevents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive deploy tool with an output schema (so return values need no explanation), it covers inputs, side effects, rollback, size/time limits, and build semantics. The remaining gap is the undefined `site` and `server` parameters, which an agent cannot infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry all parameter meaning. It explains zip_url and zip_base64 in depth (formats, size limits, share-link conversion), but never mentions the `site` or `server` parameters at all, leaving half the inputs ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource ('Deploy an ENTIRE website from a .zip onto the user's AI Server in one step') with a clear scope marker ('ENTIRE'). It is easily distinguished from the many site siblings (add_site, create_trial_site, scaffold_site, site_rebuild) by its ZIP-in, publish-to-/data/site flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection criteria between the two input modes: zip_base64 for small chat-dropped files, zip_url for large files up to 300 MB because it is fetched server-side. It also states when the tool is NOT appropriate (projects needing SSR/API routes/ISR) and what the fix is.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describeDescribe Platform CapabilitiesARead-onlyIdempotentInspect
Explains what the unified read tools can do: with no argument it lists every platform get_report / list_entities support; with a platform it returns that platform's account-id field, the row levels and the breakdown dimensions it accepts, plus the entity types list_entities can list. Call this whenever you are unsure which level/breakdown/entity name to pass. Read-only, costs nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the re-stated 'Read-only, costs nothing' adds little. However, the description usefully discloses what the call actually returns in each mode — account-id field, row levels, breakdown dimensions, entity types — which is genuine behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and packed into two sentences with no filler. The first sentence is somewhat run-on, but every clause (both modes, the specific outputs, the use cue) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter discovery tool with an output schema and full annotation coverage, the description covers both invocation modes, the content returned, and the motivating use case. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'platform' parameter, so the description carries the burden — and it does: the empty-string default is explained as 'lists every platform', while a supplied value returns that platform's account-id field, levels, and breakdown dimensions. That is the key semantics an agent needs, though accepted platform values are not enumerated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it is a capability-discovery tool for the unified read tools, and it names the exact siblings whose behavior it describes (get_report, list_entities). An agent can distinguish it from those siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Call this whenever you are unsure which level/breakdown/entity name to pass.' It also explains the two invocation modes (no argument vs. platform argument). It does not state any when-not-to-use condition, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detach_linkedin_conversionDetach LinkedIn ConversionADestructiveInspect
Removes a conversion tracking rule from a LinkedIn campaign (ad set) — the inverse of attach_linkedin_conversion. The rule itself is NOT deleted; only this campaign stops reporting/optimizing for it. This is how you clean up a badly scoped rule (e.g. a site-wide 'All Pages' conversion that fires on every page and inflates conversion counts).
WARNING: on a MAX_CONVERSION ('Maximum Delivery' automated bidding) campaign, detaching the LAST conversion can stop delivery — LinkedIn requires an associated conversion for that bid strategy. Check list_linkedin_conversions → associated_campaigns first. conversion_id: the numeric id from list_linkedin_conversions. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| conversion_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=false, but the description adds genuinely new behavioral context: the conversion rule survives detachment (only the campaign stops reporting/optimizing), automated bidding can halt delivery, and confirm=false yields a preview. That is exactly the kind of consequence detail annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then scoping clarification, then a clearly marked WARNING block, then per-parameter notes. Dense and every element is useful, though the '(ad set)' parenthetical and the illustrative example add a little length that could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers prerequisites, safety consequences, preview mode and the inverse relationship to a sibling. Nothing an agent needs to invoke this mutation safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load; it explains conversion_id ('the numeric id from list_linkedin_conversions') and confirm ('false = preview'), which are the two non-obvious parameters. account_id and campaign_id are left implicit, but they are self-evident within LinkedIn tooling, so the compensation is substantial though not total.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Removes a conversion tracking rule from a LinkedIn campaign (ad set)') and explicitly positions itself as the inverse of attach_linkedin_conversion. The 'rule itself is NOT deleted' clause crisply distinguishes it from a deletion tool such as delete_linkedin_campaign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case ('clean up a badly scoped rule, e.g. a site-wide All Pages conversion that inflates counts'), a prerequisite check (list_linkedin_conversions -> associated_campaigns first) and a warning about the MAX_CONVERSION case where detaching the last conversion stops delivery. When-to-use, when-not-to-use and the alternative are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_chatgpt_ads_deliveryDiagnose ChatGPT Ads DeliveryARead-onlyIdempotentInspect
Explains why ChatGPT Ads are not getting impressions: ranked findings with the evidence, the fix and the tool that applies it.
Follows OpenAI's own troubleshooting order: account (status, brand review, account integrity review, account spend limit), campaigns (status, schedule, budget left vs spend, locations and platforms, conversion events, serving issues), ad groups (status, bid strategy vs budget type, the bid_too_low warning — which OpenAI does not raise within 24 hours of an ad-group edit, so a fresh 'false' is reported as not yet evaluable with the exact time it becomes meaningful —, context-hint count and language vs the targeted country, orphan groups), ads (status, review status and reason, serving issues explained, landing page reachability and cross-domain redirects, generic homepage destinations), then a 7-day hourly delivery timeline that detects every campaign stopping in the same hour (an account-level cause such as a spend limit or prepaid balance). Health and clinic advertisers get a policy finding: those categories need manual advertiser approval and are limited to pilot countries, which no bid, budget or hint change fixes. Severity order: blocker > policy > warning > info. Read-only; campaign_id narrows it to one campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| campaign_id | No | ||
| check_landing_pages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, but the description adds substantial behavioral detail: the OpenAI troubleshooting order, the severity ranking (blocker > policy > warning > info), the bid_too_low 24-hour non-evaluability nuance, and the health/clinic policy finding that no bid change fixes. These are non-obvious traits an agent could not infer 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and every sentence carries concrete specificity rather than filler. It is a dense single block that would scan better as a list, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be detailed, and the description still covers diagnostic scope, ordering, severity, and known limitations. It is complete enough for an agent to invoke it correctly, with the only gap being the undocumented `account` parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains `campaign_id` (narrows to one campaign) but says nothing about `account` (blank default) or `check_landing_pages` (true default), leaving two of three parameters undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+scope: diagnosing why ChatGPT Ads are not getting impressions, and states the output shape (ranked findings with evidence and fix). This is clearly distinguishable from siblings like chatgpt_ads_status or chatgpt_ads_insights, which report state rather than diagnose delivery failure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger context (ads not getting impressions) and notes that `campaign_id` narrows the scope to a single campaign. However, it never explicitly names alternative tools or when-not-to-use cases against siblings such as chatgpt_ads_status or account_audit, leaving the routing implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dismiss_recommendationsDismiss RecommendationADestructiveInspect
Dismisses one or more Google Ads recommendations. resource_names = comma-separated list of recommendation resource_names (obtained from list_recommendations). Reversible (the recommendation may reappear later). confirm=false → dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| customer_id | Yes | ||
| resource_names | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false. The description adds important behavioral context beyond annotations: the action is reversible because the recommendation may reappear, and confirm=false runs as a dry-run preview.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the operation, then key parameter semantics and behavioral notes. Every sentence adds information with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, output schema, and existing annotations, the description is nearly complete. It covers the operation, ID source, reversibility, and dry-run behavior, though customer_id is not described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains resource_names as a comma-separated list from list_recommendations and explains confirm=false as dry-run, but it leaves the required customer_id parameter undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Dismisses one or more Google Ads recommendations.' This clearly distinguishes it from the sibling apply_recommendation and implies the list_recommendations workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent that resource_names are obtained from list_recommendations and that confirm=false produces a dry-run preview. It gives clear usage context but does not explicitly name alternatives or when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_linkedin_leadsDownload LinkedIn LeadsARead-onlyIdempotentInspect
Downloads the leads submitted through LinkedIn Lead Gen Forms (name, email, phone and
every other answer), so they can be worked or exported. form_id narrows it to one form
(from list_linkedin_lead_forms); since/until are YYYY-MM-DD dates; test_only=true returns
only the test leads generated from Campaign Manager. Needs LinkedIn's Lead Sync API access —
if the account has not been reconnected since that permission was granted, the tool says so.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| until | No | ||
| form_id | No | ||
| test_only | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it requires LinkedIn's Lead Sync API access and warns that the tool reports when the account has not been reconnected since the permission was granted. It stops short of describing pagination or what limit=200 means 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A tight paragraph that front-loads what is downloaded, then parameter meanings, then the access prerequisite. Every clause earns its place and nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return formatting need not be explained, and the description still covers data scope, filtering, and the permission/reconnection failure mode. Only the limit/pagination dimension is left unaddressed for a 6-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it clarifies form_id's source, the YYYY-MM-DD format for since/until, and the meaning of test_only. It leaves 'limit' (default 200) undefined, which is the one meaningful gap among the non-obvious parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('downloads the leads submitted through LinkedIn Lead Gen Forms') and enumerates the payload (name, email, phone, every other answer). It is immediately distinguishable from list_linkedin_lead_forms and from its download_meta_leads / download_tiktok_leads siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear routing context: form_id comes 'from list_linkedin_lead_forms', and test_only=true is scoped to leads generated from Campaign Manager. It does not state when *not* to use this tool or address overlap with list_lead_form_submissions, so it falls short of explicit alternatives/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_meta_leadsDownload Meta Lead AnswersARead-onlyIdempotentInspect
Downloads the answers people submitted through a Meta instant form — name, phone, email and every custom question, with the ad, ad set and campaign each lead came from.
form_id comes from list_meta_lead_forms. since (YYYY-MM-DD) returns only newer leads, which is how you pull just what arrived since the last check. This is the Meta counterpart of download_tiktok_leads. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| form_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is fully covered; the description's closing 'Read-only' merely restates it. It adds some content-level context (what lead fields and attribution come back, and the recency behavior of 'since'), but return values are also covered by the output schema, so net new disclosure is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and free of padding; the second sentence efficiently bundles parameter sourcing and the incremental-pull idiom. Slight redundancy in the dangling 'Read-only' clause, but overall tight and well-ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a 3-param schema (one required), full annotations, and an output schema that covers return values, the description supplies enough to invoke correctly: form_id source, since semantics, and the returned data shape. Only the un-documented limit param and lack of pagination notes keep it from being exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load: it documents where form_id comes from (list_meta_lead_forms) and the format/behavior of since (YYYY-MM-DD, returns only newer leads). The limit parameter and its default of 100 receive no explanation, leaving one of three params undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Downloads the answers people submitted through a Meta instant form') and enumerates the returned content (name, phone, email, custom questions, plus ad/adset/campaign attribution). It also distinguishes itself from siblings by naming the tiktok counterpart and the list_meta_lead_forms source tool, so an agent can separate it from the many other lead tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Routes the agent to list_meta_lead_forms for obtaining form_id and explains the incremental-pull pattern ('since returns only newer leads, which is how you pull just what arrived since the last check'). No explicit exclusions or when-not-to-use guidance, but the primary usage path is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_tiktok_leadsDownload TikTok LeadsARead-onlyIdempotentInspect
Downloads the actual leads collected by TikTok lead-gen or messaging ads, with each lead's answered fields. lead_source: INSTANT_FORM (form ads — page_id REQUIRED, from list_tiktok_lead_forms) or DIRECT_MESSAGE (messaging ads). Optional ad_id narrows to one ad; start_date/end_date are YYYY-MM-DD. Returns up to limit leads (hard cap 1000) with a truncated flag — leads carry PII so the result is bounded.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | No | ||
| limit | No | ||
| page_id | No | ||
| end_date | No | ||
| start_date | No | ||
| lead_source | No | INSTANT_FORM | |
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent profile, so the bar is lower, yet the description adds real behavioral context: results carry PII, the return is bounded, there is a hard cap of 1000, and a `truncated` flag signals truncation. This is exactly the kind of beyond-annotation disclosure the tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then constraints in roughly four dense sentences with no filler. The mode/parameter clauses are packed tightly but remain readable and every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be detailed, and the description still flags the `truncated` semantics. Given 0% schema description coverage across 7 parameters, the near-complete parameter coverage makes this adequate; only advertiser_id is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does: it explains lead_source values, the page_id requirement conditioned on INSTANT_FORM, ad_id narrowing, the YYYY-MM-DD date format, and the limit hard cap of 1000. Only advertiser_id is left unexplained, a minor gap against 7 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Downloads the actual leads collected by TikTok lead-gen or messaging ads') plus the differentiating detail 'with each lead's answered fields'. This clearly separates it from siblings like list_tiktok_lead_forms (enumerates forms) and get_tiktok_lead_form_fields (enumerates field definitions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes between the two modes: INSTANT_FORM requires page_id sourced from list_tiktok_lead_forms, while DIRECT_MESSAGE covers messaging ads, and ad_id narrows to a single ad. It gives selection conditions but no explicit 'when not to use this' or comparison against download_meta_leads/download_linkedin_leads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_gtm_builtin_variablesEnable GTM Built-in VariablesADestructiveInspect
ENABLES GTM built-in variables (Click URL, Form ID, Scroll Depth, Video Percent, Page Path…). These are OFF by default and a trigger/tag that references a disabled built-in variable silently never fires — this is the usual cause of "my click/scroll/form trigger doesn't work". types = comma-separated, e.g. 'clickUrl,clickClasses,formId,scrollDepthThreshold,videoPercent'. Common: pageUrl,pageHostname,pagePath,referrer,clickElement,clickClasses,clickId,clickTarget,clickUrl,clickText,formElement,formClasses,formId,formTarget,formUrl,formText,scrollDepthThreshold,scrollDepthUnits,scrollDirection,videoProvider,videoStatus,videoUrl,videoTitle,videoPercent,videoDuration,videoCurrentTime,errorMessage,errorUrl,errorLine,historySource,newHistoryFragment,oldHistoryFragment. confirm=false previews. Publish afterwards with publish_gtm_container.
| Name | Required | Description | Default |
|---|---|---|---|
| types | Yes | ||
| confirm | No | ||
| container | No | ||
| workspace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readonly, destructive, and non-idempotent behavior, so the description adds useful context beyond them: these variables are OFF by default, disabling causes silent failure, confirm=false previews, and publishing is required afterward. It does not discuss permissions, reversibility, or the risk of enabling all variables, leaving a small transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and failure impact before the workflow details. The unformatted comma-separated list of 28 built-in variable names is long but earns its place because the schema provides no type description, though it could be more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description covers why and how to use the tool plus the publish dependency, but container and workspace parameter semantics are absent, which is a minor completeness gap for an otherwise rich definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It thoroughly explains the required types parameter (comma-separated with examples and a common-variable list) and the confirm preview flag, but it omits any explanation of container and workspace, leaving two parameters semantically undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("ENABLES GTM built-in variables") and immediately lists examples, making clear it targets built-in variables rather than custom GTM variables. It is readily distinguishable from siblings such as create_gtm_variable or update_gtm_entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a strong usage scenario (disabled built-in variables silently prevent trigger/tag firing) and describes the preview workflow via confirm=false plus the follow-up publish_gtm_container step. It stops short of explicitly naming alternative tools or when not to use it, so it is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extension_asset_performanceExtension Asset PerformanceARead-onlyIdempotentInspect
Reports how each ad EXTENSION performs: sitelinks, callouts, the call button, images, structured snippets, business name and logo — impressions, clicks, cost and conversions per asset.
This answers "which sitelink actually gets clicked" and "how often is the call button used", which no other tool can: list_extension_assets returns configuration only, and rsa_asset_performance covers headlines and descriptions, not extension types. Returns two views — by_field_type is the account summary (one row per extension kind, so you can see at a glance that sitelinks earn clicks while structured snippets do not) and assets is the per-asset detail with each sitelink's own link text or the phone number of a call asset.
days is the lookback window. campaign_id narrows to one campaign. field_type filters to one kind: SITELINK | CALLOUT | CALL | STRUCTURED_SNIPPET | AD_IMAGE | BUSINESS_NAME | BUSINESS_LOGO | PRICE | PROMOTION | MOBILE_APP. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| field_type | No | ||
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, and the description reinforces 'Read-only.' It adds real behavioral context by explaining the two return views (account-level by_field_type vs per-asset detail with link text or phone number), though it does not discuss pagination or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and the view breakdown before the filter details; every sentence carries information. It is on the long side, but the added sibling comparisons and view semantics justify the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only reporting tool with an output schema, the description covers scope, filters, and return structure adequately. The only gap an agent might need is pagination/limit behavior, which is minor given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and does well for days (lookback window), campaign_id (narrow to one campaign), and field_type (enumerates all valid kinds). It leaves limit (default 60) and customer_id unexplained, so the coverage is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (reports performance per ad extension type) and enumerates the extension kinds covered. It explicitly distinguishes itself from list_extension_assets (configuration only) and rsa_asset_performance (headlines/descriptions), so an agent can select it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete questions it answers ('which sitelink actually gets clicked', 'how often is the call button used') and names the two nearest siblings with the reason they don't cover this. The routing condition is explicit rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchGet Account DetailsARead-onlyIdempotentInspect
Expands a search result (id = 'platform:account_id') into details: account name, id, and fields like currency/status (OpenAI/ChatGPT connector fetch contract). Read-only. Returns: {id, title, text, url, metadata}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so 'Read-only' in the description is largely redundant. The id-format contract is the one piece of added behavior; the return shape it lists is already covered by the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core purpose front-loaded. The connector-contract parenthetical is jargon that adds little, but nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations and an output schema, the description covers the essentials: what it does, when to call it, and the id contract. Missing only edge behavior such as a not-found or invalid-id case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single `id` parameter has no schema description, but the description compensates by specifying the expected form ('platform:account_id') and its origin in a `search` result. That is a meaningful addition beyond the bare string type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource (expands a search result into account details) and enumerates the payload (name, id, currency/status), so an agent knows exactly what it returns. It differentiates from the `search` sibling by naming it as the prerequisite, though it does not distinguish itself from `describe`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a clear trigger: call this after `search` using the 'platform:account_id' value from that result. There is no explicit when-not or alternative-tool guidance, but the usage context is concrete rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_instagram_media_idInstagram Media Id FinderARead-onlyIdempotentInspect
Turns an Instagram POST or REEL LINK into the media id needed to advertise it, so nobody has to dig the id out by hand. Paste the URL — instagram.com/p/…, /reel/…, /reels/…, /tv/…, with or without the username prefix, query strings ignored — and get back: shortcode, media_pk (Instagram's INTERNAL key, decoded from the link), owner_username, permalink, thumbnail_url, is_reel, and when it can be resolved ig_media_id: the real ads-usable id you pass straight to create_meta_instagram_post_ad. READ THIS BEFORE PROMISING ANYTHING: media_pk is NOT the ads id. Meta's ad API accepts only the "media V2" id and that id CANNOT be computed from a link — verified live with ads_management: /{ig_user_id}/media, the media field expansion, business_discovery, /{media_pk} and instagram_oembed all return permission errors, and the public page source does not contain it either. So ig_media_id comes back only when this post has ALREADY been advertised from the ad account (the id is then read off that account's ad creatives) — pass account_id to enable that lookup. When it cannot be resolved, usable_for_ads=false and note/manual_path say exactly what to do instead, including the create_meta_video_ad fallback (new creative, faster, but the organic post's likes and comments do not carry over). The tool also checks OWNERSHIP: owned_by_connected_account=false means the link belongs to somebody else's Instagram account, which is the most common reason an Instagram post ad cannot be created at all.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| account_id | No | ||
| ig_user_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly/idempotent/openWorld), and the description adds substantial non-obvious context: media_pk is NOT the ads id, the Meta ad API only accepts the media V2 id, that id cannot be computed from a link (verified against multiple endpoints returning permission errors), and the ownership check that blocks most attempts. This is exactly the extra behavioral context annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical caveat is front-loaded with a direct imperative, and the return fields are enumerated. It is dense and longer than strictly necessary, but nearly every clause carries decision-relevant information, so it stays efficient despite its size.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a resolution tool with a complex failure mode, the description covers input formats, resolution conditions, ownership failure, and fallbacks, and enumerates key return fields even though an output schema exists. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden. It thoroughly documents the url parameter (accepted path shapes, with/without username prefix, query strings ignored) and account_id (pass it to enable the already-advertised id lookup). ig_user_id is only referenced obliquely in the verification narrative rather than defined as an input, a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (turns an Instagram post/reel link into a media id) with a clear downstream purpose. It distinguishes itself from siblings by naming create_meta_instagram_post_ad as the consumer and create_meta_video_ad as the fallback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when this tool helps (get the ads-usable id without manual digging), when the key output resolves (only when the post was already advertised from the account), and what to do otherwise (manual_path, create_meta_video_ad fallback). Alternatives and conditions are all named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fraud_scanScan for Click FraudADestructiveInspect
Scans the ad-click traffic captured by your fraud tag for click fraud / invalid traffic and
returns the most suspicious IP addresses, each scored 0-100 with reasons (repeat/velocity from one
IP, datacenter/hosting, Tor exit, known-malicious list, bot user-agent, high volume with zero
conversions). READ-ONLY — it does not block anything. Feed recommended_block_ips to
block_ip_addresses (approval-gated) to exclude them. Needs the tag installed first (fraud_setup).
CLICK LOOKUP (click log / click events / lead lookup, tıklama kaydı): pass gclid (from a form
lead or CRM), ip, or at (time of a suspicious lead, Europe/Istanbul, 'YYYY-MM-DD HH:MM', with
±window_minutes) to get the individual captured clicks — time (Istanbul + UTC), GCLID, IP,
user-agent, referrer, landing page — plus that IP's fraud score, so a fake lead can be matched
to its ad click and the IP excluded. Form contents are not captured by the tag.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | ||
| ip | No | ||
| days | No | ||
| gclid | No | ||
| customer_id | No | ||
| window_minutes | No | ||
| block_threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description asserts 'READ-ONLY — it does not block anything', while annotations declare readOnlyHint=false and destructiveHint=true. That is a direct conflict on both the read/write and destructive axes, which can mislead an agent about side effects. The rich detail about scoring reasons and prerequisites cannot offset a contradiction on the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core scan purpose and the read-only claim before the lookup mode, with no filler sentences. It is dense but long; the final sentence about form contents not being captured is useful, though the block is heavier than a strict 'every sentence earns its place' bar.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be restated, yet the description still summarizes what is returned (scored IPs, per-IP reasons, click records with time/GCLID/IP/user-agent/referrer/landing page). Prerequisite and workflow coverage are good; the gaps are the unspecified parameters (days, block_threshold, customer_id) and the annotation conflict.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and does explain actual usage for gclid (from a form lead or CRM), ip, at (Europe/Istanbul, 'YYYY-MM-DD HH:MM', with ±window_minutes), and window_minutes. However days, block_threshold, and customer_id are never explained, leaving three of seven parameters undefined anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: scans captured ad-click traffic for click fraud/invalid traffic and returns scored suspicious IPs. It also explicitly separates the click-lookup mode and names the sibling tools (block_ip_addresses, fraud_setup) it relates to, so an agent can tell it apart from other fraud/blocking tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives prerequisites (tag must be installed first via fraud_setup), the downstream workflow (feed recommended_block_ips to block_ip_addresses, which is approval-gated), and the trigger conditions for the lookup mode (matching a fake lead to its ad click via gclid/ip/at). This is explicit routing rather than implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fraud_setupFraud Tag SetupInspect
Sets up click-fraud (invalid traffic) tracking for a website. Returns a one-line tracking tag and a site key bound to the given domain. The tag records clicks that arrive from ads (landing URLs with gclid/gbraid/wbraid) so suspicious IP addresses can be reviewed later with fraud_scan. If the site is hosted on Opus Growth, install=true writes the tag into every page automatically; otherwise add the snippet to the of each page or through a Tag Manager Custom HTML tag. The reply includes how many ad clicks were captured in the last 24 hours and 7 days.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| domain | No | ||
| server | No | ||
| install | No | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
ga4_create_conversionCreate GA4 ConversionAInspect
Marks a GA4 event as a CONVERSION (key event) — e.g. 'generate_lead', 'purchase', 'sign_up'. Once marked, GA4 counts it as a conversion and it can be imported into Google Ads for bidding. counting: ONCE_PER_EVENT (default) | ONCE_PER_SESSION. property: see ga4_list_properties. SAFETY: confirm=false → preview; confirm=true → creates. Needs the analytics.edit scope (if you get a permission error, reconnect Google Analytics to grant edit access).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| counting | No | ONCE_PER_EVENT | |
| property | Yes | ||
| event_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), but the description adds the confirm=false preview / confirm=true execute gate, the required analytics.edit scope, and remediation for permission errors. This is exactly the behavioral detail beyond annotations that an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Multi-segment but front-loaded, leading with the core action before enumerations and the SAFETY note. The middle sentence on post-marking behavior is mildly verbose yet earns its place by explaining downstream impact; overall message density is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema present, the description covers the essentials: what it does, the preview/execute gate, auth scope, and parameter meanings. Return values are rightly omitted since the output schema exists; only the precise format expectations for event_name/property are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does for most: it defines the counting enum values (ONCE_PER_EVENT default | ONCE_PER_SESSION), explains the confirm flag's semantics, routes property to ga4_list_properties, and gives event_name examples. Only event_name and property lack precise format details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Marks a GA4 event as a CONVERSION (key event)' with concrete examples ('generate_lead', 'purchase', 'sign_up'). This clearly distinguishes it from read/list siblings like ga4_list_conversions, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use it (to promote an existing event into a counted conversion) and points to ga4_list_properties for resolving the property ID. It stops short of naming a competing/alternative tool or when-not-to-use conditions, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_create_custom_dimensionCreate GA4 Custom DimensionAInspect
Creates a GA4 custom dimension → makes an event/user parameter reportable in GA4. parameter_name = the event param key (e.g. 'plan', 'lead_source'); display_name = shown in reports; scope: EVENT | USER. property: see ga4_list_properties. SAFETY: confirm=false → preview; confirm=true → creates. Needs the analytics.edit scope (reconnect Analytics if you get a permission error).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | EVENT | |
| confirm | No | ||
| property | Yes | ||
| display_name | No | ||
| parameter_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the safety profile is partly covered. The description adds real value beyond them: the dry-run/preview confirm gate and the required analytics.edit scope with an error-recovery hint. It does not state what happens on re-creation (idempotency/duplicate 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads verb+resource+effect, then clusters parameter glosses, then SAFETY, then the auth requirement. Dense but every clause earns its place and no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a 5-param mutation tool with 0% schema coverage, the description supplies parameter semantics, the confirm safety flow, and the auth prerequisite — nothing the agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, and it does: it defines parameter_name ('the event param key'), display_name ('shown in reports'), scope (with the EVENT | USER enum values the schema lacks), property (routing to ga4_list_properties), and confirm (preview vs. create). All five parameters gain meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Creates a GA4 custom dimension') and immediately explains the effect ('makes an event/user parameter reportable in GA4'), which is the semantic distinction an agent needs. It also names the EVENT|USER scope and points to ga4_list_properties, separating it from the sibling list/report tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit operational guidance: 'confirm=false → preview; confirm=true → creates', plus a remediation path ('reconnect Analytics if you get a permission error') and a pointer to ga4_list_properties for resolving the property argument. It lacks an explicit when-not-to-use or named alternative among the other ga4_create_* tools, 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.
ga4_link_google_adsLink GA4 to Google AdsADestructiveInspect
LINKS the GA4 property to a Google Ads account → GA4 conversions/audiences flow into Ads for bidding + remarketing, and Ads cost/click data appears in GA4 reports. customer_id = 10-digit Ads id. property: see ga4_list_properties. SAFETY: confirm=false → preview; confirm=true → links. Needs analytics.edit + access to both the GA4 property and the Ads account (reconnect if permission error).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| property | Yes | ||
| customer_id | Yes | ||
| personalization | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it explains what the link actually changes in both systems, documents a two-phase preview/commit flow via confirm, names the required OAuth scope and account-level access, and offers recovery guidance for permission errors. The annotations only declare that this is a non-read-only, destructive, non-idempotent operation; the description supplies the why and the mechanics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then parameters, then safety, so an agent can skim in priority order. The telegraphic arrow/caps style is dense and every clause carries information, though the run-on middle sentence demands careful parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be described, and the annotations plus description jointly cover the safety profile, auth requirements, and parameter usage. The only material omissions are the unexplained personalization flag and any warning about re-linking an already-linked account, which matters given idempotentHint=false.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden and does well: customer_id is pinned to a 10-digit Ads id, property is routed to ga4_list_properties, and confirm's two states are explained. The remaining personalization boolean (default true) is never mentioned, leaving one of four parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb (LINKS) and both resources (GA4 property → Google Ads account), then spells out the concrete consequence: conversions/audiences flow to Ads and cost/click data flows back to GA4. That bidirectional effect distinguishes it from the many connect_* siblings and from ga4_list_ads_links, which merely read existing links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context (confirm=false previews, confirm=true commits) and prerequisites (analytics.edit plus access to both the property and the Ads account, with a reconnect hint on permission errors). It does not, however, explicitly contrast itself with siblings like connect_ga4/connect_google_ads or ga4_list_ads_links, so the agent must infer when this is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_ads_linksGA4 Google Ads LinksARead-onlyIdempotentInspect
Lists the Google Ads accounts already linked to this GA4 property. property: see ga4_list_properties.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds only the scoping nuance that these are pre-existing links, and says nothing about return format or behavior on a property with no links.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded, parameter hint trailing. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the annotations cover safety. For a one-parameter read-only list tool this is nearly complete; only a note on what an empty result means or property ID format is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden for the single 'property' parameter. The pointer to ga4_list_properties is genuinely useful for sourcing the ID, but no format, expected value shape, or example is given, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists') and resource ('Google Ads accounts already linked to this GA4 property'), and the word 'already linked' implicitly separates it from the linking sibling ga4_link_google_ads. It stops short of naming an alternative explicitly, so it is clear but not fully sibling-differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is 'property: see ga4_list_properties', which tells the agent how to obtain the required input but gives no when-to-use framing, no exclusions, and no comparison to related tools like ga4_link_google_ads or ga4_list_properties itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_conversionsGA4 ConversionsARead-onlyIdempotentInspect
Lists the GA4 conversions (key events) of a property — event name + counting method. property: see ga4_list_properties.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered. The description adds only the shape of the returned entries (event name + counting method), which the output schema largely covers; it says nothing about auth, pagination, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with a parenthetical clarification and a trailing pointer; nothing is padded. The return-value clause overlaps with the output schema, but it is short enough that the cost is negligible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with rich annotations and an existing output schema, the description covers purpose, scope, and the prerequisite for the one parameter. Only the property-value format is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter and schema description coverage is 0%, so the description must carry the load. It does add value by routing the agent to ga4_list_properties for the property value, but it never states the expected format (numeric property ID vs. display name), leaving a real ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Lists), resource (GA4 conversions / key events), and scope (of a property), plus what comes back (event name + counting method). It clearly belongs to the GA4 family, but it does not name any sibling it should be chosen over, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use / when-not-to-use statement or named alternative. The only guidance is the prerequisite pointer 'property: see ga4_list_properties', which implies the property must already be resolved but does not tell the agent when this listing is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_data_streamsGA4 Data StreamsARead-onlyIdempotentInspect
Lists a GA4 property's DATA STREAMS with their MEASUREMENT ID (G-XXXXXXX) — the value you need to build a GA4 configuration tag in Tag Manager, and the one piece that used to be unreachable, so a GA4 setup could never be finished from chat. Per stream: stream_id, type (web, iOS, Android), display name, measurement_id and the site URL it is bound to. property = a value from ga4_list_properties (a number or 'properties/123' both work); leave it empty and the connected/only property is used. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| property | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the trailing 'Read-only' is redundant. The description adds the default-property fallback behavior, which is genuinely useful, but discloses nothing about auth, rate limits, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the headline value are front-loaded and the per-stream field list is efficient. The 'one piece that used to be unreachable, so a GA4 setup could never be finished from chat' clause is slightly promotional padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations carrying the safety profile, the description only needs to cover usage and parameters, which it does well. Minor gap: no mention of filtering behavior or error cases for an invalid property.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% yet the single 'property' parameter is fully explained: it accepts either a bare number or 'properties/123', derives from ga4_list_properties, and falls back to the connected/only property when empty. This fully compensates for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (a GA4 property's DATA STREAMS), and names the key returned value (MEASUREMENT ID G-XXXXXXX). This clearly distinguishes it from siblings like ga4_list_properties and ga4_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the motivating context (building a GA4 configuration tag in Tag Manager) and where the 'property' input comes from (ga4_list_properties). It covers how to use it but does not explicitly name when-not or a competing alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_propertiesGA4 PropertiesARead-onlyIdempotentInspect
Lists the GA4 properties in the connected Google Analytics account. Pass a returned property to the other ga4_* tools — or you can give the property name/number directly (auto-matched).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds a genuinely useful behavioral note — that property identifiers are auto-matched when supplied directly — which goes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with purpose and followed by the actionable integration guidance. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value details are covered elsewhere. The description supplies purpose and cross-tool usage; only minor context (e.g., what a property record contains, multi-account behavior) is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The mention of property name/number formats relates to how identifiers are consumed by sibling tools rather than to this tool's own (empty) input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the GA4 properties in the connected Google Analytics account') and clearly distinguishes itself from the other ga4_* analytics tools by being the discovery/enumeration step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit about downstream usage: 'Pass a returned property to the other ga4_* tools — or you can give the property name/number directly (auto-matched).' This tells the agent when and how the output is consumed, though it doesn't state explicit exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_overviewGA4 OverviewARead-onlyIdempotentInspect
GA4 overview KPIs (last N days): sessions, users, new users, page views, conversions, engagement rate (%), avg. session duration (sec). property = from ga4_list_properties (property name/number also works).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, closed world). The description adds real value by disclosing the units of the returned metrics (engagement rate in %, session duration in sec) and the time-window semantics, but says nothing about rate limits, freshness/latency, or aggregation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is compact and front-loaded: the returned KPIs lead, followed by the property prerequisite. Slightly list-heavy, but every clause carries information, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to document return shape, yet listing the KPIs still aids selection. For a 2-parameter read-only tool with full annotations, the main remaining gap is the absence of routing guidance versus ga4_report and ga4_realtime.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden; it does clarify that 'days' is the trailing window and that 'property' accepts a name or number sourced from ga4_list_properties. However, it omits the accepted format for property (e.g. properties/12345), any bounds on 'days', and the 28-day default, so format-level guidance is still missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (GA4 overview KPIs) and enumerates the exact metrics returned, so an agent knows precisely what the tool yields. It does not, however, differentiate it from the other GA4 read siblings (ga4_report, ga4_realtime), leaving the agent to infer the distinction from the KPI list alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the fixed KPI list ('last N days' overview), and the property prerequisite points to ga4_list_properties. There is no explicit statement of when to prefer this over ga4_report for custom breakdowns or ga4_realtime for live data, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_realtimeGA4 Realtime UsersARead-onlyIdempotentInspect
GA4 REALTIME: the number of users currently active on the site + a country breakdown (last ~30 min). property = from ga4_list_properties (name or number also works).
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so safety is covered. The description adds genuinely non-structured context: the returned content (active user count + country breakdown) and the ~30-min freshness window. No auth or rate-limit notes, but the additions exceed the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the tool's identity and output shape, followed by the parameter sourcing hint. Slightly run-on with stacked parentheticals, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is optional (the description's mention of users + country breakdown is a bonus). With only one required parameter and rich annotations, the description is nearly sufficient; a brief ordering of self vs. ga4_overview/ga4_report would complete it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one required parameter and 0% schema description coverage, the description must carry the load, and it does: it tells the agent where to obtain the property (ga4_list_properties) and that a name or number is accepted. It does not name the parameter explicitly, but the syntax clarity is a real improvement over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and result ('number of users currently active on the site + a country breakdown'), with an explicit freshness window (last ~30 min). The 'realtime' scoping cleanly separates it from historical GA4 siblings like ga4_overview and ga4_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the 'realtime' framing and the ~30-min window, but there is no explicit when-to-use / when-not guidance versus ga4_overview, ga4_report, or other GA4 tools. The pointer to ga4_list_properties is a sourcing hint rather than a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_reportGA4 Breakdown ReportRead-onlyIdempotentInspect
GA4 breakdown report: sessions / users / key events (conversions) / total events by a dimension. dimension: channel (default) | source | medium | source_medium | page | landing_page | country | device | date | event. The channel/source breakdown answers 'which traffic converts'.
dimension='event' splits by EVENT NAME, which is the only way to isolate ONE key event. Without it conversions is the SUM of every key event in the property, so a property with purchase + form_sent + mql reports a single number that cannot be reconciled against what an ad platform counted — the most common check in any paid media audit. Use ga4_list_conversions to see which event names are key events.
dimension2 crosses a SECOND dimension with the first, e.g. dimension='event' + dimension2='source_medium' gives form submissions per traffic source. Rows then carry both dimension fields. events is the raw event count and conversions counts only key events, so on an event row the two differ whenever that event is not a key event.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| end_date | No | ||
| property | Yes | ||
| dimension | No | channel | |
| dimension2 | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gbp_complete_verificationComplete Business VerificationADestructiveInspect
Completes a PENDING verification by entering the PIN/code Google sent (postcard, SMS or email). verification = the verification resource name from gbp_verification_options history (locations/…/verifications/…). SAFETY: confirm=false → preview, confirm=true → submits the code.
| Name | Required | Description | Default |
|---|---|---|---|
| pin | Yes | ||
| confirm | No | ||
| verification | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, and the description adds real value on top: the pure dry-run behavior when confirm=false, the fact that a code is submitted on confirm=true, and where the verification resource must come from. It does not state reversibility or what happens after a successful submission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler; the core action leads, followed by parameter provenance and then the safety rule. Dense but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a 3-param destructive mutation with annotations, the description covers the action, required provenance, the PIN source, and the confirm gate; only post-success behavior and prerequisite tooling are omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden and largely does: it defines verification as the resource name from gbp_verification_options history, describes pin as the code delivered by postcard/SMS/email, and explains confirm's dry-run vs submit semantics. Pin format/length details remain unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Completes a PENDING verification by entering the PIN/code Google sent') and names the exact provenance of the required resource, which distinguishes it from the sibling gbp_start_verification and gbp_verification_options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'PENDING verification' precondition and the confirm=false preview vs confirm=true submit rule give clear when-to-use guidance. It does not explicitly route the agent to gbp_start_verification or gbp_verification_options as the prerequisite steps, so it falls short of full alternative/exclusion coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_create_locationCreate Business ListingAInspect
CREATES a NEW Google Business Profile listing (a new business on Maps/Search). title = the business's REAL name exactly as on its signage (adding keywords/city to the name violates Google's guidelines and gets listings suspended). address_lines = street address; city = town/district; region = province/state; country = 2-letter code (TR). primary_category: a category name ('Diş Kliniği') or id — see gbp_search_categories. hours = plain text ('Pzt-Cum 09:00-18:00; Pazar kapalı'). ELIGIBILITY (Google's rules, ignore them and the listing is suspended): the business must be real, must physically operate at that address (no PO box / virtual office), you must be authorised by the owner, and it must not already exist on Maps (search first — duplicates are a violation). The new listing is created UNVERIFIED and stays invisible on Maps until verified: run gbp_verification_options then gbp_start_verification. SAFETY: confirm=false (default) sends the data to Google for VALIDATION ONLY and creates nothing — it reports whether Google would accept it; confirm=true actually creates it.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | ||
| hours | No | ||
| phone | No | ||
| title | Yes | ||
| region | No | ||
| account | No | ||
| confirm | No | ||
| country | No | TR | |
| website | No | ||
| description | No | ||
| postal_code | No | ||
| address_lines | Yes | ||
| primary_category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read-only, non-idempotent, open-world write; the description goes further by disclosing that the listing is created UNVERIFIED and invisible on Maps until verified, that guideline violations cause suspension, and that confirm=false performs validation only with no creation — rich context beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then organised into eligibility and safety blocks. It is dense but nearly every clause adds actionable policy or format detail; the eligibility section could be marginally tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and annotations cover the safety profile. The description supplies enough for an agent to call this correctly (eligibility, verification chain, confirm semantics), though a few optional parameters remain unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage the description must carry the burden, and it explains the non-obvious params well: title constraints (no keywords/city), country format ('2-letter code (TR)'), primary_category name-or-id with a sibling reference, and hours free-text format. However, phone, website, description, postal_code, and account are left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('CREATES a NEW Google Business Profile listing (a new business on Maps/Search)'), immediately distinguishing it from gbp_update_location, gbp_create_post, and connect_business_profile 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the eligibility preconditions (real business, physical address, owner authorisation, no existing duplicate — 'search first'), abstention cases (PO box/virtual office), and the required follow-up workflow (run gbp_verification_options then gbp_start_verification). It also names when to use confirm=false vs confirm=true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_create_postCreate Business PostADestructiveInspect
Publishes an UPDATE post (local post) to the Business Profile — visible on Maps/Search. summary = post text. Optional call-to-action: cta_type (LEARN_MORE|BOOK|ORDER|SHOP|SIGN_UP|CALL) + cta_url; CALL takes no url (Google dials the business phone number), every other type requires one. The button is read back from Google's reply and returned as cta_type. image_url attaches a PHOTO to the post itself (not the gallery): it must be a publicly reachable direct image link — Google downloads it server-side — JPG or PNG, at least 250px on the short edge and at least 10 KB. If you do not have a public link, call upload_image first: give it source_url when the photo already lives somewhere on the web (their site, WordPress media, Drive) and it is re-published with no work for the user, or call it with no arguments to get a drop link that takes up to 10 photos at once. language = post language code (tr|en|…); leave it empty and the post is tagged with the business location's OWN language, read from the profile (falls back to en if the profile does not declare one). SAFETY: confirm=false → preview, confirm=true → publish. location = a gbp_list_locations value or a business name/domain (auto-matched).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| cta_url | No | ||
| summary | Yes | ||
| cta_type | No | ||
| language | No | ||
| location | Yes | ||
| image_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavior well beyond the annotations: confirm=false is a preview and confirm=true actually publishes, the image is downloaded server-side by Google with hard constraints (public link, JPG/PNG, 250px short edge, 10 KB minimum), CALL CTAs omit cta_url because Google dials the business phone, and empty language falls back to the profile's own language then en. These are exactly the non-obvious traits annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its surface, then ordered by decision relevance (CTA, image, language, safety, location). Dense but every clause carries operative information — no filler or restatement of the name/title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be enumerated, yet the description usefully notes that the button is read back from Google's reply as cta_type. With the preview/publish gate, helper routing, and full parameter semantics covered, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does: summary = post text, cta_type's six-value vocabulary plus the CALL-requires-no-url rule, cta_url requirement per type, image_url vs. gallery-photo distinction and format constraints, language semantics with fallback, confirm semantics, and location's accepted value forms. All 7 parameters are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource: 'Publishes an UPDATE post (local post) to the Business Profile — visible on Maps/Search.' The scope (UPDATE-type local post, public surface) distinguishes it from siblings like gbp_update_post, gbp_list_posts, and gbp_create_location without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional routing: 'If you do not have a public link, call upload_image first,' including the two distinct upload_image modes (source_url vs. no-args drop link) and how to obtain a location value from gbp_list_locations. It does not explicitly contrast create-vs-update (gbp_update_post), so it stops short of full alternative disambiguation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_insightsBusiness Profile InsightsARead-onlyIdempotentInspect
Google Business Profile PERFORMANCE insights — how customers find and act on the listing on Google Search & Maps: impressions (search + maps), phone CALLS, direction requests, website clicks and bookings, totalled over the last days (default 30, max 540). Uses Google's current Business Profile Performance API. messages is ALWAYS 0 and is kept only for backward compatibility: Google shut Business Profile messaging down on 31 July 2024, so it is a dead metric, NOT a feature waiting to be switched on — never advise the user to "turn messaging on". bookings is different: Reserve with Google is still live, so a 0 there IS a real gap. location = a gbp_list_locations value OR a business name/domain ('Altes Diş' / 'altesklinik.com') — auto-matched.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| location | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/idempotentHint already covering the safety profile, the description goes well beyond structured fields: it flags that `messages` is permanently 0 (a dead metric, not a feature), that `bookings`=0 is a genuine gap, and that location strings are auto-matched. That is exactly the kind of context that prevents a wrong user-facing conclusion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool measures, then constraints. It is dense but every clause carries information (metric list, window cap, dead-metric warning, location formats). The messages/bookings digression is long but earns its place by preventing misuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation. For a 2-parameter read-only insights tool, the description covers scope, metric meanings, window bounds, and location resolution — 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.
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 the semantics, and it does: `days` is documented with default 30 and max 540 (the ceiling is absent from the schema), and `location` accepts either a gbp_list_locations value or a business name/domain with auto-matching.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Google Business Profile PERFORMANCE insights' and enumerates exactly which metrics (impressions, calls, directions, website clicks, bookings). This clearly separates it from gbp_location_details, gbp_reviews and gbp_list_posts, which do not return performance data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when the tool applies (measuring how customers find and act on the listing) and gives real usage rules for interpreting output ('never advise the user to turn messaging on'). However, it never names an alternative sibling or states when NOT to reach for this versus e.g. gbp_location_details or a generic report tool, so routing guidance stays implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_list_locationsBusiness LocationsARead-onlyIdempotentInspect
Lists all business locations across the connected Google Business Profile accounts (name, address, phone, website). Pass the returned location value to other gbp_* tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds real behavioral value by naming the fields returned and the workflow chaining with the `location` identifier; it omits only pagination and auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler. The purpose is front-loaded and the chaining hint follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and rich annotations, the description need not explain return structure further. It covers purpose, output fields, and downstream usage adequately; only the differentiation from gbp_location_details is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description adds nothing about inputs since there are none, but correctly notes that the output `location` value feeds other tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Lists") and resource ("business locations") with scope ("across the connected Google Business Profile accounts") and enumerates the key returned fields. It does not explicitly distinguish itself from the closely named sibling gbp_location_details, which is the only clarity gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a useful downstream cue: pass the returned `location` value to other gbp_* tools. However, it never states when to call this versus alternatives like gbp_location_details or gbp_create_location, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_list_postsGBP PostsARead-onlyIdempotentInspect
Lists already-published Google Business Profile posts for one owned location, newest first. Returns each post's text, state, timestamps, call-to-action and media/public URLs. This public OpenAI operation is read-only and cannot delete posts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| location | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive, so the bar is lower. The description adds genuine context beyond them: only already-published posts are returned and results are ordered newest first. The closing 'read-only and cannot delete posts' clause largely restates the annotations, but the published-filter and ordering are real additions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the scope before the return-value detail. The return-value sentence overlaps with the output schema, which slightly dilutes the otherwise efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't enumerate return fields, and it adequately covers operation, scope, and ordering for a simple list tool. The only meaningful gap is parameter documentation (limit), which the description leaves to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across two params. The description hints at the required 'location' via 'one owned location' but never explains the 'limit' parameter (default 20) or pagination behavior, so it fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) plus resource (Google Business Profile posts) with narrowing scope: already-published, for one owned location, newest first. This cleanly distinguishes it from gbp_create_post and gbp_update_post siblings without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'for one owned location' note implies context but gives no explicit when-to-use/when-not guidance or alternative routing (e.g., toward gbp_create_post for drafts or gbp_update_post). Usage is inferable from the verb but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_location_detailsBusiness DetailsRead-onlyIdempotentInspect
Reads all information for a business location: name, address, phone, website, description, categories, business hours, THE SERVICES THE BUSINESS OFFERS, the Maps link, the Google place ID (place_id) and the direct "write a review" link (review_uri, ready for a QR card or a message to customers). location = a value from gbp_list_locations OR a business name/domain ('Altes Diş' / 'altesklinik.com') — auto-matched to the correct location.
services is the business's OWN service list (Google calls it serviceItems): each entry has a name, an optional description and an optional price, plus kind = "structured" (one of Google's predefined service types for the category) or "free_form" (a custom service the business typed itself). services_count is the true total; the list is capped at services_limit.
NOTE ON EMPTY RESULTS: services: [] means the business really has NOT entered any services — it is NOT a tool limitation. Do NOT infer the service list from categories: the category objects carry a Google CATALOG of what is available for that category, which is why the raw catalog fields are deliberately not returned here.
google_updates is the "Google updates" badge you see in the Business Profile Manager: when Google (or a member of the public) proposes a change to the listing, pending is true and changes shows each affected field with the CURRENT value next to the one Google suggests — so you can tell a harmless tweak from a name or address change the owner must react to. Accepting or rejecting a suggestion has no API endpoint; it is done in the Business Profile Manager, though re-writing the correct value with gbp_update_location also overrides the suggestion.
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | ||
| services_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gbp_manage_servicesManage Business ServicesADestructiveInspect
Manages the SERVICE LIST on a Google Business Profile (the "Services" block shown on Maps/Search) — the field gbp_location_details returns as services. This is what Google's Ask Maps AI reads when it answers "does this clinic do X?", so a complete list with descriptions is worth real visibility.
action: • add (default) — adds the given services; names that already exist are SKIPPED (idempotent, safe to re-run) • update — sets the DESCRIPTION of services that already exist; adds nothing • remove — deletes the given services by name • replace — makes the list EXACTLY what you pass (anything not listed is deleted)
services accepts any of: a list of names (["Fissür Örtücü", "Flor Uygulaması"]), "Name|description" entries, a newline/semicolon separated string, or dicts [{"name": …, "description": …}]. Descriptions are capped at 300 characters by Google — longer text is rejected with the offending service named.
Names are matched loosely (case, Turkish characters and text in parentheses are ignored), so "Diş Beyazlatma (Bleaching)" and "diş beyazlatma" count as the same service. If a name matches one of Google's predefined service types for the category it is written as a STRUCTURED item, otherwise as a FREE-FORM item under the primary category. Existing prices on services you do not touch are preserved.
SAFETY: confirm=false (default) returns a PREVIEW listing exactly what would be added/updated/removed and changes nothing; confirm=true applies. location = a gbp_list_locations value or the business name/domain (auto-matched).
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | add | |
| confirm | No | ||
| location | Yes | ||
| services | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, but the description goes well beyond them: replace explicitly deletes anything not listed, add is idempotent and skips existing names, descriptions are capped at 300 characters and rejected with the offending name, names are matched loosely across case/Turkish characters/parentheses, and existing prices on untouched services are preserved. It also documents the preview/apply safety gate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded and structured with bullets and headers, with the action semantics and safety model given prominence. Most sentences earn their place given 0% schema coverage, but the 'Ask Maps AI reads this / worth real visibility' value pitch is promotional framing rather than invocation guidance and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and the description still covers everything else an agent needs for a 4-parameter mutation tool: action semantics, input formats, matching rules, limits, location resolution, and the preview/apply safety gate. Nothing material is left ambiguous for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does: `services` accepts a name list, "Name|description" strings, newline/semicolon strings, or dicts; `action` enumerates all four modes with defaults; `confirm` semantics (preview vs apply); `location` accepts a gbp_list_locations value or business name/domain. Every one of the four raw parameters is documented with accepted formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and scope: it manages the SERVICE LIST on a Google Business Profile, tying it to the exact field name gbp_location_details returns (`services`). No sibling tool in the list covers GBP services, and the description anchors itself to related tools the agent will recognize (gbp_location_details, gbp_list_locations) so the agent can distinguish it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit per-action semantics for all four modes: add (default, skips existing), update (description only, adds nothing), remove (deletes by name), replace (list becomes exact, unlisted items deleted). It also states the confirm=false preview-first workflow and the location resolution rule, so the agent knows both when to pick each action and when to preview before applying.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_reply_reviewReply to ReviewADestructiveInspect
Writes/updates a public REPLY to a Google review. review = the full name from gbp_reviews (accounts/…/locations/…/reviews/…). SAFETY: confirm=false → preview, confirm=true → publish.
| Name | Required | Description | Default |
|---|---|---|---|
| reply | Yes | ||
| review | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 mutation profile is covered structurally. The description adds real value beyond that by disclosing that the reply is PUBLIC and that a dry-run mode exists via confirm=false, which the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the identifier format, then the safety model. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the public-visibility plus dry-run semantics cover the main risks of this mutation. Minor gaps remain around reversibility of a published reply and idempotency, 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.
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 the load; it explains that 'review' is the full resource name in accounts/…/locations/…/reviews/… form and defines the confirm flag's preview/publish semantics. Only 'reply' (the free-text body) is left implicit, which is nearly self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Writes/updates a public REPLY to a Google review'), and the parameter note names the sibling tool gbp_reviews as the source of the review identifier, so the agent can distinguish this from related GBP review tools. No ambiguity about what the tool mutates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The SAFETY sentence gives concrete invocation guidance: confirm=false previews, confirm=true publishes, which tells the agent exactly how to sequence a safe call. It does not, however, state when to prefer this over alternatives or prerequisites (e.g., ownership/verification of the location).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_reviewsBusiness ReviewsARead-onlyIdempotentInspect
Lists a business location's Google reviews (stars, reviewer, text, date, reply status, and when the reply was written) + the average rating and how many are still UNANSWERED. Each answered review carries replied_at, so reply SPEED (created → replied_at) is measurable. gbp_reply_review posts a reply. Large profiles: use summary_only=true for just the counts, only_unanswered=true to see just the ones needing a reply, and offset+limit to page (the answer tells you next_offset). Order is most recently UPDATED first and a reply updates a review, so unanswered reviews collect at the END of the list; use only_unanswered=true instead of paging to find them. When the list holds MORE reviews than the count Google publishes, the summary says how many are still unpublished (unpublished_estimate): those cannot be replied to yet, and a reply attempt comes back as review_not_replyable, so do not retry them.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| location | Yes | ||
| summary_only | No | ||
| only_unanswered | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, and the description adds real behavioral context beyond them: the most-recently-updated ordering, why unanswered reviews sort to the end, the unpublished_estimate discrepancy versus Google's count, and the review_not_replyable error on reply attempts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but front-loaded and information-dense; the core purpose and the reply sibling come first, then paging and edge cases. Every sentence states a distinct, actionable fact, though it is approaching the upper bound of acceptable length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param read tool with annotations and an output schema, the description covers ordering, paging, filtering modes, and the unpublished/unreplyable edge case. An agent has everything needed to select modes and avoid futile reply attempts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the load and does well for summary_only, only_unanswered, and offset+limit semantics (including next_offset). It does not explain the required `location` parameter's expected format, which is the one remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists a business location's Google reviews') and enumerates the returned fields. It also names the sibling gbp_reply_review, so an agent can distinguish read from write without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes when to use each mode: summary_only for counts, only_unanswered for reviews needing a reply, offset+limit for paging (with next_offset), and says to prefer only_unanswered over paging. It also warns not to retry unpublished reviews, naming gbp_reply_review as the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_search_categoriesSearch Business CategoriesARead-onlyIdempotentInspect
Searches Google Business Profile CATEGORIES by name (e.g. 'diş kliniği', 'restaurant') and returns each category's id (categories/gcid:…) plus its display name. Use this to find the id needed by gbp_update_location's primary_category / additional_categories.
Searching in the listing's own language works, and the search RELAXES when your word is not the one Google used: a Turkish word with suffixes is shortened to its stem, and a handful of business terms whose catalogue name has a different root are mapped (searching tercüme finds Çevirmen, which is what Google calls a translation service in Turkish). When that happens the reply says which word actually matched, so you can tell the user the category exists under a different name rather than claiming their word is a category. A relaxed search only keeps categories whose name STARTS with the matched word — an unrelated query returns nothing rather than a plausible-looking wrong category. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| region | No | TR | |
| language | No | tr |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint/idempotentHint, so the bar is low, yet the description adds substantial non-obvious behavior: query relaxation via stemming, hard-coded synonym mapping (tercüme -> Çevirmen), prefix-only matching on relaxed hits, and a deliberate empty result for unrelated queries. It also warns that the reply reports the actually matched word, which affects how an agent should relay results to the user.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose and the id/consumer relationship come first, then the relaxation caveats. Every sentence carries information, though the Turkish-specific example (diş kliniği, tercüme/Çevirmen) makes it longer than strictly necessary for a general agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required, and the description still describes the id/display-name shape. Behavioral edge cases are well covered; the main remaining gap is the undocumented region/language parameters, which an agent must infer from the defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the schema documents none of the three parameters. The description adds meaning for 'query' (natural-language word in the listing's own language) and indirectly for 'language', but never explains 'region' (default TR) or the language default, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Searches), resource (Google Business Profile CATEGORIES), input (by name) and output (id plus display name). The agent can immediately distinguish it from keyword/location siblings and knows exactly what it returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the downstream use case: 'Use this to find the id needed by gbp_update_location's primary_category / additional_categories,' naming the sibling tool and the exact parameters that consume the output. That is as directive as guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_search_keywordsBusiness Profile Search TermsARead-onlyIdempotentInspect
The actual SEARCH TERMS people typed on Google Search & Maps before the business listing appeared ("searches used to find your business" in the Business Profile dashboard) — the only source that shows WHICH queries a location ranks for locally, so you can see which service or category is missing. Returns the terms ranked by impressions plus a summary. Google gives an exact count only for high-volume terms; everything else is reported as "fewer than N" and is counted, not guessed. Data lags ~2 months and goes back ~18 months. location = a gbp_list_locations value OR a business name/domain — auto-matched. For impressions/calls/directions totals use gbp_insights instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| months | No | ||
| offset | No | ||
| location | Yes | ||
| include_low_volume | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive). The description adds real behavioral context beyond them: a ~2 month data lag, ~18 month history, ranking by impressions, and the crucial caveat that Google reports exact counts only for high-volume terms while the rest are 'fewer than N' and counted not guessed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded, leading with what the tool returns before giving caveats and routing. The heavy parentheticals ('searches used to find your business' in the dashboard) add some visual clutter but every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape detail is unnecessary, and the description still summarizes the return (ranked terms plus summary). Data lag, history depth, cardinality caveat, and location matching are all covered; only the numeric parameters remain unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with 5 parameters, so the description must compensate. It does well for location (a gbp_list_locations value OR a business name/domain, auto-matched) but says nothing about limit, months, offset, or include_low_volume, leaving four parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (actual search terms people typed on Google Search & Maps before the listing appeared) with a concrete scope (ranked by impressions with a summary). It explicitly distinguishes its data from gbp_insights, which handles aggregate totals, so an agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('the only source that shows WHICH queries a location ranks for locally, so you can see which service or category is missing') and names the alternative for a different need ('For impressions/calls/directions totals use gbp_insights instead'). Both the selector and the exclusion are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_social_linksBusiness Profile Social LinksADestructiveInspect
Reads and sets the SOCIAL MEDIA LINKS on a Google Business Profile: Instagram, Facebook, X (Twitter), LinkedIn, YouTube, TikTok, Pinterest, WhatsApp and the appointment link. Call with location alone to READ what is currently published. WHY A SEPARATE TOOL: these live in the location's ATTRIBUTES resource, not in the location body, so gbp_update_location cannot see or change them. links = comma-separated network=url pairs, e.g. instagram=https://instagram.com/acme, youtube=https://youtube.com/@acme. Accepted network names: instagram, facebook, twitter (or x), linkedin, youtube, tiktok, pinterest, whatsapp, appointment. remove = comma-separated network names to clear. Only the networks you name are touched; every other attribute on the listing is preserved. Google allows a different attribute set per business CATEGORY, so each network you pass is checked against what Google permits for that listing first and an unsupported one is reported instead of being silently dropped. confirm=false → preview of the exact before/after.
| Name | Required | Description | Default |
|---|---|---|---|
| links | No | ||
| remove | No | ||
| confirm | No | ||
| location | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint=true, idempotentHint=false) by disclosing that only named networks are touched, all other attributes are preserved, each network is validated against Google's category-specific allowed set before writing, and unsupported networks are reported rather than silently dropped. It also documents the confirm=false preview path, which materially changes agent behavior for a destructive write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but every sentence earns its place: read/write switch, the sibling-routing rationale, the `links` syntax, the accepted names, the `remove` semantics, the preservation guarantee, the category validation, and the preview flag. The read-vs-write instruction is front-loaded, and the labeled segments (WHY A SEPARATE TOOL) make it scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter destructive write tool with 0% schema coverage, the description supplies everything needed to call it correctly, and since an output schema exists it need not describe return values. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden and does: `links` is defined as comma-separated `network=url` pairs with a literal example and an accepted-name list including the twitter/x alias, `remove` as comma-separated network names, `confirm` as the preview toggle, and `location` alone as read mode. This fully compensates for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (reads and sets) on a precise resource (social media links on a Google Business Profile) and enumerates the exact networks covered. It also explicitly distinguishes itself from gbp_update_location, so the agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: call with `location` alone to READ, pass `links`/`remove` to WRITE, and set confirm=false for a preview. It names gbp_update_location as the tool that cannot handle these attributes and explains why, which is exactly the alternative-selection information an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_start_verificationStart Business VerificationADestructiveInspect
STARTS verification of a business listing so it becomes visible on Maps/Search. method: ADDRESS (postcard with a PIN mailed to the business address) | PHONE_CALL | SMS | EMAIL | AUTO. Use only a method returned by gbp_verification_options. mailer_contact = the person's name to print on the postcard (ADDRESS). A postcard usually takes 5-14 days; enter the PIN with gbp_complete_verification. SAFETY: confirm=false → preview, confirm=true → actually starts (a postcard is physically mailed, so do not trigger it by accident).
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| phone | No | ||
| method | Yes | ||
| confirm | No | ||
| location | Yes | ||
| mailer_contact | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this destructive/openWorld/non-idempotent, and the description adds the crucial context that a postcard is physically mailed, takes 5-14 days, and that confirm=false previews versus confirm=true actually triggers the irreversible send. That confirm-gate semantics is exactly the added value structured fields don't convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then method semantics, then the SAFETY block last. Dense and heavily punctuated but each sentence carries real information; only minor tightening possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be described. The description covers the action, its method choices, prerequisite tool, follow-up tool, latency, and the destructive-confirm contract, so an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden. It defines the method enum values (ADDRESS/PHONE_CALL/SMS/EMAIL/AUTO), explains mailer_contact, and clarifies the confirm flag. It leaves email, phone, and location unexplained, which keeps it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (STARTS verification) and resource (business listing), plus the downstream effect (becomes visible on Maps/Search). It is clearly distinguishable from the sibling gbp_verification_options (which lists methods) and gbp_complete_verification (which enters the PIN).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Use only a method returned by gbp_verification_options' and 'enter the PIN with gbp_complete_verification'. Both the precondition and the follow-up sibling are named rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_update_locationUpdate Business DetailsDestructiveInspect
UPDATES the business listing on Google Maps/Search: phone, additional_phones (the extra numbers shown under the main one; a list REPLACES the current extras, clear_additional_phones=true removes them; changing only phone keeps the extras), website, description, business NAME (title), the ADDRESS, opening HOURS and CATEGORIES. hours = plain text like 'Pzt-Cum 09:00-18:00; Cmt 10:00-14:00; Pazar kapalı' (Turkish or English day names, day ranges, multiple slots per day, 'closed' days are simply left out). special_hours = one-off DATE overrides such as a public holiday, separate from the weekly hours: '2026-10-29 closed; 2026-12-31 10:00-14:00' (date YYYY-MM-DD or DD.MM.YYYY; value closed/kapalı, one or more time ranges, or 'remove' to drop that date's override). Only the dates you give change, other special days already on the listing are kept. primary_category / additional_categories accept a category id (categories/gcid:…) OR a plain name ('Diş Kliniği') which is auto-resolved — use gbp_search_categories to look ids up. additional_categories REPLACES the whole secondary list; to REMOVE every secondary category (keep only the primary) pass clear_additional_categories=true (an empty list alone changes nothing). ADDRESS: address_lines (street line, use ' | ' between lines), city (town/district), region (province), postal_code, country (2-letter code). Give address_lines OR city to rewrite the address; the parts you leave empty keep their current value, so fixing only a misspelled street is one call. Google RE-VERIFIES a listing whose address changes and may ask for proof, so correct wording rather than moving the pin: a real relocation belongs in the Business Profile Manager. SAFETY: confirm=false (default) returns a PREVIEW and changes nothing; confirm=true applies. Only the fields you pass are touched. location = a gbp_list_locations value or the business name/domain (auto-matched).
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| hours | No | ||
| phone | No | ||
| title | No | ||
| region | No | ||
| confirm | No | ||
| country | No | ||
| website | No | ||
| location | Yes | ||
| description | No | ||
| postal_code | No | ||
| address_lines | No | ||
| special_hours | No | ||
| primary_category | No | ||
| additional_phones | No | ||
| additional_categories | No | ||
| clear_additional_phones | No | ||
| clear_additional_categories | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gbp_update_photo_categoryRecategorise Business PhotoDestructiveInspect
Changes the category of a photo that is already on a Google Business Profile, keeping the same photo. media_id = an id or full name from list_business_profile_photos. category = EXTERIOR | INTERIOR | PRODUCT | AT_WORK | FOOD_AND_DRINK | MENU | TEAM | ADDITIONAL. COVER, PROFILE and LOGO cannot be set through the API. confirm=false returns a preview, confirm=true applies. location = a gbp_list_locations value or the business name/domain.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| category | Yes | ||
| location | Yes | ||
| media_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gbp_update_postEdit Business PostADestructiveInspect
Edits an ALREADY PUBLISHED Google Business Profile update post in place — the text, or the call-to-action button — without deleting it. Use this when a live post states something that is no longer true (an old service count, a phone number, a branch count): deleting and re-posting would reset the post's original date, so a 2018 post would reappear dated today and the profile would show a burst of "new" posts. post is the post name from gbp_list_posts; the full accounts/…/locations/…/localPosts/… form and the bare id both work. Only the fields you pass are changed — leave summary empty to keep the current text and only swap the button. cta_type: LEARN_MORE | BOOK | ORDER | SHOP | SIGN_UP | CALL, with cta_url (CALL takes no url). The current text is read before the change and returned next to the new one, and the post is read back afterwards, so a silent no-op is reported instead of a false success. SAFETY: confirm=false previews the edit. Google decides what is editable on a live post; if it refuses, the reason is passed through so you can decide whether to delete and re-create instead.
| Name | Required | Description | Default |
|---|---|---|---|
| post | Yes | ||
| confirm | No | ||
| cta_url | No | ||
| summary | No | ||
| cta_type | No | ||
| location | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: only passed fields are changed, empty summary preserves existing text, the prior text is read and returned alongside the new text, the post is read back to detect silent no-ops, confirm=false previews, and Google's refusal reasons are passed through. These details are highly relevant for a destructiveHint=true mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded, starting with the core action before routing details. Every sentence adds operational value: the stale-post scenario, parameter formatting, field-update behavior, readback verification, and safety preview.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's mutation complexity, rich annotations, and presence of an output schema, the description is complete enough for correct invocation. It even explains return behavior and failure handling, which the output schema alone would not convey contextually.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well for most parameters: it explains post ID formats, the meaning of empty summary, the cta_type enum values, cta_url behavior for CALL, and confirm preview semantics. The required location parameter is not described, leaving one gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb, resource, and scope: editing an already-published Google Business Profile post in place, including text or call-to-action button, without deleting it. It explicitly distinguishes this from delete-and-repost behavior and names the source of the post identifier, gbp_list_posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-to-use scenario (a live post is stale) and explains why the alternative of deleting and re-posting is harmful because it resets the original date. It also mentions the fallback of deleting and re-creating if Google refuses the edit, and previews the edit with confirm=false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_upload_photoUpload Business PhotoAInspect
Adds one or SEVERAL PHOTOS to the Google Business Profile listing (visible on Maps/Search) in a single call. Give image_url for one photo, or image_urls for a batch of up to 10 — a batch is the normal case after upload_image, which hands back one public URL per photo the user dropped. Each URL must be a publicly reachable direct image link, because Google downloads it server-side. category applies to every photo in the call: ADDITIONAL (default) | PROFILE (profile picture) | COVER | LOGO | EXTERIOR | INTERIOR | PRODUCT | AT_WORK | FOOD_AND_DRINK | MENU | TEAM — upload different categories in separate calls. LOGO does not work: measured 22 Sep 2026, Google accepted the request, processed it as PROFILE and left every slot unchanged, so the logo has to be set in the Business Profile dashboard by hand. Whatever category you ask for, the reply is now checked against the slot Google actually wrote to; if they differ the photo is reported as failed with both categories and the credit is refunded, instead of a success that changed nothing. A batch is charged PER PHOTO, exactly as separate calls would be, and a photo Google rejects is not charged. If some photos go up and others fail you get both lists back with the reason for each, so a partial result is never reported as full success. This adds photos to the listing's PHOTO GALLERY; it does NOT attach them to an Update post — to publish a post WITH a photo use gbp_create_post(image_url=...). COVER ASPECT RATIO IS CHECKED BEFORE THE UPLOAD: Google rejects a cover photo whose ratio is wrong with a bare "Request contains an invalid argument." that names no cause and still burns the credit, so the image is measured first and you get the actual pixel size, the ratio and what Google expects (16:9). Pass allow_any_ratio=true to skip that check. SAFETY: confirm=false → preview, confirm=true → publish. location = a gbp_list_locations value or the business name/domain.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| category | No | ADDITIONAL | |
| location | Yes | ||
| image_url | No | ||
| image_urls | No | ||
| allow_any_ratio | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, openWorld=true, idempotent=false, destructive=false. The description goes far beyond: LOGO is silently downgraded to PROFILE (with a measurement date), responses are checked against the slot Google actually wrote and failures refund the credit, billing is per-photo and rejected photos are not charged, partial failures are never reported as full success, and confirm=false → preview vs confirm=true → publish. This is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: the core single-vs-batch instruction comes first, then category, then failure/billing behavior, then the sibling redirect, then safety. Every sentence carries operational information. It is long and somewhat sprawling in the middle (category enumeration plus the LOGO story), which slightly dents scannability, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param mutation tool with an output schema, the description covers the input contract, the fraud/credit and partial-result semantics, the sibling alternative for post attachments, and the safety gate. Return-value shape is left to the output schema, which is correct. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load and does: it defines image_url vs image_urls semantics, enumerates all eleven category values with their meanings and the per-call scope rule, explains allow_any_ratio=true as skipping the cover-ratio check, defines confirm as preview/publish, and defines location as a gbp_list_locations value or a business name/domain. The 'publicly reachable direct image link, because Google downloads it server-side' note is genuine semantics the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+destination ('Adds one or SEVERAL PHOTOS to the Google Business Profile listing (visible on Maps/Search)') and immediately distinguishes scope from siblings by naming gbp_create_post as the tool for posts WITH photos and gbp_update_photo_category is implicitly not this. An agent can pick it apart from gbp_upload_video and upload_image without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: single foto via image_url, batch via image_urls (up to 10), batch called out as 'the normal case after upload_image'. Tells the agent to upload different categories in separate calls and redirects to gbp_create_post(image_url=...) for post attachments. When/when-not/alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_upload_videoUpload Business VideoAInspect
Adds a VIDEO to a Google Business Profile (shown on Maps/Search) — the video counterpart of gbp_upload_photo, which only takes images. video_url must be a publicly reachable direct video link (mp4/mov); Google downloads it server-side. If the file is only on a computer, host it somewhere public first and pass that URL. Google's limits: up to ~30 seconds, ~100 MB, at least 720p; processing can take a few minutes before the video appears on the profile. category = ADDITIONAL (default) | EXTERIOR | INTERIOR | PRODUCT | AT_WORK | FOOD_AND_DRINK | MENU | TEAM. SAFETY: confirm=false → preview, confirm=true → publish. location = a gbp_list_locations value or the business name/domain (auto-matched).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| category | No | ADDITIONAL | |
| location | Yes | ||
| video_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: Google's size/duration/resolution limits (~30s, ~100MB, 720p), server-side download behavior, multi-minute processing latency before the video appears, and the confirm=false preview vs confirm=true publish safety model. This is exactly the operational context annotations like readOnlyHint=false 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and sibling differentiation before drilling into hosting, limits, category, safety, and location. Dense em-dash chaining makes it longer than ideal, but every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter destructive-free write with an output schema already defined, the description covers everything an agent needs: hosting requirement, platform constraints, async processing expectations, preview/publish safety, and location resolution. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full load, and it largely does: it enumerates the category values (ADDITIONAL default, EXTERIOR, INTERIOR, PRODUCT, AT_WORK, FOOD_AND_DRINK, MENU, TEAM), explains confirm's preview/publish semantics, and documents location's accepted forms. Only video_url format inheritance and location auto-match edge cases are left slightly implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Adds a VIDEO to a Google Business Profile') and explicitly distinguishes itself from the sibling gbp_upload_photo by noting this is the video counterpart, which only takes images. An agent can route between the two upload tools without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the precondition that video_url must be a publicly reachable direct link and gives explicit remediation ('if the file is only on a computer, host it somewhere public first'). It also names the alternative (gbp_upload_photo) for the image case and points to gbp_list_locations as the source of valid location values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbp_verification_optionsBusiness Verification OptionsARead-onlyIdempotentInspect
Shows which verification methods Google offers for a business listing (postcard to the address, phone call, SMS, email, or instant) and the current verification state. Starts nothing — read-only. An already-verified listing returns no options.
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent and non-destructive, so much of the description's safety framing is redundant. However, it adds genuinely new behavior beyond the structured data: the enumerated response values and the fact that a verified listing returns no options, which prevents misinterpretation of an empty result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no waste; the core purpose and the read-only nature are front-loaded before the edge case. Enumerating all five verification methods is slightly verbose but earns its place by clarifying return values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema removes any need to explain return format, and annotations cover the safety profile, so the description is close to complete. The remaining gaps are the undefined location parameter and the absence of explicit sibling routing, which leave the agent with inference to do.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single required parameter "location" is completely undescribed in both schema and description. An agent cannot tell whether location expects a place ID, a name, or an address. With low coverage the description must compensate, and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Shows) plus the exact resource (which verification methods Google offers for a listing) and enumerates the returned values. The phrase "Starts nothing — read-only" implicitly distinguishes it from the sibling gbp_start_verification, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool reads options, so it presumably precedes gbp_start_verification/gbp_complete_verification, but neither is named and no when/when-not condition is stated. The one edge case given ("An already-verified listing returns no options") adds some guidance but does not route the agent between alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geo_target_searchGeo Target SearchARead-onlyIdempotentInspect
Finds Google's location targeting IDs by name — search a place, get back its id, its administrative LEVEL (District / City / Province / Country / Neighborhood / Postal Code) and its full canonical name.
Use this before set_campaign_targeting whenever the place is smaller than a city, because a bare district name is ambiguous to Google: its suggestion list is fuzzy and contains provinces and cities that merely sound similar. This tool shows you the whole candidate list with each one's level and parent, so you can pass an exact id instead of a name and know precisely what the campaign will target.
country narrows the candidates (2-letter code). level filters to one kind, matched loosely: district | city | province | region | country | neighborhood | postal. Read-only, no credit.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | ||
| limit | No | ||
| query | Yes | ||
| country | No | TR |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so 'Read-only, no credit' largely restates structured data. The description does add real behavioral context beyond annotations: that Google's suggestion list is fuzzy and may include similarly-sounding provinces/cities, and that the tool returns the full candidate list with level and parent so an exact id can be chosen.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short paragraphs, front-loaded with what the tool returns and then the when-to-use rationale. It is slightly longer than strictly necessary, and the enum list for `level` partially duplicates the schema's value list, but every sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the description still usefully previews the shape of results (id, level, parent). For a read-only lookup with one required parameter, the only meaningful omission is the behavior of `limit` and how many candidates are returned by default.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and none of the four parameters carry descriptions, so the description must compensate. It does for two: `country` is described as a 2-letter code narrowing candidates, and `level` is explained as a loose-match filter with its accepted values enumerated. `limit` is left undocumented, so it does not fully close the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Finds Google's location targeting IDs by name') and names exactly what comes back — id, administrative level, canonical name. It is clearly distinguishable from sibling geo tools like microsoft_location_search or chatgpt_ads_geo_lookup because it is scoped to Google Ads target IDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to use it: before set_campaign_targeting, specifically when the place is smaller than a city, and explains why (ambiguous bare district names, fuzzy suggestion lists). The alternative — passing a name directly — is implicitly ruled out with a stated reason.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_detailsAd DetailsARead-onlyIdempotentInspect
GOOGLE ADS ONLY — reads the full content of Google Ads ads (RSA headlines/descriptions, URL, status) together with each ad's AD STRENGTH and Google's own action items for improving it. Filtered by ad_group_id or ad_id.
ad_strength is the value Google shows in the interface: PENDING, NO_ADS, POOR, AVERAGE, GOOD or EXCELLENT. It answers "is this ad done or is one step left", which a weak-ads list cannot — a list of weak ads tells you what is bad, not whether the rest reached EXCELLENT. action_items is what Google itself says is missing on that specific ad ("try including more keywords in your headlines"), so the remaining gap is read rather than guessed; an ad can have all 15 headlines filled and still score low because they repeat each other.
customer_id is a 10-digit Google Ads id; for Meta/TikTok/LinkedIn ads use list_meta_ads / list_tiktok_ads / list_linkedin_creatives instead.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | No | ||
| ad_group_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it read-only, idempotent and non-destructive, yet the description adds real behavioral substance: the meaning of ad_strength values (PENDING through EXCELLENT), what action_items contains, and the non-obvious fact that an ad with all 15 headlines can still score low due to repetition. This goes well beyond what the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with platform scope and payload summary, then the two explanatory paragraphs about ad_strength and action_items. The detail is justified but the ad_strength paragraph is slightly discursive; a tighter sentence could carry the same distinction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be spelled out, yet the description still clarifies the semantics of the two most interpretation-heavy fields. Platform scope, filters, and field meaning are all covered — 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.
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 load and does it well: it defines customer_id as a 10-digit Google Ads id and identifies ad_group_id and ad_id as the two filter keys. It does not state whether the two filters are mutually exclusive or how they combine, leaving one small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('reads the full content of Google Ads ads') and enumerates exactly what is returned (RSA headlines/descriptions, URL, status, ad_strength, action_items). The opening 'GOOGLE ADS ONLY' scopes it against the many sibling list/get tools for other platforms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes non-Google cases to list_meta_ads / list_tiktok_ads / list_linkedin_creatives, and explains the filter modes (ad_group_id or ad_id). It justifies the tool against an implied 'weak-ads list' but never names a specific Google sibling to prefer or avoid, so the when-not guidance is platform-scoped rather than tool-scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_scheduleAd ScheduleARead-onlyIdempotentInspect
Reads a campaign's CURRENT ad schedule (day/hour blocks + minutes + bid modifier + criterion_id). If campaign_id is empty, covers all campaigns. The 'block' field is ready to paste into set_ad_schedule. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so 'Read-only' merely repeats structured data. The description does add value by disclosing scope behavior (empty campaign_id covers all campaigns) and the paste-ready 'block' output format, though return shape is also covered by the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core purpose front-loaded and no filler. The trailing 'Read-only' phrase is redundant against the annotations, but the cost is a few words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with annotations covering safety and an output schema covering return values, the description supplies the key scope rule and workflow link. Minor gap: customer_id's meaning and whether the schedule applies to all campaign types is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains campaign_id's empty-string semantics clearly but says nothing about customer_id, leaving one of two parameters undefined in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Reads'), resource ('a campaign's CURRENT ad schedule'), and enumerates the returned fields (day/hour blocks, minutes, bid modifier, criterion_id). It also implicitly contrasts with the write-side sibling set_ad_schedule, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a conditional for campaign_id ('If campaign_id is empty, covers all campaigns') and hints at the read-then-write workflow with set_ad_schedule, but never states when to prefer this over alternatives or any prerequisites/exclusions. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_billing_statusBilling StatusARead-onlyIdempotentInspect
Shows your current plan, remaining monthly operation quota and trial dates.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds value by specifying the actual content returned (plan, quota, trial dates), but discloses nothing about auth requirements, quota refill timing, or freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource front-loaded and no filler. Every clause earns its place by naming a concrete piece of returned data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be explained, and annotations cover the safety profile. With zero parameters and an output schema, the one-sentence description is nearly sufficient; only the lack of any usage pointer keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. The description correctly implies no input is required, matching the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Shows') and resource ('billing status') and enumerates the exact data points (plan, monthly operation quota, trial dates), so an agent knows precisely what it retrieves. It does not differentiate from a sibling, but no billing-related sibling exists in the toolset, so there is nothing to disambiguate against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites, and names no alternatives. Usage is only implied by the read-only framing of the name; the description itself offers no routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaign_targetingCampaign TargetingARead-onlyIdempotentInspect
Reads a campaign's CURRENT targeting: location (geo), radius/proximity targeting (radius + units + lat/lng), language, device, and audience (user_list) criteria + negative (excluded) ones — plus the campaign's geo_target_type (PRESENCE = people physically in the area, vs PRESENCE_OR_INTEREST). If campaign_id is empty, all campaigns.
ad_group_id reads the AD GROUP's own criteria instead — location, language, audience and user list. This is the only way to see targeting on Demand Gen, where Google keeps geo, language and audience at ad group level, not on the campaign: for those campaigns the campaign-level read returns device criteria and nothing else, which made it impossible to verify what a Demand Gen campaign actually targets (measured on a live campaign that had 27 ad-group locations the campaign read could not see). Location values come back as geo IDs; pass one to geo_target_search to get its name. READ-only.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_group_id | No | ||
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, so the description's 'READ-only' is partly redundant, but it adds real behavioral context: the Demand Gen limitation where campaign-level reads return only device criteria, and that location values come back as geo IDs needing lookup. It stops short of describing pagination or throttling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and mostly efficient, but the parenthetical about 'measured on a live campaign that had 27 ad-group locations the campaign read could not see' is anecdotal padding that does not help the agent call the tool. The core operational facts would survive trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with an output schema (so return shape needn't be documented) the description covers what is read, both scoping modes, and the Demand Gen edge case. Only customer_id semantics and any pagination/limits are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must compensate, and it does for the two optional IDs: campaign_id empty means all campaigns and ad_group_id switches the read to ad group level. customer_id is not clarified, and the geo-ID output format is covered but not parameter typing, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: reads a campaign's current targeting, and enumerates the exact criteria returned (geo/radius/language/device/audience plus negatives) and the geo_target_type semantics. It also distinguishes the ad_group_id mode from the campaign-level mode, so an agent can separate it from siblings like set_campaign_targeting or manage_audience_targeting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when campaign_id is empty (all campaigns), when to use ad_group_id (ad group criteria; the only way on Demand Gen), and routes geo-ID resolution to geo_target_search. The when/when-not conditions are spelled out rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_change_historyChange HistoryARead-onlyIdempotentInspect
GOOGLE ADS ONLY — lists Google Ads account changes over the last N days IN DEPTH: who (user_email), from where (client_type), when, operation (CREATE/UPDATE/REMOVE), resource, CHANGED FIELDS, and old→new values. Max 30 days. Filter with resource_type (e.g. 'CAMPAIGN','AD_GROUP','AD_GROUP_CRITERION') and operation ('CREATE'|'UPDATE'|'REMOVE'). For the same audit trail on Meta (who changed which campaign/ad set/ad and when) use meta_change_history.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| operation | No | ||
| customer_id | Yes | ||
| resource_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. The description adds real context beyond that: a hard 30-day lookback cap and a detailed enumeration of returned fields (user_email, client_type, operation, changed fields, old→new values). It does not discuss auth or pagination, but for a read-only tool this is solid added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the platform scope and verb, then params, then routing in a single dense paragraph. The caps for emphasis are readable, though the long inline field enumeration is slightly heavy; every clause still carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return-value description is bonus rather than required, and the description goes beyond by enumerating fields. It covers purpose, routing, a key constraint, and most params; the only gap is the undocumented limit parameter, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for three of five params: days (max 30), resource_type (with concrete examples like CAMPAIGN/AD_GROUP), and operation (CREATE|UPDATE|REMOVE valid values). It omits any mention of limit or customer_id, leaving two params undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lists), resource (Google Ads account changes), temporal scope (last N days), and the returned fields. It explicitly scopes to 'GOOGLE ADS ONLY' and names the sibling meta_change_history, so an agent can distinguish it from related audit tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names meta_change_history as the alternative for the Meta audit trail, which routes the agent correctly. It does not mention tiktok_change_history (also a sibling), so sibling coverage is incomplete, but the when-to-use framing is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversion_settingsConversion SettingsARead-onlyIdempotentInspect
Reads the SETTINGS detail of conversion actions: id, category, counting type (every/one), click/view-through lookback window (days), attribution model, default value/currency, and whether it's primary for the goal.
Also reports the ACCOUNT-level conversion setup under account: the conversion tracking id, who manages tracking, whether the customer-data terms have been accepted and whether ENHANCED CONVERSIONS FOR LEADS is on. That last flag is the one to check when a tag sends hashed e-mail/phone in user_data but Google appears to ignore it — the tag can be perfect while the account switch is off, and there is no way to see this from the tag itself. The switch lives in the Google Ads interface (Goals > Settings > Customer data terms / Enhanced conversions for leads); the API exposes it read-only, so this tool tells you the state and the interface changes it.
account.call_reporting answers the question set_call_reporting cannot: whether call reporting and call CONVERSION reporting are currently on, and which conversion action calls are counted against. Check this before switching it on, and read it before you change it if you may need to put it back. Read-only (get_conversion_tags only returns the tag).
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds real value beyond them: the switch lives in the Google Ads UI and the API exposes it read-only, so this tool only reports state while the interface mutates it, and the flag is invisible from the tag itself. This explains mutation locus and a diagnostic gotcha not derivable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose is front-loaded in the first sentence, but the description runs four paragraphs for a one-parameter read tool and reads partly like end-user documentation (UI navigation paths, the enhanced-conversions explanation). The content is relevant but overlength for its invocation purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no prose, yet the description still usefully names the key fields and the account block. Combined with the read-only and diagnostic context, an agent has enough to select and call it correctly; only the sole input parameter is left undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions customer_id or its format. However, with only a single, self-evident identifier parameter, there is little meaning to compensate for, so this lands at the adequate baseline rather than being penalized heavily.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (reads) and resource (settings detail of conversion actions) and enumerates the fields returned (id, category, counting type, lookback window, attribution model, value/currency, primary flag) plus the account-level block. It explicitly differentiates itself from siblings by noting get_conversion_tags only returns the tag and that it answers what set_call_reporting cannot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use conditions: check the enhanced-conversions-for-leads flag when the tag sends hashed data but Google ignores it, and check call_reporting before switching it on and read it before changing it. Alternatives (set_call_reporting, get_conversion_tags) are named, though guidance is scoped to the two account sub-sections rather than the whole tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversion_tagsRead Conversion TagARead-onlyIdempotentInspect
Reads the Google Ads tag info for conversion actions: Conversion ID (AW-...) + label — the 'send_to' value needed for GTM / gtag (Google tag) setup. conversion_action_ids is a comma-separated id list (e.g. '7680551900,7680991420'); if empty, returns all conversions in the account. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | ||
| conversion_action_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, so the trailing 'Read-only' adds nothing. The description does add genuine behavior: empty conversion_action_ids expands to all conversions in the account, and the account-scoped (non-open-world) nature is consistent with the annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the most useful detail (the send_to format) before the parameter notes. Compact and mostly waste-free, though the closing 'Read-only' is redundant against the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required. The description covers purpose, the optional filter's format/default, and safety, but leaves customer_id undefined and provides no guidance relative to the many sibling conversion/GTM tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It documents conversion_action_ids well (comma-separated list with a concrete example and empty-default behavior) but says nothing about customer_id, the required parameter, leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (reads Google Ads tag info for conversion actions) and defines the payload precisely as Conversion ID (AW-...) plus label, the send_to value. This implicitly separates it from list_conversion_actions, but no sibling is named explicitly, so it falls short of the 5 benchmark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: the returned send_to value is what you need for GTM / gtag setup, and an empty conversion_action_ids returns all conversions. It offers no explicit exclusions or named alternatives (e.g. list_conversion_actions), so it is clear context without routing rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meta_ad_creativeRead Meta Ad CreativeARead-onlyIdempotentInspect
Reads an EXISTING Meta ad's creative: headline, primary text, description, image or video, the button, the destination link, the Page and Instagram actor, and WHICH Advantage+ creative enhancements are currently switched on. Use it before duplicating an ad (copy_meta_entity) or rewriting it (update_meta_ad_creative), and to answer "did Meta add music / touch up my video". Meta turns several enhancements on by default; enhancements_on shows exactly what is live.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious context: Meta turns several enhancements on by default and enhancements_on shows exactly what is live, which explains surprising results. It does not cover auth/connection prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and its full field list, then covers usage. Mostly efficient, but the colloquial 'did Meta add music / touch up my video' phrasing and the closing default-on remark are slightly padded for a single-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no elaboration, and the description tells the agent what the creative read yields and why it matters. It omits the prerequisite that a Meta Ads account must be connected and how to obtain a valid ad_id, small gaps for a complex ad-tech surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (ad_id) and schema description coverage is 0%, so the schema says nothing about it. The description implies it must reference an EXISTING Meta ad, but adds no format, source, or where-to-find-it guidance, so it only marginally compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (reads) and resource (an EXISTING Meta ad's creative) and enumerates exactly what it returns: headline, primary text, description, image/video, button, destination link, Page/Instagram actor, and enhancements_on. This distinguishes it from siblings like list_meta_ads and update_meta_ad_creative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it and the alternatives: before duplicating an ad (copy_meta_entity) or rewriting it (update_meta_ad_creative), plus the user-question case about Meta adding music or touching up video. Nothing 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_pmax_assetsPMax AssetsARead-onlyIdempotentInspect
Reads a Performance Max ASSET GROUP: its creative content (headlines/descriptions, images, videos) AND its SIGNALS — the audience signal and the search themes that actually steer the campaign.
Every asset comes with its resource_name — pass those to update_pmax_assets(remove_resource_names=...) to remove or replace one. Each group also reports its id, landing page, ad strength and status.
signals=true (default) adds, per asset group: the search themes, and the audience signal expanded to the ACTUAL first-party lists behind it — each remarketing or customer-match list with its name, type and MATCH SIZE. That size is the point: a customer list below Google's 1,000-member minimum is attached but does nothing, and from the interface it looks like it is working. This is the single most important configuration question in a Performance Max campaign — which of your own data is feeding it — so it is on by default; pass signals=false to skip the extra lookups. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| signals | No | ||
| customer_id | Yes | ||
| asset_group_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false) already establish the safety profile and the description's 'Read-only.' is consistent with them. Beyond that it discloses behavior the annotations cannot: signals=true triggers additional lookups, audience signals are expanded to actual underlying lists with match size, and sub-1,000-member customer lists silently fail to serve.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and the signals behavior, and every section is substantive. The editorializing about the 1,000-member minimum being 'the single most important configuration question' is slightly padded, but the paragraph still conveys actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with an output schema available, the description goes beyond requirement by naming the returned fields (id, landing page, ad strength, status, per-asset resource_name). Nothing an agent needs in order to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden, and it only fully documents `signals` (default, cost of extra lookups, what it adds). customer_id is never explained, and asset_group_id is only indirectly implied via 'Each group also reports its id'. Partial compensation merits the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Reads') and a precisely scoped resource (a Performance Max ASSET GROUP) and enumerates what it returns: creative content plus signals (audience signal, search themes). It distinguishes itself from the related mutation tools by naming update_pmax_assets and its remove_resource_names parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear routing guidance for the main decision point: signals=true is the default because the underlying first-party audience data is deemed critical, and signals=false skips the extra lookups. It also points to update_pmax_assets for removal/replacement. It lacks explicit guidance against other read siblings such as list_assets, but the mutation-vs-read boundary is well covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reportUnified Performance ReportRead-onlyIdempotentInspect
ONE report tool for EVERY connected platform — use this for any "how did X perform" question instead of hunting for a platform-specific report tool. platform: google_ads | meta (facebook/instagram) | tiktok | linkedin | microsoft | ga4 | search_console | youtube | business_profile. account = that platform's account id (Google Ads customer_id, Meta account_id, GA4 property, Search Console site url, Business Profile location…); leave empty to use the connected/default one. days = lookback window (or give start_date/end_date as YYYY-MM-DD). For the ad platforms (google_ads, meta, tiktok, linkedin, microsoft) days=N means the last N FULL days, excluding today, on every platform alike, and every reply carries period {start, end} = the exact range that was reported: quote that range, not the one you assumed. For performance SINCE EACH CAMPAIGN STARTED (lifetime) next to a recent window, call account_snapshot instead of guessing a start date. For metrics or breakdowns this report does not expose, use the platform's free query tool (describe lists it). level = row granularity for ad platforms (campaign | ad_group/adset | ad). breakdown = split rows by a dimension (device, day, country, age, gender, publisher_platform… for GA4/Search Console this is the dimension: channel, source, page, query…). Call describe(platform) to see exactly which levels and breakdowns that platform supports. For search_console the breakdown also takes a COMBINATION and a SORT: 'page,query' answers which page ranks for which term, and 'query by impressions' sorts by impressions instead of clicks — Search Console itself only ever returns rows by clicks, so high-impression low-click terms are invisible without it. Returns the platform's metric rows.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| level | No | ||
| limit | No | ||
| account | No | ||
| end_date | No | ||
| platform | Yes | ||
| breakdown | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_tiktok_lead_form_fieldsTikTok Lead Form FieldsARead-onlyIdempotentInspect
Returns the question/field schema of a TikTok lead instant form (field key, label and type) so the answers in download_tiktok_leads can be interpreted. page_id comes from list_tiktok_lead_forms.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds that it returns the field key/label/type, which is useful framing, but discloses nothing about pagination, rate limits, or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with zero waste; the core purpose is front-loaded and the dependency hints follow. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the description supplies purpose plus the key dependency chain (list_tiktok_lead_forms → page_id → download_tiktok_leads). It is complete enough to call correctly, though advertiser_id remains unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, but it only explains page_id's provenance and leaves advertiser_id undefined. It compensates partially, not fully, for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Returns) and resource (question/field schema of a TikTok lead instant form), and even enumerates the returned shape (field key, label and type). It distinguishes itself from siblings like list_tiktok_lead_forms and download_tiktok_leads by naming their relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to reach for it ('so the answers in download_tiktok_leads can be interpreted') and where the required page_id originates ('comes from list_tiktok_lead_forms'). It routes well to related tools, though it states no explicit exclusions or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_queryGoogle Ads Query (GAQL)Read-onlyIdempotentInspect
Runs ANY read-only Google Ads Query Language (GAQL) SELECT against a connected Google Ads account and returns the raw rows — the escape hatch for data no other tool exposes: any resource (campaign, ad_group, ad_group_ad, ad_group_criterion, keyword_view, search_term_view, change_event, change_status, asset, conversion_action, customer_client, bidding_strategy, geographic_view, user_location_view, landing_page_view, recommendation, ...), any metric and any segment the Google Ads API supports. GAQL can only READ; it cannot change the account. Reference: https://developers.google.com/google-ads/api/docs/query/overview and the field list per resource at https://developers.google.com/google-ads/api/fields (use the version this server runs; field names occasionally change between API versions, e.g. campaign.start_date_time). Rules: start with SELECT; metrics need a date filter or segments.date range for meaningful periods (e.g. WHERE segments.date DURING LAST_30_DAYS); money fields are in micros (divide by 1,000,000, account currency). Prefer list_entities / get_report when they already answer the question — they normalise statuses (is_serving) and currencies. limit = rows returned to you (max 2000); total_rows tells you if more exist — narrow the query instead of paging through huge results. customer_id empty = the default connected account.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gsc_add_siteAdd Search Console PropertyInspect
Adds a website as a property to the connected Search Console account, so a site that was never added (gsc_list_sites does not show it) can be set up from chat. site_url is either a domain property ('sc-domain:example.com', covers every subdomain and http/https; recommended) or a URL-prefix property ('https://www.example.com/'). A newly added property is UNVERIFIED: Google only shows its data after ownership is proven, and the verification code is shown only to the signed-in owner in Search Console. Next step after adding: the user opens the property in Search Console (link in the result), picks the DNS TXT method, and gives you the 'google-site-verification=...' value; if the domain's DNS is hosted on Opus Growth, write it with site_dns_records (mode='add', type='TXT') and the user presses Verify. confirm=false previews, confirm=true adds.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| site_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gsc_delete_sitemapDelete SitemapADestructiveInspect
Removes a submitted sitemap from Search Console. Submitting was possible, removing was not, so a stale or wrongly submitted entry stayed in the property forever and kept reporting errors — a page accidentally submitted as a sitemap, or an old WordPress sitemap_index.xml left behind after a rebuild. Deleting the entry only tells Google to stop reading that URL as a sitemap; it does not touch the file or deindex anything. sitemap_url must be the complete URL exactly as gsc_sitemaps lists it. confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| site_url | Yes | ||
| sitemap_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=false, and the description adds genuinely new behavioral context: deleting only stops Google reading the URL as a sitemap and does not touch the file or deindex anything. The confirm=false preview mode is also disclosed, which annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, then the rationale, then the constraints. The background narrative ('Submitting was possible, removing was not...') is slightly verbose but earns its place by justifying the tool's existence and preventing misuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter destructive tool with an output schema present, the description covers purpose, safety semantics, dry-run behavior, and input format. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and largely does: sitemap_url must be the complete URL exactly as gsc_sitemaps lists it, and confirm=false previews the operation. site_url is left unexplained, but its meaning is self-evident from the Google Search Console context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Removes a submitted sitemap from Search Console') and clearly distinguishes itself from the sibling gsc_sitemaps/gsc_submit_sitemap operations. An agent can tell immediately that this is the removal counterpart to submission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use context: stale or wrongly submitted entries, a page accidentally submitted as a sitemap, an orphaned sitemap_index.xml. It also routes the agent to gsc_sitemaps for the exact URL. It doesn't state explicit when-NOT-to-use conditions, but the scope is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_inspect_urlsBatch URL Index InspectionARead-onlyIdempotentInspect
Inspects the Google index status of MANY URLs in one call — a batch wrapper over gsc_url_inspect for site-wide crawl-freshness audits (which URLs Google recrawled since a content change, which are indexed, which were never crawled). Returns a compact row per URL — page_url, verdict, coverage (coverageState), last_crawl, indexing, google_canonical — deliberately WITHOUT the rich-results / mobile detail so the whole table stays within the result-size limit. page_urls is a list of full URLs (a comma/newline-separated string is also accepted). At most limit URLs per call, hard-capped at 20, because Google's URL Inspection API is quota-limited (~2000/day and 600/min per property); if a quota or rate error is hit mid-batch the tool STOPS and reports how many rows it managed. site_url must be a verified property. Same limit as gsc_url_inspect: requesting (re)indexing is not possible through any API.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| site_url | Yes | ||
| page_urls | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations it discloses hard operational constraints: quota of ~2000/day and 600/min per property, a hard cap of 20 URLs, and that the tool STOPS mid-batch on a quota/rate error and reports rows completed. It also flags that (re)indexing is impossible via any API, avoiding a false expectation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A dense but front-loaded paragraph: the batch purpose and use case lead, then constraints, then parameter semantics. No sentence is filler, and the deliberate omission of rich-results/mobile detail is explained rather than left implicit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description pre-announces the compact column set (page_url, verdict, coverage, last_crawl, indexing, google_canonical) and the size-limit rationale, plus quota/auth constraints. Nothing needed to select or call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the load and does: page_urls accepts a list of full URLs or a comma/newline-separated string, limit is capped at 20 (default 15), and site_url must be a verified property. All three parameters get meaning the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('inspects the Google index status of MANY URLs') and explicitly positions itself as 'a batch wrapper over gsc_url_inspect', which separates it cleanly from that sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case ('site-wide crawl-freshness audits — which URLs Google recrawled since a content change, which are indexed, which were never crawled') and names the alternative it wraps, so the agent knows when to reach for the batch vs the single-URL tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_list_sitesSearch Console SitesRead-onlyIdempotentInspect
Lists the verified properties (site / sc-domain) of the connected Search Console account; properties that were added but not yet ownership-verified are listed separately under unverified.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gsc_performanceOrganic Search PerformanceRead-onlyIdempotentInspect
Search Console ORGANIC search performance: queries, pages, countries or devices with clicks, impressions, CTR (%) and average position. Organic data, independent of ads.
dimension takes ONE dimension or a COMBINATION separated by commas: query, page, country, device, date (daily series, returned in date order), or page,query. The combination is what answers "which page ranks for which term", so it is the one to use for cannibalisation work — two pages competing on the same query show up as two rows with the same query (issue #295).
sort = clicks | impressions | ctr | position. This matters more than it looks: Search Console ALWAYS returns rows by clicks, and its own orderBy parameter is accepted and then ignored (measured). So a query with 520 impressions and 2 clicks sits far below the cut and CTR work — which is by definition about high-impression, low-click terms — was impossible. The sort is therefore done here, over every row fetched, and rows_scanned tells you how wide that base was (issue #296).
page / query filter to one page or one query (substring match), so "which queries does THIS page get" is one call.
days: lookback days (Search Console data lags 2-3 days, so the newest days may be empty).
start_date / end_date (YYYY-MM-DD) report an exact window instead of days; the reply's period is the range actually used.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| page | No | ||
| sort | No | clicks | |
| limit | No | ||
| query | No | ||
| end_date | No | ||
| site_url | Yes | ||
| dimension | No | query | |
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gsc_sitemapsSitemapsARead-onlyIdempotentInspect
Lists the sitemaps submitted to a property + their status (last submitted, errors/warnings, whether pending).
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds that the response carries status detail (last submitted, errors/warnings, pending), which is useful orientation, though it overlaps with the available output schema and says nothing about pagination or empty-list behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence beginning with the verb, with the returned status fields appended compactly. No filler or restated naming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full annotations and an output schema, the description covers purpose and the shape of what comes back. The only real gap is the site_url format, which matters for a Search Console property identifier.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there is one parameter, site_url. The phrase 'submitted to a property' loosely signals that the parameter identifies the property, but the description does not state the expected format (full URL vs. sc-domain: form) or that it must match a gsc_list_sites entry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists') and resource ('sitemaps submitted to a property') and scopes it via the property. 'Lists' inherently separates it from the write siblings gsc_submit_sitemap and gsc_delete_sitemap, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'Lists' implies this is the read/inspect path when checking sitemap state, but the description never states when to prefer it over gsc_submit_sitemap, gsc_delete_sitemap, or gsc_inspect_urls, nor any prerequisites (connected property, verification). 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.
gsc_submit_sitemapSubmit SitemapBInspect
Submits/resubmits a sitemap to Google. sitemap_url must be complete (e.g. https://site.com/sitemap.xml). Enables faster crawling of new/updated content.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | ||
| sitemap_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare that this is a non-read-only, open-world, non-idempotent write operation, covering the safety profile. The description adds that resubmission is possible and that the sitemap URL must be complete, but it does not disclose auth requirements, rate limits, or what happens if the sitemap already exists, so added behavioral context is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, front-loads the core action, and each sentence contributes useful information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover the safety profile, reducing the description's burden. However, with 0% schema description coverage, the lack of explanation for site_url and the absence of context about prerequisites or alternative tools leaves meaningful gaps for an agent invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for both parameters. It adds useful meaning for sitemap_url by requiring a complete URL and giving an example, but site_url is left entirely unexplained, so the compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Submits/resubmits a sitemap to Google.' It clearly conveys the action, but does not differentiate itself from sibling tools like gsc_delete_sitemap or gsc_sitemaps, leaving the agent to infer the distinction 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The phrase 'Enables faster crawling of new/updated content' gives a reason to use the tool, but it does not tell the agent when this tool is preferred over alternatives or what prerequisites exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_url_inspectURL Index InspectionARead-onlyIdempotentInspect
Inspects a URL's Google index status: whether it's indexed, last crawl time, robots/indexing state, chosen canonical, mobile usability, and rich results. site_url must be a verified property.
REQUESTING (RE)INDEXING IS NOT POSSIBLE: Google has no API behind the "Request Indexing" button, and its Indexing API only covers JobPosting and BroadcastEvent, so no tool here can do it. To get a stale address recrawled: resubmit a sitemap whose lastmod is the real edit date, link to it from often-crawled addresses, or press "Request Indexing" by hand (about 10 a day).
| Name | Required | Description | Default |
|---|---|---|---|
| page_url | Yes | ||
| site_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds real value beyond that: the verified-property auth requirement, the exact fields returned, and an explicit capability boundary (no reindexing possible via any tool here). It does not mention rate limits or failure modes (e.g., URL not in property).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is tight and front-loaded. The second paragraph is longer than the tool description itself and is largely about a workflow (requesting reindexing) that this tool explicitly does not perform, so its weight is disproportionate to the tool's actual function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the description covers purpose, prerequisite, and capability limits. The gap is parameter format guidance against 0% schema coverage and the absence of any sibling routing note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, so the description must compensate. It adds meaning for site_url (must be a verified property) but says nothing about page_url's expected format (full URL with scheme, must belong to the property) or whether site_url is a domain or URL-prefix property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource (inspects a URL's Google index status) and enumerates exactly what comes back: indexed state, last crawl, robots/indexing state, canonical, mobile usability, rich results. It does not, however, disambiguate from the very close sibling gsc_inspect_urls, leaving the agent to guess 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the prerequisite (site_url must be a verified property) and explicitly rules out a closely adjacent goal, reindexing, with concrete alternatives (resubmit sitemap with real lastmod, internal links, manual button ~10/day). That is strong negative guidance, though it never says when to choose this over gsc_inspect_urls or the broader seo_* inspection tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_workspace_statusGTM Pending ChangesARead-onlyIdempotentInspect
Shows what is WAITING TO BE PUBLISHED in a GTM workspace — every pending tag/trigger/variable change (added, updated, deleted) plus any merge conflicts. Use this before publish_gtm_container to see exactly what would go live, or to answer "why isn't my tag firing yet?" (unpublished changes never run on the site). workspace = a list_gtm_workspaces path (empty → Default Workspace); container = 'GTM-XXXX'/name when workspace is empty.
| Name | Required | Description | Default |
|---|---|---|---|
| container | No | ||
| workspace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuinely useful context beyond that: unchanged-vs-pending semantics ('never run on the site') and that merge conflicts are surfaced. It stops short of describing result shape or ordering, which keeps it out of the top band.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the when-to-use, then the parameter contract — a sound order with no filler. It is one dense paragraph with em-dash asides that could have been broken out, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation here. For a two-optional-parameter read tool, the description covers purpose, timing, the sibling it precedes, and the workspace/container relationship — nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does: workspace is described as a list_gtm_workspaces path with empty defaulting to the Default Workspace, and container as 'GTM-XXXX'/name to be used when workspace is empty. That inter-parameter dependency is exactly the kind of meaning the bare schema lacks, though format details like the full path shape remain implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: shows pending (unpublished) changes in a GTM workspace, enumerating tags/triggers/variables that are added, updated, or deleted, plus merge conflicts. It is clearly distinguished from siblings like list_gtm_workspaces (which enumerates workspaces) and publish_gtm_container (which pushes them live).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it — before publish_gtm_container to preview what would go live — and gives a diagnostic use case ('why isn't my tag firing yet?'). It also explains the exclusion mechanism: unpublished changes never run on the site. Sibling routing is explicit rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instagram_follower_growthInstagram Follower GrowthADestructiveInspect
Reports how many Instagram FOLLOWERS an account gained per day, so follower/profile-visit campaigns can finally be measured. WHY THIS EXISTS: Meta's insights actions breakdown has NO follower row for OUTCOME_TRAFFIC/PROFILE_VISIT campaigns (only link_click, video_view, post_engagement), and the true follower_count metric lives behind Instagram Insights permissions we do not hold. So we snapshot followers_count daily (it IS available with ads_management) and diff it. Returns per Instagram account: series [{day, followers, delta}], first, last, gained, days_tracked — plus today's live count. IMPORTANT: history starts the first day tracking ran; Meta exposes no historical follower numbers, so ask the user to wait for at least two days of data before judging a campaign. Combine gained with the campaign's spend from meta_campaign_insights for a cost-per-follower estimate; state clearly that this is account-level growth, not click-attributed.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| ig_user_id | No | ||
| capture_now | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag readOnly=false/destructive=true; the description adds substantial context beyond that: it discloses the snapshot+diff mechanism, that history starts the first day tracking ran with no backfill possible, and that results are account-level, not click-attributed. It never addresses the destructiveHint=true annotation or what the snapshot write touches, leaving one annotation-driven behavior unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Length is justified for a tool with a non-obvious mechanism, and the purpose is front-loaded in sentence one, with the return shape and limitations ordered sensibly afterward. Minor redundancy between 'WHY THIS EXISTS' and the closing caveat, but each block adds distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, the description needn't restate return fields, and it nonetheless covers mechanism, limitations, and cross-tool usage thoroughly. The remaining hole is input-side: all three undocumented parameters are left to inference, so an agent could call it with a wrong window or account id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters (days, ig_user_id, capture_now), so the description must carry the full burden. It hints at day-level output and 'today's live count', but never defines days' window, what ig_user_id accepts (list_meta_instagram_accounts IDs?), or what capture_now toggles. An agent would have to guess the input semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb+resource+granularity ('Reports how many Instagram FOLLOWERS an account gained per day'), and the WHY THIS EXISTS paragraph explicitly distinguishes it from Meta's insights `actions` breakdown and the follower_count metric it cannot access. An agent can tell this apart from meta_campaign_insights without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the scenario (follower/profile-visit campaigns that could not otherwise be measured), names a concrete complementary tool ('Combine gained with the campaign's spend from meta_campaign_insights'), and gives a prerequisite ('ask the user to wait for at least two days of data'). No explicit when-NOT-to-use or alternative tool to pick instead, 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.
instant_auditInstant AuditBRead-onlyIdempotentInspect
INSTANT AUDIT (activation) — immediately surfaces the most critical findings in a connected Google Ads account: WASTED SPEND (₺) going to search terms with no conversions + impressions lost due to rank + conversion-tracking issues. Auto-selects the active account. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the redundant 'Read-only' line adds little. The one piece of genuine added behavior is 'Auto-selects the active account', which explains how the target is resolved and complements the empty customer_id default. It does not say what happens if no active account exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the tool name and purpose, and packs the findings list into a single dense sentence without filler. The ALL-CAPS emphasis and embedded currency symbol are stylistically noisy but do not cost much space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the annotations cover the safety profile, keeping the bar low. The remaining gap is the two completely undocumented parameters, which is a meaningful omission for a tool that takes a lookback window.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither of the two parameters (days, customer_id) is mentioned anywhere in the description. The 'Auto-selects the active account' line partially explains customer_id being optional, but nothing explains what 'days' controls or its 30-day default, leaving both parameters undocumented in structured and prose form.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (surfaces critical findings) on a specific resource (connected Google Ads account) and enumerates the exact findings categories: wasted spend, lost impression share, conversion-tracking issues. It is clear what the tool produces, though it never distinguishes itself from the sibling account_audit, which sounds closely related.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '(activation)' tag hints at an onboarding use case, but there is no explicit when-to-use statement and no mention of the alternative account_audit or conversion_tracking_health siblings that overlap heavily with the described findings. The agent is left to infer when this is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_statusCheck Reported Issue StatusARead-onlyIdempotentInspect
Checks what happened to a problem the user reported with report_issue: whether it is still open or resolved, when it was reported, and — once it is closed — what was actually done about it.
Without this the only signal was the resolution e-mail, so the honest answer to "is that fixed yet?" was a guess. Pass issue_id for one report, or leave it out to list the user's own recent reports newest first. Only the user's own reports are visible. Read-only and free — checking never costs a credit.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description goes beyond them with useful behavior: only the caller's own reports are visible, results are newest-first when listing, and it is free ('checking never costs a credit'). No rate-limit or pagination detail, hence 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and keeps the operational guidance tight. The sentence about the resolution e-mail and 'the honest answer ... was a guess' is motivational framing that adds value but is slightly verbose and could be trimmed without losing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description still covers cost, read-only nature, visibility scoping, and both parameter modes. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the meaning of issue_id — and it does, explaining the filter-vs-list duality and the omitted-parameter default ordering. It does not restate the integer type, but that is visible in the schema, so the gap is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Checks what happened to a problem the user reported with report_issue') and it explicitly enumerates the returned facts: open/resolved, reported date, and resolution once closed. It also names its sibling/pairing tool (report_issue) so an agent can distinguish the read-side from the write-side.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the two usage modes clearly: pass issue_id for a single report, omit it to list the user's own recent reports newest first. It also scopes visibility ('Only the user's own reports are visible') and contrasts with the prior resolution-email-only workflow. No explicit 'do not use when' guidance, but the decision conditions are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_historical_metricsKeyword Historical MetricsRead-onlyIdempotentInspect
Google Ads Keyword Planner HISTORICAL METRICS for keywords you already have (not new ideas — use keyword_planner for ideas). For each keyword returns the month-by-month search volume (monthly_searches: [{month: 'YYYY-MM', searches}]), average monthly searches, competition (LOW/MEDIUM/HIGH + 0-100 index), the top-of-page bid range (low/high, account currency) and average CPC, plus the close variants Google grouped under it. Use it to see seasonality and trend before judging a keyword ("searches fell" vs "it is seasonal"). keywords: up to 10,000 per call. language_id: Google language constant id (e.g. 1000 English, 1037 Turkish, 1001 German); empty = all languages. geo_ids: Google geo target constant ids (find them with geo_target_search); empty = all locations. start_month / end_month: 'YYYY-MM'; Google keeps roughly the last 4 years, default is the last 12 months. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| geo_ids | No | ||
| keywords | Yes | ||
| end_month | No | ||
| customer_id | Yes | ||
| language_id | No | ||
| start_month | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
keyword_opportunitiesKeyword OpportunitiesARead-onlyIdempotentInspect
Keyword OPPORTUNITIES — from the customer's OWN search-term + keyword data (does NOT require Keyword Planner approval, works with existing access): (1) search terms that converted but aren't added as keywords → ADD (expansion); (2) keywords spending money without conversions → pause/negative; (3) low quality-score keywords. days: number of days to look back.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| min_waste | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds the useful behavioral fact that it relies on the customer's own data and needs no Keyword Planner approval, but says nothing about how the three categories are surfaced or any limits/thresholds applied internally. Adds some value but not 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and then the three ordered categories, with the one parameter note last. Dense but every sentence earns its place; the parenthetical about Keyword Planner approval is justified because it changes the routing decision. Slightly list-heavy but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is fairly rich (output schema exists, so return values need not be re-explained), and the description covers the analytical categories well. The gap is the unexplained 'min_waste' threshold, which governs how the second and third categories are scoped, leaving an agent unable to tune the behavior confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry all parameter meaning. It only explains 'days' ('number of days to look back') and leaves 'min_waste' (default 50) and the required 'customer_id' completely unexplained. Two of three parameters remain opaque, so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (assessment of keyword/search-term data) and enumerates three concrete output categories: converting search terms not yet added, spend-without-conversion keywords, and low quality-score keywords. It also distinguishes itself from the keyword_planner sibling by noting it works off existing customer data. An agent can tell what it produces 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this is the right call ('does NOT require Keyword Planner approval, works with existing access'), which implicitly routes the agent away from keyword_planner. However, it never addresses overlapping siblings like keyword_quality_report or search_terms_report, whose territory item (3) and item (1) partially cover. Clear context, but no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_plannerKeyword PlannerRead-onlyIdempotentInspect
Generates keyword ideas from seed keywords with average monthly searches and competition (Google Ads Keyword Planner). Set the market explicitly: language_id = Google language constant id (e.g. 1000 English, 1001 German, 1002 French, 1003 Spanish, 1037 Turkish); geo_id = Google geo target constant id, several allowed comma-separated (find ids with geo_target_search). Empty language_id = all languages, empty geo_id = all locations worldwide — volumes are then global, so always pass the advertiser's market when you know it. The reply echoes the targeting that was used. For month-by-month history of keywords you already have, use keyword_historical_metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| geo_id | No | ||
| customer_id | Yes | ||
| language_id | No | ||
| seed_keywords | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
keyword_quality_reportKeyword Quality ReportARead-onlyIdempotentInspect
Google Ads keyword QUALITY SCORE OVER TIME — for diagnosing WHEN a Quality Score dropped and WHICH component caused it. Returns, per keyword and per day, the historical Quality Score (1-10) plus its three components: expected CTR, ad relevance and landing page experience (each BELOW_AVERAGE / AVERAGE / ABOVE_AVERAGE). Pass ad_group_id to scope to one ad group (recommended on large accounts). days = lookback window; rows are segmented by date so the trend is visible. This is the HISTORICAL view; list_entities(entity='keywords') gives the CURRENT snapshot (current quality_score / ad_relevance / landing_page_experience / expected_ctr). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| ad_group_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the description has a lower burden. It adds useful context about output granularity (per keyword per day), the 1–10 Quality Score scale, and the three component classifications, though it does not cover pagination or how limit truncates results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then layers in usage, return details, the alternative sibling, and safety in a logical order. It is slightly long and includes some redundancy — notably the read-only statement already covered by annotations and return details already present in the output schema — but every sentence is purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only report tool with an output schema and rich annotations, the description covers purpose, usage, alternative routing, and key output semantics, so an agent is well equipped to invoke it. It falls short of 5 only because the limit parameter's behavior is left unstated and some returned-field detail duplicates the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate, and it does partially by defining days as the lookback window and ad_group_id as a scoping filter recommended for large accounts. However, limit and customer_id receive no semantic explanation beyond the schema's bare names and defaults, leaving clear gaps for a 4-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — a Google Ads keyword QUALITY SCORE report over time — and frames the exact diagnostic question it answers (when a score dropped and which component caused it). It explicitly distinguishes itself from the current-snapshot sibling list_entities(entity='keywords'), so an agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the diagnostic use case, recommends ad_group_id scoping on large accounts, and names the alternative historical-vs-current view with the sibling that supplies the current snapshot. The condition that selects between this and list_entities is made explicit rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_reportKeyword ReportARead-onlyIdempotentInspect
Keyword performance + Quality Score; flags low QS and zero-conversion spend. DATE: period ('today','last_7_days'… or 'YYYY-MM-DD[:...]') overrides days; days=0 = today. NOTE: each row carries an active flag for whether the keyword is serving right now; the report also includes REMOVED/PAUSED keywords that had impressions during the period, as historical data.
PAGING: keywords is ONE PAGE, sorted by cost DESC — limit rows starting at offset
(limit max 1000). The summary fields (total_rows, active_count, qs_hist, active_match_types,
low_quality_score, zero_conversion_spenders) are always computed over the WHOLE account, not
just the page. When truncated is true there are more rows: call again with
offset=next_offset and merge. NEVER report the page as the full keyword list — quote
total_rows. Asking for a huge limit in one call can overflow the client's tool-result
budget and the body will not reach you at all.
include_zero_impressions=true also returns keywords with NO impressions in the period (they are excluded by default) — needed when the user wants the complete keyword inventory.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| offset | No | ||
| period | No | ||
| customer_id | Yes | ||
| include_zero_impressions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe read-only/idempotent profile, but the description adds substantial operational context: each row carries an active flag, REMOVED/PAUSED keywords with impressions are included as historical data, summary fields cover the whole account, truncated results require next_offset merging, and oversized limits can overflow the client result budget.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the report purpose, then organizes DATE, PAGING, and NOTE details into tight operational guidance. Every sentence adds useful behavior or parameter meaning, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex paginated report with an output schema, the description supplies enough to call it correctly: account-wide summaries, historical inclusion, pagination/truncation handling, zero-impression option, and result-size caution. Missing customer_id explanation is minor given the account-context framing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains period syntax and override behavior, days=0 meaning today, limit max 1000, offset, and include_zero_impressions default exclusion; customer_id is left unexplained, and defaults for days/limit are not stated, so coverage is strong but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: keyword performance and Quality Score, plus flagging low QS and zero-conversion spend. It does not name close siblings such as keyword_quality_report, so an agent must infer differentiation from context rather than from explicit routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains date handling, paging behavior, and when to set include_zero_impressions=true for a complete keyword inventory. It does not explicitly compare this tool against siblings like keyword_quality_report or search_terms_report, so the when-to-use guidance is clear but not fully exclusive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_ad_copyLinkedIn Ad CopyARead-onlyIdempotentInspect
Reads the actual AD COPY of specific LinkedIn ads — built for "which messaging performs best" analysis.
Give it a shortlist (comma-separated, max 60): creative_ids (urn:li:sponsoredCreative:N
or bare N — e.g. the top pivotValues from linkedin_campaign_analytics pivot=CREATIVE)
and/or post_urns (urn:li:share:N / urn:li:ugcPost:N).
Per creative you get: ad_copy (the ACTUAL ad text of post-based ads), author_type /
is_thought_leader_ad, format, name, headline, description, landing_page, post_urn,
post_permalink, ad_library_url and — where LinkedIn supports it — official
preview_url / preview_url_mobile.
HOW THE COPY IS OBTAINED (so you can be precise with the user): LinkedIn's Posts API is
NOT open to this connector (needs r_organization_social / Community Management API), so
the copy is read from two PUBLIC sources, in order — LinkedIn's Ad Library
(ad_copy_source: "linkedin_public_ad_library") and, when that is rate-limited or has no
text, the post's own public page (ad_copy_source: "linkedin_public_post_page"). Both are
verified live for Document Ads and Sponsored Content.
RATE LIMIT — READ THIS BEFORE BATCHING: the Ad Library throttles hard. Measured live:
10 lookups fine, 60 in one go → most return HTTP 429 and the penalty window lasts minutes.
So ask for the TOP rows (10–20 creative_ids), not the whole account. A throttled row comes
back with ad_copy_status: "ad_library_rate_limited" — that means TEMPORARY, retry smaller
in a few minutes; it does NOT mean the ad has no copy.
is_thought_leader_ad / author_name describe the POST'S AUTHOR (a person = Thought
Leader Ad, vs the company page); advertiser_name is the paying advertiser and is almost
always the company. When the author cannot be read the field is null (never false) and
thought_leader_ad_status explains why — do not report "not a Thought Leader Ad" on a null.
When a row has no ad_copy, say so plainly and give post_permalink / ad_library_url.
NEVER fabricate ad copy and never pass the internal creative name off as the ad text.
Text-based formats (textAd, spotlight, follow/jobs ads) carry their copy inline, so for those the headline/description here IS the real ad copy.
| Name | Required | Description | Default |
|---|---|---|---|
| post_urns | No | ||
| account_id | Yes | ||
| creative_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds far more: the copy is read from two public sources with named `ad_copy_source` values, the Posts API is explicitly unavailable, the rate-limit signature (`ad_copy_status: "ad_library_rate_limited"`) and its meaning, null-vs-false semantics for author fields, and anti-fabrication rules. This is rich behavioral context beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and inputs before the operational caveats, and nearly every paragraph carries actionable detail (obtaining copy, rate limits, null semantics). It is on the long side and the return-field enumeration overlaps with the output schema, but it does not descend into filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutating-free read tool with an output schema present, the description covers everything an agent needs: input format, source of data, rate-limit handling, null semantics, and fallback behavior when copy is missing. Nothing required to invoke or interpret it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: `creative_ids` (urn:li:sponsoredCreative:N or bare N, comma-separated, max 60) and `post_urns` (urn:li:share:N / urn:li:ugcPost:N) are given syntax and format. The required `account_id` is never explained, leaving one gap in otherwise strong parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Reads the actual AD COPY of specific LinkedIn ads') and frames the analytical purpose ('which messaging performs best'). It clearly separates itself from siblings like list_linkedin_creatives (metadata) and linkedin_campaign_analytics (metrics), telling the agent exactly what unique artifact it returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to use it (messaging-performance analysis), where to source the ids (top pivotValues from linkedin_campaign_analytics pivot=CREATIVE), and gives explicit batching guidance ('ask for the TOP rows (10–20 creative_ids), not the whole account') with the failure mode (HTTP 429, minutes-long window). This is exactly the when/when-not/alternatives coverage the dimension rewards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_audience_forecastLinkedIn Audience ForecastARead-onlyIdempotentInspect
Asks LinkedIn HOW MANY MEMBERS a targeting setup reaches — the pre-flight check to run BEFORE create_linkedin_campaign / update_linkedin_campaign_targeting. LinkedIn will not deliver to an audience under ~300 members, so without this a campaign can be built successfully and then silently fail to serve.
Two modes: pass campaign_id to forecast an EXISTING campaign's current targeting exactly as it is (including facets this connector cannot author), or pass the same URN arguments you would give update_linkedin_campaign_targeting to forecast a targeting you are about to apply. Returns audience_size plus below_delivery_minimum. A result of 0 almost always means an ARCHIVED matched audience (check list_linkedin_audiences) or mutually exclusive facets. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | ||
| geo_urns | No | ||
| account_id | Yes | ||
| skill_urns | No | ||
| campaign_id | No | ||
| industry_urns | No | ||
| job_title_urns | No | ||
| seniority_urns | No | ||
| exclude_geo_urns | No | ||
| staff_count_urns | No | ||
| audience_language | No | ||
| job_function_urns | No | ||
| exclude_audience_urns | No | ||
| include_audience_urns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/no-destructive, but the description adds substantial context beyond them: the ~300-member delivery floor, the silent-failure consequence, the returned fields (audience_size, below_delivery_minimum), and the diagnostic meaning of a 0 result. That is exactly the behavioral detail structured fields cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and the pre-flight role, then the two modes, then the diagnostics — a logical order with no filler sentences. It is dense but each paragraph earns its place; the shouting capitals for emphasis are slightly noisy but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only forecast tool with 14 optional targeting parameters and an existing output schema, the description supplies everything needed to choose the right mode and interpret the response, including the edge cases (archived audience, mutually exclusive facets). Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 14 parameters, so the description carries the load. It clarifies the crucial campaign_id-vs-URN-arguments fork and states that the URN arguments mirror those of update_linkedin_campaign_targeting, which is meaningful guidance. It does not explain individual facet parameters (geo_urns, seniority_urns, exclude_audience_urns, etc.), leaving their semantics to naming convention alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('asks LinkedIn HOW MANY MEMBERS a targeting setup reaches') and explicitly positions itself against siblings create_linkedin_campaign and update_linkedin_campaign_targeting. An agent can distinguish it from linkedin_targeting_search and get_campaign_targeting without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('the pre-flight check to run BEFORE create_linkedin_campaign / update_linkedin_campaign_targeting') plus the failure mode that motivates it. It also delineates two modes of operation and tells the agent which argument set selects which mode, including the fallback pointer to list_linkedin_audiences when the result is 0.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_bid_recommendationsLinkedIn Bid RecommendationsARead-onlyIdempotentInspect
Asks LinkedIn what it actually costs to advertise to a given audience — the SUGGESTED BID and the allowed bid floor/ceiling in the account's own currency, plus the minimum daily budget. Run this BEFORE create_linkedin_campaign and use the returned number as unit_cost.
Why it matters: LinkedIn's minimum bid varies by country, currency and targeting. A bid below the floor makes the campaign fail to deliver (or get rejected outright) — which is exactly what happens on TRY accounts when a generic default is used.
campaign_type: TEXT_AD | SPONSORED_UPDATES | SPONSORED_INMAILS | DYNAMIC. bid_type: CPC | CPM | CPV. geo_urns = comma-separated urn:li:geo:… (from linkedin_targeting_search; empty = country default). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | TR | |
| bid_type | No | CPC | |
| geo_urns | No | ||
| language | No | tr | |
| account_id | Yes | ||
| campaign_type | No | TEXT_AD | |
| objective_type | No | WEBSITE_VISIT |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint/openWorldHint/idempotentHint, so safety is covered; the description's 'Read-only.' is redundant but harmless. It adds genuine behavioral context beyond the annotations: minimum bids vary by country/currency/targeting and sub-floor bids cause non-delivery or rejection, specifically on TRY accounts with generic defaults. It does not mention rate limits or latency, so it falls just short of the top band.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and output, followed by a compact rationale and a parameter glossary. The 'Why it matters' paragraph is longer than strictly necessary but earns its place by justifying the call ordering; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and it still names the key returned number. Combined with the pre-call ordering guidance and failure-mode context, this is nearly complete; only language and objective_type remain undocumented for a 7-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it only partly does: it defines campaign_type values (TEXT_AD | SPONSORED_UPDATES | SPONSORED_INMAILS | DYNAMIC), bid_type values (CPC | CPM | CPV), and the geo_urns format plus the empty-string default meaning. account_id, language, and objective_type go unexplained in both description and schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('asks LinkedIn what it actually costs to advertise to a given audience') and enumerates the concrete outputs: suggested bid, allowed floor/ceiling in account currency, and minimum daily budget. It is clearly distinct from siblings like create_linkedin_campaign (which consumes it) and linkedin_audience_forecast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordering rule — 'Run this BEFORE create_linkedin_campaign and use the returned number as unit_cost' — and names linkedin_targeting_search as the upstream source for geo_urns. Both when-to-use and the dependency chain are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_campaign_analyticsLinkedIn Performance ReportRead-onlyIdempotentInspect
LinkedIn performance report. pivot: CAMPAIGN | CREATIVE | CAMPAIGN_GROUP | ACCOUNT | MEMBER_JOB_TITLE | MEMBER_JOB_FUNCTION | MEMBER_INDUSTRY | MEMBER_SENIORITY | MEMBER_COMPANY_SIZE ... Up to THREE pivots at once, comma-separated (e.g. pivot='CAMPAIGN_GROUP,CAMPAIGN,CREATIVE') via LinkedIn's Statistics finder; combinable pivots are ACCOUNT, CAMPAIGN_GROUP, CAMPAIGN, CREATIVE, CONVERSION. Professional demographic pivots (MEMBER_*) work one at a time. campaign_ids = comma-separated campaign ids to narrow the report. start_date/end_date (YYYY-MM-DD) override days. Performance data is kept 10 years, professional demographic data 2 years (https://learn.microsoft.com/en-us/linkedin/marketing/integrations/ads-reporting/ads-reporting). time_granularity: ALL | DAILY | MONTHLY. fields: comma-separated metric list (empty = default set; up to 20). Demographic pivots have a 12-24h delay and privacy thresholds.
Each row carries pivot_names — the HUMAN-READABLE labels for pivotValues, resolved for
you at EVERY level: campaign / ad set / campaign group / creative names as well as
demographic labels. Report from pivot_names; never show raw URNs like urn:li:title:95
to the user and do NOT try to reverse them with typeahead search (that only goes name→ID).
Anything that genuinely could not be resolved is listed in unresolved_pivot_urns.
With pivot=CREATIVE each row also carries creative_content (headline, description,
landing_page, format), so for TEXT-BASED formats (textAd, spotlight, follow/jobs ads) you
can correlate MESSAGING with performance directly, without a second call.
POST-BASED formats are the exception and in many accounts they are the MAJORITY of spend
(Sponsored Content, Document Ads, Thought Leader Ads). There the copy lives in the
referenced post, so by default creative_content carries post_urn + post_permalink
and ad_copy_status: "not_fetched" instead of the text — the report stays fast. The copy
IS retrievable: rank the rows first, then call linkedin_ad_copy with the top creative
ids (or re-run with include_ad_previews=true) — it reads the real ad text from LinkedIn's
PUBLIC Ad Library, plus author_type / is_thought_leader_ad (Thought Leader Ads) and
preview_url. Both paths are capped at 60 creatives, so narrow down first. Never invent
copy and never present an internal creative name as the ad text.
Rows also carry computed ctr, engagement_rate, cpc, cpm (ratios, not %) — LinkedIn
returns only raw counts; use these instead of recomputing. pivotValues is always
requested even if you pass a custom fields list (without it rows have no identity).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| pivot | No | CAMPAIGN | |
| fields | No | ||
| end_date | No | ||
| account_id | No | ||
| start_date | No | ||
| campaign_ids | No | ||
| time_granularity | No | ALL | |
| include_ad_previews | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
linkedin_targeting_searchLinkedIn Targeting SearchARead-onlyIdempotentInspect
Searches LinkedIn targeting entities by name → returns the URNs you pass to create_linkedin_campaign / update_linkedin_campaign_targeting.
SEARCHABLE facets (free-text; give a query): locations | titles | industries | skills | employers | schools | degrees | fields_of_study. E.g. facet=locations query='İstanbul' → urn:li:geo:…
FIXED-LIST facets (a closed set — LinkedIn has no free-text search for these, so query is OPTIONAL and filters the list locally; leave it EMPTY to get every value): seniorities (10: Unpaid…Owner) | functions (26 job functions) | staff_counts (9 company-size bands) | genders | age_ranges | interface_locales.
So to target 'Director and above', call facet=seniorities with no query, read the URNs off the returned list, and pass them as seniority_urns. Same pattern for functions → job_function_urns and staff_counts → staff_count_urns.
| Name | Required | Description | Default |
|---|---|---|---|
| facet | No | locations | |
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds non-obvious behavioral context beyond that: the closed-set nature of some facets, that query filters locally rather than remotely, and how results feed downstream campaign tools. It stops short of describing pagination or result-list size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the two facet categories are clearly labeled, so it scans well. It is on the long side and uses arrows and parentheticals ('urn:li:geo:…', '(10: Unpaid…Owner)'), but nearly every sentence carries actionable semantics rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only lookup tool with an output schema present, the description covers everything needed to call it correctly: valid facet values, query semantics per facet class, and downstream usage. Return-value formatting is legitimately delegated to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema lists only bare 'facet' and 'query' with defaults, so the description carries the full burden. It compensates thoroughly: it enumerates all valid facet values, explains the default, clarifies that query is optional for fixed-list facets and filters locally, and gives a concrete example (facet=locations query='İstanbul').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Searches LinkedIn targeting entities by name') and immediately explains the role of the output ('returns the URNs you pass to create_linkedin_campaign / update_linkedin_campaign_targeting'). This clearly distinguishes it from sibling search tools like tiktok_targeting_search, microsoft_location_search, and geo_target_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly splits facets into SEARCHABLE (must give a query) and FIXED-LIST (query optional, leave empty for full set) and shows the exact call pattern with a worked example ('call facet=seniorities with no query, read the URNs off the returned list'). It tells the agent when to supply a query and when not to, which is precisely the decision an agent must make.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsGoogle Ads AccountsARead-onlyIdempotentInspect
Lists the user's connected Google Ads account(s). Returns only the account(s) the user selected at connect time; the response carries default_account_id. all_accessible=true returns every account the credential can reach, which also expands client accounts under MCC (manager) accounts. platform is optional and defaults to Google Ads; naming another connected platform (meta | tiktok | linkedin | microsoft | ga4 | search_console | youtube | business_profile) returns the name of that platform's own account-listing tool instead.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | ||
| all_accessible | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds important behavioral context beyond that: only connect-time selected accounts are returned by default, default_account_id is included, all_accessible expands to every reachable account including MCC client accounts, and platform values can redirect to another tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: default behavior, then all_accessible expansion, then platform routing. Every sentence adds operational information, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety and an output schema covering return structure, the description supplies the remaining behavioral and parameter context needed to invoke the tool correctly. It is complete for a two-parameter read-only account listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does. It explains platform default, enumerates accepted platform values, describes the alternative listing tool behavior, and defines all_accessible as expanding to every account the credential can reach.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: lists connected Google Ads accounts. It distinguishes the default behavior from all_accessible and from other platform listing tools, so an agent can select it correctly without opening siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly describes when the default scope applies, when all_accessible=true expands scope, and what happens when another platform is named. The platform routing sentence directly tells the agent to use that platform's own account-listing tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ad_extensionsCampaign ExtensionsARead-onlyIdempotentInspect
Reads the extension assets LINKED to a campaign (sitelink / callout / structured snippet / call / promotion / price). If campaign_id is empty, returns extensions for all campaigns in the account. by_type: how many of each type are attached. READ-ONLY.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the appended 'READ-ONLY' is redundant confirmation rather than new information. The genuine additions are the empty-campaign_id scoping rule and the note that a per-type breakdown is available; nothing is said about result limits or pagination, which matters for an account-wide read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the scope statement front-loaded and no filler. The trailing 'by_type' sentence is slightly ambiguous — it reads like an output field rather than an instruction — but the definition is otherwise efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description is not obliged to document return values, and it covers the tool's main variable behavior (campaign-scoped vs. account-wide). The remaining gap is the undocumented required customer_id and the absence of any pagination/volume caveat on an account-wide read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It does explain that an empty campaign_id widens the query to the whole account, which is meaningful semantics beyond the empty-string default. However, the required customer_id parameter is never mentioned, and the stray 'by_type' reference does not correspond to any declared parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Reads the extension assets LINKED to a campaign') and enumerates the six asset types, so the agent knows exactly what is returned. It does not, however, distinguish itself from the nearby sibling list_extension_assets, which an agent could easily confuse with this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides one useful usage rule — omitting campaign_id returns extensions for all campaigns in the account — which is a real behavioral contract, not just a restatement. But it gives no guidance on when to prefer this tool over list_extension_assets, manage_extension_assets, or extension_asset_performance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ad_policy_issuesList Ad Policy IssuesARead-onlyIdempotentInspect
Google Ads ad POLICY / DISAPPROVAL report — which ads were DISAPPROVED or limited, and WHY. Returns per ad: campaign + ad group, ad id and type, approval_status (APPROVED | APPROVED_LIMITED | DISAPPROVED | AREA_OF_INTEREST_ONLY), review_status (REVIEWED | UNDER_REVIEW | REVIEW_IN_PROGRESS), and the policy topics that triggered it (topic name + type, e.g. PROHIBITED / RESTRICTED / LIMITED) WITH Google's evidence for each topic: the exact triggering ad text (evidence.triggering_texts), the flagged websites / non-working destination URL, and the constraints (which countries the ad is limited in, missing certification). When Google sends no detail for a topic the entry carries detail_available=false. Use this whenever a campaign or ad group reports HAS_ADS_DISAPPROVED in its status_reasons: that flag says something is disapproved but not WHICH ad or WHY, and this tool answers both without opening the Google Ads UI. only_problems=true (default) returns just the ads that are not fully approved; false returns every ad with its approval state. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| customer_id | Yes | ||
| only_problems | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces 'Read-only.' It also adds genuine behavioral context beyond annotations: the detail_available=false fallback when Google sends no detail, the enumerations of approval_status/review_status, and the evidence payload shape. It does not cover rate limits or pagination, keeping 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then return shape, then usage guidance — a logical order. It is dense and long (the enum lists are verbose), but nearly every clause carries information; only minor trimming is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety and an output schema covering return structure, the description supplies everything else an agent needs: the trigger condition, the filtering default, the enum values, and the no-detail edge case. Nothing required 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It fully explains only_problems ('true (default) returns just the ads that are not fully approved; false returns every ad with its approval state'), but limit and customer_id get no explanation. Partial compensation for a 3-parameter tool warrants the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource and scope: 'Google Ads ad POLICY / DISAPPROVAL report — which ads were DISAPPROVED or limited, and WHY.' It enumerates the exact fields returned (approval_status, review_status, policy topics, evidence), making it unmistakable versus generic siblings like get_report or list_entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'Use this whenever a campaign or ad group reports HAS_ADS_DISAPPROVED in its status_reasons,' and contrasts what the flag does vs. doesn't tell you. That is a precise when-to-use rule that no sibling states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assetsAsset LibraryARead-onlyIdempotentInspect
Lists the account's ASSET LIBRARY ("Öğeler" / Assets) — ALL asset types across the whole account (not just one campaign): sitelinks, callouts, structured snippets, calls, IMAGES, promotions, prices, lead forms, and text assets. Shows each asset's type, a readable label, id, and source (ADVERTISER = you created it, AUTOMATICALLY_CREATED = Google auto). Optionally filter with asset_type (e.g. IMAGE, SITELINK, CALLOUT, PROMOTION). The reply always reports the TRUE total in the account and says when the list was cut short by limit, so a capped page is never mistaken for the whole library. include_usage=true also says, per asset, whether it is used by a running ad, only by paused/removed ones, or by nothing at all — that is what to check before any clean-up. NOTE: Google Ads has NO API to delete library assets (the API supports create and update only), so unused assets cannot be removed from here or in bulk; they can only be unlinked from campaigns (remove_extension_assets) or hidden in the Google Ads interface. LOCATION is NOT an asset-library type — location assets come from the Google Business Profile link and are handled by add_location_assets. BUSINESS NAME / LOGO are NOT asset types in Google Ads — they are FIELD TYPES of a TEXT or IMAGE asset, so look for them with list_extension_assets (which reports campaign- and account-level BUSINESS_NAME / BUSINESS_LOGO / LANDSCAPE_LOGO links) and attach them with manage_extension_assets(link_asset_ids=..., link_field_type=...). include_approval=true adds, per asset, its LINK approval status across campaigns and the account — approval_status is ELIGIBLE / PENDING / LIMITED / NOT_ELIGIBLE, with reasons such as ASSET_DISAPPROVED — plus a top-level approval_summary of the disapproved/limited ones. That is how you answer "which sitelinks were not approved" (the ad-level policy report, list_ad_policy_issues, covers ads only and never shows extension/sitelink assets). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| asset_type | No | ||
| customer_id | Yes | ||
| include_usage | No | ||
| include_approval | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly/idempotent/non-destructive), and the description adds substantial behavior beyond them: source values, guaranteed reporting of the TRUE total, explicit flagging when `limit` truncates the list, and the hard constraint that no API exists to delete library assets. This is exactly the kind of context that prevents an agent from planning an impossible deletion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and return semantics are front-loaded, but the description is a dense wall of run-on sentences, bundling several distinct clarifications (usage, delete limitation, non-types, approval) into one paragraph with no structural breaks. The content is mostly earned, but scannability suffers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Though an output schema exists (so return values needn't be spelled out), the description still documents the key returned fields and both opt-in behaviors, fully arming an agent to call and interpret this tool. Nothing material is missing for a read-only list tool with sibling ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry all parameter meaning, and it does: asset_type examples (IMAGE, SITELINK, CALLOUT, PROMOTION), include_usage semantics (running/paused/removed/none), include_approval with its enum values (ELIGIBLE/PENDING/LIMITED/NOT_ELIGIBLE) and reasons, and limit's truncation behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Lists the account's ASSET LIBRARY') and enumerates exactly what it covers across the whole account, not one campaign. It proactively distinguishes itself from sibling concerns (list_extension_assets, add_location_assets, remove_extension_assets) so an agent can route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when/when-not guidance: names the filter condition for asset_type, tells the agent that clean-up is done via remove_extension_assets or the UI, and clarifies that LOCATION and BUSINESS NAME/LOGO are NOT library types and belong to other tools. It even names the sibling (list_ad_policy_issues) for the adjacent task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_audiencesList AudiencesARead-onlyIdempotentInspect
Lists the account's audiences (remarketing / rule-based / customer-match / lookalike): id, name, type, membership status, membership duration (days), Display/Search network size.
definition=true also returns WHAT DEFINES each list, which the name alone does not tell you and which you need before attaching or — far more dangerous — EXCLUDING one: for a RULE_BASED list the URL/event rule items with their operators and lookback window; for a LOGICAL/COMBINED list the constituent lists resolved to NAMES with their ANY/ALL/NONE operator; for a SIMILAR list the seed list; for CRM_BASED the upload key and data source. Excluding a list that turns out to be "anyone who reached any thank-you page" silently suppresses real prospects, so check the rule rather than trusting the name. Google does NOT store a readable rule for every list — older ones come back with definition_available=false, and then the Google Ads interface (Tools, Audience manager) is the only place to read it. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| definition | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavioral traits: definition=true returns rule details per list type, Google may not store a readable rule for every list, older lists return definition_available=false, and the Google Ads interface is the only fallback. This adds substantial context beyond the read-only and idempotent annotations. The final 'Read-only' label is redundant with annotations but does not detract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core list operation and returned fields, then moves into the important definition=true behavior and caveats. It is dense but largely earns its length, though the warning about excluding lists is somewhat verbose and the trailing 'Read-only' phrase is redundant with annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the output schema, and the strong read-only annotations, the description is nearly complete. It covers the definition behavior and its limitations well. The main gap is lack of guidance on the limit parameter, and customer_id is only implicitly identified as the account selector.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It thoroughly explains the definition parameter, including what each list type returns when definition=true, but it does not explain the limit parameter or the required customer_id parameter. Definition semantics are strong, but the other two parameters remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it lists an account's audiences and enumerates the audience types and returned fields. It also anchors the tool to Google Ads via references to rule-based lists and the Google Ads interface. However, it does not explicitly differentiate itself from sibling audience-listing tools such as list_meta_audiences or list_linkedin_audiences, so sibling differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description strongly explains when to set definition=true and warns against excluding a list without checking its rule, which gives useful usage context. It does not, however, state when to choose this tool over the various other list_audiences siblings across platforms, nor does it describe when not to use it. Usage is therefore implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_business_profile_photosList business profile photosRead-onlyIdempotentInspect
Lists the photos on a Google Business Profile location: each photo's category, Google URL, thumbnail and id, counts per category, and which key categories (such as COVER or LOGO) have no photo yet. category filters to one kind; limit shortens the photo list but the counts always cover the whole gallery. location = a gbp_list_locations value or the business name/domain. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| category | No | ||
| location | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_conversion_actionsList Conversion ActionsARead-onlyIdempotentInspect
Lists Google Ads CONVERSION ACTIONS with the columns of the Goals > Conversions > Summary table: name, id, category (Request quotes / Submit lead forms / Sign-ups / Contacts / Page views…), status, type, whether it is INCLUDED in the Conversions metric (included_in_conversions — the REAL Primary/Secondary flag in goal-based accounts, NOT the legacy primary_for_goal), counting (ONE_PER_CLICK / MANY_PER_CLICK), click-through and view-through lookback windows in days, default value, and recorded conversions + value over the last days. Use this to see which action sits in which category and which one is biddable, then join with list_conversion_goals (which says which CATEGORIES are biddable). NOTE: the UI 'Tracking status' diagnostic (Active / Needs attention / No recent conversions) is computed by Google and is not exposed as a single Google Ads API field, so it is not returned here. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotations, it discloses a subtle data-model behavior: `included_in_conversions` is the real Primary/Secondary flag in goal-based accounts, NOT the legacy `primary_for_goal`. It also proactively explains an absent field (the UI 'Tracking status' diagnostic is computed by Google and not exposed via the API), which prevents the agent from hunting for it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with verb+resource before the column enumeration and the sibling reference. Dense and run-on, and the column list partly duplicates the output schema, but each clause carries real semantic value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be re-explained; the description nonetheless clarifies the trickiest field's semantics and flags the one field that is deliberately missing. Nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the burden. It implies the meaning of `days` ('recorded conversions + value over the last `days`') but never explains the required `customer_id` parameter. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Lists Google Ads CONVERSION ACTIONS') and enumerates the exact columns returned, defining scope precisely. It distinguishes itself from the sibling list_conversion_goals by clarifying the complementary roles (actions vs categories).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says what to use it for ('see which action sits in which category and which one is biddable') and names the join partner (list_conversion_goals) plus the routing logic. An agent knows exactly when to pick it and what to combine it with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversion_goalsRead Conversion GoalsARead-onlyIdempotentInspect
Lists Google Ads CONVERSION GOALS — the modern lever that decides which conversion CATEGORY is PRIMARY (biddable: counted in the Conversions column + feeds Smart Bidding) vs SECONDARY. In goal-based accounts THIS governs bidding, not a single action's primary_for_goal flag — so it is the correct way to demote/promote 'local actions' too. Each goal is identified by category + origin (e.g. ENGAGEMENT/GOOGLE_HOSTED = Google Business Profile 'other engagements' / map-profile signals; GET_DIRECTIONS/GOOGLE_HOSTED = directions; DEFAULT/WEBSITE = website leads; PHONE_CALL_LEAD/CALL_FROM_ADS = calls from ads). Pass campaign_id to also see that campaign's overrides. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the trailing "Read-only." is redundant, but the description adds real behavioural context the annotations cannot: what a goal actually controls (biddable Conversions column + Smart Bidding), the category/origin identity model, and the campaign-override behaviour. Pagination and result limits remain unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the sibling distinction before the explanatory examples. The category/origin enumeration is long but each pair maps a real value to a concrete signal, so the length is buying information rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be described, and annotations cover the safety profile. The remaining gap is the undocumented customer_id scope parameter; otherwise the conceptual context is unusually complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden. It explains campaign_id well ("also see that campaign's overrides"), which is the non-obvious optional param, but customer_id is never described in either the schema or the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Lists Google Ads CONVERSION GOALS") and immediately scopes it against a near-neighbour concept: it governs which conversion CATEGORY is primary, "not a single action's primary_for_goal flag." An agent can distinguish this from list_conversion_actions and list_custom_conversion_goals 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use rule ("In goal-based accounts THIS governs bidding ... the correct way to demote/promote 'local actions' too") and a conditional extension ("Pass campaign_id to also see that campaign's overrides"). It never names the sibling tools it supersedes, so routing is guided by concept rather than by explicit alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_conversion_goalsRead Custom Conversion GoalsARead-onlyIdempotentInspect
Lists the CUSTOM conversion goals of a Google Ads account — the named bundles of conversion actions that campaigns can optimise for, with the actions inside each one and the campaigns using it.
This is what to check when Google refuses to delete a conversion action with "cannot be removed because it is used by one or more of your custom goals": the blocking goal is in this list, and the action has to leave the goal (update_custom_conversion_goal) before the action can be deleted. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the trailing 'Read-only' is largely redundant. What the description adds beyond the structured fields is the shape of the result (member actions per goal plus the campaigns using each goal) and the operational scenario that makes the output actionable — useful context for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, scoped statement first, usage scenario second — well front-loaded. The quoted error string is long but earns its place by defining the trigger; overall there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to spell out return values, yet it still sketches the result structure. Annotations cover the safety profile and the description covers scope and use case, so 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions the single customer_id parameter. Because the sole parameter is self-evidently named and typed, this is a minor gap rather than a blocking one, but no syntax, format or sourcing guidance is added beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Lists) and resource (CUSTOM conversion goals of a Google Ads account), then defines what they are — named bundles of conversion actions with their member actions and the campaigns using them. The repeated emphasis on 'CUSTOM' cleanly separates it from the sibling list_conversion_goals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit, concrete trigger: check this when Google refuses to delete a conversion action because it is used by a custom goal, and it names the follow-up tool (update_custom_conversion_goal). It stops short of explicitly contrasting against list_conversion_goals/list_conversion_actions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entitiesList EntitiesRead-onlyIdempotentInspect
Lists the entities (campaigns, ad groups/ad sets, ads, keywords) of ANY connected ad platform with their IDs — use this instead of looking for a platform-specific list tool. platform: google_ads (default) | meta (facebook/instagram) | tiktok | linkedin | microsoft. entity: campaigns | ad_groups (adsets on Meta, adgroups on TikTok) | ads | keywords (Google Ads) | campaign_groups & creatives (LinkedIn). account = that platform's account id (for Google Ads you may also use customer_id); leave empty to use the connected/default account. parent_id narrows children to one parent (e.g. the campaign id when listing ad groups/ad sets, the ad set id when listing ads). Call describe(platform) to see which entity names a platform accepts.
DATES — read them before you judge anything: rows carry when each item was created, last changed and is scheduled to run, so "new / still learning / untouched for months / changed yesterday" is measured, not guessed. Google Ads: created_time (exact, Google keeps it 30 days), created_within_90d, updated_time (last 90 days; empty = unchanged for 90+ days), campaign start_time/end_time. Meta: created_time, updated_time, start_time/stop_time (campaign), start_time/end_time (ad set). TikTok: created_time, updated_time, ad group start_time/end_time. LinkedIn: created_time, updated_time, start_time/end_time (ISO, UTC). Microsoft: ad group start_date/end_date only (the API exposes no creation date). Before attributing a result to a change, compare these dates with the report period (get_report with start_date/end_date or a day breakdown).
Google Ads specifics (platform='google_ads'):
PAGING: rows is ONE PAGE — limit rows from offset (limit max 2000). total_rows is the
real count and serving_count / serving_summary are always computed over ALL rows, not the
page. truncated=true → call again with offset=next_offset and merge; never present the page
as the complete list. Keyword and ad pages are returned as FLAT rows (a keyword inventory can
run to thousands of rows — the raw nested GAQL form overflows the client's tool-result budget
and then nothing reaches you at all).
CURRENT BIDS: ad group rows carry max_cpc (and target_cpa when set), keyword rows carry
max_cpc plus effective_max_cpc and bid_source. Read the bid before changing it — a
percentage change ("raise this by 30%") is otherwise sent as an absolute number and can
LOWER the bid instead. bid_source: AD_GROUP_CRITERION means the keyword carries its own
bid and OVERRIDES the ad group: raising the ad group bid then changes nothing for that
keyword. Average CPC from a report is not a substitute — it is what was paid, not the
ceiling that was set, and it is usually lower.
ACTIVE / RUNNING / LIVE = is_serving: true (derived from serving_status), NOT
status: "ENABLED". They are different things: a campaign whose end date has passed still
reads status=ENABLED while the Google Ads UI shows it as "Ended". When the user asks which
campaigns are active, answer from is_serving and account for the rest using serving_status
status_reasons(ENDED, PAUSED, NOT_ELIGIBLE, MISCONFIGURED, PENDING...). Never present a status=ENABLED row as active on its own — the user is comparing your answer to their Google Ads screen.serving_summarygives the counts.
For campaigns it ALSO returns the bidding strategy (bidding_strategy), daily budget (daily_budget), targets (target_cpa / target_roas) and the max CPC ceiling (max_cpc, in account currency; null means no ceiling is set AT CAMPAIGN LEVEL). When max_cpc_note is present the campaign uses a portfolio strategy and max_cpc was not read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| entity | No | campaigns | |
| offset | No | ||
| account | No | ||
| platform | No | ||
| parent_id | No | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_extension_assetsList Extension AssetsARead-onlyIdempotentInspect
Lists a campaign's CURRENT extension assets (sitelinks, callouts, call, structured snippets, promotions, prices, WhatsApp message extensions, app, hotel callout, lead form) with the asset id and the resource_name needed to remove each one. If campaign_id is empty, covers all campaigns. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, so the safety profile is covered. The description adds useful context beyond annotations: it emphasizes CURRENT assets, lists the returned fields, and defines the empty-campaign_id fallback scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verb and scope, then adds the two behavioral clauses in a compact form. The long parenthetical asset list is dense but functional, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be explained, and the scope plus campaign_id fallback are covered. Only the customer_id parameter lacks documentation, a minor gap for a simple two-parameter list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains campaign_id well ('if empty, covers all campaigns') but says nothing about customer_id, leaving one of two parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb ('Lists') and resource ('a campaign's CURRENT extension assets') and enumerates the concrete asset types returned. It is clearly distinguishable from sibling write tools like manage_extension_assets and remove_extension_assets, which mutate the same resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the practical reason to call it ('the asset id and the resource_name needed to remove each one'), which implicitly routes to the removal workflow. It scopes behavior via campaign_id, but does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_google_ads_experimentsList google ads experimentsRead-onlyIdempotentInspect
Lists Google Ads campaign experiments for one connected customer account, including status, dates and the campaigns each experiment currently locks. This public OpenAI operation is read-only and cannot end, promote or remove an experiment.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_gtm_accountsGTM AccountsBRead-onlyIdempotentInspect
Lists the Google Tag Manager accounts accessible by the connected user (path, accountId, name).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the returned field names, but with an output schema present that is largely redundant, and it omits any auth or scope caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tightly-worded sentence with the verb and resource front-loaded. The trailing field list (path, accountId, name) is arguably wasted since an output schema already defines the return shape, but the sentence is otherwise efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool, annotations supply the safety profile and an output schema supplies the return shape, so little must be said. The main gap is the absence of any prerequisite or routing guidance, but overall the definition is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There is nothing to document, and the description mentions no inputs because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (Google Tag Manager accounts) with clear scope (accessible by the connected user). It is distinguishable from sibling GTM tools like list_gtm_containers or list_gtm_tags, though it does not explicitly name a sibling to route against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives. An agent is not told that this is the natural entry point of the GTM hierarchy or that connect_tag_manager must run first, leaving usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gtm_containersGTM ContainersARead-onlyIdempotentInspect
Lists the containers of a GTM account (name, public id 'GTM-XXXX', containerId, usageContext=web/ios/android, path). account = a list_gtm_accounts value or name/id (leave empty if there is only one account).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds a list of returned fields, but with an output schema present that information is largely redundant, leaving little behavioral value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by the field list and the parameter note. It is compact with no filler, though the parenthetical field enumeration is somewhat dense and overlaps with the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only list tool with an output schema and full annotations, the definition covers purpose, parameter meaning, and default behavior. The only minor omission is that it never points to which sibling tool supplies the account value or mentions pagination, but 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the single parameter, and it does: 'account = a list_gtm_accounts value or name/id', explaining both the accepted value forms and cross-referencing the sibling tool that produces them. The empty-default behavior is also clarified, which the bare string schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Lists the containers of a GTM account') and enumerates the returned fields, so the agent knows exactly what this does. It does not explicitly distinguish itself from sibling list tools like list_gtm_accounts or list_gtm_workspaces, but the distinct resource makes the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the note '(leave empty if there is only one account)' hints at when the parameter can be omitted. There is no explicit when-to-use/when-not guidance and no naming of alternative tools such as list_gtm_accounts to fetch the account value first, so the agent must infer the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gtm_permissionsGTM User PermissionsARead-onlyIdempotentInspect
Lists the USER PERMISSIONS of a GTM account — who can access it and at what level (account: noAccess/user/admin; per-container: read/edit/approve/publish). account = a list_gtm_accounts value or name/id (empty if only one).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is fully covered and the description need not restate it. The description usefully characterizes the shape of the data returned (account: noAccess/user/admin; container: read/edit/approve/publish), which is real added context, but it says nothing about authorization requirements or whether the visibility of results is scoped to the caller's own permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with an em dash and one parenthetical; nothing is wasted and the core action leads. The permission-level enumeration is dense but earns its place by defining the returned vocabulary, though it could be split for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return formatting is out of scope, and the remaining needs for a one-optional-parameter, read-only listing tool are covered: what is listed, at what granularity, and how to supply the account. Sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single `account` parameter, so the description must carry the burden — and it does, explaining that the value comes from list_gtm_accounts and may be a name or id, plus the default behavior when empty. It stops short of describing what happens with an invalid or ambiguous account value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Lists the USER PERMISSIONS of a GTM account") and goes on to enumerate exactly what the data contains — access level, account vs. per-container scopes. It does not explicitly distinguish itself from the sibling write tool manage_gtm_permissions, so the differentiation is implied by the verb 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the parenthetical "empty if only one" tells the agent when the parameter may be omitted, and list_gtm_accounts is named as the source of the account value. There is no explicit statement of when to call this versus manage_gtm_permissions, nor any prerequisite (e.g., that the caller must already have account access) to view permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gtm_tagsGTM TagsARead-onlyIdempotentInspect
Lists the TAGS in a workspace (name, tagId, type e.g. 'gaawe'=GA4 event / 'html'=Custom HTML / 'awct'/'sp'=Google Ads conversion, firingTriggerId). Also returns each tag's PARAMETERS flattened as params (e.g. conversionId + conversionLabel for a Google Ads conversion tag — use this to verify which conversion a tag fires and catch double-counting). workspace = a list_gtm_workspaces path (leave empty → Default Workspace of the resolved container). container = 'GTM-XXXX'/name if workspace is empty.
| Name | Required | Description | Default |
|---|---|---|---|
| container | No | ||
| workspace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: parameters are returned flattened as `params`, and an empty workspace silently resolves to the Default Workspace of the resolved container — a non-obvious default that affects results. It omits auth/permission and 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, and the remaining sentences are dense but each adds information (returned fields, params rationale, parameter semantics). The tag-type code glosses and parenthetical asides make it read as a single packed block, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return-value documentation is not strictly required, yet the description still names the key returned fields and the flattened params. Combined with complete parameter semantics and an explicit use case, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it does: `workspace` is defined as a list_gtm_workspaces path, `container` accepts 'GTM-XXXX' or a name and is only relevant when workspace is empty, and the empty-string default is spelled out for both. That is enough for an agent to supply correct values without guessing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the TAGS in a workspace') and then enumerates the returned fields (name, tagId, type, firingTriggerId, flattened params), which clearly separates it from list_gtm_triggers, list_gtm_variables and list_gtm_workspaces. The decoding of tag type codes ('gaawe'=GA4 event, 'html'=Custom HTML, 'awct'/'sp'=Google Ads conversion) makes the resource concrete rather than generic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real usage context — 'use this to verify which conversion a tag fires and catch double-counting' — which tells the agent why to reach for this tool. It does not, however, name explicit alternatives (e.g. list_gtm_triggers/variables for other entity types) or state when not to use it, so the routing guidance is implied rather than complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gtm_triggersGTM TriggersARead-onlyIdempotentInspect
Lists the TRIGGERS in a workspace (name, triggerId, type e.g. 'pageview'/'click'/'customEvent'). Also returns each trigger's conditions — the firing filter flattened as {filter, op, arg0, arg1} (e.g. op='CONTAINS', arg0='{{Page URL}}', arg1='/tesekkur') so you can READ BACK and verify a URL/click filter after creating it, without a live Preview. A tag fires on its trigger(s). workspace/container: see list_gtm_tags.
| Name | Required | Description | Default |
|---|---|---|---|
| container | No | ||
| workspace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds value beyond that by disclosing the flattened conditions return shape ({filter, op, arg0, arg1}) with a worked example, telling the agent exactly what a read will yield and why it is useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then the extra conditions detail, then the parameter pointer. Mostly tight, though the inline conditions example is dense enough that it slightly taxes readability. Little waste overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with a full output schema and complete safety annotations, the description covers purpose, the key use case, return shape, and how to obtain the identifiers. Only the parameter defaults and any scoping caveat remain unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and both parameters (container, workspace) are undocumented in the schema. The description partially compensates by pointing to list_gtm_tags as the source of workspace/container identifiers, but never explains the parameters directly or that both default to empty strings, so the gap is only half-filled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Lists the TRIGGERS in a workspace') and itemizes the returned fields (name, triggerId, type). It clearly distinguishes itself from list_gtm_tags and list_gtm_variables, and the example types ('pageview'/'click'/'customEvent') leave no ambiguity about what a trigger is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case: read back and verify a URL/click filter after creating it 'without a live Preview'. It also routes the agent to list_gtm_tags for workspace/container values. It stops short of explicitly contrasting with other list_* siblings, but the primary when-to-use is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gtm_variablesGTM VariablesARead-onlyIdempotentInspect
Lists the user-defined VARIABLES in a workspace (name, variableId, type e.g. 'c'=constant / 'v'=Data Layer / 'jsm'=Custom JS). Also returns each variable's params flattened (e.g. a constant's value, or a Data Layer variable's name) so you can read back its config. workspace/container: see list_gtm_tags.
| Name | Required | Description | Default |
|---|---|---|---|
| container | No | ||
| workspace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds non-obvious behavioral detail: the response flattens each variable's `params` (e.g. a constant's value or a Data Layer variable's name), which tells the agent the config is readable from the output. It stops short of describing pagination or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and result shape, followed by a short pointer for arguments; nothing is wasted. The type-code examples add length but earn their place by disambiguating variable types.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple read with an output schema available, and the description still explains what the returned config looks like. The only real gap is parameter format guidance, which is more a schema deficiency than a description one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the two parameters (container, workspace) carry no semantics from the schema and the burden falls on the description. It only cross-references list_gtm_tags without saying whether these are IDs or names, or what the empty-string default implies, so the compensation is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the user-defined VARIABLES in a workspace') and enumerates the fields returned (name, variableId, type) with concrete type-code examples. This clearly separates it from nearby siblings like list_gtm_tags and list_gtm_triggers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Routes the agent to list_gtm_tags to resolve the workspace/container arguments, which establishes a useful prerequisite and ordering. It does not state any when-not condition or alternative listing tool, so it falls short of a full when/when-not answer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gtm_versionsGTM Version HistoryRead-onlyIdempotentInspect
Lists a GTM container's VERSION HISTORY (newest first) and marks which one is currently LIVE. Each version is a published snapshot — use this to see what changed and when, or to pick a version to roll back to with rollback_gtm_version. container = 'GTM-XXXX'/name (empty if only one).
DATES: the newest details versions (default 10, max 25, 0 = off) also carry saved_at (when the version was created/saved, UTC) and description (the change notes typed at publish time). Use them to answer 'what changed between date X and Y'. Google's API does not expose who published a version — that is only visible in the GTM web UI.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| details | No | ||
| container | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_gtm_workspacesGTM WorkspacesARead-onlyIdempotentInspect
Lists the workspaces of a container (name, workspaceId, path). Tags/triggers/variables live inside a workspace; changes are staged there until published. container = 'GTM-XXXX' / container name / full path (leave empty if there is only one).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| container | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful domain context (changes staged in a workspace until published), but no behavioral traits beyond that such as auth needs or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: verb+resource front-loaded, followed by domain context and parameter format. No wasted wording, though the return-field parenthetical is somewhat redundant given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-param read-only list tool that has an output schema, the description is largely sufficient. The only meaningful gap is the undocumented 'account' parameter, which could affect a call where account scoping matters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does a good job on 'container' (accepted formats GTM-XXXX / name / full path, plus the empty-case rule), but the 'account' parameter is entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the workspaces of a container') and even enumerates the returned fields (name, workspaceId, path). The resource is distinct from siblings like list_gtm_containers or list_gtm_tags, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers one conditional hint ('leave empty if there is only one') that guides the container parameter, and explains the staging model. However, there is no explicit when-to-use-this-vs-alternatives guidance against the many GTM list_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ip_exclusionsList IP ExclusionsARead-onlyIdempotentInspect
Lists the campaign-level IP exclusions (click fraud / fake clicks / invalid clicks / bot IP blocking; TR: sahte tıklama, geçersiz tıklama, IP engelleme listesi) on the account. Give campaign_id to scope to one campaign, or leave empty for the whole account. Returns each excluded IP with its campaign and criterion_id (needed to remove it via unblock_ip_addresses; to ADD/block new IPs use block_ip_addresses). Google Ads allows up to 500 IP exclusions per campaign. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the trailing 'Read-only' is largely redundant. The description does add real context beyond the annotations: the 500 IP exclusions per campaign limit and the fact that the returned criterion_id is required for subsequent removal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then scoping, then cross-references, then the limit. The inline Turkish translation is expendable noise for most agents, but the definition otherwise earns its sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema, everything an agent needs is present: scoping behavior, sibling routing, return-field purpose and the platform limit. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it does: campaign_id is explained as an optional scoping switch ('leave empty for the whole account') and customer_id is implied by 'on the account'. It also documents a returned field (criterion_id) that the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Lists the campaign-level IP exclusions') and scopes it precisely to the account/campaign. An agent can distinguish it from sibling block_ip_addresses and unblock_ip_addresses without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to pass campaign_id to scope to one campaign or leave it empty for the whole account, and routes the agent to the right siblings: unblock_ip_addresses to remove, block_ip_addresses to add. When-to-use and alternatives are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_lead_form_submissionsLead Form SubmissionsARead-onlyIdempotentInspect
Reads the LEADS people submitted through a Google Ads lead form — name, phone, email and the answers to your qualifying questions — so they can be worked without opening the Google Ads interface. asset_id narrows it to one form. Google keeps this data for 30 DAYS and then deletes it, so anything older is gone for good; for a permanent copy set a webhook on the form (create_lead_form webhook_url) and store the leads yourself. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| asset_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description adds a genuinely critical trait beyond them: a 30-day retention window after which data is permanently deleted. This is exactly the kind of behavioral context the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is returned, then scoping, then the retention warning and the webhook workaround. Dense but nearly every sentence earns its place; the webhook remedy is slightly tangential but operationally relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The retention caveat and read-only nature are covered; the remaining gap is the undocumented limit parameter and pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It explains asset_id (narrows to one form) and implicitly bounds days via the 30-day retention note, but 'limit' and the required 'customer_id' remain undescribed. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Reads the LEADS people submitted through a Google Ads lead form') and enumerates the returned fields (name, phone, email, qualifying answers). This clearly distinguishes it from sibling lead tools such as list_meta_lead_forms, download_meta_leads and site_form_submissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: use asset_id to scope to one form, and be aware Google purges after 30 days. It also names the alternative for permanent storage (create_lead_form with webhook_url). It stops short of explicitly routing the agent away from sibling lead-download tools, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linkedin_ad_accountsLinkedIn Ad AccountsARead-onlyIdempotentInspect
Lists the user's connected LinkedIn ad account(s). Returns only the account(s) the user selected at connect time; the response carries default_account_id. all_accessible=true returns every account the credential can reach.
| Name | Required | Description | Default |
|---|---|---|---|
| all_accessible | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this a safe, idempotent, closed-world read. The description adds real behavioral context beyond them: that results are restricted to accounts selected at connect time, that the response carries default_account_id, and that all_accessible widens the reach. This is meaningful disclosure the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, front-loaded with the core purpose before the default-scope and parameter behavior. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-format explanation is not required; the description still usefully flags default_account_id. Together with the parameter clarification, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema names all_accessible but never explains it. The description compensates by defining the parameter's semantics precisely (all_accessible=true returns every account the credential can reach), which is exactly the missing meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (the user's connected LinkedIn ad accounts), cleanly separating it from the many other list_* sibling tools such as list_meta_ad_accounts or list_microsoft_accounts. It does not explicitly compare itself to those siblings, but the LinkedIn scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies the default scope (only accounts selected at connect time) versus the all_accessible=true branch, which is useful conditional guidance. However, it names no alternative tools and gives no explicit when-not-to-use guidance, so it is implied rather than directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linkedin_audiencesLinkedIn Matched AudiencesARead-onlyIdempotentInspect
Lists a LinkedIn account's MATCHED AUDIENCES (Dreamdata/CRM company lists, website retargeting, video/document/lead-form engagement, contact lists, predictive) — fully paginated. Per audience: name, urn (urn:li:adSegment:… — the value you pass to update_linkedin_campaign_targeting), status, source, member_count, created/last_modified and usable_for_targeting.
CRITICAL: an ARCHIVED or EXPIRED audience CANNOT be used — applied to an ad set it resolves to 0 members and delivery stops. That state is only visible here, so check usable_for_targeting BEFORE building a retargeting/ABM campaign. below_delivery_minimum flags audiences under LinkedIn's ~300-member delivery floor. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, and the description still adds high-value behavioral context: archived/expired audiences silently delivering 0 members, the `below_delivery_minimum` flag against LinkedIn's ~300-member floor, and that this state is only visible here. This goes well beyond the annotation layer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose first, then the field list, then the CRITICAL warning. Every sentence carries operational weight, though the parenthetical enumeration of audience subtypes is slightly list-heavy for the space it consumes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be re-explained, yet the description still surfaces the exact fields an agent needs (`urn`, `usable_for_targeting`, `below_delivery_minimum`) and the pagination behavior. Nothing required to call or interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (account_id) with 0% schema description coverage, but the description's framing as 'a LinkedIn account's matched audiences' makes the required account scope unambiguous, and the sibling field mention (`urn` for update_linkedin_campaign_targeting) clarifies downstream usage. A single self-evident identifier param needs little more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (LinkedIn matched audiences), enumerates the audience subtypes it covers, and names the sibling it feeds into (update_linkedin_campaign_targeting). An agent can distinguish it from list_audiences, list_meta_audiences, list_tiktok_audiences and list_microsoft_audiences 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs the agent to check `usable_for_targeting` BEFORE building a retargeting/ABM campaign and explains why (archived/expired audiences resolve to 0 members and stop delivery). This is actionable when-to-use guidance tied to a named downstream workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linkedin_campaign_groupsLinkedIn Campaign GroupsARead-onlyIdempotentInspect
Lists ALL campaign groups in a LinkedIn ad account (fully paginated).
⚠️ These rows are what the user's Campaign Manager screen calls "Campaigns" — LinkedIn renamed the UI levels in October 2025 without renaming the API. This is the RIGHT tool when someone asks to list their LinkedIn campaigns. A paused group stops every ad set inside it even if those ad sets read ACTIVE.
ACTIVE = status ACTIVE and serving_statuses contains RUNNABLE; serving_count is
the number actually running. If a row has _truncated, the list is INCOMPLETE — say so.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), yet the description adds substantial behavioral context: full pagination, the semantics of a paused group suppressing ad sets inside it, the precise ACTIVE definition across status/serving_statuses/serving_count, and the _truncated incompleteness warning. This is rich operational disclosure 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the naming caveat, then the ACTIVE/truncation semantics. Dense but each block carries distinct information an agent must have to interpret the result correctly; only minor tightening is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter list tool with an output schema and full annotation coverage, this is complete: it covers routing, pagination, pause inheritance, active-row interpretation, and truncation, which is exactly what an agent needs to call and reason about the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter, account_id, at 0% schema description coverage, and the description never explains it or how it is obtained (e.g., via list_linkedin_ad_accounts). The field-level detail it does provide concerns output fields, not inputs, so parameter meaning is left to the schema/name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Lists ALL campaign groups in a LinkedIn ad account') with scope ('fully paginated'). It explicitly disambiguates against the sibling list_linkedin_campaigns by explaining the UI/API naming mismatch and stating this is the RIGHT tool when someone asks for LinkedIn campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use guidance tied to a real user phrasing ('when someone asks to list their LinkedIn campaigns') and explains the UI ambiguity that would otherwise route the agent wrong. It does not name list_linkedin_campaigns as the contrasting sibling, so the boundary is implied rather than fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linkedin_campaignsLinkedIn CampaignsARead-onlyIdempotentInspect
Lists ALL API-level campaigns in a LinkedIn ad account (fully paginated).
⚠️ TERMINOLOGY — read before answering. LinkedIn renamed its Campaign Manager levels in
October 2025 but did NOT rename the API. The rows this tool returns are what the user's
screen calls "Ad sets". What the UI calls a "Campaign" is an API campaign group
(list_linkedin_campaign_groups).
API campaign group → UI "Campaign"
API campaign → UI "Ad set" ← this toolSo when the user says "my campaigns" / "aktif kampanyalarım", they almost always mean
CAMPAIGN GROUPS. This tool therefore also returns ui_campaigns (the group-level answer)
so you can answer at the level the user actually sees. Lead with that; mention ad sets only
as the level below. Do not claim the UI is wrong or that the user is confused.
Each row also carries DELIVERY + TARGETING settings read-only: audience_expansion,
offsite_delivery (LinkedIn Audience Network), story_delivery, connected_tv_only,
optimization_target, format, creative_selection and targeting (full
targetingCriteria). Use these to answer "is audience expansion on?" or "what is this
targeting?" — do NOT call update_linkedin_campaign_targeting to find out: that tool
REPLACES targeting and its preview shows what you WOULD set, not what is set.
ACTIVE = status is ACTIVE and serving_statuses contains RUNNABLE. Something can be
ACTIVE yet not serve (group paused → CAMPAIGN_GROUP_STATUS_HOLD, billing/budget hold).
Never answer "none are active" from status alone. If a row has _truncated, the list is
INCOMPLETE — say so.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly/idempotent/non-destructive), but the description adds substantial behavior beyond them: full pagination, a `_truncated` signal meaning the list is incomplete, and the ACTIVE + serving_statuses=RUNNABLE rule for true delivery status. It also discloses extra read-only payload (delivery/targeting settings, ui_campaigns) that annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core statement in the first line, then uses short labeled blocks for terminology, returned fields, and the ACTIVE rule. It is longer than typical but nearly every line carries decision-relevant information; the emoji/bold formatting adds noise without much waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description usefully explains the two most confusing return aspects (ui_campaigns level mapping and the ACTIVE vs. serving distinction) plus truncation. The only real omission is how to source `account_id`, which the single-parameter schema also leaves unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter (`account_id`) with 0% schema description coverage, and the description never mentions it or says how to obtain it (e.g., from list_linkedin_ad_accounts). It only implies an 'ad account' scope, so with low coverage the description fails to compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists ALL API-level campaigns in a LinkedIn ad account') and explicitly disambiguates from the sibling list_linkedin_campaign_groups by mapping API campaign vs. campaign group onto UI labels. An agent can pick the right tool without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use routing: users saying 'my campaigns' mean campaign groups, so this tool surfaces `ui_campaigns` and the agent is told to lead with that. It also names an anti-pattern ('do NOT call update_linkedin_campaign_targeting to find out' targeting) and warns against answering activity from `status` alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linkedin_conversionsLinkedIn ConversionsARead-onlyIdempotentInspect
Lists ALL conversion tracking rules on a LinkedIn ad account — fully paginated. Per rule: id, name, type, enabled, attribution type, post-click/view-through attribution windows, conversion value, URL rules, conversion method, created/last modified, and the campaigns (ad sets) it is associated with. _available_fields shows which keys LinkedIn actually returned for that rule.
If an entry with _truncated: true appears, the list is INCOMPLETE — never say 'these are all' or 'there are none'. Use an id with attach_linkedin_conversion to tie a conversion to a campaign, and detach_linkedin_conversion to remove one from a campaign (e.g. a site-wide 'All Pages' rule that fires on every page). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/no-destructive, and the description adds meaningful behavior beyond them: full pagination, the `_truncated: true` incompleteness caveat (with the warning never to claim the list is exhaustive), and the dynamic `_available_fields` key disclosure. These are the operational traits an agent actually needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded lead sentence followed by the field manifest and the two behavioral caveats. The long field enumeration is dense but informative; it is slightly verbose yet every clause carries operational or schema meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with a rich output schema and complete annotations, the description over-delivers: return shape, pagination, truncation handling, and follow-up tooling are all covered. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One required parameter (account_id) with 0% schema description coverage and no mention in the description. The name is largely self-evident, so the gap is small, but the description does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Lists ALL conversion tracking rules on a LinkedIn ad account'. The field inventory and the LinkedIn framing distinguish it from sibling conversion-list tools (list_conversion_actions, list_conversion_goals) that belong to other networks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear downstream usage: use the returned id with attach_linkedin_conversion / detach_linkedin_conversion, and names those alternatives explicitly. It lacks an explicit 'when not to use vs other list tools' exclusion, but the action context is well established.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linkedin_creativesLinkedIn CreativesARead-onlyIdempotentInspect
Lists ALL creatives (ads) in a LinkedIn account (fully paginated); if campaign_id is given, limits to that campaign. Also returns review status. If any row has _truncated, the list is INCOMPLETE — say so.
Every row carries a normalized text block next to the raw content: headline,
description, landing_page, format — and for POST-BASED ads (Sponsored Content, Document
Ads, Thought Leader Ads) post_urn + post_permalink.
IMPORTANT — post-based ads: the ad copy lives in the referenced POST, not in the creative,
so it is NOT in this list by default (text.ad_copy_status: "not_fetched"). To get the
REAL copy call linkedin_ad_copy with a shortlist of creative ids, or set
include_previews=true here. NEVER invent copy and never present an internal creative
name as the messaging.
include_previews=true additionally resolves, per post-based creative: the real ad_copy
(read from LinkedIn's PUBLIC Ad Library — no extra permission needed), author_type /
is_thought_leader_ad, ad_library_url and official preview_url /
preview_url_mobile. Costs ~2 extra requests per creative and is capped at 60, so use it
on a shortlist (e.g. the top CTR rows), not on a 1.000-ad account.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| campaign_id | No | ||
| include_previews | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/no-destructive, and the description adds substantial behavior beyond that: pagination behavior, the `_truncated` incompleteness signal, per-creative request cost, the 60-creative cap, and that ad copy comes from LinkedIn's public Ad Library with no extra permission. This is rich disclosure the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core listing behavior, then warnings; every section is load-bearing. It runs long with capitalized emphasis, but the length is justified by the number of non-obvious caveats an agent must know before calling it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shapes needn't be explained, yet the description still clarifies the normalized `text` block, post_urn/post_permalink fields, and the ad_copy_status state — enough for an agent to interpret and correctly act on results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load; it explains campaign_id filtering and gives deep meaning to include_previews (what it resolves, cost, cap). account_id is left implicit but is self-evident as the target account, leaving only a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource (lists creatives/ads in a LinkedIn account) with scope (fully paginated, optionally campaign-scoped) and names the complementary sibling linkedin_ad_copy. An agent can distinguish it from list_linkedin_campaigns and get_ad_details 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use include_previews=true on a shortlist (e.g. top-CTR rows), not on a 1,000-ad account, otherwise call linkedin_ad_copy with creative ids. It also states the cap of 60 and the ~2-request cost, giving clear 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.
list_linkedin_lead_formsLinkedIn Lead FormsARead-onlyIdempotentInspect
Lists the LinkedIn Lead Gen Forms of an ad account — id, name, status and question count. Use it to find which form a lead-gen campaign collects into before pulling the leads with download_linkedin_leads. Reading forms works with the normal ads permissions; downloading the leads themselves needs LinkedIn's separate Lead Sync API access.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuinely new behavior: reading forms works with normal ads permissions, whereas downloading leads requires LinkedIn's separate Lead Sync API access — useful operational context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what is returned, followed by usage routing and permission caveat. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be documented, yet the description still lists key fields. Scope, sibling routing, and the permission distinction between reading forms and downloading leads make it complete 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (account_id) with 0% schema description coverage. The description implies it by saying the forms belong to 'an ad account' but never states the expected id format or where to get it (e.g., list_linkedin_ad_accounts). Adequate but leaves a gap the schema does not fill.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) plus resource (LinkedIn Lead Gen Forms) scoped to an ad account, and enumerates the returned fields (id, name, status, question count). It is clearly distinguishable from sibling listers such as list_meta_lead_forms, list_tiktok_lead_forms and from download_linkedin_leads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('find which form a lead-gen campaign collects into before pulling the leads') and names the alternative tool (download_linkedin_leads) for the next step. It also states the prerequisite permissions, so the agent knows the routing and the access condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_ad_accountsMeta Ad AccountsARead-onlyIdempotentInspect
Lists the user's connected Meta ad account(s). Returns only the account(s) the user selected at connect time; the response carries default_account_id. all_accessible=true returns every account the credential can reach.
| Name | Required | Description | Default |
|---|---|---|---|
| all_accessible | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive/closed-world, so the bar is lower. The description adds non-obvious behavior: results are filtered by connect-time selection, the payload carries default_account_id, and the flag widens scope to all reachable accounts. It does not mention pagination or empty-result behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with what is listed and what is returned, then the flag behavior. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter list tool with an output schema, the description supplies exactly the missing pieces: result scoping and the meaning of default_account_id. Return-format details are rightly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is a bare boolean, so the description carries the burden — and it does, explaining that all_accessible=true returns every account the credential can reach versus the default selected-accounts set. The default=false semantics are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (connected Meta ad accounts) and immediately scopes what is returned, which cleanly separates it from sibling listers like list_linkedin_ad_accounts or list_accounts. An agent can identify 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the selection condition (only accounts chosen at connect time) and the alternative mode (all_accessible=true returns everything the credential can reach), which effectively tells the agent which invocation to pick. It does not explicitly name a sibling tool or state prerequisite connection steps, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_adsMeta AdsRead-onlyIdempotentInspect
Lists Meta ads in an ad account, optionally limited to one ad set (adset_id). Each ad includes its status, effective delivery status, ad set and campaign ids, creative id, creation and update times, and, when Meta limits or blocks delivery, an issues_info list with Meta's error code and message explaining why. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| adset_id | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_meta_adsetsMeta Ad SetsARead-onlyIdempotentInspect
Lists Meta ad sets; if campaign_id is provided, limits to that campaign. Budgets are in cents.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| campaign_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable domain context beyond annotations by stating that budgets are in cents and that campaign_id scopes the listing to a campaign. It does not cover return format or pagination, but with annotations handling the safety profile, this is a meaningful addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with zero waste. The main action is front-loaded, followed by the optional filter and a useful units note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple read-only tool with an output schema and comprehensive annotations, the description is largely sufficient. It could be more complete by mentioning the account_id requirement, but that gap is minor given the structured fields already present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the behavior of campaign_id ('limits to that campaign') but says nothing about the required account_id parameter. The budget-unit note is not tied to any parameter in the schema, leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lists') and resource ('Meta ad sets'), and the conditional filter on campaign_id makes the scope clear. It is easily distinguishable from sibling tools like list_meta_ads or list_meta_campaigns by the resource it operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an implied usage context by explaining that campaign_id limits results to a campaign, but it does not state when to use this tool versus alternatives such as list_meta_ads or list_meta_campaigns. 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_meta_audiencesMeta AudiencesBRead-onlyIdempotentInspect
Lists the custom audiences (custom/lookalike/website retargeting) in the Meta ad account. The returned audience_id values are used in the custom_audience_ids parameter of create_meta_adset.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds the downstream dependency on create_meta_adset, which is useful integration context but does not disclose pagination, rate limits, or other execution traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the first delivers the core purpose, the second adds the key downstream usage. No filler or redundancy, and the purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with an output schema and rich annotations, the description covers the essential purpose and the critical downstream integration. The main gap is the unexplained account_id parameter and lack of sibling differentiation, but the overall definition is serviceable given the structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single required parameter account_id has 0% schema description coverage, and the description never explains what account_id represents or its expected format. Mentioning 'the Meta ad account' is the only hint, which is insufficient to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lists') and resource ('custom audiences') and scopes the resource with parenthetical types. It does not explicitly name or differentiate from sibling tools like list_meta_saved_audiences, so it stops short of the 5-level sibling routing detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when to use by noting the returned audience_id values feed into create_meta_adset, but it never states explicit when-to-use conditions or alternatives to this tool. No exclusions or comparisons to other list_* audience tools are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_campaignsMeta CampaignsARead-onlyIdempotentInspect
Lists the campaigns in a Meta ad account. account_id = numeric account ID (with or without the leading act_ prefix). Budgets are in minor units (cents).
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds value beyond that by disclosing the account_id prefix tolerance and the minor-unit (cents) convention for budgets, which is behavior an agent would 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose and followed by the two facts an agent needs to call it correctly. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema and full annotations, the description supplies the missing parameter format and unit convention. It omits filtering or pagination behavior, but nothing essential to a correct invocation is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% — the sole account_id parameter is an undescribed string. The description compensates by defining the format ('with or without the leading act_ prefix'), which is exactly the ambiguity the bare schema leaves open.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — 'Lists the campaigns in a Meta ad account' — which is unambiguous. It does not, however, differentiate itself from close siblings like list_meta_ads, list_meta_adsets, or meta_campaign_insights, leaving the agent to infer the boundary from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives despite a crowded list_meta_* family. An agent gets no help deciding between this and list_meta_adsets or meta_campaign_insights.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_catalogsMeta CatalogsRead-onlyIdempotentInspect
Lists the product catalogs in the Business Manager that owns a Meta ad account: each catalog's id, name, product count and vertical. Use the catalog id with list_meta_product_sets and as product_catalog_id in create_meta_adset for catalog (dynamic product) ads. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_meta_custom_conversionsMeta Custom ConversionsARead-onlyIdempotentInspect
Lists the account's custom conversions (URL- or event-based conversion definitions built on a pixel, e.g. 'visited /thank-you'). Use one for reporting or as an ad set's optimization event.
ARCHIVED = DELETED: deleting a custom conversion in Meta Events Manager only archives it, and Meta keeps returning it. Archived ones are left OUT by default (archived_count tells you how many); pass include_archived=true only when the user asks about deleted ones.
never_fired lists live conversions whose last_fired_time is empty — they have never recorded a single conversion, which usually means the rule does not match what the pixel actually sends. Say this plainly instead of presenting them as working.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| include_archived | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description adds substantial behavioral context: the ARCHIVED = DELETED semantic, that archived items are excluded by default with archived_count as the signal, and that never_fired entries are live but have never recorded a conversion. It even warns the agent not to present never_fired conversions as working, which is meaningful interpretation guidance beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool does, then adds two targeted paragraphs on archived and never_fired semantics. Every sentence carries information, though three paragraphs is on the long side for a two-parameter list tool and the final sentence is mildly editorial.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be documented, and the description still surfaces the two fields an agent must interpret (archived_count, never_fired). For a read-only listing tool with annotations covering safety, nothing needed 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.
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 burden. It fully explains include_archived (default exclusion, archived_count, when to set true), which adds real meaning beyond the bare boolean in the schema; account_id is left implicit but is self-evident from the name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the account's custom conversions') and immediately defines the resource ('URL- or event-based conversion definitions built on a pixel, e.g. visited /thank-you'), which lets an agent distinguish it from list_meta_pixels or create/update_meta_custom_conversion. The purpose is unambiguous 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance for the one non-obvious input: pass include_archived=true 'only when the user asks about deleted ones'. It also frames why the resource matters ('use one for reporting or as an ad set's optimization event'). No sibling tool is named as an alternative, so it stops short of a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_instagram_accountsMeta Instagram AccountsARead-onlyIdempotentInspect
Lists the Instagram accounts usable from a Meta ad account. Use this when list_meta_pages shows no Page, or the Instagram account is not linked to a Page. FOUR sources are merged, so an account the Ads Manager 'connected Instagram accounts' list omits is still found: (1) act_{id}/connected_instagram_accounts, (2) the legacy instagram_accounts edge, (3) the ad account's own AD HISTORY (adcreatives → instagram_user_id) — an Instagram account this ad account has already advertised from is usable even when both link edges are empty, (4) the FACEBOOK PAGE BRIDGE — in practice an Instagram business account is linked to a Page, not to the ad account, so the Pages assigned to this ad account (and, when nothing else was found, the user's other Pages) are read for instagram_business_account.
Each entry: ig_user_id (pass it to list_meta_instagram_posts or create_meta_instagram_post_ad), username, and source (ad_account_link | previously_advertised | page_linked). For page_linked entries check usable_from_this_ad_account: false means the Instagram account exists and is linked to a Page, but that Page is not assigned to this ad account — the blocker is the Page assignment, not Instagram. If the list is EMPTY, no Instagram account is reachable from this ad account: the user must add it in Meta Business Suite → Settings → Accounts → Instagram accounts, then 'Assign to people and assets' → this ad account. A missing account here usually indicates a sharing/permission gap rather than a non-existent account; check every returned source first, and check list_meta_pages(account_id=...) for the Page-assignment cause. account_id comes from list_meta_ad_accounts.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: the four merged data sources (including ad history and the Page bridge), the `source` field values, the meaning of `usable_from_this_ad_account: false`, and the interpretation that an empty list indicates a sharing/permission gap rather than a missing account. This is well past the lowered bar set by 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but it is front-loaded with the core purpose and the merge logic before the troubleshooting guidance, and nearly every clause carries distinct information (sources, field semantics, empty-state cause). A little density could be trimmed, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, yet it briefly documents the entry fields (ig_user_id, username, source) and their downstream use ('pass it to list_meta_instagram_posts or create_meta_instagram_post_ad'). Combined with the empty-state and permission-gap guidance, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is a single required parameter, so the description must carry the meaning. It does: it states that 'account_id comes from list_meta_ad_accounts,' giving the agent provenance for the only argument. It stops short of format details, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Lists the Instagram accounts usable from a Meta ad account'), and the description goes on to enumerate the four source edges it merges, which no sibling tool shares. An agent can immediately tell this apart from list_meta_pages or list_meta_instagram_posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('Use this when list_meta_pages shows no Page, or the Instagram account is not linked to a Page'), names the diagnostic alternative ('check list_meta_pages(account_id=...) for the Page-assignment cause'), and explains what an empty result means plus the remediation path. When-to-use, when-not, and alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_instagram_postsMeta Instagram PostsARead-onlyIdempotentInspect
Lists the posts and Reels published on an Instagram Business account — Instagram-native content (including Reels not shared to Facebook) that list_meta_page_posts CANNOT see. Each item returns: media_id (feed it to create_meta_instagram_post_ad to run it as an ad), media_product_type (FEED/REELS), is_reel, caption, permalink, thumbnail_url, media_url, like_count, comments_count and — for Reels/videos — views, so you can pick the best-performing content. Identify the account with ANY of: page_id (from list_meta_pages, Page-linked Instagram), ig_user_id (direct, from list_meta_instagram_accounts) or account_id (resolves the ad account's connected Instagram — no Page needed). NOTE: the full ORGANIC listing needs Instagram content permission (instagram_basic), which is pending Meta App Review; when it is missing this tool does NOT fail — it returns organic_listing_available=false plus advertised_media (real, usable media_id values of Instagram posts already advertised in this ad account — pass account_id to get them). Turning an Instagram post into an ad works today either way.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| page_id | No | ||
| account_id | No | ||
| ig_user_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safe-read profile (readOnly, idempotent, non-destructive), and the description adds substantial beyond that: the pending Meta App Review permission, the non-failing degraded response with organic_listing_available=false plus advertised_media, and that ad creation works either way. It stops short of describing pagination or limit behavior, so it is strong 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the sibling contrast, then return fields, then identification options, then the caveat — a sensible priority order. It is dense and runs long with em-dash clauses, but nearly every sentence carries distinct decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description enumerates the returned fields (media_id, media_product_type, is_reel, caption, permalink, counts, views) and explains how media_id feeds create_meta_instagram_post_ad. Combined with the permission caveat and the three identification paths, nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains page_id (from list_meta_pages, Page-linked IG), ig_user_id (direct, from list_meta_instagram_accounts) and account_id (resolves the ad account's connected IG, no Page needed), covering 3 of 4 parameters with source tools and semantics. The 'limit' parameter is never mentioned, leaving one gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (lists Instagram posts/Reels on a Business account) and explicitly contrasts with the sibling list_meta_page_posts, which it says CANNOT see this content. An agent can select it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions: use this for Instagram-native content including Reels, identify the account via any of page_id/ig_user_id/account_id with each source tool named. It also states when the tool degrades (missing instagram_basic) and what to pass then (account_id) — full when-to-use and fallback guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_lead_formsMeta Lead FormsARead-onlyIdempotentInspect
Lists the INSTANT FORMS (lead forms) that belong to a Facebook Page — id, name, status and the questions each one asks. Use it to pick the lead_gen_form_id you pass to create_meta_link_ad / create_meta_video_ad when building a lead ad, or to check what an existing form collects before reusing it. page_id comes from list_meta_pages. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| page_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the trailing "Read-only" is largely redundant. The description does add that the response enumerates each form's questions, which is useful behavioral context, but it never mentions pagination or how the limit default of 50 behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, followed by usage and the parameter provenance, with no filler prose. The final "Read-only" clause duplicates the annotations and could be dropped, which is the only real waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description needn't detail return values, and it adequately covers when to call the tool and where the required page_id comes from. The notable gap is pagination/limit behavior, which an agent would need when a Page has many forms.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It does explain the origin of page_id (from list_meta_pages), which the schema does not, but the limit parameter is left entirely unexplained, so half of the parameters remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (lists Meta/Facebook instant lead forms), and scopes it to a Page, immediately distinguishing it from create_meta_lead_form, list_lead_form_submissions, and the LinkedIn/TikTok lead-form siblings. The returned fields (id, name, status, questions) further pin down what kind of listing this is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete downstream usage: retrieve the lead_gen_form_id to pass into create_meta_link_ad / create_meta_video_ad, or to inspect an existing form before reuse, and notes page_id originates from list_meta_pages. It stops short of naming the sibling to avoid (e.g. create_meta_lead_form, list_lead_form_submissions), so it is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_page_postsMeta Page PostsARead-onlyIdempotentInspect
Lists a Facebook Page's recent posts and THEIR MEDIA, so content already published on the Page can be reused as ad creative. Each post returns: object_story_id (for create_meta_post_ad), media_type, permalink_url, image_url (the photo, or the cover frame for a video) and — for videos and Reels — video_url (a downloadable mp4) plus page_video_id. Feed video_url straight into create_meta_video_ad, and image_url into create_meta_link_ad. page_id comes from list_meta_pages.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| page_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower; the description adds real behavioral context by enumerating the returned fields and clarifying that image_url is the photo or video cover frame and video_url is a downloadable mp4. It doesn't mention the default 25-item cap 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by return-shape detail and a routing sentence; every clause carries information. No padding or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with annotations covering safety and an output schema covering the return shape, the description adds the routing and provenance context an agent needs to call it and chain it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden. It meaningfully explains page_id's provenance ('comes from list_meta_pages'), but says nothing about the limit parameter or its default of 25, leaving half the parameters unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists a Facebook Page's recent posts and THEIR MEDIA') and even names the downstream goal (reuse as ad creative). It's clearly distinguishable from adjacent siblings like list_meta_instagram_posts and list_tiktok_posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance: feed video_url into create_meta_video_ad, image_url into create_meta_link_ad, and page_id comes from list_meta_pages. It stops short of stating when NOT to use it (e.g., vs list_meta_instagram_posts for Instagram media), so no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_pagesMeta PagesARead-onlyIdempotentInspect
Lists the Facebook Pages managed by the connected Meta user (id, name, category). The page_id required when creating ads is selected from here.
ALWAYS pass account_id when you are building ads for a specific ad account: only then can this tool tell you which Pages that ad account is actually allowed to advertise for (Meta's own promote_pages), returned as ad_account_pages with assigned_to_ad_account on every entry. A Page appearing in the flat list does NOT mean the ad account can use it — the user's personal Page role and the ad account's asset assignment are two different things, and Ads Manager shows the former. An empty ad_account_pages means Meta could not DISCOVER an assigned Page — it does NOT mean ads cannot be built, and it is NOT a connector fault. Verified live on 2026-09-22: with promote_pages empty, passing page_id explicitly created a WhatsApp messaging ad set without any error. So when ad_account_pages is empty, pick the Page from the pages list and pass page_id directly to create_meta_adset / create_meta_link_ad FIRST. Do not send the user to Meta Business Settings on the strength of this empty list; only treat it as a real asset-assignment problem if Meta itself rejects the explicit page_id. A Page missing here is not an access loss on our side.
If the list comes back empty this tool also reports WHY: a missing pages_show_list permission looks identical to "no pages" otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive; the description adds substantial context beyond them: the promote_pages vs. personal-role distinction, the meaning of an empty ad_account_pages result, permission diagnostics (pages_show_list), and a live verification note. It also clarifies that a missing Page is not an access loss, which directly shapes agent behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical guidance is front-loaded, but the text is dense and repetitive — the 'empty list is not a connector fault / not an access problem' point is restated three times across separate paragraphs. It is long relative to a single-parameter list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the description still covers the key edge cases (empty list, missing permission, ad-account assignment) an agent must handle. For this tool's complexity, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single account_id parameter has 0% schema description coverage, so the description must compensate; it does, explaining exactly what passing account_id changes (returns ad_account_pages with assigned_to_ad_account per entry). It doesn't specify the ID format or where to fetch it, which keeps it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a precise verb+resource ('Lists the Facebook Pages managed by the connected Meta user') plus the returned fields (id, name, category). It also explains its role in the ad-creation workflow, which distinguishes it from the many other meta listing siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to pass account_id (ad-account-specific ad building), what the alternative path is when ad_account_pages is empty (pick from the flat pages list and pass page_id directly to create_meta_adset/create_meta_link_ad first), and an explicit when-NOT ('Do not send the user to Meta Business Settings on the strength of this empty list'). This is a model of when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_pixelsMeta PixelsARead-onlyIdempotentInspect
Lists the conversion pixels in a Meta ad account (id, name, last fired). The pixel_id for ad sets optimizing OFFSITE_CONVERSIONS is obtained here.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety behavior is covered by structured data. The description adds the returned fields and the conversion-optimization context, but doesn't describe pagination, filtering, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences that front-load the resource and fields, then immediately follow with the actionable routing context (OFFSITE_CONVERSIONS optimization). No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and it correctly focuses on scope and purpose. It's complete for a simple one-param list tool, though it could mention that results may be paginated or require an active Meta connection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (account_id) with 0% schema description coverage, but the schema name is self-explanatory and the description clarifies that it scopes to a Meta ad account. No additional syntax or format details are provided, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists') and resource ('conversion pixels in a Meta ad account'), and names the returned fields (id, name, last fired). It also distinguishes itself from sibling pixel-list tools (list_tiktok_pixels, list_tiktok_bc_pixels) by scoping to Meta.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the downstream use case: obtaining the pixel_id for ad sets optimizing OFFSITE_CONVERSIONS. It doesn't name alternative tools for pixel retrieval or when not to call it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_product_setsMeta Product SetsARead-onlyIdempotentInspect
Lists the product sets inside a Meta product catalog. A product set is a filtered subset of the catalog (e.g. 'Underwear', 'On sale') that a dynamic product ad targets. catalog_id from list_meta_catalogs. Use the returned product_set_id in create_meta_adset (product_set_id) and create_meta_dynamic_ad.
| Name | Required | Description | Default |
|---|---|---|---|
| catalog_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds real domain context (what a product set is and how the returned ID feeds downstream calls) rather than restating the annotations, though it says nothing about pagination or result volume.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb and resource, then definition, then workflow hand-offs. No filler or repetition of structured metadata.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and rich annotations, the description only needs to cover purpose, parameter sourcing, and downstream usage — all of which it does. Nothing required to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden for the single parameter. It compensates by telling the agent exactly where catalog_id comes from (list_meta_catalogs), which adds meaning the bare 'string' schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists') and resource ('product sets inside a Meta product catalog'), then defines what a product set actually is with concrete examples. This clearly separates it from sibling listers like list_meta_catalogs and list_meta_saved_audiences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the upstream tool that supplies catalog_id (list_meta_catalogs) and the downstream tools that consume product_set_id (create_meta_adset, create_meta_dynamic_ad), giving an explicit workflow chain an agent can follow without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_saved_audiencesMeta Saved AudiencesARead-onlyIdempotentInspect
Lists the account's SAVED audiences (reusable targeting presets — interests + geo + demographics saved in Ads Manager) with approximate size. Different from list_meta_audiences, which returns CUSTOM/retargeting audiences. Reuse their targeting when building ad sets.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered without description help. The description adds modest behavioral context — that the returned audience includes an approximate size — but says nothing about pagination, limits, or whether the list is scoped beyond account_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then the definition of the resource, then the sibling disambiguation. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return fields need not be enumerated, and the description's 'approximate size' note is a useful extra. Combined with full annotation coverage, an agent has enough to call this correctly; only the account_id format is left entirely to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter (account_id) with 0% schema description coverage, and the description never mentions it or its expected format. The parameter is largely self-evident from its name, but the description does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (lists the account's SAVED audiences) and immediately defines what a saved audience is: a reusable targeting preset of interests + geo + demographics saved in Ads Manager. It explicitly names the nearest sibling, list_meta_audiences, and states how the two differ (custom/retargeting vs. saved presets), so an agent can disambiguate without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool, explains the semantic difference that selects between them, and gives the downstream use case ('Reuse their targeting when building ad sets'). An agent knows both when to call this and when to call the other one instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_microsoft_accountsMicrosoft Ad AccountsARead-onlyIdempotentInspect
Lists the user's connected Microsoft Advertising ad account(s). Returns only the account(s) the user selected at connect time; the response carries default_account_id. all_accessible=true returns every account the credential can reach.
| Name | Required | Description | Default |
|---|---|---|---|
| all_accessible | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: results are filtered to connect-time selections by default, and the response carries default_account_id. It does not describe ordering or pagination, keeping it short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: identity, default scoping, then the parameter behavior. The scoping rule and the parameter effect are front-loaded in that order and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required, yet the description still flags default_account_id as a useful response field. Combined with the annotation-covered safety profile and the explained parameter, an agent has enough to call it correctly; only ordering/pagination behavior is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single all_accessible boolean, so the description must carry the meaning, and it does: true returns every account the credential can reach versus the default connect-time subset. It is not explicit about the default value being false, but the contrast makes the semantics unambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (the user's connected Microsoft Advertising ad accounts), and the scope ('connected' vs 'accessible') separates it from generic list_accounts and from entity lists like list_microsoft_campaigns. An agent can identify the 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains both operating modes: default returns only accounts selected at connect time, while all_accessible=true returns every account the credential can reach, giving the agent a clear basis for choosing a parameter value. It does not explicitly name a sibling or say when to prefer this over list_accounts, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_microsoft_ad_extensionsList Microsoft Ad ExtensionsARead-onlyIdempotentInspect
Lists the SITELINK and CALLOUT extensions attached to campaigns in a Microsoft (Bing) account, with their text, URLs and status — use it before adding more (duplicates are a common cause of disapprovals) or to find the id to remove. READ-ONLY.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the trailing 'READ-ONLY' adds little. What does add value is the disclosure that only SITELINK and CALLOUT types are covered and that duplicates are a known disapproval cause, both of which affect how the agent acts on results. Pagination bounds are the remaining undisclosed trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence led by the verb and scoped immediately, with the usage rationale attached via dashes rather than a separate paragraph. Dense but every clause carries information; the redundant 'READ-ONLY' tail is the only wasted fragment.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Purpose, scope, and usage are all covered, and an output schema exists so return-format detail is not needed. The gaps are parameter documentation and any note on result limits or pagination for large accounts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions neither account_id nor customer_id, nor the relationship between the Microsoft account and the optional customer id. With two undocumented parameters and no compensating text, the agent gets no semantic guidance beyond the field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) plus the exact resource (SITELINK and CALLOUT extensions attached to campaigns) and scopes it to a Microsoft (Bing) account, including what is returned (text, URLs, status). This clearly separates it from the generic list_ad_extensions, add_microsoft_ad_extensions, and remove_microsoft_ad_extensions siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete usage contexts: check before adding more (duplicates cause disapprovals) and to find the id needed for removal. That implicitly routes to the add/remove siblings. However, it never names an alternative tool explicitly and gives no when-not-to-use condition, 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.
list_microsoft_ad_groupsMicrosoft Ad GroupsBRead-onlyIdempotentInspect
Lists the ad groups in a Microsoft Advertising campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| campaign_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is fully covered. The description adds only the campaign scoping constraint, with no mention of pagination, result limits, or auth requirements. With annotations carrying the burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the resource and scope front-loaded and zero filler. It is arguably too sparse, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, with three undocumented parameters and no usage guidance, the definition is minimal for a filtered-list tool, leaving gaps an agent must fill by inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions no parameters. With low coverage the description should compensate but does not – it gives no hint about account_id, campaign_id, or the optional customer_id relationship.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists'), resource ('ad groups'), and scope ('in a Microsoft Advertising campaign'). It clearly distinguishes from create_microsoft_ad_group/update_microsoft_ad_group by the read verb, but doesn't explicitly differentiate from siblings like list_microsoft_ads or list_microsoft_campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance. The description doesn't reference alternatives such as list_microsoft_campaigns (to find a campaign_id first) or list_microsoft_ads, so the agent must infer context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_microsoft_adsMicrosoft AdsCRead-onlyIdempotentInspect
Lists the ads in a Microsoft ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| ad_group_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered structurally. The description adds only the ad-group nesting context and discloses nothing about pagination, result limits, or whether inactive/paused ads are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource and scope front-loaded and no filler. It is not under-specified in structure, though its brevity is partly the cause of the semantic gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, but with three undocumented parameters at 0% schema coverage the definition is not complete enough for an agent to reliably supply account_id and customer_id. A read-only list tool of this shape needs at least identifier-hierarchy guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across all three parameters, so the description carries the full explanatory burden but only alludes to the ad group. It says nothing about account_id, or how customer_id relates to account_id in the Microsoft Ads hierarchy, which is the most likely source of invocation error.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (lists ads) and scopes it to a Microsoft ad group, which separates it from platform-level siblings. It does not explicitly distinguish itself from list_meta_ads or list_tiktok_ads, but the platform plus container scope makes the target unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives (e.g. get_ad_details for a single ad, or list_microsoft_ad_groups for the parent level), and no prerequisites stated. The only usable hint is the implicit need for an ad group context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_microsoft_audiencesMicrosoft AudiencesBRead-onlyIdempotentInspect
Lists the account's audiences (remarketing / similar / combined) — for audience targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description's only added behavioral content is the categorization of audience types, which is more return-content than behavior; it says nothing about pagination, result limits, or whether inactive audiences are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource stated first and no filler. The parenthetical subtype list is slightly dense but earns its place by telling the agent what audience kinds appear. Not padded, but also not maximally front-loaded with actionable detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values are covered, and annotations cover safety. However, with zero parameter documentation and no usage guidance, the definition leaves the two most common agent questions (what identifiers to pass, when this beats the generic list_audiences) unanswered for a 2-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither account_id (required) nor customer_id (optional, default "") is documented anywhere. The description never mentions these parameters, so it fails to compensate for the coverage gap; an agent must guess what customer_id does relative to account_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb+resource ('Lists the account's audiences') and enumerates the audience subtypes (remarketing / similar / combined), so the agent knows exactly what is returned. It does not explicitly distinguish itself from the near-identical siblings list_audiences, list_meta_audiences, or list_linkedin_audiences, relying on the tool name to carry platform differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trailing phrase '— for audience targeting' implies a use case but gives no when-to-use condition, no prerequisites, and no exclusion against alternatives like list_audiences or manage_audience_targeting. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_microsoft_campaignsMicrosoft CampaignsARead-onlyIdempotentInspect
Lists the campaigns in a Microsoft Advertising ad account (account_id). If customer_id is empty, it is resolved automatically from the connection record.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that by disclosing that an empty customer_id is silently resolved from the connection record, which affects how an agent should supply arguments and what result set it will get.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core action front-loaded and the argument-resolution caveat following immediately. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and both parameters are accounted for. The only omission is any hint about result volume or pagination for a list endpoint, which is minor at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it does: it identifies account_id as the Microsoft Advertising account and explains the empty-string default behavior of customer_id. It does not state ID formats or whether account_id is required versus optional, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (campaigns) scoped to a Microsoft Advertising ad account, which cleanly separates it from list_microsoft_ads and list_microsoft_ad_groups. It does not explicitly name a sibling or contrast its scope with them, so it stops short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the read path for Microsoft campaigns, and create/update/delete_microsoft_campaign are the obvious alternatives, but the description never says when to choose this over them or what prerequisites apply. No exclusions or alternative routing is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_microsoft_conversion_goalsMicrosoft Conversion GoalsARead-onlyIdempotentInspect
Lists the conversion goals in the account — required for conversion-based bidding strategies (MaxConversions/TargetCpa).
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the downstream dependency on bidding strategies, a genuinely useful behavioral note, but says nothing about pagination, scoping to a customer, or result shape beyond what annotations and the output schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the purpose leads and the use-case rationale follows immediately. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with an output schema (so return values need not be described) and full annotation coverage, the description supplies purpose plus the strategic context. The only real gap is the undocumented account_id/customer_id pair, which the description does not resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters (account_id required, customer_id defaulting to empty), so the description carries the full burden and does not compensate. It only says 'in the account' and never explains the distinction between account_id and customer_id or how they interact, leaving the required parameter's semantics undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Lists the conversion goals in the account'), scoped clearly to a Microsoft account. It distinguishes itself from the similarly named list_conversion_goals/list_custom_conversion_goals only through the tool name, not through the description text, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the context in which the result matters ('required for conversion-based bidding strategies (MaxConversions/TargetCpa)'), which tells an agent why and when to call it. It stops short of naming an alternative tool or an exclusion condition, so it is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_microsoft_keywordsMicrosoft KeywordsCRead-onlyIdempotentInspect
Lists the keywords in a Microsoft ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| ad_group_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds no behavioral context beyond that, such as scope limits, authentication requirements, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is appropriately sized for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low complexity, annotations cover its safety profile, and an output schema exists so return values need not be explained. However, the absence of any parameter explanation against 0% schema coverage leaves a real gap in invocation context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate for undocumented parameters, but it does not. It hints only at ad_group_id by naming an ad group and says nothing about account_id or customer_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: lists keywords in a Microsoft ad group. It is clear enough to distinguish from most siblings, but it never explicitly differentiates itself from list_microsoft_negative_keywords or explains that it excludes negative keywords.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only states what the tool does; it gives no when-to-use guidance, no prerequisites, and no alternatives. Sibling tools such as list_microsoft_negative_keywords and add_microsoft_keywords are not referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_microsoft_negative_keywordsList Microsoft Negative KeywordsRead-onlyIdempotentInspect
Lists the NEGATIVE keywords currently blocking traffic on a Microsoft (Bing) campaign or ad group — run this when impressions drop unexpectedly, or before removing one. entity_type: Campaign | AdGroup. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | ||
| account_id | Yes | ||
| entity_type | No | Campaign |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_microsoft_uet_tagsMicrosoft UET TagsBRead-onlyIdempotentInspect
Lists the account's UET (conversion tracking) tags — required for conversion goals + remarketing.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description adds the meaning of UET tags but nothing about pagination, result caps, or permission requirements, so it only marginally exceeds what structured fields already say.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence that front-loads the action and resource and wastes no words. Nothing extraneous to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations cover the read-only nature. However, for a tool with 0% parameter documentation, the description should at least clarify what account_id identifies, which it omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions no parameters at all — neither the required account_id nor the customer_id that defaults to an empty string. With two undocumented parameters, the description fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (the account's UET tags) and even expands the acronym, so an agent knows exactly what comes back. It is not confused with create_microsoft_uet_tag or list_microsoft_conversion_goals, though it never names siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trailing clause 'required for conversion goals + remarketing' implies why an agent would call this, but there is no explicit when-to-use, when-not-to-use, or named alternative such as list_microsoft_conversion_goals or get_conversion_tags. 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.
list_negative_keywordsNegative KeywordsRead-onlyIdempotentInspect
Lists the negative keywords that apply to a Google Ads account: ad group level, campaign level and keywords from shared negative keyword lists attached to campaigns. Leave campaign_id empty for the whole account, or give one campaign to see the negatives that apply to it. Each row has its text, match type and level (ad_group, campaign or shared_list) so you know where it is defined. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_recommendationsGoogle Ads RecommendationsARead-onlyIdempotentInspect
Lists Google's campaign recommendations + optimization score, WITH PROJECTED IMPACT (estimated +conversions / +clicks / +cost if the recommendation is applied). Filter by rec_type (e.g. 'KEYWORD', 'CAMPAIGN_BUDGET','TARGET_CPA_OPT_IN'); include_dismissed=true also returns dismissed ones. The returned resource_names are passed to apply_recommendation / dismiss_recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| rec_type | No | ||
| customer_id | Yes | ||
| include_dismissed | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral value beyond that: what the payload contains (optimization score, projected impact) and that resource_names are the handles for follow-up write tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core capability and the projected-impact differentiator, then filters, then downstream routing. Heavy capitalization is slightly noisy but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't detail return shapes, yet it usefully highlights resource_names as the actionable output. Combined with the filter guidance, an agent has enough to call it correctly; only the limit parameter and pagination expectations remain unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It documents rec_type (with example enum-like values) and include_dismissed semantics, but says nothing about customer_id or the limit/default page size, leaving two of four parameters unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (Google's campaign recommendations + optimization score) and immediately signals the unique value (projected impact in conversions/clicks/cost). It clearly separates itself from apply_recommendation and dismiss_recommendations, which consume the resource_names it returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: filtering by rec_type with example values and include_dismissed=true for dismissed recommendations, plus the downstream handoff to apply_recommendation / dismiss_recommendations. It stops short of saying when NOT to use it or which sibling to pick in ambiguous cases, so a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_serversList Hosting ServersARead-onlyIdempotentInspect
Lists the websites you can edit: Opus Growth hosting servers ('Sunucum') AND any WordPress sites connected with the Opus Growth Connector plugin.
A hosting server is an isolated container we run for the user (edit with site_write_file / site_run_command). A connected WordPress site is the user's OWN WordPress (edit with the wordpress_* tools). Both are editable — they just use different tool families.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the composition of the result set (own hosting containers plus connected third-party WordPress sites) and the edit routing per category.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scope statement is front-loaded in the first sentence. The closing line ('Both are editable — they just use different tool families') restates the preceding parenthetical mapping and is marginally redundant, but the rest of the text earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be explained. The description covers scope, category semantics, and edit routing adequately; it omits any note on ordering, freshness, or pagination, which is a minor gap for a listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so this dimension defaults to the baseline of 4. There is nothing for the description to clarify about inputs, and it correctly focuses on output scope instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb and resource ('Lists the websites you can edit') and immediately resolves the mismatch between the name list_servers and the fact that it returns two distinct categories. It also names the sibling tool families (site_write_file/site_run_command vs wordpress_*) that act on each category, so an agent can route without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains what each returned item represents and which tool family edits it, which is strong implied usage guidance. It does not, however, explicitly address when to call this versus the closely related siblings list_sites and list_wordpress_sites, so the selection logic is inferred 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_sitesList Websites On ServerBRead-onlyIdempotentInspect
Lists the websites hosted on the user's server. One server holds AS MANY WEBSITES AS ITS
SPACE ALLOWS: there is no per site fee and no need to buy another server for a second site.
Returns each site's domain, its short key (used as the site argument on the other website
tools) and which one is the primary site, plus how much of the server's disk is in use.
| Name | Required | Description | Default |
|---|---|---|---|
| server | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorld=false, so the safety profile is covered. The description adds some value by stating the returned fields (domain, short key, primary flag, disk usage), but an output schema exists, so this is largely redundant and no other behavioral traits (permissions, limits) are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loads the purpose, but the middle sentence about no per-site fee and not needing another server is marketing filler that does not help an agent invoke the tool and dilutes the signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial single-optional-param, read-only list tool with an output schema and full annotations, the description covers purpose and return fields adequately. The only real gap is the unexplained `server` parameter, which the schema leaves at 0% coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single optional `server` parameter. The description only obliquely refers to 'the user's server' without explaining how the argument is supplied or what the default empty string means, leaving the parameter essentially undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Lists the websites hosted on the user's server'), which an agent can distinguish from list_servers, list_wordpress_sites, and gsc_list_sites by scope. It does not explicitly name any sibling as a contrast, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage by telling the agent the returned short key is 'used as the `site` argument on the other website tools', which helps sequence calls, but gives no explicit when-to-use/when-not or alternative selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_ad_accountsTikTok Ad AccountsARead-onlyIdempotentInspect
Lists the user's connected TikTok ad account(s). Returns only the account(s) the user selected at connect time; the response carries default_account_id. all_accessible=true returns every account the credential can reach.
| Name | Required | Description | Default |
|---|---|---|---|
| all_accessible | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real behavioral context: it returns only accounts selected at connect time, the response carries default_account_id, and all_accessible widens the reach. That is meaningful beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core behavior and then the parameter semantics. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety and an output schema covering return values, the description only needs to add scope and parameter meaning, which it does. Minor gap: no note on what happens when no account is connected or when the credential lacks TikTok access.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter (all_accessible) is undocumented in the schema, so the description must carry it — and it does, explaining that all_accessible=true returns every account the credential can reach versus the default filtered set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Lists the user's connected TikTok ad account(s)') and distinguishes itself from the many list_tiktok_* siblings by scoping to accounts. It does not explicitly name an alternative tool, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the default (only connect-time selected accounts) versus all_accessible=true is described, which hints at when to set the flag, but there is no explicit 'use this when' or exclusion guidance relative to siblings like list_tiktok_bc_advertisers or connect_tiktok_ads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_adgroupsTikTok Ad GroupsBRead-onlyIdempotentInspect
Lists TikTok ad groups; if campaign_id is provided, limits to that campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | No | ||
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorldHint=false, so the safety profile is covered. The description adds the filter semantics but says nothing about pagination, result caps, or required auth scope beyond what annotations carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the core listing action front-loaded and the filter condition immediately after. No filler, though it is sparse enough that more detail could have been added without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, but for a 2-parameter tool with zero schema descriptions, the absence of any advertiser_id guidance and any pagination/result-count context leaves an agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, so the description must compensate. It explains only campaign_id; advertiser_id — likely required in practice for a TikTok listing — is never mentioned, leaving half the inputs undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (TikTok ad groups) with the scoping behavior of campaign_id. It is clearly distinguishable from siblings like list_tiktok_campaigns and list_tiktok_ads by resource, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The conditional clause 'if campaign_id is provided, limits to that campaign' implies how to narrow the listing, but there is no statement of when to use this versus list_tiktok_ads, list_tiktok_campaigns, or when not to call it (e.g. missing auth/advertiser context).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_adsTikTok AdsARead-onlyIdempotentInspect
Lists TikTok ads; if adgroup_id is given, limits to that ad group. Each ad also returns THE CREATIVE IT RUNS ON, so a winning creative can be reused in another ad group without re-uploading anything: tiktok_item_id (an organic TikTok post = Spark ad), video_id (an uploaded video) or image_ids, plus identity_id/identity_type. Pass those straight into create_tiktok_ad. Note: the numeric prefix in an ad NAME is not a video_id — use the fields returned here.
| Name | Required | Description | Default |
|---|---|---|---|
| adgroup_id | No | ||
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only/idempotent profile, so the bar is lower, and the description still adds real behavioral content: the exact creative identifiers returned and the warning that the numeric prefix in an ad NAME is not a video_id. It omits pagination/result-limit behavior and what happens when advertiser_id is blank.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and filter, then adds the downstream-reuse rationale in one dense but purposeful sentence. The mid-sentence capitalization of the creative-field sentence is slightly heavy, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, the description usefully explains the key returned fields and their cross-tool contract with create_tiktok_ad, which is exactly what an agent needs for this workflow. Gaps remain around advertiser_id scope and default result volume.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameters. It explains adgroup_id's filtering effect well but says nothing about advertiser_id (presumably the account scope), leaving half the parameters semantically undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Lists TikTok ads") and immediately qualifies scope with the optional adgroup_id filter. It also distinguishes itself from sibling listers by naming the creative payload it uniquely returns and the create_tiktok_ad tool it feeds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: use the adgroup_id argument to narrow to one ad group, and use the returned creative fields to reuse a winning creative in another ad group via create_tiktok_ad. It does not, however, state when to prefer this over list_tiktok_adgroups or other ad-retrieval paths, so no explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_asset_groupsTikTok Asset GroupsARead-onlyIdempotentInspect
Lists the asset groups in a TikTok Business Center (groupings of advertisers / pixels / identities used for bulk permissioning). bc_id from list_tiktok_business_centers.
| Name | Required | Description | Default |
|---|---|---|---|
| bc_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds domain context about what an asset group represents, but says nothing about pagination, result volume, or edge cases. Adequate given the annotations carry the behavioral burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense but front-loaded sentence: the action and resource come first, the clarifying parenthetical second, and the parameter hint last. Nothing is padded, though the nested parenthetical slightly slows parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. For a one-parameter read-only lister, the description supplies the resource definition and parameter source, leaving nothing essential an agent needs in order to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema itself only says bc_id is a string, so the description must add meaning — and it does by telling the agent the value's provenance ('from list_tiktok_business_centers'). With a single parameter this provenance is the most useful semantic addition possible.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (Lists) and resource (asset groups) and goes further by defining what an asset group is — 'groupings of advertisers / pixels / identities used for bulk permissioning' — scoped to the TikTok Business Center. This is specific enough to separate it from the many other list_* TikTok siblings, though it does not name one explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing note 'bc_id from list_tiktok_business_centers' implies usage (call the parent lister first) but the description never says when to use this tool versus adjacent listers like list_tiktok_identities or list_tiktok_bc_advertisers. Usage is implied through the dependency, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_audiencesTikTok AudiencesBRead-onlyIdempotentInspect
Lists TikTok custom + lookalike audiences (for ad group targeting).
| Name | Required | Description | Default |
|---|---|---|---|
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered without the description. The description adds nothing beyond that — no detail on scoping, pagination, or whether results are account-bound, which is the kind of extra context that would justify a higher score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler, and the resource and purpose are front-loaded. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. However, for a listing tool sitting among several near-identical audience-listing siblings, the description leaves both the platform-routing decision and the sole parameter unaddressed, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter advertiser_id is never mentioned in the description. An agent gets no explanation of what the parameter does, that it defaults to an empty string, or whether omitting it falls back to the connected account.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Lists TikTok custom + lookalike audiences', with the use case '(for ad group targeting)' clarifying intent. It does not, however, distinguish itself from sibling listing tools such as list_audiences, list_linkedin_audiences, or list_meta_audiences, so an agent must infer the platform scope from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(for ad group targeting)' hints at context but the description never states when to call this versus the other audience-listing tools (list_audiences, list_meta_audiences, etc.) or versus create_tiktok_lookalike_audience / create_tiktok_customer_file_audience. No prerequisites, exclusions, or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_auto_messagesTikTok Welcome-Chat TemplatesARead-onlyIdempotentInspect
Lists the TikTok WELCOME-CHAT (automated message) templates on the account — the auto_message_id that TikTok REQUIRES on every Direct Message / messaging ad. Each template holds the greeting text plus optional tappable 'suggested question → automatic answer' pairs. Only templates with audit_status=PASS can be used in an ad; create new ones with create_tiktok_auto_message.
| Name | Required | Description | Default |
|---|---|---|---|
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds real behavioral context beyond that: the audit_status=PASS usability filter and the internal structure of each template (greeting text plus suggested question → answer pairs). No contradictions; only minor gaps like pagination are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, front-loaded with the core verb+resource, then scope, then the sibling pointer. Every clause carries distinct information; no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be explained. The description covers purpose, gating constraint, template structure, and the creation sibling. The only residue is the undocumented advertiser_id parameter, which is minor for a single-param read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter advertiser_id has 0% schema description coverage and is never mentioned in the description. The phrase 'on the account' implies an advertiser/account scope but does not define the parameter's meaning or format. With only one param, this is a mild gap, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (TikTok WELCOME-CHAT / automated message templates), and situates it in the domain by noting the auto_message_id is required on every DM/messaging ad. It also names the sibling create_tiktok_auto_message, so an agent can distinguish it from adjacent tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the context (needed to obtain the auto_message_id for messaging ads) and routes creation to create_tiktok_auto_message. Explicitly states the audit_status=PASS gating constraint for usability. It lacks an explicit when-not-to-use statement, but the alternative is clearly identified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_bc_advertisersTikTok BC Ad AccountsBRead-onlyIdempotentInspect
Lists the ad accounts (advertisers) under a Business Center.
| Name | Required | Description | Default |
|---|---|---|---|
| bc_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the bar is lower. The description adds the scoping constraint (results are limited to one Business Center) but says nothing about pagination, result limits, or auth requirements beyond what 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, and the scoping constraint appears immediately. It is arguably too terse for its job, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial read-only list tool with an output schema and full annotation coverage, little is needed, and the description is serviceable. It still leaves the sibling-overlap question (list_tiktok_ad_accounts) and the origin of bc_id unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter at 0% schema description coverage, the description must compensate; the phrase "under a Business Center" implies bc_id identifies the parent Business Center, which is the minimum needed. It does not state the ID's format, source, or whether a connected TikTok account is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ("Lists") and resource ("ad accounts (advertisers) under a Business Center"), and the parenthetical disambiguates advertiser = ad account. However, it never distinguishes itself from the close sibling list_tiktok_ad_accounts, so an agent cannot tell from the text alone whether these return the same entities scoped differently.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus list_tiktok_ad_accounts or list_tiktok_business_centers, and no note that bc_id is obtained from the business-centers listing. The only implied usage is the scoping phrase in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_bc_pixelsTikTok Business Center PixelsARead-onlyIdempotentInspect
Lists every pixel across a TikTok Business Center (cross-account measurement view). bc_id comes from list_tiktok_business_centers.
| Name | Required | Description | Default |
|---|---|---|---|
| bc_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds the cross-account aggregation nature of the result set, which is modest additional context but no auth, rate-limit or return-shape detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the scope qualifier front-loaded and the parameter provenance second. Nothing superfluous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the one required parameter's origin is documented. Adequate for a simple read-only list tool, with only minor gaps (ID format, behavior when bc_id is unknown).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single bc_id parameter, so the description must carry the burden, and it does by pointing to list_tiktok_business_centers as the source of the value. That materially reduces misfires, though it doesn't state the expected format (numeric vs string ID).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists every pixel') plus the scope ('across a TikTok Business Center'), which is a real distinction. It does not explicitly name sibling list_tiktok_pixels, so the agent must infer the difference from the 'cross-account' phrasing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent where bc_id comes from ('list_tiktok_business_centers'), which is useful prerequisite guidance. It gives no explicit when-to-use versus the per-account list_tiktok_pixels sibling, so selection still requires inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_business_centersTikTok Business CentersARead-onlyIdempotentInspect
Lists the accessible TikTok Business Centers (agency multi-account management).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds only the useful scoping word 'accessible', clarifying that results are limited to what the credentials can reach, but says nothing about pagination, ordering, or result size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the verb and resource front-loaded and the clarifying parenthetical appended where it costs nothing. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and there are no parameters to document. The only remaining gap is disambiguation from the closely named TikTok Business Center siblings (advertisers, pixels, ad accounts), which an agent might reasonably conflate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to document and the baseline is 4. The description correctly does not invent arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (TikTok Business Centers) and even glosses the jargon with '(agency multi-account management)', which helps an agent understand the entity type. It does not explicitly contrast with related siblings such as list_tiktok_bc_advertisers or list_tiktok_ad_accounts, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (discover which Business Centers the connected account can reach) but never states when to call this versus the many other TikTok listing tools, nor any prerequisites such as needing a connected TikTok account. This is implied-but-unstated guidance rather than explicit when/when-not direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_campaignsTikTok CampaignsBRead-onlyIdempotentInspect
Lists the campaigns in a TikTok ad account (advertiser_id).
| Name | Required | Description | Default |
|---|---|---|---|
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered structurally; the description adds only that results are scoped to a single ad account. No mention of pagination, result limits, or empty-account behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no filler, and the resource is front-loaded. Appropriately sized for a low-complexity list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be documented, and the tool is simple (1 param). Still, the description omits filtering/pagination context and parameter format, which an agent would need to call it reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it does name advertiser_id and tie it to the account concept. However it gives no format, default behavior (the schema default is empty string), or whether it is required, leaving a gap the schema does not fill.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource (lists campaigns) and names the scope (a TikTok ad account). An agent can distinguish it from create_tiktok_campaign or update_tiktok_campaign, though it does not explicitly differentiate from list_tiktok_adgroups/list_tiktok_ads beyond the resource noun.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as list_tiktok_adgroups or tiktok_campaign_report. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_creative_portfoliosTikTok Creative PortfoliosCRead-onlyIdempotentInspect
Lists the account's creative portfolios (named collections of creative assets).
| Name | Required | Description | Default |
|---|---|---|---|
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered. The description adds only a conceptual gloss on 'portfolio' and says nothing about pagination, result limits, or what happens when advertiser_id is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the brevity shades into under-specification given the missing usage and parameter context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and this is a simple read-only listing with one optional parameter. Still, the description omits whether advertiser_id is effectively required and how results are scoped or paginated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter advertiser_id is undocumented. The description's phrase 'the account's' weakly implies advertiser_id scopes the query, but it never states the expected ID format or default behavior when the parameter is empty (default "").
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Lists ... creative portfolios') with a parenthetical definition clarifying what a portfolio is. It does not, however, distinguish itself from the many other list_tiktok_* siblings such as list_tiktok_asset_groups or list_tiktok_identities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives despite a dense set of TikTok listing siblings. The agent must infer the tool's place in the workflow entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_gmv_max_storesTikTok Shop Stores (GMV Max)ARead-onlyIdempotentInspect
Lists the TikTok Shop stores linked to the ad account — these are what GMV Max (TikTok Shop e-commerce) campaigns run against. An empty list means no shop is connected, so GMV Max is not available for this account.
| Name | Required | Description | Default |
|---|---|---|---|
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real value beyond that by disclosing how to interpret the empty-result case as a capability gate. It does not discuss auth requirements or result shape, but that is a minor gap given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the core purpose is front-loaded and the empty-list caveat follows naturally.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only list tool with an output schema, the description covers purpose and result interpretation well. The only omission is any semantic hint about advertiser_id, which is partly mitigated by the output schema carrying the return contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter advertiser_id has 0% schema description coverage and is never mentioned in the description. The phrase 'linked to the ad account' only loosely implies the parameter's meaning, so the description fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and a specific resource (TikTok Shop stores linked to the ad account), then clarifies what those stores exist for (GMV Max campaigns run against them). No sibling tool covers TikTok Shop stores, so confusion risk is low and the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides useful decision context by explaining that an empty list means GMV Max is unavailable for the account, effectively telling the agent this is a prerequisite/availability check. It does not name an explicit alternative or an exclusion case, so it stops short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_identitiesTikTok IdentitiesARead-onlyIdempotentInspect
Lists TikTok ad identities — the identity_id needed when creating ads is obtained here (the equivalent of Meta's page_id). If the account's identity directory is not readable, the identities already used by existing ads are returned instead (source="existing_ads"): those identity_id values work normally in create_tiktok_ad, only the display name is unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safe-read profile, but the description adds substantial non-obvious behavior: when the identity directory is unreadable it silently falls back to identities from existing ads (source="existing_ads"), and those IDs still work in create_tiktok_ad except the display name is missing. This is exactly the kind of behavioral disclosure annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no wasted filler; the primary purpose precedes the fallback caveat. The parenthetical Meta analogy earns its place for cross-platform agents, though the sentence runs long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is not needed, and the description covers purpose plus the important fallback path. The one remaining gap is input-parameter meaning, which leaves the tool slightly under-specified for its single argument.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole parameter advertiser_id is never mentioned in the description — not its meaning, nor that it is optional (default ""). The description compensates for none of the parameter gap, and the 'source="existing_ads"' reference describes output, not the input parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Lists TikTok ad identities') and immediately explains the role it plays — supplying the identity_id required when creating ads, with a cross-domain analogy (Meta's page_id). An agent can tell what it produces and why, distinct from create_tiktok_identity or list_tiktok_ad_accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames usage via 'the identity_id needed when creating ads is obtained here,' effectively routing the agent to call this before create_tiktok_ad. It also explains the degraded-mode branch, though it does not name an alternative tool or state explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_lead_formsTikTok Lead FormsARead-onlyIdempotentInspect
Lists the account's TikTok LEAD-GEN instant forms — each with the page_id that download_tiktok_leads needs, plus the form title, status and creation time. This is how you find which forms a lead-gen campaign is collecting into before pulling the leads.
| Name | Required | Description | Default |
|---|---|---|---|
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered. The description adds genuinely useful context beyond that: the exact return contents and the fact that page_id is the join key for download_tiktok_leads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the resource scope front-loaded and the workflow hint immediately after. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description is nearly complete for a simple list tool. The only gap is the undocumented advertiser_id parameter, which no other structured field explains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter advertiser_id has 0% schema description coverage and the description never mentions it. With an undocumented parameter and no compensating text, the definition leaves the agent to infer what identifying value to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lists) plus a specific resource (TikTok LEAD-GEN instant forms) and even names the fields returned (page_id, title, status, creation time). It distinguishes itself implicitly from list_lead_form_submissions and get_tiktok_lead_form_fields by scoping to forms rather than submissions or fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly places the tool in a workflow: find the forms before pulling leads, and names download_tiktok_leads as the consumer of the page_id. It does not address when to use get_tiktok_lead_form_fields instead, so exclusions are incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_pixelsTikTok PixelsARead-onlyIdempotentInspect
Lists TikTok conversion pixels (for measurement + WEB_CONVERSIONS/CONVERT optimization). Each pixel includes its configured events (e.g. ON_WEB_REGISTER, SHOPPING, FORM) with optimization_event, plus activity_status (ACTIVE = receiving fires) and setup_mode — so you can verify a conversion (e.g. signup) is set up before optimizing an ad group for it. TikTok's Marketing API does NOT expose raw 7/28-day event fire counts; those live in Events Manager.
| Name | Required | Description | Default |
|---|---|---|---|
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description adds real value: it discloses the returned fields (events, optimization_event, activity_status, setup_mode) and, critically, an API limitation — that raw 7/28-day fire counts are unavailable via the Marketing API and live in Events Manager.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what it lists, then the return contents, then usage, then the limitation — every clause carries information and nothing is padded. Parentheticals (ON_WEB_REGISTER, SHOPPING, FORM) are illustrative value, not filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be documented, yet the description still clarifies the key fields. Together with the disclosed limitation, an agent has everything needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description never mentions advertiser_id, so it adds no parameter meaning. With a single common identifier parameter, the gap is minor but the description does not compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Lists TikTok conversion pixels") and immediately scopes it to measurement/WEB_CONVERSIONS/CONVERT optimization. Distinguishes it from siblings like create_tiktok_pixel and list_tiktok_bc_pixels by naming its domain of use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case: "verify a conversion (e.g. signup) is set up before optimizing an ad group for it." That tells the agent when to reach for this tool, but it names no explicit alternative and states no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_postsTikTok Organic PostsARead-onlyIdempotentInspect
Lists the ORGANIC TIKTOK POSTS of a connected TikTok account (identity) that can be turned into ads — Spark Ads. Returns item_id (pass it to create_tiktok_ad as tiktok_item_id), caption, duration and cover image, newest first. This is how you promote an existing post — the best-performing organic video — without re-uploading it. identity_id comes from list_tiktok_identities. Works for both kinds of real TikTok account: TT_USER (the account itself) and BC_AUTH_TT (a TikTok account authorised to the Business Center — the usual case for a business's own account). Leave identity_type empty and the identity's own type is read from the account; for BC_AUTH_TT the Business Center id TikTok demands is resolved automatically (pass identity_bc_id only when the user has several Business Centers). CUSTOMIZED_USER identities have no organic posts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| identity_id | Yes | ||
| advertiser_id | Yes | ||
| identity_type | No | ||
| identity_bc_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: results are newest-first, identity_type can be left empty and is auto-resolved, and BC_AUTH_TT Business Center id resolution is automatic. It stops short of describing pagination or result caps beyond the schema's limit default, hence a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the item_id -> tiktok_item_id handoff, then layered account-type detail. Parenthetical digressions add density rather than waste, though the paragraph is longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the description still names the key return fields. Combined with the workflow routing and account-type handling, an agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for identity_id (source), identity_type (TT_USER vs BC_AUTH_TT, leave-empty behavior), and identity_bc_id (pass only when multiple Business Centers). advertiser_id and limit are left undocumented, so it is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+'ORGANIC TIKTOK POSTS of a connected TikTok account' and ties it to the Spark Ads use case. It also distinguishes itself from the adjacent create_tiktok_ad (downstream consumer) and list_tiktok_identities (upstream source of identity_id), so an agent can place it in the workflow without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit about when to use it ('this is how you promote an existing post without re-uploading'), where identity_id comes from, what to do with the returned item_id, and which account types are eligible (CUSTOMIZED_USER has no organic posts). It even states the condition that selects the identity_bc_id parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_smart_plusTikTok Smart+ ObjectsARead-onlyIdempotentInspect
Lists the account's Smart+ (TikTok's automated 'smart performance') campaigns, ad groups or ads — these do NOT appear in list_tiktok_campaigns/adgroups/ads, which only cover standard (manual) objects. level: CAMPAIGN | ADGROUP | AD. Use this to see and report on Smart+ delivery.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | CAMPAIGN | |
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful non-annotation context: Smart+ objects are a separate namespace invisible to the standard listing tools. It stops short of noting pagination or result volume, but the output schema exists to cover return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with verb and resource, then the sibling exclusion and the level enum. Two sentences, no filler, though the em-dash clause listing three resource types is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations carry the safety profile. The one remaining gap an agent would want is the advertiser_id parameter's meaning, which neither the schema nor the description supplies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does document the meaningful enum values for level (CAMPAIGN | ADGROUP | AD), which the schema lacks, but says nothing about advertiser_id despite it being the other parameter. Partial compensation warrants a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (Lists) plus the resource (Smart+ campaigns, ad groups or ads) and immediately contrasts it with the sibling listers list_tiktok_campaigns/adgroups/ads. An agent can distinguish this from every other TikTok listing tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative tools and the exact condition that separates them ('these do NOT appear in list_tiktok_campaigns/adgroups/ads, which only cover standard (manual) objects') and states the intended purpose ('to see and report on Smart+ delivery'). That is explicit routing rather than implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_videosTikTok Video LibraryARead-onlyIdempotentInspect
Lists the ad account's VIDEO LIBRARY — every video material uploaded to TikTok Ads, newest first, with the video_id that create_tiktok_ad requires (plus file name, duration, size and a preview link). Use this to pick "the video I uploaded last" instead of guessing an id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds value beyond them: the sort order (newest first) and the exact returned fields (video_id, file name, duration, size, preview link), which is what lets an agent chain into create_tiktok_ad.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence; the purpose and return payload come first and the 'why' follows. The em-dash parentheticals make it slightly dense but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, and the safety profile is fully covered by annotations. The gap is parameter documentation: an agent cannot tell what limit does or whether advertiser_id defaults matter, which leaves the definition under-complete for a two-param call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both parameters (limit, advertiser_id) are undocumented. The description alludes to 'the ad account's' library but never maps that to advertiser_id nor explains limit/pagination, so with two opaque params it fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (the ad account's VIDEO LIBRARY) with scope detail — 'every video material uploaded to TikTok Ads, newest first' — and explicitly names the sibling it feeds (create_tiktok_ad requires the returned video_id). An agent can distinguish it from list_tiktok_asset_groups or upload_tiktok_video without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use case: 'pick "the video I uploaded last" instead of guessing an id.' That is clear routing context, but it does not name alternative tools (e.g. upload_tiktok_video when no video exists yet, or the ad/asset-group listers) or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wordpress_sitesList WordPress SitesARead-onlyIdempotentInspect
List the WordPress sites connected to your Opus Growth account, plus your WordPress plan tier, limits, and every WordPress tool you can use on them.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: the response also carries plan tier, limits, and the catalog of available WordPress tools, which helps an agent understand the call's broader role as a discovery step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the primary resource named first and supplementary content appended. No redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, an existing output schema, and rich annotations, the description covers scope and content adequately. The one omission is explicit guidance on when this discovery call should precede the wordpress_* family, but nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema baseline of 4 applies; there is nothing extra for the description to document and no misleading parameter claims.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (WordPress sites connected to your Opus Growth account), and explicitly scopes the content to account-connected WordPress sites, distinguishing it from generic siblings like list_sites and wordpress_site_info. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The listing intent is implied and the scope is clear, but there is no explicit when-to-use guidance, no mention of prerequisites, and no routing to alternatives (e.g., wordpress_site_info for a single site). Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_audience_targetingAttach/Remove/Exclude Audience TargetingDestructiveInspect
ATTACHES an audience to a campaign or ad group (or removes it) — the missing link that makes your audience lists actually do something. Creating a remarketing/customer-match/lookalike list does NOT affect delivery until it is attached to a campaign; until now they were built but never connected.
audience = one of TWO different things, and the tool works out which: • YOUR OWN remarketing / customer-match / lookalike list — name or ID from list_audiences. Works at campaign AND ad-group level. • A GOOGLE-DEFINED segment — an in-market, affinity, life-event or detailed-demographic audience, given by its EXACT display name as it appears in reports and in the Google Ads interface (e.g. "Network & Enterprise Security", "Large Employer (250-10k Employees)"), or as customers/…/userInterests/92507. Campaign and ad-group level both work. Two limits come from Google: a detailed-demographic CATEGORY cannot be attached, only a leaf inside it ("Large Employer (250-10k Employees)" works, "Company Size" does not), and life-event segments are refused on Search campaigns — they exist for Display, Video and Demand Gen. NOTE: the criterion_id in an audience report is NOT the segment id — do not pass it here; pass the name. Give campaign_id OR ad_group_id. action: • attach = add the audience as a POSITIVE criterion (observe/bid on it). • exclude = add it as a NEGATIVE criterion (negative=true) → do NOT show ads to this audience (e.g. exclude people who already converted / clicked call/WhatsApp). Works at campaign AND ad-group level. • remove = detach the positive audience criterion. • remove_exclusion = remove a previously excluded audience. (remove/remove_exclusion find the exact criterion by this audience + negative flag, so the right one is removed.) mode (positive attach only): OBSERVATION = don't narrow reach, just report/bid (safe default). TARGETING = restrict reach to only the attached audiences (e.g. a search remarketing / RLSA campaign shown only to site visitors). TARGETING is a setting of the whole campaign or ad group: it narrows delivery to ALL positive audiences attached at that level, and its other targeting restrictions are kept. Empty mode = OBSERVATION for a new audience and leaves the existing setting unchanged. If the audience is already attached, attach with mode=TARGETING just switches the setting, and attach with mode=OBSERVATION switches it back to observation. bid_modifier: optional bid multiplier for a POSITIVE audience, e.g. 1.2 = +20% (invalid for exclude; 0 = none). confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| action | No | attach | |
| confirm | No | ||
| audience | Yes | ||
| ad_group_id | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| bid_modifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
manage_bidding_strategiesSet Bid StrategyADestructiveInspect
Changes a campaign's bidding strategy. strategy: MAXIMIZE_CONVERSIONS (optional target_cpa) | TARGET_CPA (target_cpa required) | TARGET_ROAS (target_roas required, e.g. 3.5 = 350%) | MAXIMIZE_CONVERSION_VALUE (optional target_roas) | MAXIMIZE_CLICKS (optional max_cpc cap) | TARGET_IMPRESSION_SHARE (impression_share_percent + max_cpc required; location: ANYWHERE_ON_PAGE | TOP_OF_PAGE | ABSOLUTE_TOP_OF_PAGE) | MANUAL_CPC. max_cpc (CPC ceiling) is ONLY valid for MAXIMIZE_CLICKS and TARGET_IMPRESSION_SHARE — Google Ads does not accept a CPC ceiling on campaign-level MAXIMIZE_CONVERSIONS / TARGET_CPA / TARGET_ROAS / MAXIMIZE_CONVERSION_VALUE / MANUAL_CPC (there it only exists on a PORTFOLIO/shared strategy, which this tool cannot create or assign); passing it with those strategies returns an error instead of being silently ignored. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| max_cpc | No | ||
| strategy | Yes | ||
| target_cpa | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| target_roas | No | ||
| impression_share_percent | No | ||
| impression_share_location | No | TOP_OF_PAGE |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish destructive=true/readOnly=false, and the description adds meaningful behavior: invalid max_cpc combinations 'return an error instead of being silently ignored' (error semantics) and confirm=false performs a dry-run. It does not mention permissions/auth scope, but the error and dry-run disclosures go beyond the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose followed by a dense but well-organized per-strategy spec; the max_cpc constraint paragraph is long but essential and prevents a real invocation error. Every sentence carries operational weight, though the run-on caveat sentence could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 strategy variants, 9 parameters and conditional requirements, plus an output schema that handles return values, the description covers strategy selection, dry-run behavior, and error handling. An agent has what it needs to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage the description carries the full burden and largely succeeds: it maps each strategy to required/optional params, gives a units example (3.5 = 350%), and lists the impression_share_location enum values. Only customer_id and campaign_id remain unexplained, which is a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Changes a campaign's bidding strategy') and enumerates the exact strategy values with their required/optional parameters. It explicitly distinguishes itself from the portfolio sibling by noting it 'cannot create or assign' a PORTFOLIO/shared strategy, so an agent can separate it from manage_portfolio_bidding_strategy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the per-strategy parameter requirements and the portfolio caveat, but there is no explicit 'use this when X, otherwise use Y' routing versus manage_portfolio_bidding_strategy or manage_campaign_settings. The confirm=false dry-run hint is a useful operational cue but is not a when-to-use guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_business_logoSet Campaign Business LogoADestructiveInspect
Replaces the BUSINESS LOGO shown in a campaign's ads (the small square logo next to the business name) — e.g. after a rebrand, when the old company's logo is still on every ad.
A campaign accepts only ONE advertiser business logo, so linking a new one with manage_extension_assets fails with a resource limit while the old one is still attached, and unlinking first leaves the ads without a logo in between. This tool does the swap in one atomic request: it links the new logo as BUSINESS_LOGO and unlinks the old advertiser logo together. The new logo must already be in the account's asset library as a SQUARE (1:1) image of at least 128x128 px — upload it first with upload_image_asset (aspect='1:1') and pass the returned asset id here.
Call it with asset_id empty to READ which logo the campaign shows today without changing anything. Logos Google created AUTOMATICALLY from the website are listed separately and are not touched; they do not block the swap. confirm=false returns a dry run naming the old and the new logo; confirm=true applies it and reads the result back from Google. The link is per campaign, so call it once for each campaign that should show the new logo.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| asset_id | No | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (destructiveHint=true, idempotentHint=false, openWorldHint=true) are consistent with the described atomic replace. The description adds substantial extra context beyond annotations: the atomic link+unlink behavior, the dry-run semantics of confirm=false vs confirm=true with read-back, the fact that auto-created logos are untouched and do not block the swap, and the 1:1 ≥128x128 asset constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the failure mode of alternatives, and consistently dense with operational detail. It runs to three paragraphs, so it is longer than strictly needed, but nearly every clause carries decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 4-param mutation tool with an output schema (so returns need not be explained) and destructive annotations, the description covers prerequisites, dry-run safety, side effects, and per-campaign scope. An agent can call it correctly and safely without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden and does: asset_id is documented as both the target asset (already in library, square, ≥128px) and as a read-mode switch when empty; confirm is documented as dry-run vs apply with result read-back. Only customer_id is left implicit, which is self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource+scope: it replaces the BUSINESS_LOGO shown in a campaign's ads, atomically swapping the old advertiser logo for a new one. It explicitly distinguishes itself from manage_extension_assets (which fails on the one-logo limit) and upload_image_asset (which must run first).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the triggering scenario (rebrand, old logo still on ads), explains why the naive alternatives fail, names the prerequisite upload step, and states the per-campaign repeat requirement. It also defines the read-only mode via empty asset_id, so the agent knows when not to mutate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_business_nameSet Campaign Business NameADestructiveInspect
Fixes the BUSINESS NAME shown in a campaign's ads — the one place a typo is visible to every person who sees the ad, and until now there was no way to correct it.
Text assets in Google Ads are IMMUTABLE: asset.text_asset.text cannot be edited, which is why no update tool could exist. The correct operation is a RELINK, and this tool does it in one atomic request: it finds an asset in the account that already carries the exact text you want (so a name you already use elsewhere is REUSED instead of duplicated), creates one only if none exists, links it to the campaign as BUSINESS_NAME and unlinks the old one in the same mutate — a campaign accepts only one business name, so the swap has to happen together.
Call it with text empty to READ what the campaign shows today without changing anything. confirm=false returns a dry run naming the old and the new text; confirm=true applies it and reads the value back from Google. Fixing a name used by several campaigns means calling this once per campaign, because the link is per campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already flagging destructiveHint=true and idempotentHint=false, the description adds rich behavioral detail: the operation reuses an existing asset rather than duplicating, creates one only if absent, links and unlinks in a single atomic mutate, and verify-reads the value from Google. This is context the annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key insight (relink, not edit) is front-loaded, and every sentence adds information about mechanism, modes, or constraints. It is a little long and leans on capitalized emphasis, but there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a genuinely complex mutation with a dry-run mode and an atomic relink, the description covers mechanism, safety, invocation modes, and per-campaign scope. An output schema exists, so return values need no explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden, and it does so well for the two optional parameters: 'text' empty means read-only, and confirm=false means dry-run while true applies. 'campaign_id' is implicitly covered by the per-campaign note, but 'customer_id' gets no explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource in the first clause — fixing the BUSINESS NAME shown in a campaign's ads — and immediately frames the real mechanism (a RELINK, not an edit) so the agent understands what the tool actually does. No sibling tool covers campaign business naming, so differentiation is inherent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool (a typo that must be corrected in a live ad), why no normal update tool could exist (immutable text assets), and how to invoke it in read-only mode ('text' empty) versus apply mode (confirm=true). It even notes the one-call-per-campaign constraint when several campaigns share a name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_campaign_proximityManage Campaign Proximity (radius targeting)ADestructiveInspect
Manage a campaign's PROXIMITY (radius / lat-lng circle) targeting — the radius targets that get_campaign_targeting reads but set_campaign_targeting CANNOT change. Lets you focus a campaign on a specific corridor/area (e.g. a highway stretch) by lat/lng + radius. action: • 'add' → add one radius target (lat, lng, radius, units) — or many at once via points. • 'update' → replace ONE existing radius target (needs criterion_id) with new lat/lng/radius/units. (Proximity fields are immutable in Google Ads, so this removes the old + adds the new in a single atomic mutate.) • 'remove' → delete ONE radius target by criterion_id. • 'replace' → delete ALL existing radius targets on the campaign, then add the given one(s). (Give no point to simply CLEAR all radius targeting.) units: 'KILOMETERS' (default) or 'MILES'. radius e.g. 5. Get criterion_id from get_campaign_targeting. points: optional JSON list for batch add/replace, e.g. '[{"lat":38.92,"lng":27.84,"radius":3,"units":"KILOMETERS"},{"lat":38.95,"lng":27.9,"radius":2}]'. confirm=false → dry-run preview (nothing is changed).
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lng | No | ||
| units | No | KILOMETERS | |
| action | Yes | ||
| points | No | ||
| radius | No | ||
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| criterion_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 behavior beyond them: Google Ads proximity fields are immutable so update is an atomic remove+add, 'replace' deletes ALL existing targets, and confirm=false is a dry-run. It doesn't discuss rate limits or auth, but the added context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the key differentiator before the action list, and the bullet structure maps cleanly to actions. It is dense and the points JSON example adds length, but every element carries semantic value for a mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with an output schema present, the description covers the action taxonomy, parameter formats, dry-run safety, and the immutability constraint that changes expected behavior. Return values are handled by the output schema, so nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does so well: it defines action values, units ('KILOMETERS' default vs 'MILES'), radius semantics, the points JSON batch format with an example, and where to obtain criterion_id. Only customer_id/campaign_id are left unexplained, which is acceptable given their obviousness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (manage a campaign's proximity/radius targeting) and immediately distinguishes it from siblings, noting these are 'the radius targets that get_campaign_targeting reads but set_campaign_targeting CANNOT change.' An agent can route to it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the two sibling tools and the exact division of labor between them, then enumerates the four actions (add/update/remove/replace) with the condition selecting each, including the edge case of clearing all targeting via 'replace' with no points.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_campaign_settingsCampaign Settings (network/location type/tracking/AI Max for Search)DestructiveInspect
Campaign-level settings (networks, location type, tracking template, EU political ads declaration, AI Max for Search), plus reading them: • geo_target_type: 'PRESENCE' (those PRESENT in the target location) | 'PRESENCE_OR_INTEREST' (also those interested). • search_partners: 'on' | 'off' — Search Partners. • display_expansion: 'on' | 'off' — Display expansion on a Search campaign. • tracking_url_template: campaign tracking template (e.g. '{lpurl}?utm_source=google'); send '-' to DELETE. • eu_political_ads: 'no' | 'yes' — the advertiser's declaration whether this campaign has European Union political ads. Google refuses targeting and other edits on a campaign until it is declared (MISSING_EU_POLITICAL_ADVERTISING_SELF_DECLARATION). Ask the user; do not answer for them.
AI MAX FOR SEARCH (Search campaigns only). AI Max is Google's switch that lets a Search campaign reach beyond its keywords. With it ON: – search term matching: keywords behave like broad match and Google also matches searches from the landing pages and ads, so the campaign shows for searches you never added (check the search terms report — rows marked "AI Max"); – text customization: Google writes extra headlines/descriptions from your site and ads; – final URL expansion: Google may send a click to a different page of your site than the ad's final URL. It can bring new traffic, but it can also spend on unrelated searches (rentals, parking, hotels, other businesses' names); compare the "AI Max" rows' cost and conversions with your own keywords before deciding. • ai_max: 'on' | 'off' — the main switch. 'off' also turns text customization and final URL expansion off in the same change (Google requires that); keywords then match by their own match type again. • ai_max_text_customization: 'on' | 'off' — needs ai_max on. • ai_max_final_url_expansion: 'on' | 'off' — needs ai_max on AND text customization on. • ai_max_search_term_matching: 'on' | 'off' — applied to EVERY ad group of the campaign: 'off' keeps AI Max on for text/URL features but makes keywords match only by their own match type. Brand lists, locations of interest, URL inclusions and text guidelines are not set here. Any field left empty is NOT changed. confirm=false → if called with no fields provided, returns the campaign's CURRENT values, including the AI Max state and each ad group's search term matching (call with no parameters to READ).
| Name | Required | Description | Default |
|---|---|---|---|
| ai_max | No | ||
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| geo_target_type | No | ||
| search_partners | No | ||
| eu_political_ads | No | ||
| display_expansion | No | ||
| tracking_url_template | No | ||
| ai_max_text_customization | No | ||
| ai_max_final_url_expansion | No | ||
| ai_max_search_term_matching | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
manage_chatgpt_ads_accountsManage ChatGPT Ads AccountsADestructiveInspect
Lists, re-checks, disconnects or re-defaults your connected ChatGPT Ads accounts.
action: list | check | set_default | disconnect. list shows every connected ad account with its currency and review status. check calls the account endpoint with the stored key and reports whether it still works — use it when a tool starts returning an authorization error, because a revoked key looks exactly like a missing permission from the outside. set_default decides which account the other ChatGPT Ads tools use when you do not name one. disconnect deletes the stored key for that account. Keys are never shown back.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | list | |
| account | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds the crucial detail of which action is destructive (disconnect deletes the stored key) plus the security-relevant fact that keys are never shown back. It does not mention the `confirm` parameter or any guard/prompt before the destructive disconnect, which leaves the mutation path slightly under-specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line summary is front-loaded and the per-action breakdown follows in compact order. Every sentence carries distinct information — no restatement of the title or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the action taxonomy is fully covered. The remaining gap is the undocumented `confirm` parameter and the absence of an explicit statement that disconnect requires confirmation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It compensates well for `action`, documenting all four enum-like values and their behavior, and implies `account` scoping, but the `confirm` boolean (default false) is never mentioned despite being relevant to the destructive disconnect path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (lists, re-checks, disconnects, re-defaults) against a specific resource (connected ChatGPT Ads accounts), then enumerates each action's effect. An agent can distinguish this account-management tool from sibling list_* and connect_* tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes usage: `check` is prescribed for the authorization-error case, with the reasoning that a revoked key looks like a missing permission. `set_default` explains its downstream effect on other ChatGPT Ads tools, and each action is defined by when it applies. This is close to a complete decision table.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_chatgpt_ads_spend_limitManage ChatGPT Ads Spend LimitADestructiveInspect
Creates, changes or removes a ChatGPT Ads account spending limit (date-range window or recurring daily limit).
action: create_window | update_window | delete_window | set_daily | remove_daily. Dates are YYYY-MM-DD in the account time zone; end_date is EXCLUSIVE (a window for October 1–7 ends on 2026-10-08). amount is in the account currency (a window's total, or the allowance per day for set_daily); OpenAI rejects lowering it below spend already recorded. Windows cannot overlap each other or the daily limit; an active window's start date cannot move; completed windows cannot change. set_daily creates or edits the daily limit — a new one starts tomorrow at the earliest (start_date defaults to the earliest allowed day), no_end_date=true makes it open-ended. The daily-limit revision OpenAI requires is read for you just before the change. Removing or raising an exhausted limit lets delivery resume, so the dry run states the account-wide effect. Needs an ad-account admin key with billing permission; otherwise the tool says so. confirm=false returns a dry run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| io_id | No | ||
| action | Yes | ||
| amount | No | ||
| account | No | ||
| confirm | No | ||
| end_date | No | ||
| window_id | No | ||
| start_date | No | ||
| no_end_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true and idempotent=false, yet the description adds substantial context beyond them: OpenAI rejects lowering below recorded spend, windows cannot overlap, completed windows are immutable, the required revision is auto-read, and the dry run reports the account-wide delivery effect. It also discloses the auth requirement (admin key with billing permission) and the tool's own failure message.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and front-loaded, with the action enum second so the operational mode is established early. It is long and uses backtick-heavy inline notation, but nearly every clause adds a real constraint rather than restating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, 10-parameter mutation tool this is thorough: auth, dry-run behavior, immutability rules, date semantics, and delivery consequences are all present, and an output schema exists so return values need no explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage across 10 parameters, the description carries the full burden and does well for the important ones: the action enum, end_date exclusivity with a concrete example, amount as total vs. per-day, no_end_date and its start_date default, and confirm. It leaves name, io_id, account, and window_id unexplained, so it falls short of complete coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific multi-verb statement of the resource and its two modes (date-range window vs. recurring daily limit), immediately distinguishing it from the read-only chatgpt_ads_spend_limits sibling. An agent can tell what the tool mutates 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives rich invocation context: enumerated actions, when a window may not change (overlap, active start date, completed windows), the set_daily constraint that a new limit starts tomorrow, and confirm=false for a dry run. It does not explicitly route the agent to chatgpt_ads_spend_limits for reading existing limits, which is the only missing piece.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_conversion_actionsCreate Conversion ActionADestructiveInspect
Creates a new conversion action. type: WEBPAGE (default) | AD_CALL (phone calls from ad/location call extensions, i.e. Google 'Calls from ads') | WEBSITE_CALL (calls to a number on your site) | CLICK_TO_CALL | UPLOAD_CALLS | UPLOAD_CLICKS. category: LEAD, PURCHASE, SIGNUP, PHONE_CALL_LEAD… (for AD_CALL/WEBSITE_CALL it defaults to PHONE_CALL_LEAD). phone_call_duration = minimum seconds a call must last to count (call types only). PREREQUISITE for AD_CALL: run set_call_reporting(call_conversion='true') first; note Google forwarding numbers (needed for AD_CALL) exist only in supported countries. NOTE: this tool only CREATES; to read use list_conversion_goals, to edit use update_conversion_action / to make it primary/biddable use update_conversion_goal. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | No | WEBPAGE | |
| confirm | No | ||
| category | No | LEAD | |
| customer_id | Yes | ||
| default_value | No | ||
| phone_call_duration | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false. The description earns credit beyond that by disclosing the confirm=false dry-run behavior and the ordering prerequisite for AD_CALL. It does not, however, say what gets permanently created or whether the action is immediately active for tracking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: creation statement first, then type semantics, then prerequisites, then sibling routing. Every segment carries information, though the enum list is long and the sentence structure is run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a 7-parameter destructive create, the description covers purpose, key parameter semantics, prerequisites, and routing. Minor gap: no mention of what default_value does or what error/validation behavior to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does so for type (all six values with plain-English explanations), category (examples plus the PHONE_CALL_LEAD default for call types), phone_call_duration (unit and applicability), and confirm (dry-run). Only name, customer_id, and default_value are left to inference, though those are largely self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Creates a new conversion action') and then explicitly distinguishes itself from read/edit/primary siblings by name. An agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'this tool only CREATES' and routes to list_conversion_goals for reads, update_conversion_action for edits, and update_conversion_goal for primary/biddable changes. It also gives a hard prerequisite (run set_call_reporting(call_conversion='true') before AD_CALL) and the country limitation on Google forwarding numbers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_device_targetingManage Device Targeting (bid adjustments)ADestructiveInspect
Set a campaign's per-DEVICE bid adjustment — the WRITE side of the device criteria that get_campaign_targeting reads. Lets you run e.g. MOBILE-ONLY by excluding desktop + tablet. device: MOBILE | DESKTOP | TABLET | CONNECTED_TV (comma-separated, e.g. 'DESKTOP,TABLET'). bid_modifier_pct: percent adjustment for those device(s): • -100 = EXCLUDE the device (ads won't show there), • 0 = neutral / reset (no adjustment), • +20 = bid 20% more, -50 = 50% less. Range -100..+900. Mobile-only recipe: device='DESKTOP,TABLET', bid_modifier_pct=-100. CONNECTED_TV matters on Demand Gen and Video: that inventory is ON by default and a TV impression rarely turns into a click, so a traffic campaign usually wants it excluded (device='CONNECTED_TV', bid_modifier_pct=-100). On Demand Gen Google accepts ONLY full exclusion (-100) or neutral (0) for EVERY device — a partial adjustment like -50 is rejected by Google on that channel (measured), and the reply says so instead of passing the raw error through. Creates the device criterion if missing, else updates its adjustment. confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| bid_modifier_pct | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-read-only, destructive, non-idempotent; the description adds far more: upsert semantics ('creates the criterion if missing, else updates'), the confirm=false preview path, and Google's measured rejection of partial adjustments on Demand Gen with a friendly error reply. Minor tension: 'creates if missing else updates' reads as an upsert rather than strictly non-idempotent, but this is a nuance, not a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core operation, then structured with bullets; almost every line carries unique information. Slightly verbose in places (the percentage examples and the recipe partially restate each other), but no real filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained; the description instead covers everything an agent needs: upsert behavior, preview mode, device syntax, modifier range, and channel-specific validation quirks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden and does: it enumerates device values (MOBILE|DESKTOP|TABLET|CONNECTED_TV), comma-separated syntax, and fully explains bid_modifier_pct semantics (-100 exclude, 0 neutral/reset, positive/negative percentages, range -100..+900). It even documents confirm's preview behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set a campaign's per-DEVICE bid adjustment') and explicitly positions itself as 'the WRITE side of the device criteria that get_campaign_targeting reads,' cleanly separating it from the read sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use recipes (mobile-only = device 'DESKTOP,TABLET' with -100), names the CONNECTED_TV exclusion case for Demand Gen/Video, and even states the channel-specific constraint that partial adjustments are rejected there. An agent knows exactly when and how to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_extension_assetsAdd Extension AssetsADestructiveInspect
Adds extension assets to a campaign — or to ONE AD GROUP when ad_group_id is given. AD GROUP LEVEL: pass ad_group_id (campaign_id may then be left empty; it is resolved from the ad group) and every asset created or linked here is attached as an AdGroupAsset to that ad group only. Google serves ad-group assets INSTEAD of the campaign's assets of the same type for that ad group's ads, so a branch ad group can show its own phone number, WhatsApp chat, sitelinks and callouts while the rest of the campaign keeps the campaign-level ones. To reuse assets already created for one ad group on a second ad group, pass link_asset_ids with the other ad_group_id (no duplicates are created). callouts: short highlights ['Free Shipping',...]. sitelinks: lines in 'text|url' or 'text|url|description1|description2' format. phone_number (+phone_country) adds a call extension. snippet_header + snippet_values add a structured snippet (header e.g. 'Services', 'Brands' — from Google's fixed list). whatsapp_number (+whatsapp_country, whatsapp_greeting, whatsapp_cta, whatsapp_cta_text) adds a MESSAGE extension (BUSINESS_MESSAGE) that opens a WhatsApp chat — all five are required by Google: greeting is the pre-filled first message, whatsapp_cta is one of APPLY_NOW, BOOK_NOW, CONTACT_US, GET_INFO, GET_OFFER, GET_QUOTE, GET_STARTED, LEARN_MORE, and whatsapp_cta_text is the button description (max 30 chars). Only WhatsApp is supported (Facebook Messenger and Zalo need provider data Google does not expose here). prices: PRICE extensions, one line per offering in 'Header|Description|1500 TRY|https://url' format (optional extra '|unit:PER_MONTH'); 3 to 8 offerings are required, headers must be unique and max 25 chars, descriptions max 25 chars. price_type groups them (SERVICES, BRANDS, PRODUCT_CATEGORIES, NEIGHBORHOODS, EVENTS, LOCATIONS, PRODUCT_TIERS, SERVICE_CATEGORIES, SERVICE_TIERS), price_qualifier is optional (FROM, UP_TO, AVERAGE) and price_language must be one of de, en, es, fr, it, ja, nl, pl, pt_BR, ru, sv. IMPORTANT, measured against the live API: Google does NOT support Turkish (tr) or the Turkish lira (TRY) for price extensions, so a TRY account cannot use them — the tool says so instead of failing cryptically. promotions: PROMOTION extensions in 'Target text|discount|https://url' format — discount is '%20' (percent) or '150 TRY' (amount); optional extra '|key:value' segments: code:SUMMER25, min:500 (minimum order amount, mutually exclusive with code), start:2026-08-01, end:2026-09-01, occasion:SUMMER_SALE, lang:tr, modifier:UP_TO. link_asset_ids: comma-separated asset IDs ALREADY in the account's asset library (from list_assets) — links them to the campaign INSTEAD of creating duplicates; the field type is derived from the asset's own type (PROMOTION, SITELINK, CALLOUT, CALL, STRUCTURED_SNIPPET, PRICE, MOBILE_APP, HOTEL_CALLOUT, LEAD_FORM, IMAGE). IMAGE assets (from upload_image_asset) are linked as the Search IMAGE EXTENSION (field type AD_IMAGE) — Google requires at least 300x300 px and accepts 1.91:1 and 1:1 crops. At least one extension type must be provided. confirm=false → dry-run. To VIEW or REMOVE existing extensions, use list_extension_assets and remove_extension_assets. LOCATION (business address, map pin, "Get directions") is NOT an extension type here: location assets are generated automatically from the Google Business Profile link and serve account-wide — inspect or pin them with add_location_assets.
| Name | Required | Description | Default |
|---|---|---|---|
| prices | No | ||
| confirm | No | ||
| callouts | No | ||
| sitelinks | No | ||
| price_type | No | SERVICES | |
| promotions | No | ||
| ad_group_id | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| phone_number | No | ||
| whatsapp_cta | No | GET_QUOTE | |
| phone_country | No | TR | |
| link_asset_ids | No | ||
| price_language | No | en | |
| snippet_header | No | ||
| snippet_values | No | ||
| link_field_type | No | ||
| price_qualifier | No | ||
| whatsapp_number | No | ||
| whatsapp_country | No | TR | |
| whatsapp_cta_text | No | ||
| whatsapp_greeting | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is covered. The description adds substantial non-annotation context: confirm=false gives a dry-run, link_asset_ids creates no duplicates, Google serves ad-group assets instead of campaign ones of the same type, and TRY/Turkish is unsupported for price extensions with an explicit graceful-failure note. Minor gap: no mention of rate limits or permission/authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content mostly earns its place given 0% schema coverage, and the purpose is front-loaded in the first sentence. However it is delivered as one very long unbroken paragraph with all-caps emphasis, which is hard to scan; segmenting by extension type (callouts, sitelinks, whatsapp, prices, promotions, link_asset_ids) into lines or bullets would materially improve usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation here. For a 22-param mutation tool with zero schema descriptions, the definition covers selection logic, all parameter formats, constraints, dry-run behavior, and cross-references to siblings — nothing an agent needs in order to invoke it correctly appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 22 params, so the description must carry the full burden, and it does: it documents the pipe-delimited formats for sitelinks, prices and promotions, the WhatsApp CTA enum values and five-required-fields rule, the price_type/price_qualifier/price_language value sets, and the derived field types for link_asset_ids. This is close to exhaustive compensation for the schema's silence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Adds extension assets to a campaign'), and immediately distinguishes campaign-level from ad-group-level behavior, explicitly naming ad_group_id as the selector. Sibling tools (list_extension_assets, remove_extension_assets, add_location_assets) are named and contrasted, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use rules: pick ad_group_id for ad-group scoping, leave campaign_id empty, use link_asset_ids to reuse assets instead of duplicating, and 'At least one extension type must be provided'. It also names the alternatives for viewing/removing and explains why LOCATION assets are deliberately excluded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_gtm_permissionsManage GTM PermissionsADestructiveInspect
GRANTS or REVOKES a user's access to a GTM account/containers. action='grant' → give email access (account_permission: user|admin|noAccess; optionally container_id + container_permission: read|edit|approve|publish). action='revoke' → remove access by permission_path (from list_gtm_permissions). SAFETY: confirm=false → preview; confirm=true → applies.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| action | Yes | ||
| account | No | ||
| confirm | No | ||
| container_id | No | ||
| permission_path | No | ||
| account_permission | No | user | |
| container_permission | No | publish |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and non-idempotent, but the description adds meaningful behavior the annotations cannot: confirm=false previews versus confirm=true applies. It stops short of noting permission/auth requirements, keeping it at a strong 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight clauses front-load the mutation, then the per-action requirements, then the safety toggle. No filler and no sentence that fails to carry information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-param destructive operation with an output schema present, the description covers actions, permission vocabularies, and the preview/apply gate, so nothing critical for a correct call is missing. The ambiguous 'account' parameter is the one loose end.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage the description does real work, enumerating the enum values for account_permission (user|admin|noAccess) and container_permission (read|edit|approve|publish) and tying email/container_id/permission_path to their actions. The 'account' parameter is only implied by the scope phrase and never explicitly documented, so it is not fully compensatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb pair (GRANTS/REVOKES) and the exact resource (a user's access to a GTM account/containers). An agent can immediately distinguish this from sibling read tools like list_gtm_permissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly branches on action='grant' vs 'revoke' and states what each requires, and it routes the agent to list_gtm_permissions to obtain permission_path. That is a concrete when-to-use plus an alternative source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_keywordsManage KeywordsDestructiveInspect
PAUSE / ENABLE / REMOVE an EXISTING Google Ads keyword, or change its max CPC bid. This is the keyword STATUS tool: use it to pause a low-Quality-Score or wasteful keyword without deleting it, to re-enable a paused one, or to move keywords out of an ad group (remove here after adding them to the target group with add_keywords). It works on POSITIVE keywords — negative keywords are handled by add_negative_keyword / remove_negative_keyword. criterion_ids: comma-separated criterion ids (the criterion id from keyword_report / list_entities(entity='keywords') output; that output also carries quality_score so you can decide what to pause). action: pause | enable | remove | set_bid (with cpc_bid, in the main currency) | set_url (keyword-level landing page that overrides the ad's final URL: final_url and/or final_mobile_url; pass an empty string to clear one and fall back to the ad's URL). confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| confirm | No | ||
| cpc_bid | No | ||
| final_url | No | ||
| ad_group_id | Yes | ||
| customer_id | Yes | ||
| criterion_ids | Yes | ||
| final_mobile_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
manage_portfolio_bidding_strategyPortfolio (Shared) Bid StrategyADestructiveInspect
Creates, updates, lists and assigns PORTFOLIO (shared) bidding strategies — Google Ads' Shared library → Bid strategies. This is the ONLY way to put a max/min CPC limit on Maximize Conversions, Maximize Conversion Value, Target CPA or Target ROAS: those strategies carry cpc_bid_ceiling/floor ONLY as a portfolio strategy, never on the campaign itself (that is why manage_bidding_strategies rejects max_cpc for them).
action: • list — every portfolio strategy on the account with its limits and how many campaigns use it (read-only, no confirm needed). • create — makes a new portfolio strategy. name + strategy required. max_cpc = CPC ceiling, min_cpc = optional CPC floor, target_cpa / target_roas optional targets. • create_and_assign — create, then attach it to campaign_id in one step (the usual request: "cap Maximize Conversions at 50 TL on this campaign"). • assign — attach an EXISTING strategy (bidding_strategy_id, from action=list) to campaign_id. This replaces the campaign's own bidding settings. • update — change the NAME and/or the limits/targets of an existing strategy (bidding_strategy_id): pass name to rename it, max_cpc / min_cpc / target_cpa / target_roas to change its limits. Affects EVERY campaign using it. The strategy TYPE cannot be changed — create a new strategy for that. • delete — removes a strategy from the Shared library (bidding_strategy_id). Refused while any active campaign still uses it, so it is safe: use it to clean up strategies that ended up attached to nothing.
strategy: MAXIMIZE_CONVERSIONS | MAXIMIZE_CONVERSION_VALUE | TARGET_CPA | TARGET_ROAS | MAXIMIZE_CLICKS | TARGET_IMPRESSION_SHARE. Amounts are in the account currency (max_cpc=50 → 50 TL/click ceiling). To move a campaign back to its own (non-shared) bidding, call manage_bidding_strategies — it detaches the portfolio automatically. confirm=false → dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | No | list | |
| confirm | No | ||
| max_cpc | No | ||
| min_cpc | No | ||
| strategy | No | MAXIMIZE_CONVERSIONS | |
| target_cpa | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| target_roas | No | ||
| bidding_strategy_id | No | ||
| impression_share_percent | No | ||
| impression_share_location | No | TOP_OF_PAGE |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, so the mutation risk is already known; the description goes well beyond that by disclosing that update affects EVERY campaign using the strategy, that the strategy TYPE is immutable, that delete is refused while any campaign still uses it, that assign replaces the campaign's own bidding settings, and that confirm=false gives a dry-run preview.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads the core identity and the critical max/min-CPC constraint, and the action bullets are scannable. It is somewhat long and a few bullets restate the same idea (e.g. update's rename-vs-limits split), but nearly every line carries actionable detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 13-parameter mutation tool with an output schema present, the description covers identity, per-action behavior, safety guarantees, enum semantics, and dry-run. Return-value documentation is correctly omitted because the output schema handles it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage across 13 parameters, the description carries the burden well: it maps name, strategy, max_cpc (ceiling), min_cpc (floor), target_cpa/target_roas, campaign_id, bidding_strategy_id, action values, confirm, and even enumerates the strategy enum values with currency semantics. It does not, however, explain impression_share_percent or impression_share_location, which are required to drive the TARGET_IMPRESSION_SHARE strategy it lists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource (PORTFOLIO/shared bidding strategies in the Google Ads Shared library → Bid strategies) and enumerates each action with its own verb (list, create, create_and_assign, assign, update, delete). It explicitly differentiates itself from the sibling manage_bidding_strategies by explaining that max/min CPC limits only exist on portfolio strategies and that manage_bidding_strategies rejects max_cpc for those types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action carries a when-to-use cue: create_and_assign is called out as 'the usual request' with a concrete example, assign is for EXISTING strategies pulled from action=list, and delete is framed as safe cleanup for orphaned strategies. It also routes the agent to manage_bidding_strategies for moving a campaign back to its own non-shared bidding.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_recommendation_auto_applyRecommendation Auto-Apply (list / turn off)DestructiveInspect
Google Ads 'auto-apply recommendations' (recommendation subscriptions): Google applying recommendations by itself, e.g. removing negative keywords or changing ad rotation without the user. action=list shows every subscription with its type and status (ENABLED = Google applies it automatically). action=pause turns auto-apply OFF: types = comma-separated recommendation types from the list (e.g. 'OPTIMIZE_AD_ROTATION,KEYWORD') or 'all' for every enabled one. Some auto-apply types are not exposed by the Google Ads API and come back as type UNKNOWN; they cannot be changed through the API and must be turned off in the Google Ads UI (Recommendations > Auto-apply); the response says so. Turning auto-apply ON is not offered here. confirm=false → dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| types | No | ||
| action | No | list | |
| confirm | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
manage_tiktok_search_negative_keywordsManage TikTok Search Negative KeywordsADestructiveInspect
Manages negative keywords on TikTok SEARCH ads. object_type: CAMPAIGN | ADGROUP; object_id is that campaign/ad group. operation: GET (list current — no confirm needed) | ADD (keywords = comma-separated terms, match_type BROAD|PHRASE|EXACT) | DELETE (keyword_ids = comma-separated, from a GET first). ADD/DELETE preview with confirm=false and apply with confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| keywords | No | ||
| object_id | Yes | ||
| operation | No | GET | |
| match_type | No | PHRASE | |
| keyword_ids | No | ||
| object_type | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, but the description adds substantive behavioral context above that bar: GET needs no confirmation while ADD/DELETE follow a preview-then-apply confirm pattern. It does not explain reversibility or how the DELETE affects ad delivery, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the scope sentence comes first, then parameter semantics grouped by operation. Every clause earns its place, though the operation-per-line packing is slightly compressed for a schema with 8 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be described, and the description covers the multi-operation semantics an agent needs to route GET vs ADD vs DELETE correctly. Slight gap in omitting advertiser_id and the concrete response of ADD/DELETE, but overall complete for a multi-mode mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the burden and does so well: it defines object_type values, object_id meaning, operation, keywords format, match_type enum hints (BROAD|PHRASE|EXACT), keyword_ids sourcing, and confirm semantics. Only advertiser_id is left unexplained, a minor gap against 8 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (manages) and resource (negative keywords on TikTok SEARCH ads), scoping it to SEARCH ads which distinguishes it from siblings like add_negative_keyword, list_negative_keywords, and add_microsoft_negative_keywords. The HEAD search listing already signals the platform-specific scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Enumerates each operation (GET/ADD/DELETE) with its condition: GET for listing (no confirm), ADD with keyword syntax, DELETE requiring keyword_ids obtained from a GET first. The confirm=false preview / confirm=true apply workflow is explicitly stated, so an agent knows exactly how to safely invoke a mutation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_insightsMarketing OpportunitiesARead-onlyIdempotentInspect
CROSS-CHANNEL OPPORTUNITIES — derives prioritized, ACTIONABLE recommendations from connected Google sources: Search Console page-2 quick wins (pos 8-20 with high impressions), Ads money-burning keywords + keywords to add, GA4 pages that get traffic but don't convert, Business Profile unanswered reviews / low ratings. Each recommendation includes the source + what to do. If customer_id is empty, the active Ads account is selected automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent and non-destructive behavior, so the bar is lower. The description adds real value beyond that: it names the connected data sources, states that each recommendation carries a source plus a suggested action, and explains the automatic Ads-account fallback when customer_id is empty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence opens with the core value proposition and then lists the concrete opportunity types; the trailing customer_id sentence is operationally useful rather than filler. Dense but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not document return shape, and it still sketches what each recommendation contains. The only real gap is the undocumented 'days' parameter, which an agent needs in order to call the tool with the right reporting window.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains customer_id's empty-string default behavior (active Ads account selected automatically), but says nothing about 'days' — neither its default of 28 nor what window it controls. Half the parameters are left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (derives prioritized, actionable recommendations) plus a concrete scope: cross-channel opportunities drawn from Search Console, Ads, GA4 and Business Profile. It enumerates the exact signals it surfaces, which makes it distinguishable in substance from marketing_overview or list_recommendations, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the content ('opportunities', 'what to do'), and the note about customer_id auto-selection tells the agent it can be called with no arguments. But there is no explicit when-to-use / when-not-to-use guidance or routing against the many adjacent tools such as marketing_overview, list_recommendations or apply_recommendation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_overviewMarketing Overview (Funnel)ARead-onlyIdempotentInspect
UNIFIED MARKETING OVERVIEW — in a single call, aggregates ALL connected Google sources as a funnel: Paid (Google Ads: spend/clicks/conversions) + Organic (Search Console: clicks/impressions/position) + Site (GA4: sessions/users/conversions) + Video (YouTube: views/watch time/net subscribers) + Local (Business Profile: locations/rating). Returns only CONNECTED sources; if one errors, the others still come through. SCOPE: the response's scope block states exactly which Google Ads account, Search Console property and GA4 property the numbers cover. customer_id targets a specific Google Ads account (empty = the selected one). site_url targets a specific Search Console PROPERTY on a multi-site account (e.g. 'kenbiltercume.com.tr' or 'https://kenbiltercume.com.tr') — the organic figures are then locked to that property; if the site is not among the connected properties scope.site_matched is false and the available properties are listed rather than silently reporting another site.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| site_url | No | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: only connected sources are returned, one source failing does not suppress the others, and unmatched site_url yields scope.site_matched=false with a list of properties rather than silently substituting another site. This is exactly the kind of silent-fallback disclosure an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the unified-overview claim and the funnel breakdown, then the failure and scoping rules. Dense and mostly earning its space, though the all-caps emphasis and the long site_url clause could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-source aggregation tool with an output schema present, the description covers routing, partial-failure behavior, scope reporting, and account/property targeting. The only omission, `days`, is minor against an otherwise complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage the description must carry the burden, and it does for two of three parameters — customer_id (empty = selected account) and site_url (property targeting, format examples, and fallback semantics). The `days` parameter is never explained, leaving the default of 28 and the time-range meaning undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (aggregates) and resource (all connected Google sources as a funnel), and enumerates each source with its metrics. It is clearly distinguishable from sibling single-source tools like ga4_overview, gsc_performance, or youtube_overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes the core use case (one call for a cross-channel funnel), explains the multi-account targeting conditions for customer_id and site_url, and notes graceful partial-failure behavior. It does not, however, explicitly name alternative siblings (e.g. marketing_insights, performance_report) or state when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_campaign_insightsMeta Campaign InsightsARead-onlyIdempotentInspect
Meta performance report (impressions/clicks/spend/reach/conversion actions). date_preset: today | yesterday | last_7d | last_14d | last_30d | last_90d | this_month | last_month | maximum. level: account | campaign | adset | ad. breakdown (opt.): age | gender | country | region | publisher_platform | platform_position | device_platform | impression_device — splits rows by that dimension. If since/until (YYYY-MM-DD) are given, that date range is used instead of date_preset.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | campaign | |
| since | No | ||
| until | No | ||
| breakdown | No | ||
| account_id | Yes | ||
| date_preset | No | last_30d |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still earns credit by disclosing two behaviors beyond the structured fields: that breakdown 'splits rows by that dimension' and that since/until overrides date_preset. It does not discuss pagination or result limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense, front-loaded, and terse: it declares the metric set first, then formats the enum-like values compactly, and ends with the date-override rule. Every clause contributes information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and all six parameters are addressed or self-evident (account_id is the only untouched one). Combined with the annotations covering safety, the definition is essentially complete for calling the tool, with only minor gaps like pagination/limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full parameter burden and does so well: it enumerates all date_preset values, all level values, all breakdown values, and gives the YYYY-MM-DD format and precedence for since/until. This adds substantial meaning that the bare schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Meta performance report' and names the exact metrics returned (impressions/clicks/spend/reach/conversion actions). It is clearly distinguishable from sibling reporting tools by the 'Meta' scope and the level/breakdown controls, though it never explicitly contrasts itself with a sibling like meta_reach_estimate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the parameter semantics (pick a date_preset or since/until, pick a level, optionally a breakdown) and the precedence rule 'If since/until are given, that date range is used instead of date_preset' is a genuine conditional. But there is no explicit when-to-use / when-not guidance or routing to an alternative reporting tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_change_historyMeta Change HistoryARead-onlyIdempotentInspect
Meta ACTIVITY / CHANGE HISTORY (audit trail) — WHO changed WHAT and WHEN in a Meta ad account, the equivalent of Ads Manager's "Activity history" and of get_change_history on Google Ads. Returns, per event: time (converted to the ACCOUNT's own timezone — Meta serves this endpoint in UTC, and time_utc keeps the raw value), actor (the person's name), the event in plain language, level (campaign | adset | ad | account), the object id/name, and field-level old→new values where Meta provides them (status, budget, bid, targeting, schedule, creative updates). since/until are YYYY-MM-DD — pass the same day in both for an hour-by-hour report of that day. level filters to one entity type. NOTE: Meta keeps roughly 90 days of history and its events are coarser than Google's — a creative edit shows up as an event, but the before/after text of a headline or primary text is not always included.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | ||
| limit | No | ||
| since | No | ||
| until | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe read-only, idempotent, non-destructive profile, yet the description adds substantial value beyond them: it discloses the ~90-day retention window, that timestamps are converted to the account timezone (with time_utc raw), and that Meta's events are coarser than Google's so creative before/after text is sometimes absent. These are exactly the behavioral caveats an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded, leading with the core purpose and audit-trail framing before parameters and caveats. It is long, but nearly every clause carries a distinct fact; only the enumeration of return fields is slightly verbose given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only history tool with a rich output schema and non-obvious data limitations, the description covers purpose, filtering semantics, timezone behavior, retention horizon, and known data-coarseness caveats. An agent has everything required to call it correctly and interpret the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden and does well for the parameters that matter: since/until format and same-day semantics, and level's entity-type filtering, plus the returned fields (time, actor, event, level, object id/name, old→new values). It does not explain limit (default 100, any max?) or the account_id requirement, leaving minor gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (audit trail of Meta ad account changes, who changed what and when) and anchors it against named relatives — Ads Manager's 'Activity history' and get_change_history on Google Ads. An agent can immediately distinguish it from tiktok_change_history, account_audit, and the many list_meta_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage cues: since/until are YYYY-MM-DD and passing the same day in both yields an hour-by-hour report, and level filters to one entity type. It also frames the tool as the Meta counterpart to Google's get_change_history. It stops short of explicitly stating when NOT to use it or naming a preferred alternative for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_delivery_estimateMeta Delivery EstimateARead-onlyIdempotentInspect
Estimates an ad set's reachable audience size and expected daily results for its CURRENT targeting/optimization — WITHOUT spending. optimization_goal (optional) overrides the estimate goal (e.g. OFFSITE_CONVERSIONS, LINK_CLICKS). adset_id from list_meta_adsets. Use it to sanity-check targeting before launching.
| Name | Required | Description | Default |
|---|---|---|---|
| adset_id | Yes | ||
| optimization_goal | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description still adds non-obvious context: the estimate reflects only existing targeting and incurs no spend, which an agent would otherwise have to assume.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct information, with the 'WITHOUT spending' constraint emphasized early. It is dense but not padded; no filler sentences to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return formatting need not be described, and the safety profile is covered by annotations. For a two-parameter read-only estimator the description supplies the goal-override behavior and the intended pre-launch workflow, leaving little an agent would still need to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it largely does: optimization_goal is explained as an optional override with concrete example values (OFFSITE_CONVERSIONS, LINK_CLICKS), and adset_id's expected source is stated via 'from list_meta_adsets'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Estimates an ad set's reachable audience size and expected daily results') and scopes it to CURRENT targeting. It is clear enough to act on, though it never explicitly contrasts itself with the sibling meta_reach_estimate, which covers adjacent ground.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear context: 'Use it to sanity-check targeting before launching,' and clarifies it costs nothing, which is the key usage constraint. It does not name a when-not or point to a competing tool such as meta_reach_estimate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_insights_queryMeta Insights QueryRead-onlyIdempotentInspect
Free-form READ of the Meta Marketing API Insights edge — any metric, breakdown and filter Meta supports, for data the ready-made reports do not cover. fields: Insights field names (e.g. spend, impressions, reach, frequency, clicks, inline_link_clicks, actions, cost_per_action_type, action_values, purchase_roas, video_p75_watched_actions, campaign_id, campaign_name, adset_id, ad_id). level: account | campaign | adset | ad. breakdowns: e.g. age, gender, country, region, publisher_platform, platform_position, device_platform, impression_device, hourly_stats_aggregated_by_advertiser_time_zone (Meta allows only certain combinations). action_breakdowns: e.g. action_type, action_destination. time_increment: 1 = one row per day, 'monthly', or a number of days. filtering: Meta filter objects, e.g. [{"field": "campaign.id", "operator": "IN", "value": ["123"]}] or [{"field": "spend", "operator": "GREATER_THAN", "value": 0}]. days = last N full days excluding today, or give start_date/end_date (YYYY-MM-DD); Meta keeps insights for 37 months. Reference: https://developers.facebook.com/docs/marketing-api/insights/parameters. Meta rejects invalid field/breakdown combinations with an explanatory error. Read-only; reply carries the exact period.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| level | No | campaign | |
| limit | No | ||
| fields | Yes | ||
| end_date | No | ||
| filtering | No | ||
| account_id | No | ||
| breakdowns | No | ||
| start_date | No | ||
| time_increment | No | ||
| action_breakdowns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
meta_reach_estimateMeta Reach EstimateARead-onlyIdempotentInspect
Returns the estimated reach for a targeting setup (audience size before spending). countries: comma-separated ISO codes. interest_ids: comma-separated ids from search_meta_interests. genders: 1 (men) and/or 2 (women). Demographics & behaviours are estimated too, with exactly the same fields and codes as create_meta_adset (relationship_statuses — 3 = married, education_statuses, family_statuses, life_events, industries, behaviors) — size the audience here BEFORE building the ad set.
| Name | Required | Description | Default |
|---|---|---|---|
| age_max | No | ||
| age_min | No | ||
| genders | No | ||
| behaviors | No | ||
| countries | No | TR | |
| account_id | Yes | ||
| industries | No | ||
| life_events | No | ||
| interest_ids | No | ||
| family_statuses | No | ||
| optimization_goal | No | REACH | |
| education_statuses | No | ||
| relationship_statuses | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful framing that this is a pre-spend estimate rather than a mutation, but says nothing about auth requirements, rate limits, or any quirks of the estimate call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose in the first sentence, followed by compact per-parameter notes. The em-dash parentheticals make it dense but not padded; a reader can extract the key facts quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described. For a 13-parameter tool with 0% schema coverage, the description documents most audience-shaping fields and their code systems; only age range and optimization_goal defaults remain undocumented, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the load. It documents countries (ISO comma-separated), interest_ids (with source tool), genders (1/2 coding), relationship_statuses (3=married), and lists the demographics/behaviours fields that mirror create_meta_adset codes — substantial value. It omits age_min/age_max and optimization_goal semantics, so it is not fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns the estimated reach') and resource ('for a targeting setup'), then clarifies the scope as 'audience size before spending'. This clearly distinguishes it from create_meta_adset (which builds) and meta_delivery_estimate (which is about delivery, not audience size).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to use it ('size the audience here BEFORE building the ad set') and points to search_meta_interests as the source of interest_ids. It does not name the closest alternative, meta_delivery_estimate, or state exclusions, but the usage context is clearly framed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microsoft_entity_performance_reportMicrosoft Breakdown ReportARead-onlyIdempotentInspect
Microsoft (Bing) performance BROKEN DOWN below campaign level — which ad group, ad, keyword, location, device or age/gender actually produced the clicks and conversions. microsoft_performance_report only gives campaign totals; this is where you find what to fix.
level: adgroup | ad | keyword | geo | device | age_gender. Dates 'YYYY-MM-DD'; empty = last 30 days. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | adgroup | |
| end_date | No | ||
| account_id | Yes | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, non-destructive and closed-world behavior, so the bar is lower. The description still adds the default date semantics ('empty = last 30 days') and the full set of level values, which are not in the annotations. It does not expand much beyond that, hence 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the scope and sibling contrast in the first two clauses, then compresses level/date semantics into one line. The closing 'Read-only' restates what the annotations already declare, a small redundancy, but overall it is tight and well-ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers scope, dimensions, date handling and the sibling contrast. What remains thin is the account_id requirement and any note on result granularity/pagination, but nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning, and it does: it enumerates the six legal 'level' values (absent from the schema, which has no enum), specifies the YYYY-MM-DD date format, and defines the empty-string default as last 30 days. Only account_id is left implicit, which is self-evident from the required field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Microsoft (Bing) performance BROKEN DOWN below campaign level') and enumerates the exact breakdown dimensions it supports. It explicitly distinguishes itself from the sibling microsoft_performance_report, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool (microsoft_performance_report) and the condition that selects this one over it: campaign totals vs. sub-campaign diagnosis. The 'which ad group, ad, keyword, location, device or age/gender actually produced the clicks' framing tells the agent exactly what question this tool answers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microsoft_location_searchMicrosoft Location SearchARead-onlyIdempotentInspect
Searches Microsoft/Bing Advertising GEOGRAPHIC LOCATIONS by name and returns the numeric LocationId(s) required by add_microsoft_location_target. Example: query='İstanbul' → [{location_id, name, type}]. Display names are '|'-separated most→least specific (e.g. 'Istanbul|Istanbul|Türkiye'). Optional location_type filter: Country | State | City | County | MetroArea | PostalCode. account_id optional (uses the first ad account if empty). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| account_id | No | ||
| customer_id | No | ||
| location_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, so the safety profile is fully covered. The description does add useful non-annotation context: the display-name pipe format and the account_id default behavior. It does not mention rate limits or result caps, so it is solid but not rich 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and purpose-linkage, then a concrete example, then filters and defaults. Dense but every clause carries information; the trailing 'Read-only.' is redundant with readOnlyHint and slightly wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is optional, yet the description still gives the example result shape, covering the critical id extraction. The only real gap is the undocumented customer_id and limit parameters, which is minor for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it largely does: query semantics, the full location_type enum (Country|State|City|County|MetroArea|PostalCode), and account_id's empty-string fallback. customer_id and the limit default are never explained, leaving two of five parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Searches Microsoft/Bing Advertising GEOGRAPHIC LOCATIONS by name') and immediately gives the downstream purpose: returning LocationIds required by add_microsoft_location_target. This distinguishes it from geo_target_search (Google) and tiktok_region_search (TikTok) 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly ties the tool to its consumer ('required by add_microsoft_location_target') and explains the optional account_id fallback, which is real routing guidance. It stops short of stating when to prefer this over a sibling lookup, but the platform prefix makes the alternative unambiguous in practice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microsoft_performance_reportMicrosoft Performance ReportARead-onlyIdempotentInspect
Microsoft Advertising campaign performance report (spend/impressions/clicks/CTR/conversions). Dates are YYYY-MM-DD; if empty, the last 30 days. customer_id is auto-detected if empty.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| account_id | Yes | ||
| start_date | No | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: empty dates default to the last 30 days and customer_id is auto-detected, which tells the agent what happens when inputs are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the purpose and then the input defaults. Nothing is redundant, though it is telegraphic and could be marginally clearer about the required account_id.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple reporting tool with an output schema present (so returns need not be explained) and annotations covering safety, the description supplies the key input defaults. The remaining gap—the required account_id semantics and sibling differentiation—is minor but present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It usefully documents the expected YYYY-MM-DD format and defaults for start_date/end_date and the auto-detection behavior for customer_id, but says nothing about account_id, the one required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Microsoft Advertising campaign performance report') and enumerates the returned metrics (spend/impressions/clicks/CTR/conversions). It is clear on what the tool does, though it does not explicitly differentiate itself from similar siblings like microsoft_entity_performance_report or microsoft_search_terms_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains default behavior (empty dates, auto-detected customer_id) but offers no when-to-use guidance and never names an alternative sibling report. An agent gets no routing help for choosing this over the other Microsoft/performance report tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microsoft_report_queryMicrosoft Ads Report QueryRead-onlyIdempotentInspect
Free-form READ of the Microsoft Advertising Reporting API (v13) — any report type and column set. report_type: e.g. CampaignPerformance, AdGroupPerformance, AdPerformance, KeywordPerformance, SearchQueryPerformance, GeographicPerformance, AgeGenderAudience, AudiencePerformance, AssetPerformance, ShareOfVoice, ProductPartitionPerformance (the 'ReportRequest' suffix is added). columns: that report's column names, e.g. ['TimePeriod','CampaignId','CampaignName','Impressions','Clicks','Spend','Conversions','Revenue','ImpressionSharePercent'] — the valid set differs per report type; Microsoft rejects invalid ones with an explanatory error. aggregation: Summary | Hourly | Daily | Weekly | Monthly | Yearly | DayOfWeek | HourOfDay (include TimePeriod for time rows). days = last N full days excluding today, or start_date/end_date (YYYY-MM-DD). Reference: https://learn.microsoft.com/en-us/advertising/reporting-service/reporting-service-reference. Read-only; reply carries the exact period.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| columns | Yes | ||
| end_date | No | ||
| account_id | No | ||
| start_date | No | ||
| aggregation | No | Summary | |
| customer_id | No | ||
| report_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
microsoft_search_terms_reportMicrosoft Search Terms ReportARead-onlyIdempotentInspect
SEARCH TERMS report for Microsoft Advertising (Bing) — the actual queries people typed, with the keyword that matched and its match type. This is where wasted spend hides: terms that take clicks and return no conversions are your negative-keyword candidates (feed them to add_microsoft_negative_keywords). min_waste: only return terms that spent at least this much with ZERO conversions (0 = return everything). Sorted by spend, highest first. Dates YYYY-MM-DD; if empty, the last days days. READ-ONLY.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| end_date | No | ||
| min_waste | No | ||
| account_id | Yes | ||
| start_date | No | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds result-shaping behavior beyond them: sorted by spend descending, default date window when dates are empty, and READ-ONLY confirmation. It does not cover pagination/limit behavior, but the extra context is real value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and its purpose, then the actionable insight, then parameter specifics. Dense but every sentence carries information; only the trailing READ-ONLY is redundant with annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema is present so return values need no explanation, and annotations cover the safety profile. However, with 0% schema coverage and 7 parameters, several inputs and the limit/pagination behavior remain undocumented, leaving gaps for an agent configuring the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It fully explains min_waste semantics and date format (YYYY-MM-DD, empty = last `days`), but leaves days, limit, account_id, and customer_id undocumented for a 7-param tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource — 'SEARCH TERMS report for Microsoft Advertising (Bing)' — and enumerates the contents (actual queries typed, matched keyword, match type). An agent can distinguish it from microsoft_performance_report and the generic search_terms_report immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use: it frames the report as finding wasted spend and routes the agent to add_microsoft_negative_keywords as the follow-up action. It stops short of explicit when-not-to-use guidance or naming the expected input scope, but the intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_campaignPause CampaignADestructiveInspect
Pauses a campaign. If confirm=false, only a preview is returned (dry-run); to actually pause, call again with confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, but they cannot convey the two-step dry-run/confirm protocol. The description discloses this critical behavior — that a default call produces no mutation — which an agent could not learn from annotations or schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences; the action is front-loaded and the second sentence carries only the non-obvious confirm semantics. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need no explanation, and annotations cover the destructive profile. The description adequately completes the behavioral picture, though it omits prerequisites such as which ad platform connection/account type this applies to.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. It explains the most consequential parameter, confirm (default false, preview vs. real pause), but says nothing about campaign_id or customer_id, which are required. Partial compensation warrants a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (pauses) and resource (campaign) plus the required confirmation step. However, it does not distinguish itself from the many sibling status-mutation tools (update_campaign_status, update_tiktok_campaign_status, update_meta_campaign, etc.), leaving the agent to infer which pausing tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional usage instruction: confirm=false returns a preview only, confirm=true performs the pause. It does not name an alternative tool for changing campaign status in other ways, so the 'when not to use' dimension is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_reportPerformance ReportARead-onlyIdempotentInspect
Performance report (cost, clicks, impressions, conversions). level: campaign | ad_group | ad | keyword. Keyword level reports from keyword_view and is where pause / negative-keyword decisions are actually made, because one ad group usually mixes match types and intents; negative criteria are excluded (they have no performance and would read as "keywords with zero results"). Keyword rows come back flattened: campaign, ad_group, keyword, match_type, metrics. PAGING: keyword level can easily exceed ten thousand rows, which is more than a tool result can carry, so rows are capped (500 at keyword level, 2000 elsewhere) and the response carries total_rows / returned / offset / truncated / next_offset — call again with offset to walk the rest. limit/offset are only on this tool; get_report always returns the first page.
segment: empty | device | date | day_of_week | hour | network | city | region | country | conversion_action | audience — adds a breakdown ("day" is accepted for date, "geo" for country). network splits Search / Search partners / Display / YouTube. Geo segments (city/region/country) report from geographic_view and always come back at campaign level with a readable location field. conversion_action answers "which conversion actions is each campaign actually producing" (the UI's Segment > Conversions > Conversion action): one row per campaign x conversion action, with primary conversions and all_conversions side by side, which is how you reconcile a campaign total against an account total when offline/CRM uploads are mixed with website tags. That segment returns NO cost, clicks or impressions — Google does not split spend by conversion action and would repeat the campaign total on every row, so anyone summing it would inflate the spend. AUDIENCE: segment="audience" answers "which audiences should I add, bid up or split out" — the UI's Audiences > Segments. One row per audience, at ad group level when level is ad_group/ad/keyword and at campaign level otherwise, with the audience NAME resolved: Google returns internal codes like uservertical::93017 for in-market, affinity and demographic segments, which is unreadable on its own. Each row carries taxonomy (IN_MARKET vs AFFINITY), audience_type, bid_modifier and the usual metrics. targeting_mode is the field the decision rests on: observation means measure only, delivery is NOT narrowed, while targeting means delivery is restricted to that audience. Pair it with manage_audience_targeting, which attaches or excludes an audience, so a change can be measured before and after instead of only made. IMPRESSION SHARE (no segment only): campaign returns all three — impression_share_pct, lost_is_rank_pct, lost_is_budget_pct; ad_group and keyword return impression share and rank-lost but NOT budget-lost, because Google only exposes budget-lost at campaign level (budget is a campaign constraint); the ad level has none at all. Values come as readable percentages next to Google's raw 0-1 fractions, and a missing field means the metric does not exist for that row (Display/PMax, or no impressions) rather than zero. This is what separates "efficient but saturated, no headroom" from "efficient and budget-starved, scale it".
DATE: if you provide period it is used instead of days — 'today' (TODAY 00:00–now), 'yesterday', 'this_week', 'last_week', 'this_month', 'last_month', 'last_7_days'/'last_14_days'/'last_30_days', or an explicit 'YYYY-MM-DD' / 'YYYY-MM-DD:YYYY-MM-DD'. If period is empty, days applies (days=0 = today only).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| level | No | campaign | |
| limit | No | ||
| offset | No | ||
| period | No | ||
| segment | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it discloses row caps (500 keyword / 2000 elsewhere), the total_rows/returned/offset/truncated/next_offset paging contract, that conversion_action rows carry no cost/clicks/impressions and would inflate spend if summed, that geo segments always flatten to campaign level, and that missing impression-share fields mean the metric does not exist rather than zero. These are exactly the behavioral traits 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and level, and each labeled block (PAGING, DATE, segment, IMPRESSION SHARE) is scannable. It is very long and occasionally rambles — the audience and conversion_action passages could be tightened — but nearly every sentence carries decision-relevant information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter reporting tool with an output schema, the description supplies the segment-specific return shapes, flattening rules, and metric availability caveats that the schema does not. Nothing an agent needs to call it correctly, or to interpret the rows it gets back, is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does so: level choices, the full segment enum with aliases ('day' for date, 'geo' for country) and special-case behavior per segment, limit/offset paging semantics with a concrete next_offset walk pattern, and period's accepted values plus the precedence rule (period overrides days, days=0 = today only). Practically every parameter is given meaning the bare types cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource set ('Performance report (cost, clicks, impressions, conversions)') and enumerates the supported levels. It explicitly distinguishes itself from the sibling get_report by noting that limit/offset exist only here, so an agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance throughout: keyword level is named as where pause/negative-keyword decisions are made, conversion_action is framed as the way to reconcile campaign vs account totals, audience is tied to add/bid-up/split decisions and paired with manage_audience_targeting, and impression share is positioned as separating saturated from budget-starved campaigns. Alternatives and conditions are stated, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portfolio_reportPortfolio Report (Multi-Account)ARead-onlyIdempotentInspect
PORTFOLIO REPORT (agency) — aggregates ALL connected/selected Google Ads accounts into one report: per-account cost/clicks/conversions/conversion value/ROAS/CPA + grand total + underperformers. Skips inaccessible accounts. days: lookback days. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered and the trailing 'Read-only' is redundant. The description still adds genuine behavior beyond the annotations: partial-failure handling ('Skips inaccessible accounts') and the report's contents (per-account metrics, grand total, underperformers), which tell the agent what to expect from the aggregation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the tool's identity and scope lead, then metrics, then failure behavior, then the parameter. Every clause carries information, though the em-dash chaining makes it a single run-on block rather than cleanly separated lines.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need not be spelled out, yet the description usefully previews the metric set. Purpose, scope, failure behavior, and the lone parameter are all covered; minor gaps remain around time zone/currency and how 'selected' accounts are designated, since no selection parameter exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single parameter, so the description must carry the load; it does define 'days' as lookback days, which gives the parameter real meaning. It does not mention the schema's default of 30 or the time-unit granularity, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (aggregates) and resource (ALL connected/selected Google Ads accounts into one report), and enumerates the exact metrics produced plus grand total and underperformers. The multi-account scope clearly separates it from single-account report siblings, though it never names the closest alternative (performance_report) explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '(agency)' framing and 'aggregates ALL connected/selected accounts' implies when the tool is appropriate, and 'Skips inaccessible accounts' hints at robustness. However, there is no explicit when-to-use/when-not statement or routing to performance_report for single-account queries, so the agent must infer the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_meta_adPreview Meta AdARead-onlyIdempotentInspect
Renders a visual PREVIEW of an ad creative WITHOUT publishing it — returns a preview URL you can open in a browser to see exactly how the ad will look in a given placement (great for reviewing before launch). creative_id comes from create_meta_link_ad / create_meta_video_ad / create_meta_carousel_ad / get_ad_details. ad_format: MOBILE_FEED_STANDARD | DESKTOP_FEED_STANDARD | INSTAGRAM_STANDARD | INSTAGRAM_STORY | FACEBOOK_STORY_MOBILE | INSTAGRAM_REELS | FACEBOOK_REELS_MOBILE | RIGHT_COLUMN_STANDARD.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_format | No | MOBILE_FEED_STANDARD | |
| creative_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it explicitly states nothing is published and that the output is a preview URL openable in a browser, clarifying the side-effect-free, inspectable nature of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the 'without publishing' qualifier, then the parameter guidance. The long ad_format enumeration is verbose but earns its place because the schema carries no enum, so it is necessary rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only preview tool with annotations covering safety and an output schema covering the return structure, the description supplies the missing pieces: the non-publishing guarantee, the URL result, the creative_id provenance, and the placement enum. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the burden, and it does: it documents the source of creative_id and enumerates all valid ad_format values, which the schema does not provide (no enum declared). Only the default and the required/optional distinction are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (renders a visual preview of an ad creative) and immediately distinguishes scope with 'WITHOUT publishing it', which separates it from the many create_/update_ siblings. An agent can tell what this does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context ('great for reviewing before launch') and tells the agent where creative_id comes from (create_meta_link_ad / create_meta_video_ad / create_meta_carousel_ad / get_ad_details). It lacks an explicit when-not or named alternative, but the workflow placement is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_gtm_containerPublish GTM ContainerADestructiveInspect
PUBLISHES the workspace's staged changes LIVE: creates a container version from the workspace, then publishes it. This is what makes new/edited tags actually run on the site. SAFETY: confirm=false → preview (nothing goes live); confirm=true → create version + publish. workspace = a list_gtm_workspaces path (empty → Default Workspace of the resolved container). container = 'GTM-XXXX'/name if workspace is empty.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| confirm | No | ||
| container | No | ||
| workspace | No | ||
| version_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and non-idempotent, but the description adds critical behavioral detail: confirm=false performs only a preview with nothing going live, while confirm=true creates a container version and publishes it. It also explains how workspace and container resolution work, which goes beyond the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is front-loaded with the core verb and consequence, then uses compact labeled clauses for safety and parameter resolution. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need no explanation, and the description covers safety, workspace/container resolution, and the publish workflow. It is nearly complete, missing only the meaning of the notes and version_name parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains confirm, workspace, and container semantics clearly, but leaves notes and version_name undocumented, so it only partially compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (publishes the GTM container/workspace) plus the operational consequence that new/edited tags will actually run on the site. This clearly distinguishes it from sibling tools like create_gtm_tag, create_gtm_workspace, and rollback_gtm_version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to use it (to push staged workspace changes live) and gives the key safety branch: confirm=false for preview, confirm=true to create and publish. It also references list_gtm_workspaces for the workspace path, but does not name when-not-to-use or direct alternatives like rollback_gtm_version.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_extension_assetsRemove Extension AssetsDestructiveInspect
Removes (unlinks) extension assets from a campaign — the 'remove' counterpart to manage_extension_assets (e.g. delete a sitelink, callout or promotion). Give EITHER resource_names (comma-separated resource names from list_extension_assets — campaign_asset, customer_asset (account level) and ad_group_asset are ALL accepted; asset SET links such as a Business Profile location sync are accepted too: customerAssetSets / campaignAssetSets / adGroupAssetSets resource names from google_ads_query on customer_asset_set / campaign_asset_set / ad_group_asset_set) OR field_type to remove ALL of one kind: 'SITELINK', 'CALLOUT', 'CALL', 'STRUCTURED_SNIPPET', 'PROMOTION', 'PRICE', 'MOBILE_APP', 'HOTEL_CALLOUT', 'LEAD_FORM', 'BUSINESS_MESSAGE' (WhatsApp message extension) or 'AD_IMAGE' (image extensions) — field_type sweeps all three levels. Unlinking leaves the asset itself in the account library, so it can be re-linked later. confirm=false → dry-run (preview what would be removed).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| field_type | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| resource_names | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
remove_microsoft_ad_extensionsRemove Microsoft Ad ExtensionsADestructiveInspect
REMOVES sitelink/callout extensions: detaches them from the campaign and deletes them from the account library. Get the ids from list_microsoft_ad_extensions. Pass campaign_id so the association is cleared first. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | No | ||
| customer_id | No | ||
| extension_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/non-idempotent, but the description adds meaningful detail beyond them: deletion happens in the account library (not just detachment) and the confirm flag provides a dry-run gate. It omits failure behavior when the extension is shared with other campaigns, keeping it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, front-loaded with the destructive action, then the id source, then the ordering requirement and the confirm gate. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover the safety profile, so the description only needs to cover invocation. It does that well for the confirm/campaign_id flow, with the residual gap being the undocumented account/customer id parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description carries the burden. It explains confirm's preview/apply semantics and campaign_id's role, but says nothing about account_id, customer_id, or the format/cardinality of extension_ids, leaving half the parameters unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('REMOVES sitelink/callout extensions') plus the exact scope: detach from campaign and delete from the account library. This clearly separates it from add_microsoft_ad_extensions and from the Google-side remove_extension_assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real operational guidance: fetch ids from list_microsoft_ad_extensions, pass campaign_id so the association is cleared first, and confirm=false previews while confirm=true applies. It does not name a competing removal tool or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_microsoft_negative_keywordsRemove Microsoft Negative KeywordsADestructiveInspect
REMOVES negative keywords from a Microsoft (Bing) campaign or ad group — the undo for a negative that was added by mistake. A wrong negative silently blocks real searches and, until now, could not be taken back through this connector.
keywords = comma-separated texts exactly as they appear (list_microsoft_negative_keywords). entity_type: Campaign | AdGroup. confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| keywords | Yes | ||
| entity_id | Yes | ||
| account_id | Yes | ||
| entity_type | No | Campaign |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description adds genuine value beyond that: it explains why the operation matters (a wrong negative silently blocks real searches) and documents the confirm=false dry-run preview behavior, which is not in the schema. It stops short of noting permission requirements or whether removal is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and scope, then adds rationale and parameter notes in two dense sentences with no padding. The second sentence is a compressed run-on of three parameter facts, but each clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. With a 5-parameter, 0%-documented schema, the description covers the non-obvious parameters and the dry-run flag, leaving only account_id/entity_id to inference. Complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it does for the critical parameters: keywords must be comma-separated texts exactly as listed by list_microsoft_negative_keywords, entity_type accepts Campaign | AdGroup, and confirm=false previews. It adds no semantics for account_id or entity_id, but the remaining three parameters are well covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (REMOVES) plus resource (negative keywords) and platform scope (Microsoft/Bing campaign or ad group), and explicitly positions it against siblings add_microsoft_negative_keywords and list_microsoft_negative_keywords. An agent can distinguish it from remove_negative_keyword and remove_microsoft_ad_extensions immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: it is the undo for a mistakenly added negative, and points to list_microsoft_negative_keywords to obtain the exact keyword texts. It does not explicitly say when to prefer this over the generic remove_negative_keyword, but the Microsoft scoping in the name and text makes the choice reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_negative_keywordRemove Negative KeywordDestructiveInspect
Removes negative keywords from one Google Ads campaign. Inputs: customer_id = the Google Ads account id; campaign_id = the campaign whose negatives are removed; then EITHER criterion_ids = the ids of the negative keywords to remove (from list_negative_keywords), OR keywords = their texts, each optionally followed by '|EXACT', '|PHRASE' or '|BROAD' (without a match type every match type of that text is removed). Several keywords can be removed in one call (up to 5000) and each is reported with its own result. Only campaign-level negatives are handled here; ad group negatives are removed with manage_keywords. confirm=false returns a preview of what would be removed; confirm=true removes them.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| keywords | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| criterion_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
remove_siteRemove Website From ServerADestructiveInspect
Removes an EXTRA website from the server (the primary site cannot be removed here).
site is the key or the domain. By default the files are KEPT on the server and only the
domain stops being served, so the change is reversible; delete_files=true also erases them.
confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | ||
| server | No | ||
| confirm | No | ||
| delete_files | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds important context beyond them: by default files are kept and only the domain stops being served, delete_files=true erases files, and confirm=false previews. This directly discloses reversibility and destructive scope, which is exactly the kind of behavioral detail annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences, front-loaded with the core action and scope. Every sentence adds useful information: scope restriction, parameter meaning, and reversible versus destructive behavior. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Annotations cover the safety profile. The description supplies most necessary behavioral context, including reversibility and preview mode, but leaves the server parameter unexplained and does not mention any permission or auth requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It explains site ('the key or the domain'), confirm ('confirm=false previews'), and delete_files ('also erases them'), covering three of four parameters. The server parameter is never mentioned, leaving one undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Removes an EXTRA website from the server.' The parenthetical clarifies scope by saying the primary site cannot be removed here, which distinguishes this tool from add_site, list_sites, and other site-management siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-not condition: the primary site cannot be removed here. It also describes the default reversible behavior and the preview mode, which helps the agent choose appropriate parameters. However, it does not name an alternative tool for removing the primary site or for related recovery operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_issueReport IssueADestructiveInspect
Reports a bug or unexpected failure to Opus Growth support: pass a short summary, the failing
tool_name, and any error details. The user is emailed when the issue is resolved.
title, description and text are accepted as synonyms of summary/details, so a report is
never lost to a parameter-name mismatch.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| title | No | ||
| details | No | ||
| summary | No | ||
| tool_name | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds a genuine behavioral fact beyond the annotations: the user is emailed when the issue is resolved. However, it is silent on the annotation profile the agent must reconcile — `destructiveHint: true` and `openWorldHint: true` for what reads like a benign ticket submission, and `idempotentHint: false` means duplicate reports are possible. Those gaps leave the safety picture partly unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and the required inputs, then the side effect, then the synonym fallback. The synonym paragraph is a little long for the point it makes but each clause is load-bearing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and parameters are fully covered. What remains unstated is what the tool requires of the caller (auth/permission context) and why it is flagged destructive and non-idempotent — minor but real gaps for a ticket-filing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and six mutually redundant parameters, the description carries the full burden and does so: it maps `summary`, `tool_name`, and `details` to their purpose and explicitly declares `title`, `description`, and `text` to be accepted synonyms. An agent can construct a call without guessing which name to use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: reporting a bug or unexpected failure to Opus Growth support, with the concrete inputs to pass. It is distinguishable from read-side diagnostics, though it never names the sibling `issue_status` that would let an agent check an existing report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the trigger conditions ('a bug or unexpected failure'), but there is no explicit when-not guidance and no reference to `issue_status` or any alternative path for follow-up on an already-filed report. Adequate but inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_gtm_versionRoll Back GTM VersionADestructiveInspect
ROLLS BACK the live site to an EARLIER GTM container version — the undo for a bad publish. Re-publishes the chosen version so the site immediately serves that older, known-good configuration. version_id from list_gtm_versions. SAFETY: confirm=false → preview (shows which version would go live and which is live now); confirm=true → publishes. Workspace changes are not lost; they stay staged.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| container | No | ||
| version_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, yet the description adds substantial context: confirm=false previews which version would go live vs what is live now, confirm=true actually publishes, and staged workspace changes are preserved. This is exactly the extra behavioral detail beyond annotations that matters for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its purpose, then terse safety semantics. Capitalized emphasis is slightly heavy but each sentence carries distinct content with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent publish-overriding tool with an output schema, the description covers preview/publish behavior and the persistence of staged changes. The only shortfall is the undocumented container parameter, otherwise self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning, and it explains the two most consequential ones well: confirm as preview-vs-publish and version_id as coming from list_gtm_versions. The container parameter is left undocumented, leaving one gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rolls back) and resource (GTM container version) with clear framing as 'the undo for a bad publish'. It distinguishes itself from the forwarding sibling publish_gtm_container by naming the opposite direction of action, so an agent can tell them apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context (undo a bad publish, site immediately serves known-good config) and points to list_gtm_versions as the source for version_id. It does not explicitly name publish_gtm_container as the forward alternative or state exclusions, so it stops short of the 5-level routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rsa_asset_performanceRSA Ad Strength & Asset PerformanceARead-onlyIdempotentInspect
RESPONSIVE SEARCH AD (RSA) asset report — per HEADLINE and DESCRIPTION: impressions, clicks, cost, conversions, conversion value, cost per conversion, conversion rate and CTR, plus each ad's Ad Strength. This is the evidence for deciding which headlines to keep and which to replace: the one number that decides it is cost per conversion at ASSET level, and it is here.
days = 0 (default) reports LIFETIME figures, which is what you want for a keep-or-drop decision — a headline's whole history, not a slice of it. days=7/14/30 narrows to that window; any other number becomes an explicit date range, and the range actually used comes back as period_from / period_to so two calls can be compared. BEWARE of a short window on a paused campaign: the rows still come back but every metric is zero, which looks like missing data and is really just no traffic. ALSO: Google reports asset IMPRESSIONS from an earlier date than asset clicks and cost, so a lifetime impression count can be much higher than a window that already covers all of the spend — both numbers are right, and CTR is only comparable within the same window. The reply flags this when it sees it.
Rows are sorted by cost, capped by limit (the true total is always reported), and min_impressions drops assets with too little data to judge. If campaign_id is empty the whole account is covered.
Google's own BEST / GOOD / LOW grades are included when they exist, but in most accounts they DON'T: Google only grades an asset when the ad group has enough competing assets and enough traffic, and otherwise reports NOT_APPLICABLE. The reply says how many fall in each grade, so an empty grade list is never mistaken for a broken report. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| min_impressions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only/idempotent, and the description goes well beyond them: it explains that short windows on paused campaigns return zeroed rows that look like missing data, that Google reports impressions from an earlier date than clicks/cost so lifetime impressions can exceed a full-spend window, that CTR is comparable only within the same window, and that NOT_APPLICABLE grades are common and summarized. This is genuinely useful operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the headline purpose and the deciding metric, then organized by parameter and caveat. It is long but nearly every sentence carries distinct information; minor redundancy in re-emphasizing lifetime vs window keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter report tool with an output schema and full annotations, the description covers all parameters, default semantics, edge cases, and caveats. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the burden, and it does: days (0=lifetime, 7/14/30, any other becomes an explicit range reported as period_from/period_to), limit (cap with true total always reported), min_impressions (drops low-data assets), and campaign_id (empty = whole account). Only customer_id is left implicit, which is self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (RSA asset report) and enumerates the exact metrics returned at HEADLINE/DESCRIPTION level, plus Ad Strength. This clearly separates it from sibling report tools like get_report, performance_report, and from update_rsa which mutates rather than reports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the decision context explicitly ('evidence for deciding which headlines to keep and which to replace') and recommends days=0 for keep-or-drop. It does not name sibling alternatives (e.g., get_ad_details or update_rsa) or state when NOT to use it, 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.
scaffold_siteInstall Site StarterDestructiveInspect
Installs a site toolkit onto the hosting server. Sets up: Tailwind (responsive utilities),
GSAP + ScrollTrigger + SplitText, Lenis (smooth scroll), Swiper, and Fontshare designer fonts —
all loaded; a single-source nav/footer (edit assets/site.config.js once → every page updates, no
multi-page nav duplication); and a neutral starter skeleton whose content is {{...}} placeholders.
style is only an industry hint (universal, clinic, restaurant, corporate, service, shop); it
does not change the files. site = the key or domain of an EXTRA website on that server —
the toolkit is then installed into THAT website; leave it empty for the server's main website.
confirm=false → preview (this OVERWRITES index.html + assets/*);
confirm=true → writes them (live immediately).
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| style | No | universal | |
| server | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
searchSearch Ad AccountsARead-onlyIdempotentInspect
Searches across connected ad accounts (Google, Meta, LinkedIn); returns matching accounts (OpenAI/ChatGPT connector search contract). If query is empty, all connected accounts are listed. Read-only, does not consume billing. Returns: {results:[{id,title,url}]} — pass an id to fetch for details.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, destructiveHint and openWorldHint. The description adds context beyond them by stating 'does not consume billing' and confirming read-only behavior, which is genuinely useful for an agent deciding whether to call it freely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: what it searches, empty-query behavior, safety profile, return shape, and next step. Every clause earns its place, though the parenthetical about the OpenAI connector contract is slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only search with an existing output schema, the description covers platforms, filter semantics, safety, return format, and the follow-up tool. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden for the single `query` parameter, and it does explain the critical semantic: an empty query returns all accounts rather than nothing. It does not specify matching behavior (substring vs fuzzy), leaving a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (searches) plus the resource (connected ad accounts), explicitly enumerates the platform sources (Google, Meta, LinkedIn), and names the follow-up sibling `fetch`. This distinguishes it from the many list_* tools that enumerate accounts per-platform.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the empty-query condition clearly ('If query is empty, all connected accounts are listed') and routes the agent to `fetch` after obtaining an id. It lacks an explicit when-not-to-use note versus `list_accounts`, which is the nearest apparent alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_meta_interestsMeta Interest SearchARead-onlyIdempotentInspect
Searches Meta detailed-targeting entities by name → returns id + estimated audience size. kind: adinterest (interest) | adworkemployer (employer) | adeducationschool (school) | adgeolocation (location) | adTargetingCategory (DEMOGRAPHICS & BEHAVIOURS catalogue). For adTargetingCategory you MUST also pass category_class: "family_statuses" (parents, child age brackets), "life_events" (newly-wed, recently moved, birthday soon...), "industries" (job sector), "behaviors", "income" — leave query empty to list the whole class. The returned ids feed create_meta_adset / update_meta_adset (family_statuses, life_events, industries, behaviors). Relationship status and education level are NOT in this catalogue: they are fixed numeric codes passed directly as relationship_statuses / education_statuses. Location ids come back in key, not id.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | adinterest | |
| limit | No | ||
| query | Yes | ||
| category_class | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent, so the description does not need to restate safety. It adds real behavioral value by disclosing the downstream id usage and the gotcha that location ids surface in `key` rather than `id`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Densely packed but front-loaded and every clause carries information (kind map, category_class values, catalogue exclusions, id/key caveat). The parenthetical arrows and pipe lists are terse rather than wasteful, though parsing takes effort.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description need not explain returns, yet it still flags the id/key distinction that would otherwise trip an agent, and it covers the parameter semantics, upstream/downstream coupling, and the edge cases for a 4-parameter search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden and mostly delivers: it defines the accepted kind values as labeled enums and enumerates the valid category_class strings with examples, plus the empty-query listing behavior. Only `limit` is left entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Searches Meta detailed-targeting entities by name') plus the return shape ('returns id + estimated audience size'). It enumerates the kind families, so an agent can distinguish it from sibling targeting tools like linkedin_targeting_search or tiktok_targeting_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when each kind applies, that adTargetingCategory requires category_class, and that query may be left empty to list an entire class. It names the downstream consumers (create_meta_adset / update_meta_adset) and the alternative path for relationship status and education level, which are outside this catalogue.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_terms_reportSearch Terms ReportRead-onlyIdempotentInspect
Search terms report. Returns terms (the FULL list, one row per search term with impressions, clicks, cost, conversions and ctr) plus three curated buckets: converters, waste_candidates (negative-keyword candidates) and already_negative (terms that an EXISTING negative — ad group, campaign or shared list — already blocks, with the matching negative named; never propose these again). sort: cost | impressions | clicks | conversions. min_clicks: 0 (default) INCLUDES terms that got impressions but no clicks — raise it to 1 to see only clicked terms. limit: max rows (default 1000). Google withholds very low-volume terms behind its privacy threshold, so the list is never exhaustive. DATE: if period ('today','yesterday','this_month','last_7_days'… or 'YYYY-MM-DD[:...]') is provided, it overrides days; days=0 = today. start_date/end_date (YYYY-MM-DD) are accepted as an explicit range too. campaign_id: optional, one id or comma-separated ids, limits the report (and limit) to those campaigns. SMART (Smart/akıllı) campaigns are included in terms with campaign_type='SMART' (Google exposes only impressions, clicks and cost for them, conversions=null; they are left out of the buckets).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| sort | No | cost | |
| limit | No | ||
| period | No | ||
| end_date | No | ||
| min_waste | No | ||
| min_clicks | No | ||
| start_date | No | ||
| campaign_id | No | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
select_google_resourceSwitch Selected Google ResourceADestructiveInspect
Switches WHICH single Google resource this account works on: a Business Profile location,
a Search Console property, a GA4 property, a YouTube channel or a Tag Manager container.
On Free/Pro plans one resource at a time is included, and until now the first one ever used
stayed locked in with no way out; this tool moves the selection. Agency plans use several at
once and do not need it. service: businessprofile | searchconsole | analytics | youtube |
tagmanager. resource is the full id as listed by that service's list tool (for a Business
Profile: accounts/…/locations/…). confirm=false previews the change.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| service | Yes | ||
| resource | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the mutation/safety profile is covered structurally. The description adds real value beyond that: confirm=false previews the change, and it explains the prior locked-selection behavior being remedied. It does not detail whether switching drops prior-resource state, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the parameter notes are efficient and useful. The historical aside ('until now the first one ever used stayed locked in with no way out') is slightly editorial but does convey the motivating context, so it mostly earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter switching tool with an output schema already present, the description covers purpose, plan gating, parameter semantics, and preview behavior adequately. Only the precise after-effects of switching (e.g., what happens to prior selection) are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description carries the full burden and does so: it enumerates the five valid service values, describes resource as the full id from that service's list tool with a Business Profile example format, and explains confirm=false as a preview. All three parameters gain meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Switches WHICH single Google resource this account works on') and enumerates exactly the five resource types affected. An agent can distinguish this selection-changing tool from the many connect_* siblings that establish connections rather than changing the active selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states applicability explicitly: one resource at a time on Free/Pro plans, and 'Agency plans use several at once and do not need it,' which is a clear when-not condition. It also directs the agent to the appropriate list tool to obtain the resource id, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_meta_conversion_eventSend Meta Conversion Event (CAPI)ADestructiveInspect
SENDS A SERVER-SIDE CONVERSION EVENT to Meta (Conversions API) — the fix for conversions lost to iOS 14+ / ad-blockers / cookie limits, and the only way to report sales that happen off the website (CRM, phone, showroom, POS).
pixel_id from list_meta_pixels. event_name: Purchase | Lead | CompleteRegistration | AddToCart | ViewContent | Contact | Schedule ... At least ONE identifier is required: email, phone, external_id, fbc or fbp. Email/phone are SHA-256 hashed locally — raw personal data never leaves the server. event_id: pass the SAME id as the browser pixel and Meta de-duplicates automatically (no double counting). action_source: website | phone_call | chat | email | physical_store | system_generated | other — use phone_call/physical_store for offline sales. test_event_code: routes the event to Meta's Test Events view without touching real reporting — verify first, then send for real. confirm=false previews; confirm=true sends.
| Name | Required | Description | Default |
|---|---|---|---|
| fbc | No | ||
| fbp | No | ||
| No | |||
| phone | No | ||
| value | No | ||
| confirm | No | ||
| currency | No | TRY | |
| event_id | No | ||
| pixel_id | Yes | ||
| account_id | Yes | ||
| event_name | Yes | ||
| external_id | No | ||
| action_source | No | website | |
| test_event_code | No | ||
| event_source_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=true and idempotentHint=false; the description adds substantial behavioral context beyond them: the confirm=false preview vs confirm=true live send, local SHA-256 hashing of email/phone so raw PII never leaves the server, and Meta-side de-duplication via a shared event_id. These are exactly the operational details an agent needs before firing a destructive, non-idempotent call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded (the core action in the first clause, then identifiers, dedup, action_source, test mode, and confirm), and each line carries a distinct piece of information. It is dense and slightly long, but no sentence is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is correctly omitted, and the description covers the high-stakes behaviors (preview mode, PII handling, dedup, test routing). The remaining gap is the handful of undocumented parameters (account_id, value, currency, event_source_url) in a 15-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it documents pixel_id's source (list_meta_pixels), event_name values, the 'at least one identifier' rule across email/phone/external_id/fbc/fbp, event_id semantics, the action_source value set, test_event_code, and confirm. It omits account_id, value, currency, and event_source_url, which remain undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (sends a server-side conversion event to Meta's Conversions API) and immediately frames the scope: off-website/offline sales that browser pixels miss. That is enough to distinguish it from siblings like send_tiktok_conversion_event, upload_offline_conversions, and the various meta_* management tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use context (iOS 14+/ad-blocker losses, CRM/phone/showroom/POS sales) and a conditional workflow ('verify first, then send for real' via test_event_code; confirm=false previews). It does not, however, name the sibling tools it should be preferred over (e.g. upload_offline_conversions or upload_meta_leads), leaving that boundary to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_tiktok_conversion_eventSend TikTok Conversion Event (Events API)ADestructiveInspect
SENDS A SERVER-SIDE CONVERSION EVENT to TikTok (Events API) — the fix for conversions lost to ad-blockers, iOS restrictions and cookie limits. Use it to report a purchase/lead that happened off-site (CRM, phone, POS) or to back up the browser pixel.
pixel_code from list_tiktok_pixels / create_tiktok_pixel. event_name: CompletePayment | CompleteRegistration | SubmitForm | AddToCart | ViewContent | Contact ... At least ONE identifier is required: email, phone, external_id or ttclid. Email/phone are SHA-256 hashed locally — raw personal data never leaves the server. event_id: pass the SAME id you use in the browser pixel and TikTok automatically de-duplicates (no double counting). test_event_code: sends to TikTok's Test Events view without affecting real reporting — use it to verify the setup first. confirm=false previews; confirm=true sends.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| No | |||
| phone | No | ||
| value | No | ||
| ttclid | No | ||
| confirm | No | ||
| currency | No | TRY | |
| event_id | No | ||
| event_name | Yes | ||
| pixel_code | Yes | ||
| external_id | No | ||
| advertiser_id | Yes | ||
| test_event_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the mutation profile (readOnlyHint=false, destructiveHint=true), and the description adds real behavioral context: local SHA-256 hashing so raw PII never leaves the server, automatic dedup when event_id matches the pixel, and test mode that does not affect real reporting. It omits any note on auth/permission requirements or error handling, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core definition, then dense one-line parameter notes with no filler. The all-caps lead and mixed line formatting are slightly noisy, but no sentence is redundant given the 0% schema coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the description covers the critical invocation constraints for a 13-parameter mutation tool. Missing: how advertiser_id is obtained (it names list_tiktok_pixels / create_tiktok_pixel for pixel_code but not the account source) and any permissions or rate-limit context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description has to carry the load, and it does for the high-risk parameters: identifier requirement (at least one of email/phone/external_id/ttclid), hashing of email/phone, event_id dedup semantics, test_event_code, confirm, and sample event_name values. It leaves url, value, currency, ttclid format and advertiser_id unexplained, so it is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('sends a server-side conversion event to TikTok (Events API)') and immediately scopes it against the browser pixel, so the agent knows it is the server-side complement to pixel tracking rather than a pixel-config tool. Distinct from send_meta_conversion_event and upload_offline_conversions by channel and API.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use cases are given (off-site purchase/lead from CRM, phone, POS; backing up the browser pixel), plus an explicit verify-first workflow via test_event_code and the preview semantics of confirm=false vs confirm=true. Nothing about 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.
seo_ai_overviewSEO AI OverviewADestructiveInspect
Google AI Overview visibility / GEO (SEO Intelligence add-on). Returns the text of
Google's AI answer for a search query plus the sources it cites; pass your domain as
target to learn whether your site is cited in that AI answer. Goes beyond mention counts
— shows what the AI actually says and who it credits. language takes either a two-letter code ('en', 'tr', 'de') or the language name ('English', 'Türkçe') — a name used to be passed straight to the data provider, which rejected it with a bare "Invalid Field: language_code" that named no cause. location takes a country name ('United States'). Costs SEO add-on credits.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| keyword | Yes | ||
| refresh | No | ||
| language | No | en | |
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real behavioral context beyond the annotations: it discloses that calls consume SEO add-on credits and explains how `language`/`location` values are normalized instead of being forwarded raw. But the annotations declare destructiveHint=true and idempotentHint=false, and the description – which frames the tool as simply 'Returns the text' – never explains what is destructive, whether refresh invalidates cached data, or what non-idempotency means here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the core sentences earn their place, but the recounting of the past language-handling bug ('used to be passed straight to the data provider, which rejected it...') is background history that does not help an agent invoke the tool, since the accepted formats were already stated one clause earlier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the key inputs for a five-parameter, one-required tool. The remaining gaps are `refresh` semantics and any reconciliation with the destructive/non-idempotent annotations, which leaves it one step short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it mostly succeeds: `target` is defined semantically (your domain, cited-check), `language` gets accepted formats with concrete examples ('en', 'tr', 'English', 'Türkçe'), and `location` is shown as a country name. Only `refresh` is left unexplained, preventing a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource – it returns Google's AI Overview answer text plus the sources it cites for a query – and explains that `target` reveals whether your domain is cited. It also differentiates itself conceptually from mention-count tools ('Goes beyond mention counts'), so an agent can distinguish it from the nearby GEO siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'pass your domain as target to learn whether your site is cited' tells the agent the scenario, and 'Goes beyond mention counts' hints at an alternative class of tool. However, no sibling is named explicitly (e.g., seo_geo_citations, seo_geo_tracker) and there is no when-not guidance, leaving the agent to infer which GEO tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_anchorsSEO Anchor TextsADestructiveInspect
Anchor text report (SEO Intelligence add-on). Every anchor text pointing at a domain
with HOW MANY SEPARATE DOMAINS use it, its spam score and how many of those links are
nofollow. Two jobs: (1) see which wording the web associates with the brand, (2) DETECT
NEGATIVE SEO — paid-link networks push commercial anchors ("buy backlinks", "casino")
from many throwaway domains. Sort by referring_domains (default) for attack detection,
by backlinks for volume, by spam_score to surface the worst first. status_type:
live (still up), all (full history), lost. min_spam_score filters (0 = off).
Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | Yes | ||
| refresh | No | ||
| order_by | No | referring_domains | |
| status_type | No | live | |
| min_spam_score | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description presents this purely as a read-only report but the annotations declare readOnlyHint=false and destructiveHint=true, an inconsistency an agent could act on. The description does add genuinely useful behavior beyond the annotations, namely that the call consumes SEO add-on credits and requires the add-on, which is real value but does not resolve the conflict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the report's identity and contents, then jobs, then sorting and filter semantics, then cost. Dense but every clause carries information; the uppercase emphasis on DETECT NEGATIVE SEO is slightly noisy but functional.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-shape details are appropriately omitted, and the description covers purpose, use cases, sort/filter semantics, and credit cost. What remains thin is the meaning of target (domain vs URL) and limit/refresh behavior, a minor gap for a reporting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden and does well: it enumerates order_by values, defines status_type (live/all/lost), and explains min_spam_score (0 = off). It leaves limit, refresh, and the accepted format of target unexplained, so it compensates for most but not all of the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Anchor text report') and immediately defines the exact output grain: every anchor text pointing at a domain, with referring-domain count, spam score, and nofollow counts. That grain clearly separates it from seo_backlinks, seo_backlink_list, and seo_referring_networks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the two jobs (brand wording discovery, negative-SEO detection) and prescribes sorting per goal ('referring_domains' for attack detection, 'backlinks' for volume, 'spam_score' for worst-first). No sibling alternative is named by name, so it stops just short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_auditSEO & Speed AuditARead-onlyIdempotentInspect
SEO + speed + measurement-tag AUDIT of a web page. Renders the page in a real Chrome via Google PageSpeed (Lighthouse): performance/SEO/accessibility scores (0-100), Core Web Vitals (LCP/CLS/INP), top-impact improvement opportunities, failed SEO / accessibility / best-practices audits with the elements that fail them (selector, HTML snippet, explanation), the LCP element with its timing breakdown, render-blocking and unused CSS files, and the measurement/ad tags loaded on the page (GA4/GTM/Google Ads conversion/Meta/TikTok/LinkedIn). strategy: mobile|desktop.
runs=2 measures the page a second time about a minute later and reports both values, their median and their spread under stability. Lab measurements run on a shared virtual machine and move between runs: the same page has returned 12.5 s, 4.7 s and 12.7 s LCP minutes apart, so a single number can send you in the wrong direction. Real-user (field) data does not move, but pages with little traffic have none, and the reply tells you when that is the case. Use runs=2 before and after a speed change so you can tell a real result from noise. It takes about a minute and a half and the second measurement costs one more call; if PageSpeed returns its cached answer instead of a fresh run, that call is refunded and the reply says so.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| runs | No | ||
| strategy | No | mobile |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, read-only, idempotent operation, and the description goes well beyond that with non-obvious traits: shared-VM measurement variance (the 12.5s / 4.7s / 12.7s LCP example), the absence of field data for low-traffic pages, the ~90-second cost, and the fact that a cached PageSpeed answer refunds the extra call and is flagged in the reply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and outputs are front-loaded in the first sentence, and the runs paragraph is placed after them. The anecdotal LCP figures are slightly verbose but they are the evidence that justifies the runs parameter, so they earn their place; the block is dense rather than bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a pay-per-call, slow, high-variance external audit the description is nearly complete, covering cost, timing, variance, and refund behavior. It does spend several lines restating return fields that the output schema already defines, and it omits any hint about how to choose among the other audit/technical-audit siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does: runs=2 is defined precisely (a second measurement ~1 minute later, reported alongside median and spread under 'stability') and strategy's allowed values mobile|desktop are given even though the schema has no enum. url itself is left self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('AUDIT of a web page') and enumerates the exact artifacts produced: Lighthouse scores, LCP/CLS/INP, failed audits with failing elements, render-blocking CSS, and loaded measurement tags. It does not, however, differentiate itself from closely related siblings such as core_web_vitals, seo_technical_audit, or instant_audit, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear and explicit operational guidance: use runs=2 before and after a speed change to separate signal from noise, and explains that lab numbers on the shared VM move while field data does not. It never states when to prefer this tool over an alternative sibling, so the routing guidance is one-sided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_backlink_listSEO Backlink ListADestructiveInspect
Individual backlinks, one row each (SEO Intelligence add-on). For every link: the
linking page and its title, which page of yours it points at, the anchor, dofollow or
not, the surrounding sentence, page/domain authority, spam score, country and whether
the link is broken. This is the raw link list — use it to audit a specific link, to
check whether a link you paid for or earned actually exists, or to build a disavow
candidate list. dofollow: "" (all), "true", "false". from_domain filters to one
linking site. status_type: live / all / lost. order_by: rank, domain_rank,
first_seen, last_seen, spam_score. Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | Yes | ||
| refresh | No | ||
| dofollow | No | ||
| order_by | No | rank | |
| from_domain | No | ||
| status_type | No | live |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations exist (destructiveHint=true, readOnlyHint=false, openWorldHint=true), so the safety bar is lower, yet the description still adds real behavioral context: it discloses that calls consume SEO add-on credits and points to the top-up path. It does not explain the refresh flag or reconcile the conservative destructive/idempotency hints, leaving a gap for an operation that looks like a read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what one row contains, then use cases, then per-parameter values. Every sentence carries information, though the middle sentence is a long comma run that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-field enumeration is partly redundant, but the description still supplies the credit-cost caveat, filter semantics, and use-case framing that structured fields lack. It is nearly complete; the undocumented refresh flag (presumably the credit-consuming crawl trigger) is the main omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden. It does explain allowed values for dofollow, status_type, order_by, and what from_domain filters, but leaves limit, target (the only required param), and refresh entirely undocumented — a substantial gap across 7 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+granularity: 'Individual backlinks, one row each', and explicitly distinguishes itself from the aggregate sibling by saying 'This is the raw link list'. An agent can tell it apart from seo_backlinks, seo_broken_backlinks, and seo_best_pages_by_links 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three concrete use cases: auditing a specific link, verifying a paid/earned link exists, and building a disavow candidate list. It does not name an explicit alternative tool or state when-not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_backlinksSEO Backlink ProfileBDestructiveInspect
Backlink profile (SEO Intelligence add-on). Total backlinks, referring domains, authority rank and broken backlinks — PLUS the strongest referring domains and the most common anchor texts (who links to you and with what wording) for link-building and authority strategy. Works for any domain (yours or a competitor's). Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide the safety profile (openWorldHint, non-readOnly, non-idempotent, destructive), so the bar is lowered; the description adds genuinely new behavioral context by disclosing that calls consume SEO add-on credits and require topping up. It does not explain what is 'destructive' about a reporting tool, which is the one place extra context would have been most valuable, leaving a tension between the read-style framing and destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence front-loads the core output inventory, which is the right ordering for an agent scanning for capability. The trailing credit/upsell clause ('top up → Add-ons') is mildly promotional but does carry real usage information about cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. What remains missing is disambiguation from the crowded backlink sibling set and any documentation of the two undocumented parameters, which is a meaningful gap for a domain-scoped tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, so the description carries the full burden. 'Works for any domain (yours or a competitor's)' loosely clarifies 'target' as a domain, but 'refresh' is never mentioned and no format, defaults, or cost implications of refreshing are given. The gap is only partially compensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and enumerates exactly what the profile contains (total backlinks, referring domains, authority rank, broken backlinks, top referring domains, common anchor texts). That is well beyond a tautology. It does not, however, distinguish itself from closely overlapping siblings such as seo_backlink_list, seo_broken_backlinks, seo_anchors, or seo_referring_networks, so an agent cannot tell from the description alone whether this is an aggregate overview or a duplicate of those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a purpose ('for link-building and authority strategy') and notes it works for any domain or competitor, which gives some context for when it applies. It gives no explicit when-to-use vs. when-not instruction and never routes the agent to or away from the many sibling backlink tools, so the selection decision 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.
seo_best_pages_by_linksSEO Best Pages by LinksADestructiveInspect
Best pages by backlinks (SEO Intelligence add-on). Which individual pages of a domain attract the links, with referring domains, authority and spam score per page. Two uses: on your own domain it shows where your authority actually sits, so you can internally link from those pages to the ones you want to rank; on a competitor's domain it shows which content types earn links, which is the fastest way to decide what to publish next. Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | Yes | ||
| refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: the SEO Intelligence add-on dependency and the fact that the call consumes credits. However, with readOnlyHint=false and destructiveHint=true declared, the description says nothing about why the call is considered non-read-only or destructive (e.g. what refresh does), leaving a behavioural question open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by output contents, two use cases, and cost. It is slightly long, but each sentence adds decision-relevant value, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers purpose, use cases, and cost. For a three-parameter call with 0% schema coverage the parameter documentation gap and the unexplained destructive annotation keep it from being complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, yet it never mentions target, limit, or refresh. The notion of a domain target is only implied, and limit/refresh semantics (pagination size, cache-bypass/credit impact) are entirely absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: it states it returns the individual pages of a domain that attract links, with referring domains, authority and spam score per page. This clearly separates it from domain-level siblings like seo_backlinks and seo_backlink_list, and an agent can tell what it produces 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete when-to-use scenarios (own domain for internal linking, competitor domain for content-idea discovery), which is strong contextual routing. It does not, however, name or exclude the closest sibling tools (seo_backlinks, seo_broken_backlinks, seo_link_intersect), so the agent still has to infer when this beats them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_brand_monitorSEO Brand MonitorADestructiveInspect
Brand mention & sentiment monitoring (SEO Intelligence add-on). How often a brand is mentioned across the web, the positive/negative/neutral sentiment split, the emotions behind those mentions, and which domains talk about it most. Reputation and brand tracking that complements AI-citation (GEO). Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | ||
| refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the full safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true). The description adds genuinely useful non-annotation context: the operation consumes SEO add-on credits and requires a top-up. However, it does not explain the refresh behavior or why the call is non-idempotent/destructive, leaving annotation and description loosely reconciled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the metric list and the cost caveat. The metric enumeration ('positive/negative/neutral sentiment split, the emotions behind those mentions') is slightly padded but each clause contributes to what the tool returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be explained, and the credit/top-up caveat covers the main operational concern. The remaining holes are the undocumented 'refresh' parameter and no clarification of why a monitoring tool is marked destructive/non-idempotent — modest but real gaps for a 2-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden for both parameters. It implies a brand name input, but says nothing about the 'refresh' boolean: no meaning, no default, no cost/rate implications (the credit-cost note never ties to refresh). With low coverage and an entirely undocumented parameter, this is a clear gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific capability (brand mention and sentiment monitoring) and enumerates what it returns: mention frequency, sentiment split, emotions, and top domains. It also explicitly positions itself against the nearby sibling 'AI-citation (GEO)', so an agent can distinguish it from seo_geo_citations/seo_geo_tracker without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use ('reputation and brand tracking') and names the tool it complements ('complements AI-citation (GEO)'), which effectively routes the agent between brand sentiment and GEO citation work. It stops short of explicit when-to-use/when-not statements or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_broken_backlinksSEO Broken BacklinksADestructiveInspect
Broken backlinks (SEO Intelligence add-on). Sites that link to you but land on a page that no longer answers — 404, 410, 5xx. Every one is authority you already earned and are currently throwing away. Results are GROUPED BY THE DEAD URL, strongest first, so you fix one page and recover many links at once: restore the page or 301 it to the closest live content. Also works on a competitor's domain, where each broken link is an outreach opening. Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | Yes | ||
| refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (openWorld, destructive, non-idempotent), so the description's added value is real: result ordering ('strongest first'), the grouping behavior, and notably the credit cost with a pointer to Add-ons. It does not contradict the annotations; it enriches them with cost and output-shape context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core definition and grouping behavior, then cost. The middle sentence ('authority you already earned and are currently throwing away') is marketing flourish, but the remaining text is dense and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and annotations carry safety. The description covers purpose, grouping, and cost adequately for a 3-param tool, but the total absence of parameter semantics leaves the definition incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and falls short: it hints that 'target' is a domain (own or competitor) but says nothing about 'limit' or 'refresh', both of which exist with defaults. Two of three parameters are unexplained anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Broken backlinks') and immediately defines the exact condition that distinguishes it from the generic backlink siblings (seo_backlinks, seo_backlink_list): links landing on 404/410/5xx and grouped by the dead URL. An agent can pick this over the plain backlink-list tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage contexts: recover authority on your own domain, or use it on a competitor's domain for outreach. It does not, however, name a specific alternative or state when NOT to use it versus seo_backlinks/seo_backlink_list, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_bulk_spam_scoreSEO Bulk Spam ScoreADestructiveInspect
Bulk spam score (SEO Intelligence add-on). Scores up to 100 domains in one call, 0 to 100, worst first. Built for the moment before you act: someone offers a guest post or a link package, or you are deciding which referring domains to disavow. Score above 30 means look at the domain manually; above 60 is a link-selling network. One call for the whole list instead of one lookup per domain. Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | ||
| refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the annotations: it discloses the batch size limit (100 domains), the credit cost model, and the add-on prerequisite ('Costs SEO add-on credits; top up → Add-ons'). This is meaningful operational context. It does not, however, reconcile or explain the destructiveHint=true / readOnlyHint=false annotation against what sounds like a read-only scoring call, leaving a mild gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each carrying distinct information: what it does, threshold interpretation, use cases, batching benefit, and cost. Nothing is redundant; the most important details (score range, thresholds) are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The context includes an output schema, so return structure need not be explained. The description covers purpose, timing, interpretation, batching behavior, and cost. It could be more complete by clarifying the refresh parameter and acknowledging the annotation semantics, but for a 2-param scoring tool it is substantially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does document the domains parameter implicitly ('up to 100 domains in one call'), covering cardinality. The refresh boolean, however, is entirely undocumented in both schema and description, leaving half the parameters without meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Bulk spam score... Scores up to 100 domains in one call, 0 to 100, worst first'), clearly distinguishing it from single-domain lookups and from siblings like seo_backlinks or seo_referring_networks. The 'SEO Intelligence add-on' qualifier further scopes it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is given ('Built for the moment before you act: someone offers a guest post or a link package, or you are deciding which referring domains to disavow') plus threshold interpretation ('score above 30... above 60...'). It also contrasts the batching approach against one-lookup-per-domain alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_competitor_gapSEO Competitor GapADestructiveInspect
Competitor keyword GAP (SEO Intelligence add-on). Returns keywords the competitor ranks for that YOU do not — sorted by search volume. The content/ad opportunities you're missing. Costs SEO add-on credits; top up in the panel → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| refresh | No | ||
| language | No | tr | |
| location | No | ||
| your_domain | Yes | ||
| competitor_domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes meaningfully beyond the annotations by disclosing that the call consumes SEO add-on credits and requires the SEO Intelligence add-on, which is real cost/auth context an agent cannot get from the schema. Annotations already cover the safety profile (destructive/openWorld/idempotent), so no further burden is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero filler; the core output definition is front-loaded and the credit/add-on caveat follows as a distinct, useful clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the add-on/credit constraint is covered. However, with 0% schema coverage the description leaves limit, refresh, language, and location unexplained, which is a gap for a 6-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, and the description only implies the roles of your_domain vs competitor_domain. It says nothing about limit (default 100), refresh, or the surprising language default of 'tr', leaving most parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: keywords the competitor ranks for that you do not, sorted by search volume. This clearly differentiates it from sibling keyword tools like seo_keyword_research, keyword_opportunities, and seo_ranked_keywords.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Frames the use case explicitly ('the content/ad opportunities you're missing') and notes the add-on requirement and credit cost. It does not name an alternative sibling or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_content_briefSEO Content BriefADestructiveInspect
Content brief (SEO Intelligence add-on). For a target keyword, returns a DATA-GROUNDED brief to write content that ranks: search INTENT, the SERP competitors + which SERP features the query triggers, the People-Also-Ask QUESTION TREE to answer, subtopic/entity keywords to cover, and the #1 competitor's H2/H3 OUTLINE. YOU (the assistant) then write the article from this brief (add the user's real data/experience) and run seo_content_lint on the draft before publishing. Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | ||
| refresh | No | ||
| language | No | tr | |
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare openWorldHint, non-idempotent, and destructive, so the safety bar is lowered; the description adds real context beyond them: it consumes SEO add-on credits, requires the add-on, and points to the top-up path. It also clarifies that the assistant, not the tool, writes the article. It never addresses why destructiveHint is true or what the refresh flag does to cached state, leaving one gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: the core deliverable is stated first, then the workflow and cost note. Every sentence carries information, though the outline of brief contents runs long relative to the schematic detail that follows in the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return shape needn't be re-explained, and the description instead adds workflow, cost, and add-on prerequisites. The notable omission is parameter guidance for refresh/language/location. For a four-param, credit-consuming tool, it is close to complete but not airtight.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters, so the description carries the full burden and mostly fails: only the required keyword is implied ('For a target keyword'). refresh, language (default 'tr'), and location are never mentioned, so their semantics and defaults are undocumented anywhere an agent can see them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific output (a data-grounded content brief keyed on a target keyword) and enumerates exactly what it contains: search intent, SERP competitors and features, the PAA question tree, subtopic/entity keywords, and the #1 competitor's H2/H3 outline. It is clearly distinguishable from nearby siblings like seo_serp_analysis or seo_content_lint, which do different jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the use case (writing content that ranks for a target keyword) and explicitly routes the agent through the follow-on step: write the article from the brief, then run seo_content_lint before publishing. It also flags the SEO add-on and credit requirement. No explicit when-not or named alternative for the same job, 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.
seo_content_lintSEO Content Linter (AI-footprint)ARead-onlyIdempotentInspect
AI-footprint linter (FREE — no add-on credits). Scans a draft for the patterns that make content read as AI-generated (tell-words like delve/robust/seamless, filler clichés, the "it's not just X, it's Y" template, em-dash overuse, over-transitions, robotic uniform paragraph rhythm) and returns a human-likeness score (0-100) with specific fixes. Run it on any draft BEFORE publishing. It is a QUALITY signal, NOT a detector-evasion tool — Google rewards value, not 'undetectable' text, so fix by adding real data/experience and editing, not by gaming the score.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| language | No | en |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description adds genuinely non-redundant context: it costs no add-on credits, returns a 0-100 score plus specific fixes, and is a quality signal rather than an evasion tool. No auth, rate-limit, or length-limit details are given, which keeps it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and return value are front-loaded, and the disclaimers about free usage and non-evasion each serve a real purpose. Slightly long and repetitive in the pattern list, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool does, when to run it, and what it returns, and an output schema exists so return structure need not be restated. The unmentioned 'language' parameter is the only meaningful gap for a low-complexity two-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, so the description carries the burden and largely fails it: 'text' is only implied by 'scans a draft', and the 'language' parameter (default 'en') is never mentioned, leaving multilingual behavior undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it lints a draft for AI-footprint patterns and returns a human-likeness score with fixes. It enumerates the exact patterns detected (tell-words, the 'not just X but Y' template, em-dash overuse), which clearly separates it from siblings like seo_audit or seo_content_brief.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Run it on any draft BEFORE publishing" gives a clear trigger point, and the description explicitly bounds the tool's purpose (quality signal, not detector evasion). It does not name an alternative tool or a when-not-to-use 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.
seo_full_analysisSEO Full Analysis (AEO/GEO)ADestructiveInspect
COMPREHENSIVE SEO + AEO + GEO audit in ONE call (SEO Intelligence add-on). Chains a technical page audit, backlink authority, the domain's ranked keywords, SEARCH-INTENT classification, Google AI-answer visibility (are you cited?), and — if a competitor domain is given — the keyword gap, then returns a PRIORITIZED findings list (P0/P1/P2) with concrete actions, plus the raw sections. Use this FIRST for any "analyze/audit my SEO" request; call the individual seo_* tools only to drill deeper. Costs SEO add-on credits (a bundle, cheaper than the calls separately); top up in the panel → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| refresh | No | ||
| language | No | tr | |
| location | No | ||
| competitor | No | ||
| homepage_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by disclosing the credit cost model (SEO add-on credits, bundle cheaper than separate calls, top-up location) and the conditional branch when a competitor domain is supplied. Output shape is also described (P0/P1/P2 plus raw sections). It does not explain the non-idempotent/destructive annotation semantics, which is a notable omission given destructiveHint=true on an 'audit' tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded, leading with the scope and the chained components before the routing advice and cost note. Slightly long, and the 'top up in the panel → Add-ons' clause is more billing plug than agent guidance, but nothing is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity aggregate tool, it covers scope, chaining, routing, cost, and conditional behavior. Return values are covered by the output schema and partly restated. The main gap is the unexplained parameters and the unaddressed destructive/non-idempotent annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 6 params, so the description must compensate. It only clarifies 'competitor' (triggers the keyword gap); refresh, language, location, and homepage_url are left undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific composite action ('COMPREHENSIVE SEO + AEO + GEO audit') and enumerates exactly what it chains (technical audit, backlinks, ranked keywords, intent, AI-answer visibility, competitor gap). It explicitly distinguishes itself from the many seo_* siblings by positioning itself as the aggregation entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'Use this FIRST for any analyze/audit my SEO request; call the individual seo_* tools only to drill deeper.' This is the rare case where both the when and the when-not are stated with a named alternative family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_geo_citationsSEO AI-Citation (GEO)BDestructiveInspect
AI-answer citation tracking / GEO (SEO Intelligence add-on). Measures how often a brand is MENTIONED in AI answer engines (Google AI Overviews and ChatGPT) with an AI search volume estimate — the 2026 successor to SEO. Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | ||
| refresh | No | ||
| language | No | tr | |
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is largely covered. The description adds genuinely useful context the annotations do not: that the call consumes SEO add-on credits and requires the SEO Intelligence add-on to be active, plus that it queries external engines. However, it never explains why a measurement tool is marked destructive, leaving a real ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences that front-load the core purpose, which is appropriate. But the mid-sentence line break hurts readability and the trailing 'top up → Add-ons' fragment is cryptic rather than informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Still, for a 4-parameter, credit-consuming, destructive-flagged tool, the description omits all non-brand parameter semantics and does not explain the destructive/credit-spending behavior concretely enough for an agent to act safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description carries the full burden and largely fails it. Only 'brand' is implied by the text; refresh, language (default 'tr') and location are never mentioned, so the agent has no guidance on locale scoping or cache-busting behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: tracking how often a brand is MENTIONED in AI answer engines (Google AI Overviews, ChatGPT) with an AI search volume estimate, and labels the domain as GEO. This is clear on its own, but it does not distinguish itself from close siblings such as seo_geo_tracker, seo_ai_overview or seo_brand_monitor, so an agent cannot tell from the text 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the add-on framing ('SEO Intelligence add-on', 'Costs SEO add-on credits; top up → Add-ons'), which tells the agent a prerequisite exists but not when this tool is preferable to the many adjacent SEO/GEO tools. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_geo_trackerSEO GEO Share-of-VoiceADestructiveInspect
GEO share-of-voice (SEO Intelligence add-on). Runs YOUR prompt set through REAL LLMs
(ChatGPT, Perplexity, Gemini) several times and measures how often your BRAND is mentioned vs
competitors, whether your domain is CITED, and which sources the AIs cite most — i.e. your
visibility INSIDE AI answers (GEO), the thing classic rank tracking misses. Pass 3-8 real
buyer/category questions (UNbranded works best, e.g. 'best MCP connector for Google Ads') in
prompts, your brand name, and optional competitors + brand_domain. engines defaults
to chat_gpt,perplexity (add gemini for a 3rd engine). Repeats average out LLM non-determinism.
Costs SEO add-on credits (scales with prompts × engines × repeats); top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | ||
| engines | No | chat_gpt,perplexity | |
| prompts | Yes | ||
| refresh | No | ||
| repeats | No | ||
| competitors | No | ||
| brand_domain | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructive, open-world, and non-idempotent behavior. The description adds critical context: it costs SEO add-on credits (scales with prompts × engines × repeats), requires a top-up, and that repeats average out LLM non-determinism. It does not explain what 'destructive' entails beyond credit consumption, but it meaningfully supplements 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and flows logically through usage, parameters, and cost. It is a dense single paragraph with emphatic ALL-CAPS that could be distracting, but every sentence contributes useful information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, an output schema, and annotations, the description is largely complete: it explains what the tool does, most parameters, credit cost, and engine options. It omits the refresh parameter and any authentication/connection prerequisites, but those are minor gaps against a strong overall treatment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter semantics. It covers prompts (3-8 real questions), brand, optional competitors and brand_domain, engines default (chat_gpt,perplexity with gemini add-on), and hints at repeats behavior. It leaves the 'refresh' parameter entirely unexplained, which is a notable gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('runs') and resource ('your prompt set through real LLMs'), then names the exact measurements (brand mentions, citations, sources cited). It explicitly distinguishes itself from 'classic rank tracking', making its scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly frames the use case (GEO visibility inside AI answers) and gives concrete prompt guidance ('3-8 real buyer/category questions, UNbranded works best'). It does not name alternative siblings like seo_geo_citations or state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_historySEO Run HistoryARead-onlyIdempotentInspect
Lists the SEO/AEO add-on queries this account has ALREADY run, newest first: which tool, which query, when it ran, and whether the stored result can still be reused for free. Use this BEFORE running an expensive SEO tool so the user does not pay twice for the same data — if a run is still reusable, just call that tool again with the same arguments and it returns the stored result at ZERO credits. Read-only, costs nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, and the description reinforces this plus adds genuinely new behavior: results may be reused free, ordering is newest-first, and re-running with identical args hits a cache. It does not disclose cache staleness/expiry rules, which is the one behavior an agent would want to know before relying on reuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the cost-saving rationale. Slightly long because the reuse mechanism is explained twice ('ALREADY run' and 'cart that tool again'), but each sentence carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-field detail is unnecessary, and the description covers what is listed and why. The only gap is the undocumented 'limit' parameter, which is minor for a one-parameter read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'limit' parameter has 0% schema description coverage and is never mentioned in the description, so its meaning (max history entries returned, default 20) must be inferred. The 'newest first' note gives partial ordering context but nothing about the parameter itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb ('Lists') and resource ('SEO/AEO add-on queries this account has ALREADY run'), and enumerates what each entry contains (tool, query, time, reusability). This is clearly distinguishable from the many seo_* analysis siblings, which run new work rather than reporting past runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call this BEFORE running an expensive SEO tool and explains the exact follow-up action: re-call the same tool with the same arguments to get the cached result at zero credits. It names both the when and the alternative, which is unusually strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_keyword_researchSEO Keyword ResearchDestructiveInspect
Keyword research for a seed keyword: related keyword ideas with monthly search volume, cost per click, competition and keyword difficulty. language and location select the market. Part of the SEO Intelligence add-on and uses add-on credits.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | Yes | ||
| limit | No | ||
| refresh | No | ||
| language | No | tr | |
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
seo_keyword_trendsSEO Keyword TrendsADestructiveInspect
Keyword trend / seasonality (SEO Intelligence add-on). Google Trends interest over time and average for up to 5 keywords — to time ad campaigns and content around demand peaks. Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | ||
| keywords | Yes | ||
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 non-free, side-effecting nature is flagged structurally; the description usefully confirms the cost model ('Costs SEO add-on credits; top up → Add-ons'). It does not, however, cover rate limits, what happens on refresh, or per-credit costs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler; the core capability leads and cost/upsell trails. The trailing 'top up → Add-ons' is slightly promotional but still actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be described. Given the low schema coverage, however, the parameter gap is the main weakness; the description is otherwise complete for a read-style analytics call with a disclosed cost.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three parameters, so the description must compensate. It adds one real constraint ('up to 5 keywords') but leaves 'refresh' and 'location' entirely undefined in both schema and prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and operation: Google Trends interest-over-time and average seasonality data for up to 5 keywords. This is clearly distinguishable from adjacent siblings such as seo_keyword_research or keyword_planner, which do not return time-series interest data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an implied use case ('to time ad campaigns and content around demand peaks'), which is genuine context, but never states when NOT to use it or names an alternative among the many keyword siblings. Usage is inferred rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_link_intersectSEO Link IntersectADestructiveInspect
Link intersect (SEO Intelligence add-on). Finds the domains that link to your
competitors, and — when you pass your own domain as exclude_target — filters down to
the ones that do NOT link to you. That list is a ready-made outreach target list:
these sites already cover your market and already link out, so they are the realistic
wins. Pass 2 or more competitor domains in competitors; a domain linking to several
of them at once is the strongest candidate. Each row carries authority and spam score
so you can drop the junk before you write a single email.
Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| refresh | No | ||
| competitors | Yes | ||
| exclude_target | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true. The description usefully adds that the call consumes SEO add-on credits and that output rows carry authority and spam score, which the annotations do not convey. It does not explain what the 'destructive' flag refers to (credit consumption vs. data mutation), leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core definition, then usage mechanics, then the payoff and cost. Mostly efficient, though the outreach-pitch sentences ('realistic wins', 'before you write a single email') lean promotional rather than informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the cost/citation caveat is covered. The main gap is undocumented limit and refresh semantics for a 4-parameter tool with zero schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It meaningfully explains competitors (2+ domains required) and exclude_target (your own domain to filter against), but says nothing about limit or refresh, leaving half the parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific operation (link intersect) with a precise definition: domains linking to competitors, optionally filtered against your own domain. An agent can distinguish it from seo_backlink_list, seo_referring_networks, and seo_competitor_gap 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear invocation context (pass 2+ competitor domains; a domain linking to several is the strongest candidate) and explains the exclude_target use case. It does not, however, name alternative sibling tools or state when NOT to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_local_listingsSEO Local Directory ListingsADestructiveInspect
Local directory / citation audit (SEO Intelligence add-on). Finds a business's
listings on the major Turkish directories (Yandex Maps, Bulurum, Armut, Firmasec,
Yelp...) and reports how many SEPARATE records exist per directory, their ratings and
review counts, which ones are marked closed, and which directories have no listing at
all. Duplicate records are the usual reason a business rated 4.8 on Google still shows
a low score on the same results page — reviews are split across records. directories
is a comma-separated domain list (default: the main TR set). Billed PER DIRECTORY in
SEO add-on credits; top up -> Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| brand | Yes | ||
| refresh | No | ||
| language | No | tr | |
| location | No | ||
| directories | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile, and the description adds genuinely non-structured behavior: billing is PER DIRECTORY in SEO add-on credits and may require a top-up. It does not explain what `refresh` triggers or whether results are cached, but the cost model disclosure is valuable 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the diagnostic rationale, then the parameter and billing notes. Dense and largely waste-free, though the duplicate-record explanation sentence is longer than strictly needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no further explanation, and the description still summarizes the report contents. The remaining gap is the undocumented `refresh`, `city`, and `location` semantics for a six-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate across six parameters. It does explain `directories` well (comma-separated domain list, default main TR set) and hints at `language` via 'Turkish', but `brand`, `city`, `location`, and especially `refresh` are left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (local directory / citation audit) and then enumerates the concrete outputs: separate records per directory, ratings, review counts, closed flags, and missing presence. The duplicate-record rationale makes it unambiguous how this differs from siblings like seo_reviews or seo_geo_citations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context is given — it is an SEO Intelligence add-on focused on Turkish directories, and the duplicate-listing problem explains why an agent would reach for it. However, it never names an alternative tool or states an explicit when-not condition, so routing 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.
seo_paid_keywordsSEO Competitor Paid SearchADestructiveInspect
Competitor paid search (SEO Intelligence add-on). For any domain: how many keywords it bids on, estimated monthly Google Ads spend, the keyword list with search volume and CPC, THE ACTUAL AD HEADLINES AND DESCRIPTIONS it is running, and the landing pages those ads point at (grouped, highest demand first). This is competitor ad intelligence for search — what they pay for, what they say, and where they send the click. Use it before writing your own RSAs, and to find keywords a competitor pays for that you could win organically. Empty result means the domain showed no ads in THIS scan of that location/language, not that it never advertises. Costs SEO add-on credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | Yes | ||
| refresh | No | ||
| language | No | tr | |
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description usefully adds the credit-cost warning and the scan-scoped empty-result semantics, which are not in the annotations. However, annotations declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, yet the description frames the tool purely as passive intelligence gathering and never explains what side effect (e.g., a 'refresh' rescan invalidating cached data) makes it destructive. That omission on a non-read-only tool caps this at 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the highest-value fact (what data you get), then usage guidance, then the caveats. It is dense and mostly earns its length, though the capitalized ad-creative emphasis and the list of returned payloads run slightly long for what the output schema could carry.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so describing return payloads is a bonus rather than a requirement, and the credit-cost and empty-result caveats are genuinely helpful. But with 5 undocumented parameters and unexplained destructive behavior, the description leaves real gaps for a non-read-only, credit-consuming call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 5 parameters with no descriptions anywhere. The description only faintly hints at location/language ('THIS scan of that location/language') and never clarifies the required target, the limit default, or what refresh=true actually does. For a fully undocumented schema, the description does not compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise verb+resource — competitor paid-search keyword and ad intelligence for a domain — and enumerates the concrete payloads (bid keyword count, spend estimate, keyword list with volume/CPC, ad headlines/descriptions, landing pages). An agent can distinguish this from siblings like seo_ranked_keywords or competitor_ads 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance: 'before writing your own RSAs' and 'to find keywords a competitor pays for that you could win organically,' plus a strong caveat that an empty result means no ads in this scan, not that the domain never advertises. It stops short of naming which sibling tool to use when you want your own ranked keywords or organic gaps, so it doesn't reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_ranked_keywordsSEO Ranked KeywordsBDestructiveInspect
All ranked keywords for a domain (SEO Intelligence add-on). Every organic keyword a domain (yours or a competitor's) ranks for, with search volume and position — the full SEO footprint. Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | Yes | ||
| refresh | No | ||
| language | No | tr | |
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=true. The description adds useful non-annotation context: it is part of the SEO Intelligence add-on and consumes add-on credits. It does not explain pagination, the effect of the refresh flag, or result caps, so it adds value but leaves meaningful behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the core purpose before cost and add-on caveats. Minor redundancy between 'Every organic keyword a domain ranks for' and 'the full SEO footprint', but nothing wasteful enough to hurt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and annotations cover the safety profile. However, with five undocumented parameters at 0% schema coverage and no guidance on alternative SEO tools, the definition is only adequately complete for a query tool of this scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters (limit, target, refresh, language, location). The description only clarifies that the target is a domain; it says nothing about limit defaults, refresh semantics, or language/location filtering, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and scope: every organic keyword a given domain (own or competitor) ranks for, with search volume and position. The 'organic' qualifier implicitly separates it from siblings like seo_paid_keywords, but no sibling is named explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied ('the full SEO footprint') but there is no explicit when-to-use, when-not-to-use, or alternative routing guidance among the many SEO siblings (seo_keyword_research, seo_rank_history, keyword_report). The only concrete guidance is the credit-cost warning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_rank_historySEO Rank HistoryARead-onlyIdempotentInspect
Stored rank history — FREE, no credits. Reads back every position measurement this
account has already paid for: per keyword the first and latest position, the best ever
reached, the total change over the window and the full point series. Call this BEFORE
seo_rank_tracker when the question is "are we moving" rather than "where are we right
now" — the answer is already bought and stored. Leave target empty for every tracked
domain. days is the look-back window. Read-only, costs nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| target | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely non-structured context: the call is free/no-credit and only replays data already paid for, which affects whether an agent should prefer it over a fresh fetch. It does not mention auth or rate limits, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core value proposition and the free/no-credit framing, then the routing rule. Dense but every sentence carries information; the only mild padding is the rhetorical 'already bought and stored' clause, which still reinforces the usage point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations, an output schema covering return values, and zero required parameters, the description supplies what remains: cost model, defaulting behavior for `target`, and the window meaning of `days`. Only `limit` is left unexplained, a minor gap for a low-risk read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three parameters. The description compensates for two of them ('days is the look-back window', 'leave target empty for every tracked domain') but says nothing about `limit`, leaving one parameter undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (reads back) and resource (stored rank history measurements), then enumerates exactly what is returned: first/latest position, best ever, total change, full point series. It explicitly contrasts itself with the sibling seo_rank_tracker, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use rule ('Call this BEFORE seo_rank_tracker when the question is "are we moving" rather than "where are we right now"') naming the alternative tool and the condition that selects it. Adds a defaulting instruction ('Leave `target` empty for every tracked domain'), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_rank_trackerSEO Rank TrackerAInspect
Rank tracker (SEO Intelligence add-on). Measures a domain's LIVE Google position for
each keyword, stores every measurement, and reports the change since the previous run —
so the second call onwards you get movement, not just a number. With auto left on,
the keywords keep being re-measured once a day and the history builds by itself.
Returns per keyword: current position, previous position, change, the ranking URL, and
who holds the top spot. position: null with measured: true means it was checked and
is NOT in the scanned depth — that is a real answer, not missing data. depth is how
deep to look (20 default, up to 100); deeper scans cost proportionally more because the
provider bills per result. device: desktop or mobile — they rank differently.
Reading the stored history back is FREE: use seo_rank_history instead of re-measuring.
Costs SEO add-on credits per keyword; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| auto | No | ||
| depth | No | ||
| device | No | desktop | |
| target | Yes | ||
| keywords | Yes | ||
| language | No | tr | |
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false); the description adds real behavioral context beyond them — per-keyword credit cost, depth-proportional cost because the provider bills per result, the auto daily re-measurement loop, and the crucial `position: null` with `measured: true` semantics. No contradictions with the annotations, and the null-vs-missing distinction is exactly the kind of thing structured fields can't convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded, leading with what it does and the change-tracking payoff, then return fields, then the null-semantics caveat, then cost. Long but nearly every sentence adds operational value; the cost/top-up sentence is slightly promotional but still actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 7-parameter mutation-ish tool with an output schema present, the description covers the risky/ambiguous behavior (costs, auto mode, null semantics) and routes history reads elsewhere. Return-value explanation is redundant with the output schema but harmless; only language/location semantics are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It usefully explains the non-obvious parameters — `depth` (20 default, up to 100, cost implications), `device` (desktop/mobile rank differently), and `auto` (keeps re-measuring daily) — but says nothing about `language` (default 'tr'), `location` (default ''), `target`, or `keywords`. Roughly half the parameters are left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('measures a domain's LIVE Google position for each keyword, stores every measurement, and reports the change') and distinguishes itself from the sibling it names, seo_rank_history. An agent can tell this apart from seo_ranked_keywords and seo_geo_tracker without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative for a specific need: 'Reading the stored history back is FREE: use seo_rank_history instead of re-measuring.' It also implies the repeated-run use case for change tracking. However, it doesn't cover when to prefer other ranking-adjacent siblings (seo_geo_tracker, seo_ranked_keywords) or prerequisites for enabling the add-on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_rank_untrackSEO Stop Rank TrackingADestructiveInspect
Stops daily automatic re-measurement for tracked keywords. Leave keywords empty to
stop the whole domain. The stored history is KEPT by default so past movement stays
readable in seo_rank_history; pass delete_history: true only if the customer wants the
records gone for good. Free, costs no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| keywords | No | ||
| delete_history | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds crucial nuance: history is kept by default so past data remains readable, and records are only erased when delete_history is explicitly true. It also discloses the cost ('Free, costs no credits'), which is valuable behavioral 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero filler: the core action is front-loaded, followed by scope, the destructive default, and the cost note. Every sentence earns its place and nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, scope, destructive caveat, and cost, and an output schema exists so return values needn't be explained. The main gap is the undocumented required target parameter plus no explicit sibling routing, but for a simple 3-param tool the definition is otherwise sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry parameter meaning. It explains that an empty keywords array stops the whole domain and that delete_history=true permanently removes records, but it never describes the required target parameter, leaving one of three parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Stops daily automatic re-measurement for tracked keywords,' with scope control via the empty keywords parameter. It references seo_rank_history but does not explicitly differentiate itself from the start-tracking sibling (seo_rank_tracker), keeping it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational context: use this to stop recurring measurement, leave keywords empty for the whole domain, and only set delete_history true when records should be permanently removed. However, it does not explicitly name alternatives such as seo_rank_tracker or describe when not to use this tool, so it lacks exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_referring_networksSEO Referring IPs & NetworksADestructiveInspect
Referring IPs and subnets (SEO Intelligence add-on). Groups everyone who links to a
domain by the server they sit on. Why it matters: a natural link profile is spread over
many unrelated hosts, so when dozens of linking domains share one IP or one /24 subnet
they are almost certainly the same operator — a private blog network. Use it to judge
whether a domain's backlinks are genuinely independent before buying links or trusting
a competitor's numbers, and to document a negative-SEO attack. network_type: "ip"
(exact host) or "subnet" (/24 block — catches networks that spread across IPs).
Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | Yes | ||
| refresh | No | ||
| network_type | No | ip |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly=false, destructive=true, openWorld=true, idempotent=false). The description adds genuinely non-obvious behavior: that the call consumes paid SEO add-on credits and requires top-up. It does not explain result size, pagination, or why a 'read'-looking analysis is marked destructive, but the credit-cost disclosure is real added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what it does, then why it matters, then the parameter, then cost. Zero filler sentences, though the 'Why it matters' passage is slightly long for a tool description. Well structured and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers purpose, use cases, the key parameter variant, and credit cost. Only gaps are the undocumented limit/refresh parameters, which leaves the definition slightly incomplete for a 4-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It explains network_type well ('ip' = exact host, 'subnet' = /24 block that catches distributed networks) and implies target is a domain, but limit and refresh are never mentioned in either the schema or the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — groups linking domains by referring IP/subnet — and immediately distinguishes itself from generic backlink tools (seo_backlinks, seo_link_intersect) by framing the output as a private-blog-network signal. An agent can tell exactly what this returns 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use scenarios (before buying links, trusting competitor numbers, documenting negative-SEO attacks) tied to the analytical meaning of shared IPs. It stops short of naming alternatives or stating when NOT to use it, so it is strong but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_reviewsSEO Reviews & ReputationADestructiveInspect
Reviews & reputation (SEO Intelligence add-on). Ratings + recent reviews for a business: source 'google' (target = business name + city) or 'trustpilot' (target = domain). Reviews are gathered ASYNCHRONOUSLY — the first call may return {pending, task_id}; if so, call again with the SAME task_id in ~1 minute to get the results (no extra charge). Credits are charged once on the first call. Monitor your own or a competitor's reputation. Top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | ||
| target | Yes | ||
| refresh | No | ||
| task_id | No | ||
| language | No | tr | |
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial non-obvious behavior beyond the annotations: asynchronous gathering, a possible {pending, task_id} first response, re-calling with the SAME task_id after ~1 minute, and credits charged only once. It does not explain why the annotations mark the tool destructive/non-idempotent, nor what 'refresh' does to credit consumption, so the disclosure is strong 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense, telegraphic prose that front-loads what the tool returns and the source/target pairing before the async caveat. Every sentence carries information; the style is terse rather than padded, though the fragment structure slightly taxes readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the async workflow and billing model are covered well. But with 0% schema coverage on a 6-parameter tool, the undocumented refresh/language/location parameters leave real gaps an agent cannot resolve from any source.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, so the description carries the full burden. It clarifies source (google/trustpilot), the source-dependent meaning of target, and task_id's polling role, but leaves refresh, language, and location entirely undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('ratings + recent reviews for a business') and enumerates the two sources with their target formats ('google' = business name + city, 'trustpilot' = domain). It does not, however, explicitly distinguish itself from the closely-named sibling gbp_reviews, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ('monitor your own or a competitor's reputation') and the add-on prerequisite ('SEO Intelligence add-on', 'Top up → Add-ons'). It stops short of naming when to prefer the sibling gbp_reviews over this tool, so alternative selection is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_serp_analysisSEO SERP AnalysisBDestructiveInspect
Live SERP analysis (SEO Intelligence add-on). For a keyword, returns the current Google top results — who ranks, their titles/domains/URLs, ratings, and which results are paid ads. Use it for organic competitor analysis AND ad-competition intel. Costs SEO add-on credits.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| keyword | Yes | ||
| refresh | No | ||
| language | No | tr | |
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description frames the tool as a read/report operation that returns SERP data, but annotations declare readOnlyHint=false and destructiveHint=true. Because this creates a direct behavioral conflict and the description does not explain any destructive effect, it contradicts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then return contents, usage, and cost. It is short and every sentence adds useful information without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description does cover output and cost. However, with 0% parameter description coverage and an unresolved annotation contradiction, it is not complete enough for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters, and the description only mentions the keyword parameter. It gives no meaning for depth, refresh, language, or location, leaving most invocation semantics undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: live SERP analysis for a keyword, returning Google top results with ranking, titles/domains/URLs, ratings, and paid-ad flags. It does not explicitly differentiate from the many SEO siblings such as seo_paid_keywords or seo_rank_tracker, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: organic competitor analysis and ad-competition intel, plus a credit-cost warning. It does not name alternatives or when-not-to-use conditions, so it is not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_site_crawlSEO Site CrawlADestructiveInspect
Site-WIDE technical crawl (SEO Intelligence add-on, ASYNC — not a single page). Call once
WITHOUT task_id to START the crawl → returns a task_id; then call AGAIN with that task_id after
~30-90s to get the summary: pages crawled, average on-page score, and issue counts (broken
pages / duplicate titles / thin content / missing H1, etc.) with the first 5 URLs of each issue,
plus which pages link to each broken URL (broken_link_sources). To get the FULL URL list of
one issue, call again with the same task_id and issue = the issue name from the summary
(e.g. issue="no_h1_tag"); paged with limit/offset. Use this when the user wants a whole-site
audit, not just one URL. Costs SEO add-on credits on the START call; every task_id fetch is
free. Top up in the panel → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| issue | No | ||
| limit | No | ||
| domain | Yes | ||
| offset | No | ||
| refresh | No | ||
| task_id | No | ||
| max_pages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly=false, destructive=true, openWorld=true) but the description adds genuinely non-redundant behavior: async execution, the 30-90s wait, credit consumption on the START call only, free task_id fetches, and where to top up. This is exactly the extra context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then the workflow in call order, then cost. Dense but almost every clause carries a fact the agent needs; the long parenthetical issue list is slightly heavy but useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present it correctly avoids restating return shapes, yet still names what the summary contains (pages crawled, scores, issue counts, broken_link_sources). Complete for the workflow; the only gap is the unaddressed refresh/max_pages semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the param burden — and it does explain the three most important ones: task_id (start vs fetch mode), issue (paged full-URL drill-down), and limit/offset (paging). It leaves refresh and max_pages undocumented, so it compensates well but not completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Site-WIDE technical crawl') and immediately scopes it against the obvious alternative class ('not a single page'), which separates it from single-URL siblings like instant_audit. The async two-phase nature is stated up front so the agent knows what it is invoking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('when the user wants a whole-site audit, not just one URL') and then walks through the exact call sequence: start without task_id, re-call with task_id after ~30-90s, then re-call with issue for full URL lists. Nothing about invocation order 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.
seo_site_technologiesSEO Site TechnologiesBDestructiveInspect
Website technology + contact lookup (SEO Intelligence add-on). The tech stack a domain uses (CMS, analytics, ad pixels…), its authority rank, and public contact info (email/phone/social) — competitive and sales intelligence. Costs SEO add-on credits.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a genuinely useful trait beyond the annotations: 'Costs SEO add-on credits,' which explains the non-readOnly profile. But it never addresses destructiveHint=true or idempotentHint=false — a 'lookup' being flagged destructive is surprising and the description should reconcile that. With annotations already carrying the safety profile the bar is lower, so a 3 fits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with the purpose front-loaded, followed by the concrete data returned and then the cost caveat. Nothing is wasted, though the em-dash clause reads slightly as a marketing tagline rather than operational guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is unnecessary, and the description correctly summarizes what comes back (tech stack, rank, contact info). What it omits is any parameter guidance for a 2-parameter tool with 0% schema coverage, which is the piece an agent most needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither of the two parameters ('target', 'refresh') is mentioned anywhere in the prose. The description gives no hint about the expected domain format, whether 'target' accepts URLs or bare domains, or what 'refresh' does versus a cached result. This is the tool's largest gap and the description does not compensate for the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource ('Website technology + contact lookup') and enumerates its outputs: tech stack, authority rank, and public contact info. It distinguishes itself from audit-oriented siblings like seo_technical_audit by framing itself as competitive/sales intelligence rather than a diagnostic. It stops just short of a 5 because the phrasing is nominal ('lookup') rather than an explicit verb like 'Retrieve the technology stack and contacts for a domain.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It hints at intent with 'competitive and sales intelligence' and notes it is an 'SEO Intelligence add-on,' which implies when it is worth the cost. However, it names no alternatives and gives no exclusions (e.g., when to prefer seo_audit or seo_full_analysis), so the agent must infer the routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_technical_auditSEO Technical AuditBDestructiveInspect
Technical SEO audit of a page (SEO Intelligence add-on). Returns an on-page score, Core Web Vitals, and a curated list of real technical issues (missing H1, broken links, render-blocking resources, title problems, missing alt text…). Use it as a quality gate when building or fixing a website. Costs SEO add-on credits; top up → Add-ons.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations supply the safety profile (readOnlyHint=false, destructiveHint=true, openWorldHint=true, idempotentHint=false), and the description adds genuinely new context: the call consumes SEO add-on credits and how to top up. It does not explain why the tool carries destructiveHint=true (credit burn vs. data mutation) or what 'refresh' does, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, front-loaded with what the tool does and its outputs before the usage hint and cost caveat. Nothing is redundant, though the parenthetical output list borders on filler given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema means return values need not be spelled out, and the credit note is a useful operational detail. But for a paid, page-level audit with an unexplained 'refresh' flag, the description omits parameter semantics, caching/refresh behavior, and any error or scope limits a caller would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema has two parameters (url required, refresh boolean with default false). The description never mentions either parameter, gives no URL format expectations (scheme, live vs. staging), and does not clarify when refresh should be set. With this much undocumented surface, the description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Technical SEO audit of a page') and enumerates the concrete outputs (on-page score, Core Web Vitals, curated issue list). It is page-scoped, which implicitly separates it from site-wide siblings like seo_site_crawl, but it never names an alternative such as seo_audit or instant_audit, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it as a quality gate when building or fixing a website' gives a usage context, and the credit-cost warning implies cost-aware invocation. But it never states when NOT to use it versus the many overlapping audit siblings (seo_audit, instant_audit, seo_full_analysis, core_web_vitals), so routing remains guesswork.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ad_group_targetingSet Ad Group TargetingADestructiveInspect
Sets geographic and language targeting on an AD GROUP — the only place Demand Gen keeps them.
Demand Gen campaigns reject location and language at campaign level: Google keeps both on the ad group instead (measured on a live campaign). That left a Demand Gen campaign impossible to limit geographically through Opus, so it went live on Google's default of every country and spent the budget outside the target market. This tool closes that: pass the ad group and the countries, and it writes the criteria where Google actually reads them.
locations: comma-separated names or geo IDs ('Germany' or '2276' or 'Almanya, Fransa'). negative_locations: places to exclude. languages: codes (tr, en, de) or numeric IDs. mode='add' keeps what is there and adds; mode='replace' removes the existing criteria of the dimensions you pass and writes yours in the SAME request, so the ad group is never left untargeted. confirm=false previews the resolved locations and what would be removed. Read the current state with get_campaign_targeting(ad_group_id=...).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | add | |
| confirm | No | ||
| country | No | TR | |
| languages | No | ||
| locations | No | ||
| ad_group_id | Yes | ||
| customer_id | Yes | ||
| negative_locations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and non-idempotent behavior. The description adds crucial operational context: mode='replace' removes existing criteria for the dimensions passed and writes new ones in the same request, and confirm=false previews resolved locations and removals before mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and behavior, but it includes a lengthy rationale anecdote about a live campaign failure. That context is useful but not strictly necessary for invocation, so it is slightly verbose rather than maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, destructive 8-parameter tool with an output schema and no schema descriptions, the description is strong: it covers mutation semantics, preview mode, and read-before-write guidance. It could be more complete by clarifying the country parameter and required IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description does substantial work: it explains locations, negative_locations, languages, mode, and confirm. It leaves country, customer_id, and ad_group_id largely implicit, though the required IDs are self-evident from the schema names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: sets geographic and language targeting on an ad group. It distinguishes itself from campaign-level targeting by explaining that Demand Gen rejects location and language at campaign level, so an agent can tell it apart from siblings like set_campaign_targeting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains exactly when to use this tool: for Demand Gen ad groups, because campaign-level location and language targeting is rejected. It also names the read alternative, get_campaign_targeting(ad_group_id=...), for checking current state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ad_scheduleSet Ad ScheduleADestructiveInspect
Sets a campaign's ad schedule (day/hour) — 'run only during business hours', or 'bid 50% less at night'. schedule: comma-separated 'DAY HH:MM-HH:MM' blocks, e.g. 'MONDAY 09:00-18:00, TUESDAY 09:00-18:00'. Minutes must be 00/15/30/45. Days: MONDAY..SUNDAY. A range crossing midnight cannot be a single block — split it: 'SATURDAY 22:00-24:00, SUNDAY 00:00-02:00'.
mode='add' (default) adds the blocks alongside the campaign's existing ones — it can only WIDEN a schedule, and Google rejects blocks that overlap existing ones. mode='replace' first DELETES every existing schedule block of the campaign and writes only the ones given here (remove+create in a single request, so the campaign never briefly falls back to 24/7) — this is the way to shrink/reshape an existing schedule. Read the current state with get_ad_schedule first.
Bid modifier (percentage, like Microsoft's bid_adjustment): bid_modifier_pct applies to every block, or put it per block as a trailing percentage — 'SATURDAY 22:00-24:00 -50%'. Range -90%..+900%; -100% is not possible — to stop serving in an hour range, leave it OUT of a mode='replace' schedule. Fully automated bidding (tCPA/tROAS/Maximize conversions) ACCEPTS but IGNORES bid modifiers.
Once a schedule exists, the campaign runs ONLY during those hours. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | add | |
| confirm | No | ||
| schedule | Yes | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| bid_modifier_pct | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: replace semantics are remove+create in one request so the campaign never briefly falls back to 24/7, add can only widen, midnight ranges must be split, -100% is impossible, automated bidding accepts but ignores modifiers, and confirm=false triggers a dry-run. This is the destructive/mutation context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then organized into schedule-format, mode, and bid-modifier paragraphs. Dense and largely justified, though the block is long and some clauses could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, complex formatting rules, mutation semantics, and an existing output schema, everything an agent needs to invoke correctly is covered. Return values need not be explained because the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description fully compensates: it specifies the schedule block syntax and minute granularity, per-block vs global bid_modifier_pct with range -90%..+900%, and the default/dry-run behavior of confirm. Only customer_id/campaign_id are left implicit, which is reasonable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (sets a campaign's ad schedule) with concrete examples ('run only during business hours'). It is clearly distinguishable from the read-only sibling get_ad_schedule and from add_microsoft_ad_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes between mode='add' (widen only) and mode='replace' (shrink/reshape), states that Google rejects overlapping blocks in 'add', and instructs the agent to read current state with get_ad_schedule first. When/when-not/alternative are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_call_reportingCall Reporting SettingsDestructiveInspect
Turns account-level CALL REPORTING on/off — the prerequisite for Google to track phone calls from ads as conversions. call_reporting: 'true'/'false' (show a Google forwarding number + report calls); call_conversion: 'true'/'false' (count qualifying calls as conversions). Provide at least one. To switch calls off send call_reporting='false' alone; call_conversion is not sent alongside it because Google rejects that pair and it has no effect while reporting is off. call_conversion_action_id: WHICH conversion action the calls are attributed to (id from list_conversion_actions); send 'default' to clear it back to Google's built-in action. Leave empty to keep the current one. A fresh account points at an internal placeholder that cannot be configured or reported on by name, so binding your own AD_CALL action is what makes call conversions readable. Pair with set_conversion_settings(phone_call_duration=…) to set the minimum call length. NOTE: Google forwarding numbers are only available in supported countries; enabling has no effect where unavailable.
Called with NEITHER value it READS the current state instead of failing — use that before you switch anything on, and before you undo a change, because there is otherwise no way to know what the setting was. The same fields also appear under get_conversion_settings > account > call_reporting. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| customer_id | Yes | ||
| call_reporting | No | ||
| call_conversion | No | ||
| call_conversion_action_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
set_campaign_budgetSet Campaign BudgetADestructiveInspect
Sets a campaign's daily budget. Safety limits: a single increase above +50% is blocked, the TOTAL increase within 24h may not exceed +100% of the budget at the start of that window, and a single cut deeper than -80% is blocked — pause the campaign instead.
There is also an absolute floor, about 5 USD per day converted into the account's currency, because a budget pulled down to near zero stops delivery while the campaign still reads as active in the interface — an invisible way to kill a campaign. A small local campaign can legitimately sit below that floor, so allow_low_budget=true clears it: the flag makes the decision explicit rather than accidental. Say plainly that delivery may be thin or stop at that level, and check the bid — a daily budget below one click's worth of max CPC buys nothing. Everything else (the increase caps, the -80% rule) still applies. If confirm=false, returns a dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| daily_amount | Yes | ||
| allow_low_budget | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: concrete safety caps (+50% single increase, +100% per 24h window, -80% single cut), the absolute ~5 USD floor and why it exists, the dry-run preview path, and the caveat that sub-floor budgets may stop delivery. Annotations only declare destructive/non-idempotent/not-read-only; the description explains the actual guardrails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and is information-dense, with each paragraph adding a distinct rule or flag. It runs long, and sentences like the instruction to "say plainly that delivery may be thin" read as narrative filler, but nothing is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with annotations and an output schema, the description covers everything an agent needs: mutation semantics, safety limits, the dry-run path, and the floor exception. No return-value explanation is needed because an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does: confirm is defined as a dry-run switch, allow_low_budget is defined as the floor-clearing flag, and daily_amount semantics are explained via the increase caps and floor. customer_id and campaign_id are left implicit, but they are self-evident identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: "Sets a campaign's daily budget." This is clear, but it never states which ad platform the tool targets, and sibling tools like update_microsoft_campaign_budget and update_tiktok_campaign_budget occupy similar budget-setting territory. An agent can infer from customer_id/campaign_id that this is the generic/Google Ads path, but the definition does not explicitly differentiate it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use and when-not guidance: cuts deeper than -80% should be replaced by pausing the campaign, allow_low_budget=true is the escape hatch for small local campaigns, and confirm=false triggers a dry-run instead of a live change. Alternatives and conditions are named outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_campaign_targetingSet Campaign TargetingADestructiveInspect
Sets geographic and language targeting on a campaign. locations: comma-separated location names or geo IDs (e.g. 'Türkiye' or 'İstanbul, Ankara' or '2792'). negative_locations: locations to exclude. languages: comma-separated language codes (tr, en, de...) or numeric IDs. mode='add' (default) KEEPS the campaign's existing targeting and only adds to it — targeting Ankara while Türkiye is still targeted does NOT narrow reach, Google takes the union. mode='replace' overwrites: every existing criterion of the dimensions you pass (positive locations if you pass locations, exclusions if you pass negative_locations, languages if you pass languages) is removed and replaced with your list, in a single request so the campaign is never left untargeted. Use replace to go from 'all of Türkiye' to 'only Ankara'. Other dimensions are untouched. A campaign without targeting targets the entire world. confirm=false → preview of the resolved locations + what would be removed.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | add | |
| confirm | No | ||
| country | No | TR | |
| languages | No | ||
| locations | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| negative_locations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint annotation: it discloses that add-mode takes the union rather than narrowing reach, that replace removes and replaces only the dimensions you pass, that replacement happens in a single request so the campaign is never left untargeted, that other dimensions are untouched, that an untargeted campaign targets the whole world, and that confirm=false yields a preview. This is exactly the behavioral context an agent needs for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then organizes the rest around named parameters with concrete examples rather than boilerplate. It is long but dense and every clause adds operative detail; the only mild cost is length for a single-purpose tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter destructive write with an output schema present (so return values need no explanation), the description covers the risky semantics thoroughly. The remaining hole is the undocumented country parameter and the required IDs, which the schema names but never explains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden, and it does document locations (with formats/examples), negative_locations, languages, mode semantics, and confirm behavior. It omits the country parameter's role and only implicitly covers customer_id/campaign_id, so a small gap remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Sets) plus resource (geographic and language targeting on a campaign), and the surrounding prose makes clear it is distinct from read siblings like get_campaign_targeting and from set_ad_group_targeting. An agent can identify the operation immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains mode='add' vs mode='replace' semantics and gives a concrete selection case ('Use replace to go from all of Türkiye to only Ankara'), which is the key decision for this tool. It does not explicitly compare against sibling tools, but for the core mode decision the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_conversion_settingsConversion Value/Count SettingsADestructiveInspect
Edits a conversion action's VALUE/COUNTING settings — only the fields you provide change: default_value (+ default_currency_code, e.g. 'TRY'), always_use_default_value ('true'/'false'), counting_type ('ONE_PER_CLICK' | 'MANY_PER_CLICK'), click_lookback_days, view_lookback_days, phone_call_duration (min. seconds a call must last to count — only for call conversion actions, e.g. 30). NOTE: pausing/removing a conversion is disabled in the API — do it in the panel. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| customer_id | Yes | ||
| counting_type | No | ||
| default_value | No | ||
| view_lookback_days | No | ||
| click_lookback_days | No | ||
| phone_call_duration | No | ||
| conversion_action_id | Yes | ||
| default_currency_code | No | ||
| always_use_default_value | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds genuine context beyond that: partial-update behavior, the confirm=false dry-run switch, and the API-level restriction on pausing/removing. It does not state permissions, reversibility of a value change, or audit implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verb and scope, then enumerates parameters in a single dense but scannable sentence with a trailing NOTE and dry-run hint. Slightly long, but nearly every clause conveys a value, example, or constraint that would otherwise be missing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-param mutation tool with an output schema present, the description supplies the field semantics, value formats, dry-run mechanism, and the pause/remove exclusion. Return values are correctly left to the output schema; only permission/auth requirements are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage across 10 params, the description carries the full burden and mostly succeeds: it defines default_value + currency example, the string 'true'/'false' for always_use_default_value, the counting_type enum, both lookback params, the phone_call_duration unit and call-only restriction, and confirm. Only the two required ID params are left undetailed, which are self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Edits') plus a precisely scoped resource ('a conversion action's VALUE/COUNTING settings'), which plausibly separates it from broader siblings like update_conversion_action or manage_conversion_actions. It never names those siblings explicitly, so differentiation requires inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: partial-update semantics ('only the fields you provide change') and a when-not note that pausing/removing is disabled in the API and must be done in the panel. No alternative tools are named, so routing between it and update_conversion_action is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_microsoft_bid_strategyMicrosoft Bid StrategyADestructiveInspect
Sets a campaign's bid strategy. strategy: ManualCpc | EnhancedCpc | MaxClicks (optional max_cpc ceiling) | MaxConversions | TargetCpa (target_cpa REQUIRED) | MaxConversionValue (optional target_roas) | TargetRoas (target_roas REQUIRED). target_roas is a PERCENTAGE: pass 350 for 350%, or 3.5 and it is converted. The four conversion-based strategies need a conversion goal in the account first (list_microsoft_uet_tags → create_microsoft_conversion_goal). confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| max_cpc | No | ||
| strategy | Yes | ||
| account_id | Yes | ||
| target_cpa | No | ||
| campaign_id | Yes | ||
| customer_id | No | ||
| target_roas | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 partly covered, but the description adds non-obvious behavior: the confirm=false preview / confirm=true apply pattern (an important safety gate for a destructive tool), required preconditions for conversion-based strategies, and target_roas percentage normalization. It does not explain reversibility of the change or whether an existing strategy is overwritten, but it goes meaningfully 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is dense but front-loaded: the core action comes first, followed by the strategy enumeration, the tricky unit rule, the prerequisite, and the confirm semantics. Every clause earns its place, though the run-on strategy list and the parenthetical conditions make it slightly harder to scan than an ideal definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter destructive mutation tool, it covers the conditional requirements of the key parameters, the conversion-goal prerequisite, and the preview/apply gate, and an output schema exists so return values need not be described. It leaves out what happens to the prior strategy and any permission requirements, so it is strong but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description has to carry the parameter burden and it does: it defines the allowed strategy values, the conditional requirement of target_cpa and target_roas per strategy, the optionality and meaning of max_cpc (ceiling for MaxClicks), and the non-trivial unit convention for target_roas (350 or 3.5 both meaning 350%). This is exactly the value-add the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Sets a campaign's bid strategy') and then enumerates exactly which strategy values are accepted, with a per-strategy compatibility map (max_cpc only for MaxClicks, target_cpa required for TargetCpa, target_roas for TargetRoas). This distinguishes it from siblings like manage_bidding_strategies and manage_portfolio_bidding_strategy, which operate at different scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the prerequisite sequence for the four conversion-based strategies (list_microsoft_uet_tags → create_microsoft_conversion_goal), which is actionable when-to-use guidance, and explains confirm=false preview vs confirm=true apply. It does not name the alternative sibling tools (manage_bidding_strategies, manage_portfolio_bidding_strategy) or say when to use those instead, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_block_pathsBlock Website PathsInspect
Closes paths of the hosting website to the public: matching requests get HTTP 404 at the edge, so the files cannot be downloaded even though they stay on the server. Use it for build/source folders a static site generator leaves in the web root (for example /_build/, /_i18n/, /_blog/), backup files (*.bak) or a single private file. robots.txt does not do this (it only asks crawlers not to visit) and site_redirects cannot either (it matches exact paths). mode='list' shows the current rules; 'add' appends; 'remove' deletes the given patterns; 'replace' overwrites the whole list. paths is one pattern per line:
/_build/ a folder and everything under it
/eski/rapor.pdf one file
.bak every file with this extension
The site root, /* and page extensions (.html, *.htm) are refused so the site cannot be taken offline by mistake; up to 50 patterns per site. Before blocking a folder make sure the pages do not load files from it (check with site_read_url), otherwise those pages break. confirm=false previews, confirm=true applies; live within seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | list | |
| site | No | ||
| paths | No | ||
| server | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
site_command_statusBackground Command StatusARead-onlyIdempotentInspect
Reads a background command started by site_run_command(background=true): whether it is still running, what it has printed so far, and the exit code once it ends. job = the id that call returned. Call it again after a while for long installs; the output is the tail of the job's log, so a huge npm log does not flood the conversation. Read-only: it never starts or stops anything.
| Name | Required | Description | Default |
|---|---|---|---|
| job | Yes | ||
| site | No | ||
| server | No | ||
| tail_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, but the description adds genuinely new behavior: the output is only the tail of the job's log, and it reports the exit code once the job ends. It does not disclose the tail truncation default or any limits on how long jobs are retained, so it stops 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, all front-loaded with the essential linkage to site_run_command before the polling and log-tail rationale. Every sentence adds distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a status-polling tool with an output schema and full annotation coverage, the description supplies the origin of the job id, the polling cadence, the log-tail behavior, and the safety profile. 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.
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 burden, and it explains only the required 'job' parameter (the id returned by site_run_command) and implicitly the tail concept. The 'site', 'server', and 'tail_lines' parameters are undocumented anywhere, leaving a real gap that a full 4-5 would have closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (reads) and resource (a background command started by site_run_command), and enumerates the three things it returns: running state, printed output, and exit code. It is clearly distinguished from its sibling site_run_command, which starts commands rather than reporting on them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly ties use to site_run_command(background=true) and gives the polling condition ('Call it again after a while for long installs'), plus the reason to prefer it over raw log access (no conversation flooding). No ambiguity about when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_csp_reportsSite CSP Violation ReportsARead-onlyIdempotentInspect
Reads first-party Content-Security-Policy violation reports collected for one of the user's managed sites. Returns grouped directives, blocked origins, counts and example pages. This public OpenAI operation is read-only and cannot clear stored reports.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| limit | No | ||
| server | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description is not the sole source of the safety profile. It does add value beyond them by stating that it 'cannot clear stored reports' (routing the agent elsewhere for deletion) and by noting the 'first-party' scope of the data collected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose before the return contents and the behavioral caveat; each sentence carries information. The phrase 'This public OpenAI operation' is mild filler, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be enumerated, and annotations cover the read-only/idempotent profile. The main remaining gap is that the three undocumented parameters receive no elaboration, which for a zero-coverage schema leaves the agent guessing about limit and server.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema supplies no meaning for site, limit, or server. The description only loosely gestures at the site parameter ('one of the user's managed sites') and says nothing about limit or server, leaving the description unable to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Reads) and resource (first-party Content-Security-Policy violation reports) scoped to 'one of the user's managed sites', plus the return shape (grouped directives, blocked origins, counts, example pages). This cleanly separates it from ad-report siblings like get_report or client_report, so an agent can identify 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrasing 'reports collected for one of the user's managed sites' – there is no explicit when-to-use, no when-not-to-use, and no named alternative for related tasks such as clearing or listing reports. Adequate context but guidance must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_db_backupBack Up Website DatabaseADestructiveInspect
Takes a consistent backup of the website's database and stores it on the server under /data/backups. Uses a transaction-consistent dump, so the site keeps working while it runs and no table is locked. Leave database empty to back up everything. The reply lists the backups that exist afterwards, newest first — feed one of those file names to site_db_restore. A nightly automatic backup already runs; this tool is for taking one right before a risky change.
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | ||
| database | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=true, but the description adds substantial beyond-annotation behavior: the dump is transaction-consistent, no tables are locked, the site stays online during the run, the storage path, and the ordering of the returned list. That is exactly the operating detail an agent needs before mutating server state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and four tight sentences, each carrying distinct information. Minor redundancy between 'consistent backup' and 'transaction-consistent dump' costs it the top mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be spelled out, yet the description still characterizes the reply's ordering. Combined with the when-to-use guidance, only the undocumented `server` parameter leaves a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load; it usefully explains that an empty `database` means back up everything, but it says nothing about the `server` parameter (which server, default behavior, or how to discover names). Partial compensation for a two-parameter gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('takes a consistent backup of the website's database') plus where it lands ('/data/backups'), and clearly distinguishes itself from site_db_restore and site_restore by naming the restore path as the consumer of its output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly sets the usage window: 'A nightly automatic backup already runs; this tool is for taking one right before a risky change.' It also gives the alternative route (feed the returned file name to site_db_restore), so the agent knows both when to call it and what to do next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_db_restoreRestore Website DatabaseADestructiveInspect
Restores the website's database from a backup file taken by site_db_backup (found under /data/backups). Requires confirm=true; without it you get a preview and nothing runs. THIS OVERWRITES CURRENT DATA — rows written after that backup are lost, so take a fresh site_db_backup first if the current state matters at all. Pass only the file name, not a path.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| server | No | ||
| confirm | No | ||
| database | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds the concrete consequence beyond them: current data is overwritten and rows written after the backup are lost, plus the dry-run gate on confirm. That is exactly the 'what gets destroyed' context annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, zero filler. The confirm gate, the destruction warning, and the file-name constraint are all front-loaded in priority order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the destructive/mutation profile, dry-run behavior, and input format are covered. The remaining gap is the unexplained 'server' and 'database' parameters, which the agent must infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It clarifies 'file' (file name only, not a path) and 'confirm' (must be true or you get a preview), but says nothing about the 'server' or 'database' parameters, leaving half the surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('restores the website's database') and names the sibling tool that produces the input ('site_db_backup'), plus where those backups live. An agent can distinguish it from site_restore, site_rebuild, and site_db_backup 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit preconditions and alternatives: requires confirm=true, otherwise a preview runs and nothing executes; take a fresh site_db_backup first if current state matters. Both the when-to-use and the when-not (preview) paths are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_design_guideSite Design GuideARead-onlyIdempotentInspect
Returns the web-design playbook for building sites on the hosting server: the design-system component classes available, how to recolor a site per brand, content/writing rules, image handling, and the anti-'AI-generated-template' pitfalls to avoid.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description usefully characterizes the returned material (a playbook, not live data), but adds nothing about size, format, or staleness beyond what annotations already carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and object, and the trailing list of covered topics is dense and informative rather than padded. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is unnecessary, and a zero-param read-only knowledge tool needs little more than scope. It is essentially complete, with only the optional addition of when-to-read guidance missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-param tool is 4. It neither misleads nor needs to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns') and resource ('the web-design playbook for building sites on the hosting server'), then enumerates the concrete contents (component classes, recoloring, content rules, image handling, pitfalls). This makes it clearly distinguishable from the many action-oriented siblings, though it never names a sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'for building sites' suggests reading it before site-construction tools like scaffold_site or wordpress_page_design, but there is no explicit when/when-not statement or routing to an alternative. The SEO counterpart (site_seo_guide) is not referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_dns_recordsDomain DNS RecordsDestructiveInspect
Lists and edits DNS records of a domain whose DNS is hosted on Opus Growth (a domain of the user's own hosting server). Use it for verification and mail records: Google Search Console / Bing / Meta domain verification TXT, SPF/DKIM/DMARC TXT, or a CNAME for a third-party service. mode='list' shows the records (records that publish the site are shown as system records without their value); mode='add' creates a TXT or CNAME record (name is the host: '@' or empty for the domain itself, 'www', '_dmarc', 'selector._domainkey'...; value is the record content); mode='delete' removes a TXT or CNAME record by record_id from the list. MX/NS records and the records that publish the website are protected and cannot be changed here (the panel's DNS screen handles mail records with an extra confirmation). confirm=false previews, confirm=true applies; DNS changes are usually visible within a few minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | list | |
| name | No | ||
| type | No | TXT | |
| value | No | ||
| domain | Yes | ||
| confirm | No | ||
| record_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
site_edit_fileEdit Website FileADestructiveInspect
Makes a SMALL, surgical edit to an existing text file by replacing an exact string — WITHOUT
resending the whole file. Use this for iterative tweaks (a heading, a Tailwind class, a price):
it saves a large amount of tokens vs site_write_file, which must resend the entire file every time.
old_string must match the file EXACTLY and be UNIQUE (include enough surrounding context),
unless replace_all=true. For a brand-new file use site_write_file instead.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| site | No | ||
| server | No | ||
| new_string | Yes | ||
| old_string | Yes | ||
| replace_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the mutation risk is covered. The description adds real behavioral constraints beyond that: old_string must match EXACTLY and be UNIQUE unless replace_all=true. It does not, however, state what happens on no-match or multiple-match failure, keeping it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Densely front-loaded: the core action and its token advantage come first, then the matching constraint, then the fallback tool. Every sentence carries meaning and none is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers purpose, alternative, and the key matching constraint; only the undefined site/server/path parameters and failure-mode behavior are gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, so the description must compensate. It explains old_string (exact, unique match) and replace_all (multi-replace) well, but leaves path, site, and server entirely undocumented. Partial compensation justifies a mid score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Makes a SMALL, surgical edit to an existing text file by replacing an exact string') and explicitly names the sibling it is not (site_write_file). An agent can distinguish it from the write tool without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('iterative tweaks: a heading, a Tailwind class, a price') and when-not ('For a brand-new file use site_write_file instead'), plus the practical rationale (token savings). Nothing 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.
site_fetchFetch File To SiteADestructiveInspect
Downloads a file from a public URL DIRECTLY onto the hosting site, and RESIZES or CONVERTS images on the way in (resize, webp, avif, jpg, quality) — this is the only image processing available for a hosting server, because the container itself has no cwebp, no ImageMagick and no sharp. The CORE fetches the bytes (full internet + memory) and writes them to path under /data/site. Use this for the user's OWN images/logos/PDFs (any domain) or stock photos, INSTEAD of base64-encoding or chunking large files through chat (which wastes memory). Also works around the sandbox's limited outbound DNS (shell curl in site_run_command only reaches whitelisted hosts like images.unsplash.com; site_fetch reaches ANY host). path e.g. 'assets/img/hero.webp'. Binary-safe, up to 20MB per file.
IMAGE PROCESSING happens here, before the file lands: resize accepts '1200x' (width, height follows the aspect ratio), 'x800' (height), '1200x800' (fit inside that box, never cropped or stretched) or '50%'; image_format converts to 'webp', 'jpg', 'png' or 'avif'; quality is 1-100 for the lossy formats (default 82). The hosting container has no cwebp, no ImageMagick and no sharp, so this is how a photo becomes a right-sized WebP — download a 4000px original and write a 1200px WebP in one call. Images are never enlarged past their real size, because upscaling only adds bytes. Not for SVG: an SVG is written through untouched (it is already scalable), and it cannot be rasterised into a PNG favicon here — for that install sharp with site_run_command(background=true).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| path | Yes | ||
| site | No | ||
| resize | No | ||
| server | No | ||
| quality | No | ||
| image_format | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write/destructive/open-world behavior, and the description adds substantial context: 20MB per-file limit, binary-safe handling, no upscaling, image processing order before landing, absent container tooling, SVG pass-through, and inability to rasterise SVG into PNG here. It does not state overwrite semantics or auth/permission requirements, so it stops short of full behavioral coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and the length is largely justified by the tool's complexity. It still repeats the hosting container's lack of cwebp, ImageMagick, and sharp twice, and restates that image processing happens here, so it could be tightened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write-heavy 7-parameter tool with an output schema and many siblings, the description covers the key usage, image-processing options, limits, DNS workaround, and SVG exception. The main missing pieces are the meanings of the site and server parameters and explicit overwrite behavior, but output schema handles return values and annotations cover the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains url (public URL), path with an example, resize syntax such as '1200x', 'x800', '1200x800', '50%', image_format values, and quality range/default. However, it completely omits the site and server parameters, and its quality default of 82 differs from the schema default of 0, leaving real gaps for a 7-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: downloads a file from a public URL directly onto the hosting site and resizes/converts images inline. It clearly distinguishes itself from siblings like fetch, site_write_file, upload_image, and wordpress_upload_media by explaining it is the only image-processing path on the hosting container and should replace base64/chunking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use cases (user's own images/logos/PDFs, any domain, stock photos), alternatives it replaces (base64 encoding or chunking through chat), a sandbox workaround (site_run_command curl only reaches whitelisted hosts while site_fetch reaches any host), and an explicit exclusion (not for SVG rasterisation, with the alternative of installing sharp via site_run_command).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_form_submissionsSite Contact-Form SubmissionsARead-onlyIdempotentInspect
Lists the CONTACT FORM SUBMISSIONS (leads) that came in from the user's hosted static site — every message the form relay received, whether or not the e-mail went out.
This is the record behind configure_site_smtp: each submission is written down BEFORE the e-mail is attempted, so a lead is never lost when the mail account refuses a send (expired app password, quota, a temporary 4xx). delivered:false with an error means the message is safely here but never reached the inbox — fix the mail account with configure_site_smtp and you still have the lead.
Every visible form field is returned in fields, so hidden tracking inputs (gclid, wbraid, gbraid, utm_*) travel with the lead and a form submission can be matched to the click that produced it. days looks that far back (default 30, max 365) and limit caps the rows (default 50, max 200). Read-only; nothing is deleted and no visitor IP is stored.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| server | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, but the description adds genuinely new behavior: submissions are persisted BEFORE the e-mail attempt, `delivered:false` + `error` semantics, that no visitor IP is stored, and that nothing is deleted. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb+resource, then layers operational context in dense, purposeful sentences. It runs long, but nearly every clause conveys unique value; only minor tightening is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with an output schema present, the description covers return shape (fields, delivered, error), scoping, and safety. The only gap is the undocumented `server` parameter, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It documents `days` (default 30, max 365) and `limit` (default 50, max 200) with constraints absent from the schema, but the `server` parameter is never explained, leaving one of three params dark.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lists) and resource (contact-form submissions/leads) scoped to the user's hosted static site, distinguishing it from the many ad-platform lead tools (download_meta_leads, list_tiktok_lead_forms) in the sibling set. The 'every message the form relay received, whether or not the e-mail went out' clause sharpens the scope further.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear situational context: it is the record behind configure_site_smtp and the place to look when a mail account refuses a send. It stops short of explicitly naming alternative lead-listing siblings (e.g. list_lead_form_submissions) or stating when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_headersSite Response HeadersDestructiveInspect
Manages the HTTP response headers of a website hosted on Opus Growth. mode = list (show the current headers), add (add or update the given fields), remove (delete the named fields) or replace (overwrite the whole set). headers = one 'Field: value' per line, optionally preceded by a path pattern to limit it to some paths (for example '/assets/* Cache-Control: public, max-age=31536000, immutable'; Cache-Control is accepted only with a path). Supported fields include Content-Security-Policy and its Report-Only variant, Reporting-Endpoints, Permissions-Policy, Referrer-Policy, the Cross-Origin policies, X-Frame-Options and Access-Control-Allow-Origin. Headers apply to the whole site and take effect within seconds. server and site select the target when there is more than one. confirm=false previews a change, confirm=true applies it.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | list | |
| site | No | ||
| server | No | ||
| confirm | No | ||
| headers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
site_infoHosting Server InfoRead-onlyIdempotentInspect
Shows a hosting server's web address, status and disk usage (used, limit and free). Pass server (its name) if the account has more than one. Caching for these sites is managed by Opus Growth: pages are served without cache, so a published change is visible immediately. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| server | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
site_list_filesList Website FilesBRead-onlyIdempotentInspect
Lists files on the user's hosting server (website directory /data/site). No SFTP/SSH client or credentials are required.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | . | |
| site | No | ||
| server | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false. The description adds useful auth context ('No SFTP/SSH client or credentials are required'), but omits pagination, return format, or directory traversal behavior. With annotations covering the safety profile, this adds some value but not 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose and a key operational constraint. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations are rich enough to cover safety and idempotency. However, the lack of parameter semantics and routing guidance leaves the definition incomplete for a 3-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three parameters (path, site, server). The description mentions '/data/site' which loosely relates to path, but it does not explain the site or server parameters, their defaults, or how they select a target. It fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists') and resource ('files on the user's hosting server') with a concrete directory (/data/site). It implicitly distinguishes itself from list_sites and list_servers by focusing on files within a site directory, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or alternatives. It does not say when to prefer listing over site_read_file, site_fetch, or site_run_command, nor when not to use it. Usage is left entirely to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_previewPreview Site ScreenshotARead-onlyIdempotentInspect
Renders a page of the hosting site and returns a screenshot image.
path = which page (e.g. "/", "/hizmetler.html"). view = "mobile" (390px) | "desktop" (1440px)
| a pixel width. site = the key or domain of an EXTRA website on that server; leave it empty
for the server's main website. Returns the image directly. (Note: right after writing files
there can be a brief CDN cache delay; if it looks stale, wait a few seconds and preview again.)
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | / | |
| site | No | ||
| view | No | mobile | |
| server | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the bar is lower, yet the description adds real value: the return is an image, not structured data, and there is a CDN cache delay that can make results stale. Those are traits the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: purpose first, then per-parameter inline documentation using backticks, then a caveat. Every sentence earns its place, though the run-on formatting of the view/path examples is slightly cramped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param, 0%-schema-coverage tool with no output schema, the description covers purpose, return type, viewport semantics, and cache behavior, but omits the `server` parameter entirely, which an agent may need to target the right host.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden and it documents 3 of 4 parameters (path, view, site) with concrete examples and enum-like values. The `server` parameter is never mentioned, leaving a real gap at this coverage level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Renders a page of the hosting site and returns a screenshot image.' An agent can distinguish this from site_fetch/site_read_file/site_info siblings without opening the schema. It does not explicitly name a sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the flow context ('right after writing files... wait a few seconds and preview again') and by the 'leave it empty for the server's main website' instruction, but there is no explicit when-to-use statement or named alternative among the many site_* preview/read siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_read_fileRead Website FileARead-onlyIdempotentInspect
Reads a text file from the user's hosting website directory. No SFTP/SSH needed. TOKEN-SAVING: for a large file pass offset (1-based start line) and limit (max lines) to read only a slice instead of the whole file — response then includes total_lines so you can page. offset/limit=0 (default) returns the full file (backward-compatible).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| site | No | ||
| limit | No | ||
| offset | No | ||
| server | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: no SFTP/SSH required, slice-then-page behavior, and that the response includes total_lines. It does not describe error handling on a missing path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, with the token-saving mechanics following. Slightly dense on the offset/limit clause but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return format need not be explained, and the pagination clue (total_lines) is a bonus. The remaining gap is the undocumented site/server/path parameters, which matters given 0% schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden. It explains offset (1-based) and limit (max lines) richly, including the 0 default, but leaves path, site, and server completely undocumented — three of five parameters have no meaning anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Reads a text file from the user's hosting website directory'), which cleanly distinguishes it from a generic fetch. It does not explicitly name the near-sibling site_read_url, but the 'hosting website directory' framing implies the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance on when to use the offset/limit slice (large files, token-saving) but gives no direction on alternatives such as site_read_url, site_list_files, or site_fetch. Usage context is implied rather than contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_read_urlRead Live PageARead-onlyIdempotentInspect
Reads a LIVE web page exactly as a visitor's browser would and returns the HTTP status code, the response headers and the HTML body. Writes NOTHING anywhere — this is the read-only counterpart of site_fetch.
outline=true returns the page's STRUCTURE instead of the body: title, meta description, canonical, and the full h1-h6 heading tree with an h1_count. Use it when the question is "did my edit land", "does this page have an H1", "is the heading order right" — a normal WordPress page is 50 KB of HTML and does not fit in one tool result, so asking for the whole body to check one heading wastes the call. The outline is computed from the SAME fetch, so it reflects what the server actually rendered, including whatever a theme or page builder shortcode produced (issue #260: post_content shows the shortcode, not the <h1> the theme emits from it).
text=true returns the page's READABLE TEXT instead of the HTML: title, meta description, canonical, H1s, the visible text with scripts/styles/navigation markup stripped (first 6,000 characters, text_truncated says if there was more) and the list of same-site internal_links. Use it for "what does this page say", "is this the right landing page for my CTA / ad / post", "which pages does it link to". A typical page is 50-120 KB of HTML and the raw body does not fit in one tool result; the text view is a few KB.
Use it to verify what actually shipped: is the page live, did it come back 200 or 404, which language did the server pick, is the canonical/hreflang/meta-description what you intended, did the redirect land where you meant it to. REDIRECTS ARE REPORTED, NOT HIDDEN: when the URL you asked for redirects, the answer carries redirected: true, requested_url, final_url and a redirects list with every hop (from, status, to), and status/headers describe the FINAL page. So "does www redirect to the apex host" is answerable in one call — read redirects, do not infer it from status alone.
Why this exists (issue #257): the other tools with similar names do different jobs and cost a wasted turn. site_fetch is a DOWNLOADER, it requires a path and writes the file into the site. site_headers MANAGES response headers, it does not read a page. And curl inside site_run_command cannot resolve the site's own domain from the hosting container. So verifying a page you just published had no tool at all.
max_bytes caps the body (default 200 KB, max 2 MB) and is applied exactly — the body is cut to it and truncated tells you when something was left behind. Pass max_bytes=0 when you only need to know whether a URL answers: the response then carries status and headers and NO body, which is the cheap way to check a batch of internal links one call at a time. The URL passes the same SSRF guard as every other outbound request, so private and internal addresses are refused. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| text | No | ||
| outline | No | ||
| max_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, and the description adds context they cannot carry: the SSRF guard refusing private/internal addresses, redirects being reported rather than hidden (redirected, requested_url, final_url, full hop list, and status/headers describing the FINAL page), and exact truncation semantics. This is behavioral disclosure well beyond the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and the read-only framing, and the per-flag paragraphs are scannable. It is nonetheless long for a four-parameter tool, and the 'Why this exists (issue #257)'/'issue #260' asides and repeated size rationale (50 KB / 50-120 KB) add length without changing how an agent calls it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations and an output schema present, the remaining burden is behavioral, and the description covers it: mutation-free guarantee, redirect reporting model, SSRF rejection, truncation signals, and the intended verification use cases. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full parameter burden and does so: outline explains the returned structure (title, meta, canonical, h1-h6 tree, h1_count) plus the issue #260 caveat about theme/shortcode-generated headings; text explains the 6,000-char limit and text_truncated; max_bytes gives default 200 KB, 2 MB ceiling, exact enforcement, and the max_bytes=0 no-body mode.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource (reads a live web page as a browser) and immediately scopes it against siblings: site_fetch is a downloader, site_headers manages headers, and site_run_command's curl cannot resolve the site domain. An agent can distinguish it from every similarly-named tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use routing for each mode: outline=true for structural checks like 'did my edit land' or 'is the heading order right', text=true for 'what does this page say' or CTA/landing sanity checks, and max_bytes=0 for cheap link-liveness batches. It also names the exact sibling alternatives and why they are wrong for this job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_rebuildRebuild Site From SourceADestructiveInspect
Re-build and re-publish a Next.js / Vite / CRA site FROM THE SOURCE KEPT ON THE SERVER by a
prior deploy_site_zip of a source project. This is the "edit in chat → publish" loop for build
frameworks: the source lives under .src/ (kept after the first deploy) — edit it with
site_edit_file / site_write_file (e.g. .src/app/page.tsx, .src/pages/index.js, .src/src/App.jsx),
then call site_rebuild to compile the static export again and publish it live. Only works when a
SOURCE project was deployed (a .src/ exists); a plain static site has no build step — just edit
its files directly (they are already live). A version snapshot is taken first (site_restore
undoes it). Build cap ~10 min; the server needs enough disk for node_modules (Next.js is large —
small/free servers may run out of space; use an adequately-sized AI Server). site = the key
or domain of an EXTRA website on that server; leave it empty for the main website.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| server | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive, non-readonly, non-idempotent behavior, and the description adds important context beyond them: a version snapshot is taken first, site_restore can undo it, builds are capped at ~10 minutes, and node_modules disk usage may be prohibitive on small servers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core rebuild/publish behavior. It is somewhat repetitive about the .src source requirement, but most sentences carry useful operational detail for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers prerequisites, side effects, alternatives, and build limits well, and the output schema handles return values. The main gap is the unexplained `server` parameter, which is needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains `site` well (key or domain of an extra website; empty for main), but says nothing about the `server` parameter, leaving one of two parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: rebuild and republish a source-backed Next.js/Vite/CRA site from .src/. It clearly distinguishes itself from deploy_site_zip and from editing a plain static site directly, so 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (after editing .src with site_edit_file/site_write_file), when not to use it (plain static sites have no build step), and names relevant alternatives such as site_restore and deploy_site_zip.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_redirectsManage Website RedirectsDestructiveInspect
Manages REAL 301 redirects for the hosting website — the correct way to move an old URL to a
new one after a redesign or a URL change, so link equity and rankings carry over. These are
server-level redirects issued at the edge (HTTP 301 + Location), NOT a <meta refresh> or a
JavaScript hop: search engines treat them as permanent moves, users never see the old page.
mode='list' shows the current rules; 'add' appends; 'remove' deletes the given source paths;
'replace' overwrites the whole list. rules is one rule per line, source then target:
/eski-sayfa /yeni-sayfa
/urunler/eski.html /urunler/yeni
/kampanya https://baska-alan.com/kampanya
Source must start with '/', target with '/' or 'http(s)://'. Matching is an exact path (query
strings ignored): wildcard or query sources like /dir/* are rejected as invalid, not stored;
both the with- and without-trailing-slash forms are handled automatically. Bulk lists are fine
(thousands of rules). confirm=false previews the change, confirm=true applies it — live in
seconds. For 'remove' only the source paths are read from rules, one per line.
CANONICAL HOST: canonical='www' makes the apex redirect to www instead of the other way round; canonical='apex' restores the default. Until now the platform always sent www to the apex, which costs a site whose ad landing URLs, GA4/GTM and pixel history all live on www an extra hop and a host change in its own measurement (issue #298). confirm=false previews the switch. This is a per-site setting and does not touch the redirect rules above.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | list | |
| site | No | ||
| rules | No | ||
| server | No | ||
| confirm | No | ||
| canonical | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
site_restoreRestore Website VersionADestructiveInspect
Restores the website (or a single file/folder) from an automatic snapshot listed by
site_versions — this is how you undo an overwritten or lost change. path restores just that
file/folder (e.g. 'index.html' or 'blog/'); leaving it empty restores the WHOLE site to that
snapshot. confirm=false previews what would change; confirm=true applies it (live immediately).
The current state is snapshotted before restoring, so a restore is itself undoable.
IMPORTANT: if the site is produced by a generator (a source folder + build script), restore
gets the content back but the NEXT rebuild will overwrite it again — port the recovered
content into the generator source too, or the loss repeats.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| site | No | ||
| server | No | ||
| confirm | No | ||
| version_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and non-idempotent, and the description adds materially beyond them: the change is live immediately, the current state is snapshotted first so the restore is itself undoable, and a generator rebuild will re-overwrite restored content. This is exactly the behavioral context an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the undo guidance, then scope, then confirm semantics, then the generator caveat. Dense but nearly every clause carries new information; the final IMPORTANT paragraph is long though justified by the risk it prevents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers scope, reversibility, preview/apply, prerequisite tool, and the generator pitfall. Nothing an agent needs to invoke this destructive tool safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry the load, and it explains version_id (a snapshot from site_versions), path (empty = WHOLE site, non-empty = single file/folder with examples), and confirm (preview vs apply). The 'site' and 'server' parameters remain unexplained, which is the only gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Restores the website (or a single file/folder) from an automatic snapshot') and explicitly ties itself to the sibling tool site_versions that enumerates snapshots, so an agent can distinguish it from site_rebuild, site_versions, and site_edit_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the use case directly ('this is how you undo an overwritten or lost change'), names the source of valid input (site_versions), and explains the confirm=false preview vs confirm=true apply workflow. It even flags the when-NOT-to-rely-on-it case for generator-built sites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_seo_guideSite SEO & Schema GuideARead-onlyIdempotentInspect
Returns the SEO + JSON-LD playbook for sites built on the hosting server: how to structure
the schema.org @id graph, which schema type each page type needs, title/description rules,
URL and canonical architecture, internal linking, sitemap/robots, blog architecture, and the
rules on what must NEVER be invented in structured data (opening hours, geo, ratings, prices).
Universal — not industry-specific. Pair it with site_design_guide: design decides how the site
looks, this decides whether it gets found. The toolkit ships two runnable scripts at the site
root (installed by scaffold_site): node seo-stamp.mjs stamps the base JSON-LD graph +
canonical + OG tags into every page statically from assets/site.config.js, and
node seo-check.mjs audits the whole site (missing/duplicate meta, multiple H1, broken
internal links, orphan pages, invalid or missing JSON-LD, alt-less images, JS-hidden content;
--dup adds a cross-page duplicate-content ratio). Run both via site_run_command before
publishing and fix until zero errors.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the bar is lower. The description goes well beyond that: it details the runnable scripts installed by scaffold_site, their exact filenames and purposes, the audit checks seo-check.mjs performs (missing meta, multiple H1, broken links, orphan pages, invalid JSON-LD, etc.), the optional --dup flag, and the hard rule about data that must never be invented. This is rich, actionable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but is front-loaded with the core purpose and then flows into the playbook contents, scripts, and publishing instructions. Every sentence adds useful detail for a zero-parameter guide, though the length is substantial and could benefit from slightly tighter grouping of the script details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, full schema coverage, annotations covering safety, and an output schema, the description is complete: it explains what the returned playbook covers, how the companion scripts work, how to run them, and how it complements site_design_guide. An agent has everything needed to decide to call it and act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema description coverage, the baseline is 4 per the rubric. The description adds no parameter-level information because there are none to document, which is correct and complete for this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Returns the SEO + JSON-LD playbook for sites built on the hosting server', then enumerates the playbook's contents. It explicitly distinguishes itself from the sibling site_design_guide ('design decides how the site looks, this decides whether it gets found'), so 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the complementary tool (site_design_guide) and the operational workflow: run seo-stamp.mjs and seo-check.mjs via site_run_command before publishing and fix until zero errors. It does not state when not to use this tool or list explicit exclusions, keeping it at a strong 4 rather than a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_tag_gatewaySite Google Tag GatewayADestructiveInspect
Serves a Google tag from the site's OWN domain — Google tag gateway / first-party mode — for a website hosted here. A reserved measurement path on the customer's domain is reverse-proxied at the edge to Google's gateway, so the tag and its requests are first-party: no third-party host, no third-party cookie, and ad blockers and browser tracking protection no longer cut the measurement.
WHY THIS TOOL EXISTS: Google's own setup offers two routes. One asks you to sign into Cloudflare from GTM and grant access to the zone — impossible on a hosted site, because the DNS zone lives in the Opus Growth Cloudflare account and handing a customer a role there would expose every other customer's zone. The other is a manual reverse proxy, which is what this does, at the edge, in seconds, with no access to share.
action: 'status' (default) shows the current setup and runs Google's own health check; 'set' turns it on; 'remove' turns it off. tag_id is the Google tag or container id the gateway was created for — G-XXXXXXX, GT-XXXXXXX, AW-XXXXXXX, DC-XXXXXXX or GTM-XXXXXXX — taken from GTM > Admin > Google tag gateway. path is the measurement path, one segment, default /metrics; it MUST be a path the site does not already use, and the tool refuses if a real page answers there. After 'set' the tool verifies https://yourdomain/healthy, which Google expects to read "ok", so you know it works before telling anyone. Then enter that same path in GTM. Requests are proxied with Host rewritten to the gateway, cookies and query strings passed through untouched, visitor country forwarded for geo, and caching off. confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | /metrics | |
| site | No | ||
| action | No | status | |
| server | No | ||
| tag_id | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructive/openWorld true, not idempotent), the description discloses the pre-flight health check against /healthy, the refusal when a real page already answers at the path, Host rewriting, cookie/query passthrough, country forwarding, caching off, and that confirm=false previews. This is unusually rich behavioral 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with the core behavior, then options, then operational detail. It is longer than typical, and the 'WHY THIS TOOL EXISTS' paragraph is somewhat discursive, but nearly every sentence carries actionable information. A minor typo (https://yourdomain<path>/healthy) slightly hurts readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers all three actions, verification, and safety of preview mode. The only meaningful gap is the unexplained site and server parameters in an otherwise complete picture of a moderately complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for action, tag_id (with the G-/GT-/AW-/DC-/GTM- formats and where to get them), path (single segment, default /metrics, must be unused), and confirm. The site and server parameters are never mentioned, leaving two of six undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: it serves a Google tag from the site's own domain via first-party mode. It immediately distinguishes itself from the Cloudflare/GTM approach and from a manual reverse proxy, so an agent can place it among the many site_* and gtm_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains why the tool exists versus Google's two setup routes, and it enumerates the action values (status default, set, remove) with their effects. It stops short of naming specific sibling tools or stating explicit when-not-to-use conditions within this MCP server, so it lands just under a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_versionsList Website VersionsARead-onlyIdempotentInspect
Lists automatic version snapshots of the website. Every file write, edit, download and shell command takes a snapshot of /data/site FIRST, so an overwritten page can always be recovered. Use this when the user says a change "disappeared", "was reverted" or "came back wrong" — find the snapshot from before the change, then call site_restore. Returns {versions:[{id, when, label}]} — newest first; older history is paged with offset (the answer gives next_offset). READ-ONLY FILE HISTORY: pass version_id + path to get that file exactly as it was in that snapshot (show="content") or its difference from the current file (show="diff") without restoring anything; long output is paged with byte_offset (the answer gives next_byte_offset).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| show | No | content | |
| site | No | ||
| limit | No | ||
| offset | No | ||
| server | No | ||
| version_id | No | ||
| byte_offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantial context: snapshots are captured FIRST on every file write, edit, download and shell command, which is why overwritten pages are recoverable. It also discloses pagination behavior (offset/next_offset, byte_offset/next_byte_offset) and the newest-first ordering — real behavioral detail beyond the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then usage trigger, then return shape and the read-only mode. Dense and mostly waste-free, though the return-shape and paging sentences are long enough that it runs slightly long for a listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no schema descriptions, the description covers the important modes and paging contract, and an output schema exists so return values need not be restated. It is nearly complete, but omits meaning for site, server, and limit, which an agent would have to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden and largely succeeds: it explains version_id + path for file-history mode, the show=content vs show=diff semantics, and the offset/byte_offset paging contract. However, three of the eight parameters (site, server, limit) are never explained, leaving a gap the schema does not fill.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists automatic version snapshots of the website') with clear scope, and distinguishes itself from siblings by naming site_restore as the follow-up action and by clarifying it is read-only file history. An agent can tell it apart from site_read_file and site_restore without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger conditions are given ('when the user says a change disappeared, was reverted or came back wrong') plus the workflow alternative: find the snapshot, then call site_restore. It also carves out a distinct read-only mode (pass version_id + path with show=content/diff) that explicitly does not restore anything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_write_fileWrite Website FileADestructiveInspect
Writes a TEXT file to the user's hosting website (HTML/CSS/JS/JSON/SVG) — creates it or overwrites. Live immediately. No SFTP/SSH needed. IMAGES/BINARIES: do NOT write them here and do NOT paste base64 into HTML. Passing image bytes through chat (as base64) burns huge amounts of tokens and can exhaust the context. Instead use site_fetch(url, 'assets/img/x.webp') — it downloads the file SERVER-SIDE (the bytes never enter the conversation) and you reference it with .
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| site | No | ||
| server | No | ||
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=false, readOnly=false, openWorld=true; the description adds consequence detail beyond them: changes go 'live immediately', creation is also overwrite, and no SFTP/SSH is required. It does not state whether overwrites are versioned/recoverable (site_versions/site_restore exist) or what permissions it needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short paragraphs, front-loaded with the primary write behavior and followed by the important negative guidance. The image/token warning is verbose but earns its place by preventing a costly misuse; nothing else is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations carry the safety profile. What remains thin is the multi-site parameter semantics and the interaction with sibling file tools (site_edit_file, site_versions), which an agent still has to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it largely does not: 'path' and 'content' are only implied, and 'site' and 'server' (both defaulted to empty strings) are never explained, leaving multi-site/server targeting ambiguous. The single example path in the site_fetch advice is the only parameter-adjacent detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (writes), resource (TEXT file on the user's hosting website), enumerated content types (HTML/CSS/JS/JSON/SVG), and the create-or-overwrite behavior. It distinguishes itself from site_fetch for binary assets. It does not, however, differentiate from the close sibling site_edit_file, which an agent must also choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not rule ('do NOT write images/binaries here') with the alternative named and even the exact call shape (site_fetch(url, 'assets/img/x.webp')). The rationale (token/context exhaustion) is supplied. The gap is that no guidance distinguishes it from site_edit_file or site_deploy/upload paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
smart_negative_keywordsSmart Negative KeywordsARead-onlyIdempotentInspect
SMART NEGATIVE KEYWORD suggestions — finds SEARCH TERMS that trigger the ad and spend MONEY but bring NO CONVERSIONS, ranked by estimated savings. min_waste: minimum spend threshold (₺). You can add the suggestions with a SINGLE bulk add_negative_keyword call — pass them all as keywords=['text|BROAD', ...], never one call per keyword. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| min_waste | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the trailing 'Read-only' is redundant. The description does add useful behavior—results are ranked by estimated savings and can be batch-applied in the documented 'text|BROAD' format—but adds nothing on runtime behavior like rate limits or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose in the first clause, followed by the parameter note and a practical workflow tip. Mostly earns its space, though the heavy all-caps emphasis and the bulk-call instruction slightly bloat it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the read-only nature is covered by annotations. But for a 4-parameter tool with 0% schema coverage, the unexplained days and limit parameters leave a real gap in how an agent should invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description must carry the meaning. It only clarifies min_waste (minimum spend threshold in ₺); days, limit, and customer_id receive no explanation of expected values or defaults, leaving most parameters undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific outcome: it finds SEARCH TERMS that spend money but bring no conversions and ranks them by estimated savings. An agent can distinguish this from search_terms_report or keyword_opportunities because the wasteful-spend framing and savings ranking are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context of use is implied (analyze wasteful search terms) and it helpfully routes the agent to add_negative_keyword for follow-up actions. However, it never states when NOT to use this tool or why to pick it over the closely related search_terms_report / list_negative_keywords siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_advertiser_qualificationTikTok Advertiser QualificationBRead-onlyIdempotentInspect
Returns an advertiser's qualification / verification status under a Business Center (business verification, industry qualification, account standing). bc_id from list_tiktok_business_centers.
| Name | Required | Description | Default |
|---|---|---|---|
| bc_id | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered without description help. The description adds the useful detail of which qualification categories are returned, but says nothing about auth scoping, rate limits, or what happens when an advertiser is unqualified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded single sentence stating the return value, followed by a short pointer for the dependent parameter. No filler or repetition; the parenthetical enumeration earns its space by clarifying the notion of 'qualification.'
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be described. However, for a read tool requiring two identifiers, the description leaves advertiser_id identity and any account-context requirements unexplained, leaving a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two required params. The description compensates for one of them by explaining bc_id's source (list_tiktok_business_centers), which is a genuine chaining hint, but advertiser_id is left completely undefined in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Returns an advertiser's qualification / verification status under a Business Center,' and enumerates the sub-signals (business verification, industry qualification, account standing). This clearly separates it from sibling listers like list_tiktok_bc_advertisers, though it never names an explicit alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance, and no named alternative tool. The only usage cue is the prerequisite chain hint ('bc_id from list_tiktok_business_centers'), which implies a two-step flow but does not state conditions for calling this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_campaign_reportTikTok Performance ReportARead-onlyIdempotentInspect
TikTok performance report (spend/impressions/clicks/CTR/conversions...). Dates are YYYY-MM-DD; if empty, the last 30 days are used. data_level: AUCTION_CAMPAIGN | AUCTION_ADGROUP | AUCTION_AD. breakdown (optional): age | gender | country_code | province_id | placement | platform — splits rows by that demographic/placement dimension.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| breakdown | No | ||
| data_level | No | AUCTION_CAMPAIGN | |
| start_date | No | ||
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds genuinely useful behavior beyond them: the default date window behavior and the enumeration of valid data_level and breakdown values, which the schema does not constrain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then compact sentences for dates, data_level, and breakdown. No filler. The parenthetical metrics list and pipe-delimited enums keep it dense and skimmable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists so return values need no explanation, and the description covers the key inputs, defaults, and enum semantics an agent needs to call correctly. Only advertiser_id is left unexplained, which is a minor gap for a 5-param reporting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden and does well: it documents date format, the default-30-day behavior, the data_level enum values, and the breakdown dimensions (splitting rows by demographic/placement). The one gap is advertiser_id, which is never mentioned, but the other four parameters gain real meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('TikTok performance report') and enumerates the metric families returned (spend/impressions/clicks/CTR/conversions). It clearly reads as a TikTok reporting tool, but does not explicitly name how it differs from siblings like microsoft_performance_report or performance_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the reporting framing and the audience-collection nature of the tool, but there is no explicit when-to-use, when-not, or named alternative among the many report siblings. Defaults (empty dates = last 30 days) are helpful context but not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_change_historyTikTok Change HistoryARead-onlyIdempotentInspect
Business-Center-scoped change log — who changed what and when (audit trail) across the BC's ad accounts. advertiser_id optionally narrows to one account; start_date/end_date are YYYY-MM-DD. Returns up to limit entries (cap 500) with a truncated flag. bc_id from list_tiktok_business_centers.
| Name | Required | Description | Default |
|---|---|---|---|
| bc_id | Yes | ||
| limit | No | ||
| end_date | No | ||
| start_date | No | ||
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral facts: results are capped at 500, a truncated flag is returned, and date filters use YYYY-MM-DD. It does not discuss pagination past the cap or auth requirements, so it is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct information: scope, the optional narrowing parameter, date format, and the return cap plus the sourcing of bc_id. The scoping statement is front-loaded and nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is not required, and the description covers the entry point (bc_id source), filtering, and date formatting. A five-param tool with 0% schema coverage could still benefit from stating defaults and whether date filters are inclusive, but the description 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.
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 the load, and it does: advertiser_id is described as an optional narrowing filter, start_date/end_date as YYYY-MM-DD, limit as capped at 500, and bc_id as coming from list_tiktok_business_centers. It omits the limit default and the empty-string defaults, but that is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('change log — who changed what and when (audit trail)') and scopes it precisely to a Business Center's ad accounts, which separates it from the generic get_change_history and meta_change_history siblings. It stops short of explicitly naming a sibling it is not, so it lands just below the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: this is a per-Business-Center audit trail, and advertiser_id optionally narrows the result to one account. It also routes the agent to list_tiktok_business_centers for obtaining bc_id, which is real usage guidance. It does not state any when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_recommendationsTikTok RecommendationsBRead-onlyIdempotentInspect
TikTok's own automatic optimization suggestions for an ad account (the equivalent of Google Ads recommendations) — budget, bidding, targeting, creative and setup improvements TikTok recommends applying. level: ACCOUNT (account-wide) | CAMPAIGN | ADGROUP | AD.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | ACCOUNT | |
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that these are TikTok's own platform suggestions (analogous to Google Ads recommendations), which is useful framing, but says nothing about pagination, filtering defaults, or scope limits beyond the level enum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose followed by the level scoping. The 'level: ... | ...' tail is compact and earns its place by documenting the undocumented parameter values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be described, and annotations cover safety. However, a 2-parameter tool with 0% schema coverage and no usage routing leaves advertiser_id undefined and the relationship to apply/dismiss/list_recommendations unstated, so it is only adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% but the description supplies the meaningful part: the four level values (ACCOUNT, CAMPAIGN, ADGROUP, AD). That compensates for the missing enum in the schema. advertiser_id remains unexplained in both the description and schema, so coverage is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('TikTok's own automatic optimization suggestions for an ad account') and scopes it with the level values, so an agent knows this is a retrieval tool for TikTok recommendations. It doesn't explicitly name the sibling it differs from (list_recommendations, apply_recommendation, dismiss_recommendations), but the verb+resource is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. With siblings like list_recommendations, apply_recommendation and dismiss_recommendations in the catalog, the description never says whether this fetches, applies, or dismisses, nor when to pick this over those. Usage is only implied by the resource noun.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_region_searchTikTok Location SearchARead-onlyIdempotentInspect
Searches TikTok geo-targeting location IDs (location_id) — for the required location_ids field in create_tiktok_adgroup.
objective_type MUST match the campaign's objective (TRAFFIC|REACH|VIDEO_VIEWS|CONVERSIONS|LEAD_GENERATION|...): TikTok returns the location set per objective. keyword matching is accent-insensitive, so Turkish spellings work ("Şehzadeler" finds "Sehzadeler"). Turkey goes down to DISTRICT level, returned as level=CITY under the PROVINCE (e.g. Manisa → Sehzadeler, Yunusemre, Turgutlu, Saruhanli) — search the district name directly instead of settling for the province. Each row carries parent_name (the province) because city/district names repeat worldwide — always check it before using an id.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | ||
| advertiser_id | No | ||
| objective_type | No | TRAFFIC |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent safety profile, so the description wisely spends its budget elsewhere: objective-scoped location sets, accent-insensitive matching, Turkey's district-level (level=CITY under PROVINCE) behavior, and the parent_name disambiguation caveat. It does not contradict any annotation. It stops short of noting rate limits or result caps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and front-loaded: the purpose and the downstream consumer come first, then objective constraint, then matching/level nuances. Nearly every sentence earns its place, though the Turkey district digression is long for what is a general-purpose tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-format detail is unnecessary. The description adds the one return nuance an agent needs (parent_name as province) and covers two of three params well, with the only real gap being the unexplained advertiser_id parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the param burden. It ably explains objective_type (with the allowed enum values) and adds real meaning to keyword (accent-insensitive, Turkish spellings), but advertiser_id is never mentioned, leaving one of three params undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Searches TikTok geo-targeting location IDs') and immediately anchors the output to its consumer ('the required location_ids field in create_tiktok_adgroup'). This clearly distinguishes it from siblings like geo_target_search, microsoft_location_search, and tiktok_targeting_search 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides strong context on when to reach for it (populating location_ids in create_tiktok_adgroup) and what objective_type must satisfy. It falls short of 5 because it does not explicitly name or exclude the closest sibling geo-lookup alternatives, leaving the agent to infer platform routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_report_queryTikTok Report QueryRead-onlyIdempotentInspect
Free-form READ of TikTok's integrated report endpoint (/report/integrated/get/) — any metric and dimension TikTok supports. report_type: BASIC (performance) | AUDIENCE (age, gender, country_code, province_id, platform, placement...) | PLAYABLE_MATERIAL | CATALOG | BC | TT_SHOP. data_level: AUCTION_ADVERTISER | AUCTION_CAMPAIGN | AUCTION_ADGROUP | AUCTION_AD. dimensions: e.g. ['campaign_id'], ['adgroup_id','stat_time_day'], ['ad_id','gender']. metrics: e.g. spend, impressions, clicks, ctr, cpc, cpm, reach, frequency, conversion, cost_per_conversion, result, cost_per_result, video_play_actions, video_watched_6s, average_video_play, likes, comments, shares, follows, profile_visits. lifetime=true returns totals since the start of each object (no date range). Otherwise days = last N full days excluding today, or start_date/end_date (YYYY-MM-DD); TikTok limits the range (with stat_time_day it is 30 days) and rejects longer ranges with an explanatory error. filtering: TikTok filter objects, e.g. [{"field_name": "campaign_ids", "filter_type": "IN", "filter_value": "["123"]"}]. Reference: https://business-api.tiktok.com/portal/docs?id=1740302848100353. Read-only; reply carries the exact period or lifetime=true.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| metrics | Yes | ||
| end_date | No | ||
| lifetime | No | ||
| filtering | No | ||
| data_level | No | AUCTION_CAMPAIGN | |
| dimensions | Yes | ||
| start_date | No | ||
| report_type | No | BASIC | |
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
tiktok_targeting_searchTikTok Targeting SearchARead-onlyIdempotentInspect
Searches TikTok interest/behavior targeting categories → returns id + name (used as interest_category_ids in create_tiktok_adgroup). kind: interest | action (behavior).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | interest | |
| keyword | No | ||
| advertiser_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the kind semantics (action = behavior) and the returned pair, but says nothing about auth/advertiser scoping, pagination, or rate limits, and the output schema already documents returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence with the purpose front-loaded and the downstream consumer noted immediately after. The arrow/pipe shorthand is efficient but slightly telegraphic, costing a little readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read lookup with an output schema and full annotation coverage, the description supplies purpose, enum semantics, and the downstream wiring. It omits only how keyword matching works and whether advertiser_id is required to scope results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does define the kind enum values ('interest | action (behavior)') and implies an advertiser context via interest_category_ids, but the keyword and advertiser_id parameters are left entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource: it 'searches TikTok interest/behavior targeting categories' and names exactly what comes back (id + name). The platform + category-type framing cleanly separates it from siblings like tiktok_region_search, linkedin_targeting_search, and search_meta_interests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent into a workflow by stating the results are used as interest_category_ids in create_tiktok_adgroup, which tells the agent when to call it. There is no explicit exclusion or named alternative (e.g. region search), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unblock_ip_addressesUnblock IP AddressesADestructiveInspect
Removes IP exclusions from a Google Ads campaign (undo of block_ip_addresses). criterion_ids
= comma-separated ids from list_ip_exclusions. confirm=false previews; confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| criterion_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, but the description adds genuinely new behavioral context: the two-phase preview/apply mechanism via confirm, and that criterion_ids must be sourced from list_ip_exclusions. It does not mention retry behavior or what happens to ids that don't exist, which would round it out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact clauses, front-loaded with the action and its inverse, then the parameter essentials. Every sentence earns its place with no repetition of structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with an output schema present (so return values need no explanation), the description covers purpose, id provenance, and the safety-critical preview flow. Minor gap: no note on idempotency or permission prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description must compensate. It documents two of the four well (criterion_ids format and source, confirm as preview toggle) but gives nothing on campaign_id or customer_id scope, leaving half the parameters to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Removes IP exclusions from a Google Ads campaign') with an explicit sibling reference ('undo of block_ip_addresses'). An agent can distinguish this from block_ip_addresses, list_ip_exclusions, and the many other mutation tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear operational workflow: get ids from list_ip_exclusions, then confirm=false to preview vs confirm=true to apply. This tells the agent how to proceed safely. It stops short of stating when not to use it or prerequisites (e.g. permission requirements or how to find campaign_id).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_groupUpdate Ad GroupADestructiveInspect
Rename a Google Ads AD GROUP and/or change its default max CPC bid. Restructuring an existing account means renaming groups constantly — a theme gets split, a match type moves out, a naming convention changes — and without this the rename has to happen in the Google Ads interface while everything else is done here. name = the new ad group name (unique within the campaign). cpc_bid = the group's default max CPC in the account currency; leave it at 0 to keep the current bid. status ('ENABLED' | 'PAUSED') is accepted too so a rename and a pause can be one call; update_ad_group_status does the status alone. Only the fields you pass are changed. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| confirm | No | ||
| cpc_bid | No | ||
| ad_group_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing partial-update semantics ('Only the fields you pass are changed'), the keep-current-bid sentinel ('leave it at 0'), and a dry-run switch ('confirm=false → dry-run'). It doesn't address reversibility, propagation delay, or permission requirements, but the destructiveHint/readOnlyHint annotations already cover the safety framing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, then parameters, then safety semantics. The 'Restructuring an existing account...' sentence is longer than needed but does provide legitimate routing rationale; every other sentence is tight and load-bearing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers purpose, alternatives, per-field semantics, partial-update behavior, and dry-run. Only minor operational details (permissions, latency) are missing for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load and largely does: it defines name (new name, unique within the campaign), cpc_bid (default max CPC in account currency, 0 = unchanged), status (with the ENABLED/PAUSED enum values the schema omits), and confirm (dry-run semantics). customer_id and ad_group_id are left unexplained but are self-evident required identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Rename a Google Ads AD GROUP and/or change its default max CPC bid') and immediately scopes it against siblings, noting that update_ad_group_status handles status alone. An agent can distinguish this from create_ad_group, update_ad_group_status, and update_microsoft_ad_group without reading any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the motivating scenario (theme split, match type move, naming convention change) and explicitly names the alternative tool for status-only changes. The condition that selects each option is stated rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_group_statusUpdate Ad Group StatusADestructiveInspect
Turns a Google Ads AD GROUP on or off: status 'ENABLED' to enable / resume / unpause / reactivate the group, or 'PAUSED' to pause / stop / turn off a whole ad group at once. This is the missing middle level — update_campaign_status handles the campaign, update_ad_status a single ad, and this one the ad group. Pausing the group stops every ad and keyword inside it, so this is the right way to switch off a theme that is wasting budget; pausing the keywords one by one does NOT stop the group's ads. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| confirm | No | ||
| ad_group_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is covered. The description adds real value beyond them: the blast radius ('stops every ad and keyword inside it') and the confirm=false dry-run affordance, neither of which is in the annotations or schema. It stops short of covering idempotency or permission/auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb/resource, then sibling disambiguation, then behavioral caveat and dry-run. Every sentence carries information, though the synonym lists ('enable / resume / unpause / reactivate') are slightly padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. Given a mutation tool with 0% schema coverage, the description supplies the pieces an agent needs: what changes, blast radius, sibling routing, and the dry-run escape hatch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is no enum on status, so the description must compensate — and it does for the two non-obvious params, defining status values ('ENABLED' / 'PAUSED' with synonym sets) and confirm's dry-run semantics. customer_id and ad_group_id are left to naming inference, and status synonyms are prose rather than machine-readable, so it is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Turns a Google Ads AD GROUP on or off') with the exact status values enumerated, and it explicitly places itself among siblings (update_campaign_status / update_ad_status) as 'the missing middle level'. An agent can distinguish it from every neighboring status tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternatives and the selecting condition, and warns that pausing keywords one by one does NOT stop the group's ads, explicitly steering the agent to this tool for switching off a wasteful theme. When-to-use and when-the-alternative-is-wrong are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_statusUpdate Ad StatusADestructiveInspect
Turns a single Google Ads AD on or off, or DELETES it: status 'ENABLED' to enable / publish / resume / unpause an ad, 'PAUSED' to pause / stop it, 'REMOVED' to delete it for good. This is how you launch ads (e.g. an RSA) that were created PAUSED for safety. REMOVED matters during an iteration cycle: Google allows only 3 enabled RSAs per ad group, so revising copy repeatedly leaves dead paused ads behind that keep occupying the group — removing them is the only way to clean up. Removal cannot be undone, the ad and its history are gone, so pause first if you are unsure. For the whole ad group use update_ad_group_status, for the campaign use update_campaign_status. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| status | Yes | ||
| confirm | No | ||
| ad_group_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds that REMOVED is irreversible, deletes the ad and its history, recommends pausing first if unsure, and explains the 3-enabled-RSA limit that makes removal necessary. This is substantial operational context beyond structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and status values, then adds alternatives and dry-run behavior. Each sentence carries distinct operational value, including the RSA limit rationale, so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Annotations and description together cover destructive behavior, irreversibility, idempotency implications, dry-run, alternatives, and the cleanup rationale. An agent has enough to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It fully documents status values and confirm=false dry-run semantics, but leaves customer_id, ad_group_id, and ad_id as implicit identifiers with no format or source guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact operation: set a Google Ads ad status to ENABLED, PAUSED, or REMOVED. It distinguishes itself from siblings by naming update_ad_group_status and update_campaign_status, so an agent can identify its scope 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to enable a paused ad, when to pause/resume, and when to remove dead paused ads during iteration. It routes ad group and campaign changes to the named alternative tools and documents confirm=false dry-run behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_campaignUpdate CampaignADestructiveInspect
RENAMES a Google Ads CAMPAIGN and/or changes its status — the campaign-level counterpart of update_ad_group. Renaming is the half update_campaign_status cannot do, so restructuring an account (merging two campaigns, changing a naming convention) no longer has to drop back into the Google Ads interface. name = the new campaign name; it must be unique in the account. status: 'ENABLED' | 'PAUSED' | 'REMOVED'. REMOVED DELETES the campaign: it leaves the campaign list and CANNOT be re-enabled — its reporting history stays but the campaign itself is gone for good, so pause first if you are unsure. Only the fields you pass are changed; leave one empty to keep it. Passing REMOVED ignores name, because a removed campaign cannot be renamed. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint and non-idempotency, but the description adds the critical operational facts: REMOVED deletes the campaign, cannot be re-enabled, kills name changes, reporting history is retained, only passed fields change, and confirm=false is a dry-run. This is rich disclosure well beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then details in a logical order (rename, status, destructive semantics, partial-update behavior, dry-run). Dense but nearly every sentence carries required guidance; slightly long but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be described. For a destructive mutation tool, the description covers irreversibility, partial updates, dry-run, and field interactions, leaving nothing essential missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden, and it explains name (new value, must be unique in account), the status enum values, confirm as dry-run, and the REMOVED-ignores-name interaction. It leaves customer_id and campaign_id unstated, a minor gap for two identifier parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('RENAMES a Google Ads CAMPAIGN and/or changes its status') and explicitly positions itself against siblings, calling out update_ad_group and update_campaign_status. The agent can distinguish it from update_campaign_status without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says what update_campaign_status cannot do ('renaming'), gives the motivating scenario (merging campaigns, changing naming conventions), and advises 'pause first if you are unsure' before an irreversible REMOVED. When-to-use and when-to-be-cautious are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_campaign_statusUpdate Campaign StatusADestructiveInspect
Turns a Google Ads campaign ON or OFF: status 'ENABLED' to enable / resume / unpause / reactivate / start serving a paused campaign again, or 'PAUSED' to pause / stop / turn it off. This is the tool for BOTH directions — there is no separate resume_campaign or enable_campaign. Use it to launch campaigns that were created paused for safety. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=false, openWorld=true, so the safety bar is partly met. The description adds a genuinely useful behavior beyond the schema: confirm=false yields a dry-run, which is critical for a destructive mutation. It still does not spell out that pausing halts live delivery immediately or what happens to in-flight spend.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the status vocabulary, then the sibling disclaimer and dry-run note. The synonym lists (resume/unpause/reactivate/start) add matching value but inflate length somewhat; still no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers direction, status values, and dry-run safety. Adequate for a destructive mutation, though it leaves the identifier parameters and the downstream effect of pausing unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema declares `status` as a bare string with no enum, so the description's disclosure of the ENABLED/PAUSED vocabulary is high-value and compensates for the missing enum. It also clarifies `confirm` as the dry-run switch. But customer_id and campaign_id receive no semantic explanation at all, so half the parameters remain bare.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (turn a Google Ads campaign ON/OFF) and enumerates the exact status values that drive it. It distinguishes itself from resume/enable siblings explicitly. However, it omits that a sibling `pause_campaign` actually exists in the toolset, so the claim that it is 'the tool for BOTH directions' is not fully reconciled with 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: use it to launch campaigns created paused for safety, and the status string selects direction. It does not tell the agent when to prefer this over the existing `pause_campaign` sibling or which one wins on conflict, leaving a routing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_chatgpt_ads_adUpdate ChatGPT Ads AdADestructiveInspect
Changes the copy, destination or image of an existing ChatGPT Ads ad.
Only the fields you pass change; the rest of the creative is read first and sent back unchanged, so a title edit cannot wipe the image or the destination. A new image_url is uploaded and the returned file replaces the current one. Editing any creative field starts a NEW OpenAI review of the ad, so it stops serving until that review passes — a name-only change does not. The ad cannot be moved to another ad group. confirm=false returns a dry run showing current values next to proposed ones.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| name | No | ||
| ad_id | Yes | ||
| title | No | ||
| account | No | ||
| confirm | No | ||
| image_url | No | ||
| target_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: read-modify-write semantics so untouched fields are preserved, that a new image_url replaces the current file, that creative edits trigger a new OpenAI review and halt serving while a name-only change does not, and that confirm=false returns a dry run. The destructiveHint/idempotentHint=false annotations are corroborated rather than echoed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, then stacks only high-value facts (partial update, image replacement, review side effect, dry run) in short clauses with no filler or repetition. Density is high without being padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the description covers the risky side effects well. The remaining gap is that with 0% schema coverage the meaning of account and the required ad_id are never addressed, which an agent calling an 8-parameter tool may need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters, so the description must compensate, and it does for the important ones: title/body/target_url/image_url as editable creative, confirm=false as dry run, and the unlisted-fields-are-unchanged contract. It leaves account and the required ad_id unexplained, keeping it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource ("Changes the copy, destination or image of an existing ChatGPT Ads ad") and immediately bounds scope as edits to an existing ad, which cleanly separates it from sibling create_chatgpt_ads_ad and the ad-group/campaign updaters. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context (edit creative fields, use name-only edits to avoid a review restart, confirm=false for a dry run) and an explicit exclusion (ad cannot be moved to another ad group). It never names a sibling alternative to route to, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_chatgpt_ads_ad_groupUpdate ChatGPT Ads Ad GroupADestructiveInspect
Changes the name, bid, bid strategy or context hints of an existing ChatGPT Ads ad group.
Context hints are what decides which ChatGPT conversations the ads can match, so this is the main relevance lever on the platform. Write them as short natural sentences describing the product, the use case or the need, in the language the buyers actually chat in: "lightweight trail running shoes for rocky terrain" works, "shoes" does not, and "customers in California" belongs in country targeting instead. Up to 2000 per ad group; they are not exact-match keywords and they do not replace country or platform targeting. hints_mode: add appends to what is already there (the default, and the safe one), replace swaps the whole list, remove deletes the ones you pass, clear empties it. OpenAI's own field is replace-only, so a bare replace with two hints would silently delete the rest; the merge happens here. max_bid is in the account currency and is checked against the parent campaign's real daily budget plus a sanity ceiling that catches a decimal slip; a deliberate high bid passes with allow_high_bid=true. strategy: fixed_bid | maximize_clicks | maximize_conversions. Switching to a maximize strategy drops the manual bid because OpenAI requires it to be absent there. Bid settings you do not pass — including audience bid multipliers — are preserved, not cleared. confirm=false returns a dry run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| account | No | ||
| confirm | No | ||
| max_bid | No | ||
| strategy | No | ||
| hints_mode | No | add | |
| ad_group_id | Yes | ||
| context_hints | No | ||
| allow_high_bid | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations, which only state that this is a destructive, non-idempotent, non-readonly write. The description discloses that a bare 'replace' would otherwise silently delete the rest of the list and that the merge happens here, that switching to a maximize strategy drops the manual bid, that unpassed bid settings and audience multipliers are preserved, and that confirm=false returns a dry run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the long middle is dense, concrete parameter semantics rather than filler, with a worked good/bad hint example. It is more verbose than most definitions, but nearly every clause carries an actionable constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the annotations already cover the safety profile. For a 9-parameter destructive mutation the description supplies the merge/preservation strategy, bid validation and dry-run behavior an agent needs to call it correctly; only the multi-account `account` selector is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are no enums in the schema, so the description carries the full burden — and it does so for hints_mode (add/replace/remove/clear), strategy (fixed_bid | maximize_clicks | maximize_conversions), max_bid (account currency, sanity ceiling), allow_high_bid and confirm. The `account` parameter is never explained and `ad_group_id` is only implied, which keeps this from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Changes the name, bid, bid strategy or context hints of an existing ChatGPT Ads ad group'), naming the mutable fields up front. It is clearly distinguishable from create_chatgpt_ads_ad_group, update_chatgpt_ads_campaign and update_chatgpt_ads_ad in the crowded sibling list 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real routing guidance: hints_mode 'add' is stated as the default and the safe one, 'customers in California' is explicitly redirected to country targeting, and allow_high_bid is named as the escape hatch for a deliberate high bid. It stops short of explicitly naming a sibling tool to use instead (e.g. the geo-targeting tool), so it is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_chatgpt_ads_campaignUpdate ChatGPT Ads CampaignADestructiveInspect
Changes an existing ChatGPT Ads campaign: name, budget, locations, platforms, schedule, conversion events, status.
Only what you pass changes. Budgets are in the account currency. daily_budget on a lifetime-budget campaign SWITCHES it to a daily budget, which OpenAI does not let you undo (a lifetime budget would need a new campaign); the dry run says so. A campaign has exactly one budget type, so pass one of the two. include_locations / exclude_locations take ISO country codes (TR, GB) or location ids from chatgpt_ads_geo_lookup (e.g. 2001311 = Istanbul); locations_mode: replace (the list becomes exactly this, default) | add | remove. Changing geography rewrites the whole targeting block, so the current audiences and platforms are read first and sent back unchanged. platforms: any of ios_app, android_app, web, desktop_web, ios_web, android_web, or ['all'] to lift the restriction; a platform-only change leaves locations untouched. start / end: YYYY-MM-DD or YYYY-MM-DDTHH:MM in the account time zone, 'now', or 'none' to remove the date. conversion_event_setting_ids attaches event settings for measurement (conversion_mode add | replace | remove); it is refused on a conversions-objective campaign because OpenAI locks that event at creation. status: active | paused (archiving is chatgpt_ads_status). The objective itself can never change. confirm=false returns a dry run showing each current value next to the proposed one.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| name | No | ||
| start | No | ||
| status | No | ||
| account | No | ||
| confirm | No | ||
| platforms | No | ||
| campaign_id | Yes | ||
| description | No | ||
| daily_budget | No | ||
| locations_mode | No | replace | |
| conversion_mode | No | add | |
| lifetime_budget | No | ||
| exclude_locations | No | ||
| include_locations | No | ||
| conversion_event_setting_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond annotations (which only flag destructive/openWorld/non-idempotent): it warns that daily_budget on a lifetime campaign irreversibly switches budget type, that geos rewrite the whole targeting block with audiences/platforms read back unchanged, that the objective can never change, and that a dry run shows current vs proposed values. This is exactly the destructive-behavior context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded with the verb/resource, then grouped by concern (budget, geo, platforms, dates, conversion, status, dry run). Nearly every sentence carries operational value; a few clauses (e.g. the Istanbul id example) are slightly verbose but still illustrative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-param destructive mutation with a 0%-coverage schema, the description plus an existing output schema and safety annotations leave nothing critical unaddressed: budget constraints, targeting side effects, irreversible operations, and the dry-run escape hatch are all documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry all parameter meaning, and it does for the hard cases: budget-type exclusivity, ISO codes/geo ids for include/exclude_locations, locations_mode values with defaults, platform enum values and ['all'], date formats/time zone, and conversion_mode add/replace/remove. Only account, description, and name are left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Changes/Update) and resource (existing ChatGPT Ads campaign) and enumerates the mutable surface: name, budget, locations, platforms, schedule, conversion events, status. It also implicitly differentiates from create_chatgpt_ads_campaign and update_chatgpt_ads_ad/ad_group by scoping to campaign-level fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong contextual guidance: 'Only what you pass changes,' confirm=false for a dry run, conversion_event_setting_ids refused on conversions-objective campaigns, and explicitly routes archiving to chatgpt_ads_status and location ids to chatgpt_ads_geo_lookup. It lacks an explicit statement of when to prefer this tool over a sibling update tool, but the routing hints are substantive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_conversion_actionUpdate Conversion Action (primary/secondary)ADestructiveInspect
Makes a conversion action PRIMARY/SECONDARY (primary_for_goal); to change its default VALUE, counting or lookback window use set_conversion_settings instead. role: 'PRIMARY' (counted in the Conversions column + feeds into smart bidding) | 'SECONDARY' (observed only in 'All conversions', does not feed bidding). NOTE: the Google Ads API does not allow pausing/removing (HIDDEN/REMOVED) a conversion action — that is only done from the panel. confirm=false → dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| confirm | No | ||
| customer_id | Yes | ||
| conversion_action_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond them: confirm=false triggers a dry-run preview, and the API limitation on HIDDEN/REMOVED states. It stops short of describing reversibility or auth/permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with the core operation, then the sibling redirect, then role semantics, then the API limitation and dry-run flag. It is information-dense and every clause earns its place, though the single long paragraph is slightly heavy for a 4-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers purpose, the alternative tool, role semantics, the API's limitation, and dry-run behavior — everything an agent needs to invoke this mutation correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the parameter burden. It richly explains 'role' (PRIMARY vs SECONDARY with consequences for Conversions column and smart bidding) and 'confirm' (dry-run). However, customer_id and conversion_action_id receive no explanation, leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (makes a conversion action PRIMARY/SECONDARY) and defines the operation precisely, including what 'role' controls. It cleanly distinguishes itself from the sibling set_conversion_settings by naming what that tool handles instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent: to change default VALUE, counting or lookback window, use set_conversion_settings instead. It also flags the boundary condition — pausing/removing a conversion action cannot be done via this API and must be done from the panel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_conversion_goalUpdate Conversion Goal (primary/secondary)ADestructiveInspect
Makes a conversion CATEGORY primary or secondary — the CORRECT lever for Smart Bidding in a goal-based account. Unlike update_conversion_action's legacy primary_for_goal flag, this ALSO works on Google-hosted 'local actions' (map/profile signals) that the API otherwise refuses to change. category+origin identify the goal (run list_conversion_goals first), e.g. category='ENGAGEMENT' origin='GOOGLE_HOSTED' → demote Google Business 'other engagements'; category='PHONE_CALL_LEAD' origin='CALL_FROM_ADS' → keep calls primary. role: 'PRIMARY' (biddable) | 'SECONDARY'. Pass campaign_id to override just that campaign; omit for account-wide. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| origin | Yes | ||
| confirm | No | ||
| category | Yes | ||
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: it discloses the dry-run mode via confirm=false, and the non-obvious capability that this works on Google-hosted local actions the API otherwise refuses to change. It does not spell out the bidding impact of a demotion, but the added context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose before the sibling comparison and parameter notes. It is dense and parenthetical-heavy, packing several clauses per sentence, but nearly every clause carries useful routing or parameter information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. For a destructive, non-idempotent mutation tool the description supplies identification workflow, parameter meaning, dry-run behavior, and the special-case scope, leaving little an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does for most params: role values ('PRIMARY' biddable | 'SECONDARY'), category+origin as the goal identifier, campaign_id as an optional override, and confirm as dry-run. customer_id is left unexplained but is self-evident from the ecosystem.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Makes a conversion CATEGORY primary or secondary') and immediately differentiates from the sibling update_conversion_action by naming its legacy flag and the Google-hosted 'local actions' case it uniquely handles. An agent can tell exactly what this does and how it differs from adjacent tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to 'run list_conversion_goals first' and gives the category+origin identification convention with two worked examples. It also states when to pass campaign_id (per-campaign override) vs omit (account-wide), and when to use this over update_conversion_action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_custom_conversion_goalUpdate Custom Conversion GoalADestructiveInspect
Edits a CUSTOM conversion goal: change which conversion actions it contains, rename it, or delete it.
Use it to unblock deleting a conversion action that Google says is used by a custom goal — pass conversion_actions with the ids that should REMAIN (comma separated), leaving the one you want to delete out. remove=true deletes the whole goal. Run list_custom_conversion_goals first to see the ids. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| remove | No | ||
| confirm | No | ||
| goal_id | Yes | ||
| customer_id | Yes | ||
| conversion_actions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds material behavior beyond them: confirm=false triggers a dry-run, remove=true destroys the entire goal, and conversion_actions is a REMAIN-list whose omission of an id is what deletes it. This is exactly the destructive-side context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then layers usage, parameter mechanics, and the dry-run note using tight arrow notation ('confirm=false → dry-run'). Every sentence carries a distinct, non-redundant instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema and full annotations exist to cover return values and the safety profile, the description fills all remaining gaps: purpose, use case, per-parameter semantics, and dry-run/destructive behavior. An agent could call this correctly and safely from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry semantics, and it explains name (rename), remove (delete whole goal), conversion_actions (comma-separated ids that should REMAIN), and confirm (dry-run). Only goal_id/customer_id are left unspecified, which is acceptable since they are self-evident ids.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Edits) plus a precisely scoped resource (CUSTOM conversion goal) and enumerates the three capabilities: change contained conversion actions, rename, or delete. The 'CUSTOM' qualifier implicitly distinguishes it from the sibling update_conversion_goal, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use scenario ('unblock deleting a conversion action that Google says is used by a custom goal') and a stated prerequisite ('Run list_custom_conversion_goals first to see the ids'). It stops short of naming an alternative tool or a when-not-to-use condition, which keeps it out of 5 territory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_gtm_entityEdit GTM EntityADestructiveInspect
EDITS an existing GTM tag / trigger / variable / workspace by its full path (from list_gtm_tags/triggers/variables/workspaces). kind = tag|trigger|variable|workspace. Provide only what changes: name (rename), parameters, firing_trigger_ids (tags only, comma-separated — empty = keep). parameters = JSON object {key: value} or a GTM parameter list; ONLY the keys you give are changed and every other parameter of the tag stays as it is (so {"eventName": "generate_lead"} changes just the event name and keeps the measurement ID). A list value becomes a GTM table/list, e.g. {"eventSettingsTable": [{"parameter": "form_id", "parameterValue": "contact"}]}. replace_parameters=true replaces the whole parameter set instead (needed only to REMOVE a parameter). GTM PUT is a full replace, so the current object is fetched, your fields applied, then written back (fingerprint preserved). SAFETY: confirm=false → preview; confirm=true → applies.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | No | ||
| path | Yes | ||
| confirm | No | ||
| parameters | No | ||
| firing_trigger_ids | No | ||
| replace_parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a destructive, non-idempotent write, and the description adds substantial context beyond that: GTM PUT is a full replace, so the current object is fetched, the given fields applied, then written back with fingerprint preserved, and unlisted parameters are retained unless replace_parameters=true. The preview/apply gate via `confirm` further discloses the safety model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded, starting with the verb and entity kinds, then per-parameter semantics, then safety. It is long and uses telegraphic fragments, but nearly every clause adds operative detail (e.g., the eventName example, the removal case) rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the description covers the non-obvious mutation mechanics an agent must know: partial-update behavior, full-replace preservation, and the confirm gate. Nothing needed to invoke correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden and does: kind enum values, path source, name as rename, firing_trigger_ids as comma-separated with empty = keep, parameters format (JSON object or GTM parameter list, with a worked table/list example), replace_parameters semantics, and confirm behavior. All seven parameters are meaningfully explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('EDITS an existing GTM tag/trigger/variable/workspace') and scopes it to the four GTM entity kinds. It also names the sibling list tools (list_gtm_tags/triggers/variables/workspaces) that supply the required `path`, so an agent can distinguish this from create_gtm_tag, delete_gtm_entity, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: 'Provide only what changes', confirm=false previews vs confirm=true applies, and replace_parameters is 'needed only to REMOVE a parameter'. It does not explicitly route to create/delete siblings for the non-edit cases, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_linkedin_campaignUpdate LinkedIn CampaignDestructiveInspect
Updates a LinkedIn campaign (only the fields provided). start_date / end_date ('YYYY-MM-DD') change the run schedule (e.g. end an event campaign on the event day); the side you leave empty is kept. status: ACTIVE | PAUSED | DRAFT | ARCHIVED | COMPLETED | CANCELED. BIDDING: optimization_target sets the bid strategy — 'MAX_CLICK'/'MAX_IMPRESSION'/'MAX_CONVERSION'/'MAX_LEAD'/'MAX_VIDEO_VIEW'/'MAX_REACH' = automated 'Maximum Delivery' (pick the MAX_* matching the campaign objective; unit_cost ignored); 'NONE' = manual bidding (unit_cost REQUIRED, else it won't deliver); 'TARGET_COST_PER_CLICK/…' = target cost (unit_cost=target); 'CAP_COST_AND_MAXIMIZE_CLICKS/…' = cost cap (unit_cost=cap). cost_type: CPM | CPC | CPV (auto/cap modes use CPM). MAX_CONVERSION needs a conversion associated before it can go ACTIVE. ad_format changes the ad set's format (STANDARD_UPDATE | SPONSORED_UPDATE_NATIVE_DOCUMENT | SPONSORED_UPDATE_NATIVE_CAROUSEL | SINGLE_VIDEO | SPOTLIGHT | …) so a campaign that was created as a single-image set can be corrected here instead of in the UI, where the edit wipes the targeting. LinkedIn may refuse a format change once the campaign has creatives attached; the error is passed through as-is. Budget increases are subject to the safety limit. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| confirm | No | ||
| end_date | No | ||
| ad_format | No | ||
| cost_type | No | ||
| unit_cost | No | ||
| account_id | Yes | ||
| start_date | No | ||
| campaign_id | Yes | ||
| daily_budget | No | ||
| optimization_target | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
update_linkedin_campaign_groupUpdate LinkedIn Campaign GroupDestructiveInspect
Updates a LinkedIn campaign group (only the provided fields change). status: ACTIVE | PAUSED | DRAFT | ARCHIVED. Budget changes are subject to the safety cap (increases above +50% are blocked). start_date / end_date ('YYYY-MM-DD') change the run schedule; the side you leave empty is kept. objective_type tries to change the group's objective. Read this before using it: an objective set at GROUP level constrains every campaign inside the group, so a group created with ENGAGEMENT cannot host a Lead Generation ad set. LinkedIn normally refuses to change it once the group exists — the attempt is passed through and its real answer is returned, so you find out instead of guessing. If it is refused, the remedy is a new group with the objective left EMPTY (that is the default, and it keeps the group open to every objective). confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| confirm | No | ||
| end_date | No | ||
| group_id | Yes | ||
| account_id | Yes | ||
| start_date | No | ||
| total_budget | No | ||
| objective_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
update_linkedin_campaign_targetingUpdate LinkedIn TargetingDestructiveInspect
Updates a LinkedIn campaign's targeting (job title, function, seniority, industry, skill, company size, geography). Each parameter is a comma-separated list of URNs — found via linkedin_targeting_search (facet=titles/industries/skills/seniorities/employers...). If geo_urns is empty, country ('TR','US'...) is used. At least one location is required. LOCATION MODE: location_mode='permanent' targets only members whose PROFILE (permanent) location matches (facet profileLocations); location_mode='recent_and_permanent' (LinkedIn default) also includes recent/IP locations (facet locations). Leave EMPTY to keep the campaign's current location mode. Switching mode keeps the existing locations if geo_urns is empty. AUDIENCE LANGUAGE: audience_language sets the members' LinkedIn interface language (facet interfaceLocales) on the campaign — short code ('de','en','fr','es','tr'…) or full 'xx_XX'; empty=unchanged. This DOES change existing campaigns (the old language arg only applied when building targeting from scratch). EXCLUSIONS: every facet can be excluded — exclude_geo_urns (locations), exclude_industry_urns (industries — keep e.g. Legal Services / Education out), exclude_employer_urns (specific companies, urn:li:organization:...), exclude_title_urns, exclude_function_urns, exclude_seniority_urns, exclude_skill_urns, exclude_staff_count_urns. This MERGES: only the facets you pass are changed; everything else on the campaign (other excluded employers/industries/audiences, matched audiences, ad sizes, locales) is PRESERVED. confirm=false returns a preview that includes current_targeting, new_targeting, will_change and will_preserve — use it to READ the campaign's current targeting safely. Size URNs contain commas (urn:li:staffCountRange:(201,500)) and are parsed correctly.
MATCHED AUDIENCES (retargeting / ABM): include_audience_urns adds matched audiences as an inclusion, exclude_audience_urns excludes them (e.g. suppress existing customers) — comma-separated 'urn:li:adSegment:...' values from list_linkedin_audiences. Only audiences with usable_for_targeting=true work: an ARCHIVED or EXPIRED audience resolves to 0 members and the ad set stops delivering. Check the resulting size with linkedin_audience_forecast before going ACTIVE.
REMOVING A FACET: an empty parameter means 'leave unchanged', so to DELETE a facet pass the word none — e.g. exclude_audience_urns='none' drops the audience exclusion, industry_urns='none' drops the industry targeting. Works for every include and exclude_* parameter except geo_urns (a location is always required; replace it instead).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| country | No | ||
| geo_urns | No | ||
| language | No | en | |
| account_id | Yes | ||
| skill_urns | No | ||
| campaign_id | Yes | ||
| industry_urns | No | ||
| location_mode | No | ||
| job_title_urns | No | ||
| seniority_urns | No | ||
| exclude_geo_urns | No | ||
| staff_count_urns | No | ||
| audience_language | No | ||
| job_function_urns | No | ||
| exclude_skill_urns | No | ||
| exclude_title_urns | No | ||
| exclude_audience_urns | No | ||
| exclude_employer_urns | No | ||
| exclude_function_urns | No | ||
| exclude_industry_urns | No | ||
| include_audience_urns | No | ||
| exclude_seniority_urns | No | ||
| exclude_staff_count_urns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
update_linkedin_creative_statusUpdate LinkedIn Creative StatusADestructiveInspect
Changes a creative's (ad's) intended status: ACTIVE | PAUSED | DRAFT | ARCHIVED. Note: a creative that is UNDER_REVIEW cannot be paused. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| creative_id | Yes | ||
| intended_status | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, idempotentHint=false and openWorldHint=true. Beyond those, the description adds two real behavioral facts an agent cannot get elsewhere: the UNDER_REVIEW preclusion on pausing, and the preview mode via confirm=false. It stops short of describing permissions or reversibility of ARCHIVED.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation and its value set, followed by the constraint and the preview switch. No padding or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the destructive/preview semantics are covered. Remaining gaps are minor: no auth/permission prerequisites and no mention of what a status change does to an ad currently delivering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description is the only source of parameter meaning. It documents intended_status (via the enum list) and confirm (preview semantics), but says nothing about account_id or creative_id. Partial compensation for a total schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('changes a creative's (ad's) intended status') and enumerates the four valid target states, which is far more than a restatement of the name. It does not discriminate against the very similar siblings update_ad_status / update_microsoft_ad_status / update_tiktok_ad_status, so an agent must infer LinkedIn-scoping from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'confirm=false = preview' clause effectively tells the agent how to dry-run before committing, which is useful guidance. However there is no explicit when-to-use or when-not-to-use statement relative to the other status-update tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_meta_adUpdate Meta AdADestructiveInspect
Pauses, resumes or archives ONE Meta (Facebook/Instagram) ad, or renames it. Works on a single ad only: the other ads next to it keep delivering. Use it to switch off one ad that is wasting budget. ad_id comes from list_meta_ads. status: ACTIVE (resume / turn on) | PAUSED (pause / stop) | ARCHIVED. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| ad_id | Yes | ||
| status | No | ||
| confirm | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as non-read-only, destructive, non-idempotent and open-world, so the safety profile is covered. The description adds real context beyond that: only the targeted ad stops while neighbors keep delivering, the three status values and their plain-language meaning, and confirm=false as a preview/dry run. Auth requirements and rate limits remain unstated, hence 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and scope in the first clause, then adds operational detail in tight, pipe-separated fragments. Every sentence adds information; nothing is redundant padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the mutation semantics, status vocabulary and preview path are all covered. The only gap is account_id, which is required but never described, leaving a small documentation hole for a 5-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden and does so for most fields: ad_id's origin, the full meaning of each status value, and confirm's preview semantics. Renaming is implied via "renames it" but the name parameter is never explicitly tied to it, and account_id is undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names specific verbs (pauses, resumes, archives, renames) against a specific resource (ONE Meta ad), and immediately bounds scope to a single ad. An agent can distinguish this from delete_meta_ad, update_meta_ad_creative, and update_meta_adset without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger ("switch off one ad that is wasting budget") and states where the identifier comes from (list_meta_ads). It stops short of naming alternatives or exclusions, e.g. when to prefer delete_meta_ad over ARCHIVED, so it lacks the explicit when-not guidance of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_meta_ad_creativeUpdate Meta Ad CreativeADestructiveInspect
Replaces an existing ad's CREATIVE (image, text, destination link, and call-to-action button) WITHOUT deleting the ad — a new creative is built and swapped in, so the ad keeps its ID, learning phase and history (no delete-and-recreate). Use this to FIX a wrong CTA (e.g. an ad stuck on 'Learn More' that should be 'Shop Now'), swap the image, rewrite the copy, or change the link. page_id REQUIRED (list_meta_pages). Image: ONE of image_hash / image_base64 / image_url. cta_type: LEARN_MORE | SHOP_NOW | SIGN_UP | BUY_NOW | GET_OFFER | CONTACT_US | APPLY_NOW | ORDER_NOW | SEND_MESSAGE | WHATSAPP_MESSAGE | INSTAGRAM_MESSAGE | CALL_NOW | ... — leave EMPTY to auto-pick from the ad set's messaging destination, else the campaign objective. USE THIS TO REPAIR AN INSTAGRAM DM AD stuck on a link button: on a destination_type=INSTAGRAM_DIRECT ad set pass cta_type='INSTAGRAM_MESSAGE' and the ad starts delivering (LEARN_MORE there is error 1487891). For Click-to-WhatsApp/Messenger/Instagram-DM ads (cta_type WHATSAPP_MESSAGE / SEND_MESSAGE / INSTAGRAM_MESSAGE) you can set/change the pre-filled chat: welcome_message = the ready-written text that auto-populates the user's compose box, greeting = optional in-thread greeting, ice_breakers = up to 4 tappable quick replies (≤80 chars each; if given they replace the auto-fill). This is how to add a WhatsApp welcome/ice-breaker message to an existing ad. BACKGROUND MUSIC: a single-photo ad cannot carry audio on its own (Meta rule); music is added as an Advantage+ creative enhancement that turns the photo into a short video with a soundtrack. Set music=true to enroll it — it applies on Instagram Reels/Stories/Feed placements and is quietly ignored on Facebook Feed; the result reports back which enhancements actually took (never claims music when Meta declined). For a specific song, put the music in a short video (upload_meta_video) and pass its video_id here — the existing ad is converted to that video creative while keeping its ad ID and learning. enhancements = other Advantage+ features (e.g. image_enhancement) by name. TURNING THEM OFF: Meta switches several Advantage+ enhancements ON BY DEFAULT (video touch-ups, music, text variations), which silently changes the advertiser's creative. Pass enhancements_off="all" to opt every one of them OUT, or a comma separated list of names to opt out selectively. Use get_meta_ad_creative to see which ones are currently on. INSTAGRAM IDENTITY: the ad's current Instagram account is carried over to the new creative automatically; pass instagram_user_id only to switch it to a different Instagram account. The result reports which Instagram account the new creative actually uses. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| link | Yes | ||
| name | No | ||
| ad_id | Yes | ||
| music | No | ||
| confirm | No | ||
| message | Yes | ||
| page_id | Yes | ||
| cta_type | No | ||
| greeting | No | ||
| headline | No | ||
| video_id | No | ||
| image_url | No | ||
| account_id | Yes | ||
| image_hash | No | ||
| enhancements | No | ||
| ice_breakers | No | ||
| image_base64 | No | ||
| welcome_message | No | ||
| enhancements_off | No | ||
| instagram_user_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive/idempotent/openWorld, but the description adds rich behavior beyond them: ad ID and learning are preserved, music is silently ignored on Facebook Feed, Advantage+ enhancements default ON and can be opted out via enhancements_off, Instagram identity is carried over, and results report which enhancements actually took effect. No contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and the no-delete guarantee before the edge cases, and each block (CTA, DM ads, music, enhancements, Instagram identity) earns its place. It is a dense ALL-CAPS wall that is somewhat hard to scan, but the length is justified by the number of special cases it documents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the description is thorough for a 20-param mutation. It covers the esoteric parameters well; the only gap is that a couple of required/ordinary params (account_id, ad_id, headline) are not semantically explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 20 params, so the description carries the burden and does well: it enumerates cta_type values, the image_hash/image_base64/image_url exclusivity, welcome_message/greeting/ice_breakers roles, music, video_id, enhancements, enhancements_off, instagram_user_id and confirm=preview. It leaves a few params (account_id, name, headline, and the required message/link) only implied by 'rewrite the copy'/'change the link'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (replaces an ad's creative — image, text, link, CTA) and immediately contrasts it with the delete-and-recreate alternative, explicitly noting the ad keeps its ID, learning phase and history. An agent can tell exactly what operation this is 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use triggers (fix a wrong CTA, swap image, rewrite copy, change link, repair an Instagram DM ad, add a WhatsApp welcome message) and names alternatives/siblings (list_meta_pages, upload_meta_video, get_meta_ad_creative). It even specifies the error code (1487891) that indicates this tool is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_meta_adsetUpdate Meta Ad SetADestructiveInspect
Updates a Meta ad set (only the fields provided). status: ACTIVE | PAUSED | ARCHIVED. Budget increases are subject to the safety cap. DELIVERY SETTINGS (existing targeting is preserved; only these fields change):
• publisher_platforms — narrows placement; comma-separated: facebook,instagram,audience_network,messenger,whatsapp,threads (e.g. "instagram" = Instagram only).
• facebook_positions / instagram_positions / whatsapp_positions / messenger_positions / audience_network_positions / threads_positions — the slot INSIDE a platform, comma-separated (facebook/instagram: story, feed, reels…; whatsapp: status). "Story + WhatsApp Status only" = publisher_platforms="facebook,instagram,whatsapp" + facebook_positions="story" + instagram_positions="story" + whatsapp_positions="status". Pass "-" to drop the restriction for that platform (all of its slots come back). See create_meta_adset for the full slot list.
• audience_expansion — "off" (turns off Advantage custom audience / audience expansion; prevents a retargeting set from drifting from the list to a cold audience) or "on".
TARGETING (omitted fields keep their current value; Meta replaces targeting atomically, so the tool reads the live spec and merges):
• age_min / age_max — 18..65. • genders — "1" (men), "2" (women) or "1,2"; "-" CLEARS the restriction (all genders). "" means leave unchanged. Anything else is REJECTED — an invalid value used to silently clear the restriction and widen the ad set to everyone.
• countries / regions / cities — comma-separated; region & city KEYS are the numeric key from search_meta_interests(kind="adgeolocation") (NOT the place name). Passing any of them replaces the location set.
• places / custom_locations — RADIUS targeting (JSON). places = [{"key":"2034720566774469","radius":5.7,"distance_unit":"mile"}] (a pinned place + drop-radius; key from search_meta_interests(kind="adgeolocation")); custom_locations = [{"latitude":41.01,"longitude":28.97,"radius":10,"distance_unit":"kilometer"}]. distance_unit "mile" (1-50) or "kilometer" (1-80), clamped for you. Passing either replaces the location set.
• geo_locations — the raw Meta geo_locations object (from another ad set's targeting.geo_locations) passed through verbatim to reproduce a proven radius/place target; it overrides countries/regions/cities/places/custom_locations, drops the deprecated location_types and clamps radius.
• interest_ids — comma-separated interest IDs; "" clears interest targeting (demographic entries are KEPT).
• relationship_statuses / education_statuses — comma-separated numeric codes (3 = MARRIED; see create_meta_adset for the full code list). AND-ed with interests, so you can add "married" to an existing interest-targeted set without touching it.
• family_statuses / life_events / industries / behaviors — comma-separated IDs from search_meta_interests(kind="adTargetingCategory", category_class=...) — parents & child age brackets, newly-weds/recently-moved, industry, behaviours. Each field you pass replaces only that dimension; the ones you omit are preserved.
OPTIMIZATION: • optimization_goal (e.g. OFFSITE_CONVERSIONS) • pixel_id + custom_event_type (e.g. PURCHASE) — fixes an ad set optimizing for the wrong conversion event without rebuilding the campaign. • custom_conversion_id (from list_meta_custom_conversions) — points the ad set at a specific Meta CUSTOM CONVERSION instead of a standard pixel event; keep optimization_goal OFFSITE_CONVERSIONS. custom_conversion_id is MUTUALLY EXCLUSIVE with pixel_id / custom_event_type (Meta rejects the combination with "Promoted Object Invalid") — pass one or the other. NOTE: Meta forbids changing the conversion/optimization of an ALREADY-PUBLISHED ad set (error subcode 3260011 "Can't Make Edits to Published Ad Set"); to switch a live ad set's conversion you must create a new ad set.
MESSAGING (Click-to-WhatsApp / click-to-Messenger): • destination_type WHATSAPP | MESSENGER | INSTAGRAM_DIRECT | PHONE_CALL (+ page_id) — pins a CONVERSATIONS ad set's chat destination without rebuilding it (the Page needs a WhatsApp number connected for WHATSAPP). page_id also sets/overrides the messaging promoted_object.
confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| cities | No | ||
| places | No | ||
| status | No | ||
| age_max | No | ||
| age_min | No | ||
| confirm | No | ||
| genders | No | ||
| page_id | No | ||
| regions | No | ||
| adset_id | Yes | ||
| pixel_id | No | ||
| behaviors | No | ||
| countries | No | ||
| account_id | Yes | ||
| industries | No | ||
| life_events | No | ||
| daily_budget | No | ||
| interest_ids | No | ||
| geo_locations | No | ||
| family_statuses | No | ||
| custom_locations | No | ||
| destination_type | No | ||
| custom_event_type | No | ||
| optimization_goal | No | ||
| threads_positions | No | ||
| audience_expansion | No | ||
| education_statuses | No | ||
| facebook_positions | No | ||
| whatsapp_positions | No | ||
| instagram_positions | No | ||
| messenger_positions | No | ||
| publisher_platforms | No | ||
| custom_conversion_id | No | ||
| relationship_statuses | No | ||
| audience_network_positions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it destructive/openWorld/non-idempotent, and the description goes well beyond by disclosing the budget safety cap, the atomic targeting merge/read-live behaviour, the 'Promoted Object Invalid' mutual exclusion between custom_conversion_id and pixel_id/custom_event_type, Meta error subcode 3260011, the historical silent-clearing bug for genders, and confirm=false preview semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is long and dense, but the length is largely justified by 36 undocumented parameters, and it is front-loaded with the core purpose before grouping settings into labelled sections (DELIVERY SETTINGS, TARGETING, OPTIMIZATION, MESSAGING). Some examples (e.g. the Story+WhatsApp Status walkthrough) could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a destructive mutation tool with 36 params at 0% schema coverage, this description supplies the merge semantics, value encodings, validation rules, and Meta-specific failure modes an agent needs. An output schema exists, so return-value detail is correctly omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 36 params, so the description carries the full burden and does so: it defines clear semantics for '-' (drop restriction), '' (leave unchanged), the numeric key requirement for regions/cities, the JSON shape of places/custom_locations, and the codes for genders/relationship_statuses. Only a few purely administrative params (name, account_id, adset_id, daily_budget) are left to common sense.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource and a scoping rule ('only the fields provided'), then distinguishes itself from the sibling create_meta_adset by referencing it for the full slot list. An agent can identify the tool immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when/when-not guidance: it states that changing the conversion of an ALREADY-PUBLISHED ad set is forbidden and requires creating a new ad set, names list_meta_custom_conversions and search_meta_interests as prerequisite lookup tools, and explains that omitted fields are preserved. Alternatives and exclusions are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_meta_campaignUpdate Meta CampaignADestructiveInspect
Updates a Meta campaign (only the provided fields). status: ACTIVE | PAUSED | ARCHIVED (use PAUSED to pause). daily_budget in the main unit; increases are subject to the safety cap (above +50% is blocked). confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| daily_budget | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, and non-idempotency, so the safety profile is covered. The description adds real hidden behavior beyond that: a safety cap blocking budget increases above +50%, and confirm=false acting as a preview/dry-run. It stops short of covering permissions, reversibility, or which downstream entities are affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense fragments, front-loading the core action and then the two highest-risk parameter semantics (status enum, budget cap). No filler sentences; every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the mutation's key behavioral constraints. Only minor gaps remain around the undocumented name parameter and any note on how changes can be inspected or reversed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it meaningfully does: it enumerates valid status values, states that daily_budget uses the main unit, and defines the confirm preview flag. The name, account_id, and campaign_id parameters remain undocumented, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Updates a Meta campaign') and clarifies the partial-update scope with 'only the provided fields'. It does not explicitly distinguish itself from close siblings like update_campaign or pause_campaign, though the status note hints at the relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers implicit routing ('use PAUSED to pause') and partial-update semantics, but never states when this tool should be chosen over update_campaign, update_campaign_status, or pause_campaign. Usage 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.
update_meta_custom_conversionRename Meta Custom ConversionADestructiveInspect
Renames a custom conversion, or sets its description / default conversion value. conversion_id from list_meta_custom_conversions.
USE THIS WHEN A CUSTOM CONVERSION WAS SET UP WRONG: Meta does not let this app delete or archive one (delete returns a permissions error, and writing is_archived is silently ignored), so the honest fix is to rename it — e.g. prefix it with 'SILINECEK' / 'DELETE ME'; final removal is done in Meta Events Manager → Custom conversions, where it takes two clicks. Never claim you deleted or archived it.
default_conversion_value: leave at -1 to keep the current value. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| confirm | No | ||
| description | No | ||
| conversion_id | Yes | ||
| default_conversion_value | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that delete/archive paths fail, that is_archived writes are silently dropped, that renaming with a 'DELETE ME' prefix is the intended workaround, and that confirm=false is a preview. Annotations only say destructiveHint=true/idempotentHint=false. The one gap is that it does not say what the tool returns or whether the name is overwritten vs. appended.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the when-to-use block, then per-parameter notes. Every sentence carries information, though the all-caps emphasis and the two-clicks detail in Events Manager are slightly more color than an agent strictly needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation tool with an output schema already present, the description covers purpose, gating scenario, key parameter defaults, and the preview flag. Nothing required to call it correctly is missing, and return values are correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: conversion_id's source is named, default_conversion_value=-1 is explained as 'keep current', and confirm=false is explained as preview. name and description are only implied by the opening sentence, so it stops short of full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb (renames) and resource (custom conversion) plus the secondary operations it supports (setting description and default conversion value). It also names the sibling that supplies the id (list_meta_custom_conversions), so an agent can distinguish it from create_meta_custom_conversion without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE THIS WHEN...' clause tied to a concrete scenario (a conversion set up wrong), plus a statement of what alternatives do not work (delete returns a permissions error, is_archived is silently ignored) and where the real removal happens (Meta Events Manager). No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_meta_instagram_post_adMeta Instagram Post Ad UpdateADestructiveInspect
Adds or changes the pre-filled WhatsApp/Messenger message (and optionally the button) on an EXISTING Instagram-post ad WITHOUT unlinking it from the organic post. Use this instead of update_meta_ad_creative whenever the ad was built from an Instagram post: update_meta_ad_creative rebuilds the creative from scratch and would drop source_instagram_media_id, so the ad would stop being the organic post and every like/comment collected so far would disappear from it. Here the Instagram media and the Instagram account are read off the live creative and carried over unchanged; the ad id and its learning are preserved and Meta re-reviews the new creative. welcome_message = the auto-filled compose text, greeting = optional in-thread greeting, ice_breakers = up to 4 tappable quick replies (≤80 chars). cta_type (WHATSAPP_MESSAGE / SEND_MESSAGE) is optional and REQUIRES link; leave both empty to keep the button coming from the ad set's destination_type. confirm=false = preview.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | ||
| ad_id | Yes | ||
| confirm | No | ||
| cta_type | No | ||
| greeting | No | ||
| account_id | Yes | ||
| ice_breakers | No | ||
| welcome_message | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, and the description correctly aligns with that mutation profile. It adds substantial context annotations cannot convey: the creative is preserved rather than rebuilt, learning is retained, Meta re-reviews the new creative, and confirm=false previews without applying. It does not, however, mention auth/scope requirements or re-review latency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and alternative-routing in the first sentence, then packs parameter semantics into the tail. It is dense and long, but nearly every clause (engagement loss, carried-over media, button fallback) earns its place; a slightly tighter structure would help readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, creative-mutating tool with an output schema present (so return values need not be described), the description covers the critical decision inputs: preservation behavior, re-review, the alternative tool, and every non-obvious parameter. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden and largely does: welcome_message, greeting, ice_breakers (with the ≤4 / ≤80-char limits), cta_type (with enum values and the link dependency), link, and confirm semantics are all explained. account_id and ad_id are only implied as the target identifiers, which is a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Adds or changes the pre-filled WhatsApp/Messenger message ... on an EXISTING Instagram-post ad') and immediately names the sibling it is not (update_meta_ad_creative), so the agent can distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool versus update_meta_ad_creative ('whenever the ad was built from an Instagram post') and explains the failure mode of the alternative (drops source_instagram_media_id, loses engagement). Includes a preview path via confirm=false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_microsoft_ad_groupUpdate Microsoft Ad GroupADestructiveInspect
UPDATES a Microsoft (Bing) ad group's settings. IMPORTANT: in Bing the campaign's END DATE lives on the AD GROUP — so "when does my campaign stop?" / "extend it by a month" is answered here, not on the campaign. Also sets the default CPC bid, start date, status and network.
end_date / start_date: 'YYYY-MM-DD'. status: Active | Paused. network: OwnedAndOperatedAndSyndicatedSearch (Bing + partners) | OwnedAndOperatedOnly (Bing only) | SyndicatedSearchOnly. Leave a field empty to keep it unchanged. confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| confirm | No | ||
| cpc_bid | No | ||
| network | No | ||
| end_date | No | ||
| account_id | Yes | ||
| start_date | No | ||
| ad_group_id | Yes | ||
| campaign_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is partly covered. The description adds genuinely useful behavior beyond that: empty field = unchanged, and confirm=false runs a preview/dry run before committing a destructive write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the highest-value insight (Bing's end date lives on the ad group), then a compact field-format block. Slightly dense and uses emphatic caps, but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-param destructive mutation with an output schema present, the description covers dry-run behavior, empty-field preservation, and the ambiguous enum/date formats. Missing only ancillary details like auth requirements or side effects of changing dates/status.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does substantial work: date formats ('YYYY-MM-DD'), the status enum (Active | Paused), the three network enum values with plain-language meanings, and the empty-string semantics for optional fields. The remaining params (name, cpc_bid, account_id, campaign_id, ad_group_id) get no format guidance, so it isn't complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a clear verb+resource (update a Microsoft/Bing ad group's settings) and enumerates the updatable fields (CPC bid, start/end date, status, network). It helpfully distinguishes itself from the campaign-level siblings by pointing out that the campaign end date lives on the ad group. It does not, however, differentiate itself from the close sibling update_microsoft_ad_group_status, which also writes status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real routing guidance: end-date questions are answered here rather than on the campaign, empty fields preserve existing values, and confirm=false produces a preview. It stops short of naming the alternative sibling (update_microsoft_ad_group_status) for status-only changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_microsoft_ad_group_statusMicrosoft Ad Group StatusADestructiveInspect
Changes an ad group's status. status: Active | Paused. (campaign_id required.) confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| confirm | No | ||
| account_id | Yes | ||
| ad_group_id | Yes | ||
| campaign_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds value beyond them by disclosing the dry-run/confirm semantics — an agent knows how to preview before committing a destructive change — plus the campaign_id prerequisite. It stops short of saying what the status change affects (delivery halt) or whether it is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short telegraphic sentences, front-loaded with the core action and no filler; every clause carries information. The parenthetical "(campaign_id required.)" is slightly awkward but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the annotations carry the destructive/idempotency profile. Combined with the enum values and confirm preview loop, the description supplies everything needed to call this mutation correctly; only the undocumented id parameters keep it from being exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does partially: it supplies the status enum values (Active | Paused) that the schema lacks, and explains confirm's true/false behavior. However, account_id, ad_group_id, and customer_id (including its empty-string default) remain undocumented in both places, so the majority of the 6 parameters carry no semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Changes an ad group's status") and enumerates the target states, so the agent knows exactly what is mutated. It does not, however, distinguish this from the sibling update_microsoft_ad_group or update_microsoft_ad_status, leaving the agent to infer the boundary from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real operational guidance for the two-step flow (confirm=false previews, confirm=true applies) and flags campaign_id as required, which is genuinely useful. But it offers no when-to-use-vs-alternative guidance or exclusions relative to the many sibling status tools, 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.
update_microsoft_ad_statusMicrosoft Ad StatusBDestructiveInspect
Changes ad status. status: Active | Paused. ad_type is the ad type (default ResponsiveSearch). (ad_group_id required.) confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| status | Yes | ||
| ad_type | No | ResponsiveSearch | |
| confirm | No | ||
| account_id | Yes | ||
| ad_group_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: the confirm=false preview / confirm=true apply two-step pattern, which is not derivable from annotations or schema defaults alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded, with the core action first and parameter notes after. The parenthetical fragments ('(ad_group_id required.)') are terse but each sentence carries information and there is no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the mutation's key mechanic (preview vs apply) is covered. However, for a destructive 7-parameter write with 0% schema documentation, the description leaves three parameters undocumented and offers no scoping or permission context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the description must compensate. It documents status (enum values), ad_type (default), ad_group_id (required), and confirm (behavior), but leaves ad_id, account_id, and customer_id entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Changes ad status') and enumerates the valid status values, so the agent knows exactly what the tool mutates. It does not distinguish itself from the generic sibling update_ad_status, leaving the Microsoft-specific routing to be inferred from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus update_ad_status, update_microsoft_ad_group_status, or update_microsoft_campaign_status. The only procedural guidance is the confirm preview flow, which is a parameter mechanic rather than a when-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_microsoft_campaign_budgetMicrosoft Campaign BudgetADestructiveInspect
Updates a campaign's daily budget. Subject to the same budget guardrails as Google/Meta/LinkedIn/TikTok: +50% per change, +100% cumulative per 24h, and no cut deeper than -80%. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| customer_id | No | ||
| daily_budget | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description supplies rich behavioral detail absent from the annotations: hard guardrails (+50% per change, +100% cumulative per 24h, -80% max cut) and a preview/apply confirm flow. This meaningfully warns the agent about mutation limits beyond destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the action and guardrails before the confirm mechanics. Every sentence carries weight; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the guardrails plus confirm semantics cover the critical call requirements. Minor gaps remain around the customer_id vs account_id distinction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the confirm parameter's two modes clearly, but adds no meaning for account_id, campaign_id, customer_id, or daily_budget beyond self-evident names, leaving the customer_id purpose undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Updates) and resource (a campaign's daily budget) so an agent knows exactly what changes. It is platform-scoped to Microsoft via the name and cross-references Google/Meta/LinkedIn/TikTok guardrails, though it never contrasts with the close sibling set_campaign_budget.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The confirm=false/confirm=true preview-vs-apply rule is useful workflow guidance, but there is no explicit when-to-use guidance relative to set_campaign_budget or other budget tools. 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.
update_microsoft_campaign_statusMicrosoft Campaign StatusADestructiveInspect
Changes campaign status. status: Active | Paused. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| confirm | No | ||
| account_id | Yes | ||
| campaign_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false, so the safety profile is covered. The description adds real behavioral context beyond them: the two-phase preview/apply gate controlled by confirm, which is not derivable from the annotations. It still doesn't say what side effects apply to child ads/budgets or what auth is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three telegraphic fragments, front-loaded with the core action and with zero filler. The style is terse enough to be slightly clipped, but every clause carries information and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a destructive mutation tool the description covers the key gating behavior and allowed enum values, but it omits the meaning of the remaining identifiers and any note on scope or reversibility. Adequate but not full.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it partially does by documenting the status values (Active | Paused) and the confirm semantics. However, account_id, campaign_id, and customer_id — three of five parameters, including two required ones — receive no explanation in either the schema or the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Changes campaign status") and the Microsoft scoping in title, so an agent can distinguish it from update_microsoft_ad_status or update_microsoft_ad_group_status. It does not, however, differentiate itself from the nearby update_campaign_status or pause_campaign siblings, so the platform/level distinction is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a genuine usage pattern for the confirm flag ("confirm=false = preview, confirm=true applies"), which tells the agent to preview before committing. It offers no when-to-use guidance relative to alternatives such as pause_campaign or update_campaign_status, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_microsoft_keywordUpdate Microsoft KeywordADestructiveInspect
Updates a keyword's bid (bid>0) and/or status (Active|Paused). confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| bid | No | ||
| status | No | ||
| confirm | No | ||
| account_id | Yes | ||
| keyword_id | Yes | ||
| ad_group_id | Yes | ||
| customer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false. The description adds real value beyond them: the confirm preview/apply gate, which the annotations never mention, plus the bid>0 constraint and status enum. It still doesn't say what is destroyed or whether existing values are overwritten, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loading the mutation and constant constraints before the confirm gate. No filler; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be described, and annotations cover the safety profile. The description adds the crucial confirm-gate semantics and value constraints. It remains slightly thin on identifier parameters, but for this mutation complexity it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden. It meaningfully documents three of seven params (bid>0, status Active|Paused, confirm preview/apply), but account_id, ad_group_id, keyword_id, and customer_id are left unexplained. Partial compensation for a 0% coverage schema lands at 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (updates) and a specific resource (a keyword) plus the two mutable fields (bid, status). An agent can distinguish this from read siblings like list_microsoft_keywords or add_microsoft_keywords. It stops short of naming a sibling alternative, keeping it at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete usage rules: bid must be >0, status accepts Active|Paused, and confirm=false previews while confirm=true applies. This tells the agent when/how to invoke the write. It does not name an alternative tool or state prerequisites (e.g., where keyword_id comes from), so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_microsoft_responsive_search_adUpdate Microsoft Responsive Search AdADestructiveInspect
EDITS the copy of an existing Microsoft (Bing) Responsive Search Ad — swap a weak headline or description WITHOUT deleting and rebuilding the ad (a rebuild resets its performance history). PARTIAL update: only the fields you pass change; the rest are read from the live ad and written back. Microsoft limits: 3-15 headlines (≤30 chars), 2-4 descriptions (≤90 chars) — validated before the call. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| path1 | No | ||
| path2 | No | ||
| confirm | No | ||
| final_url | No | ||
| headlines | No | ||
| account_id | Yes | ||
| ad_group_id | Yes | ||
| customer_id | No | ||
| descriptions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=false, but the description adds valuable context beyond them: it is a partial read-modify-write (only passed fields change, others are read from the live ad and written back), and it runs validation limits before the call. It does not fully spell out what specifically gets overwritten or permission requirements, keeping it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Densely front-loaded: purpose, then partial-update semantics, then platform limits, then the confirm workflow. Every sentence carries information and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description adequately covers mutation behavior plus the preview/apply gate for a 10-param tool. The main gap is that only three of the ten parameters receive semantic detail, leaving some room for a fully complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate, and it does add real meaning for the key params: headlines (3-15, ≤30 chars), descriptions (2-4, ≤90 chars), and confirm (preview vs apply). However, path1, path2, final_url, customer_id, account_id, ad_group_id, and ad_id go unaddressed across 10 total params, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (EDITS) and resource (Microsoft/Bing Responsive Search Ad copy), and names the exact operation target (headline/description swap). It also implicitly distinguishes itself from a delete-and-recreate approach by contrasting with a rebuild, so an agent can identify 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: swap weak copy without deleting/rebuilding because a rebuild resets performance history, and explains the confirm=false preview vs confirm=true apply workflow. It stops short of naming explicit sibling alternatives (e.g. update_rsa or create_microsoft_responsive_search_ad), so it earns 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.
update_pmax_asset_groupUpdate PMax Asset GroupADestructiveInspect
Updates — or REMOVES — a Performance Max ASSET GROUP itself (not its individual assets): landing page (final_url), name, status and the display path segments path1/path2. Only the arguments you pass are changed; the rest stay as they are. status: 'ENABLED' | 'PAUSED' | 'REMOVED'. 'REMOVED' deletes the whole asset group together with every headline, description, image and video linked to it — this is the ONLY way to get rid of the mandatory TEXT assets Google refuses to let you unlink one by one (an asset group must always keep 3 headlines, 1 long headline and 2 descriptions, so removing assets alone can never empty it). Removal CANNOT be undone: the group and its links are gone for good, so confirm it with the account owner first. Use get_pmax_assets to see the current values. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| path1 | No | ||
| path2 | No | ||
| status | No | ||
| confirm | No | ||
| final_url | No | ||
| customer_id | Yes | ||
| asset_group_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, but the description adds far more than the flag: cascade deletion of every linked headline/description/image/video, irreversibility ('gone for good'), the confirm-with-owner precaution, and the partial-update guarantee that only passed arguments change. This is rich behavioral context the annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is long, but front-loaded with the critical distinction (group vs assets) and the destructive warning, and virtually every sentence carries load-bearing information. A slightly tighter phrasing of the TEXT-asset constraint could shave a clause, but nothing is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, partially-updating mutation tool this covers everything an agent needs: scope, mutation semantics, enum values, dry-run, irreversibility, and a discovery alternative. An output schema exists, so return-value explanation is correctly omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry the load, and it does: it defines the status enum values ('ENABLED'|'PAUSED'|'REMOVED'), explains confirm=false as dry-run, and clarifies that only supplied arguments mutate. Only customer_id and asset_group_id are left implicit, which are near-obvious identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Updates — or REMOVES — a Performance Max ASSET GROUP itself') and explicitly disambiguates from the sibling update_pmax_assets by clarifying 'not its individual assets'. An agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions for use (updating final_url, name, status, path1/path2), names an alternative (get_pmax_assets to see current values), and documents the dry-run via confirm=false. It also flags the one scenario where removal is the intended path (mandatory TEXT assets), which is exactly the kind of usage guidance that matters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pmax_assetsUpdate PMax AssetsADestructiveInspect
Adds AND removes text assets in an existing Performance Max asset group. headlines/long_headlines/descriptions add new text. remove_resource_names: comma-separated resource_name values from get_pmax_assets — those assets are unlinked from the group. Doing both in one call REPLACES an asset atomically (needed when a field is already at its maximum, e.g. 15 headlines). Google minimums are enforced before anything is sent: 3 headlines, 1 long headline, 2 descriptions, 1 business name. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| headlines | No | ||
| customer_id | Yes | ||
| descriptions | No | ||
| asset_group_id | Yes | ||
| long_headlines | No | ||
| remove_resource_names | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, and the description adds substantial context beyond them: atomic replace semantics, that minimums (3 headlines, 1 long headline, 2 descriptions, 1 business name) are validated before anything is sent, and that confirm=false produces a dry-run. These are non-obvious behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior, then progressively adds the remove/add mechanics, the atomic-replace rationale, minimums, and dry-run. Every sentence conveys distinct, load-bearing information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with an output schema (so return values need no explanation), the description covers validation, safety, dry-run, and the add/remove interplay. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry the burden, and it does: it explains the three additive fields, the comma-separated remove_resource_names source, and the confirm dry-run flag. Only the two obvious ID fields (customer_id, asset_group_id) go unmentioned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb pair and resource: adds AND removes text assets in an existing PMax asset group. It then delineates which fields add (headlines/long_headlines/descriptions) versus which field removes (remove_resource_names), so an agent can distinguish behavior 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: remove_resource_names comes from get_pmax_assets, and combining add+remove is the way to atomically REPLACE when a field is at maximum. However it doesn't explicitly name when NOT to use it or point to alternatives like update_pmax_asset_group or add_pmax_images.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_rsaUpdate Responsive Search AdADestructiveInspect
EDITS the copy of an existing Google Ads RESPONSIVE SEARCH AD (RSA) in place — swap, drop or add a headline or description while keeping the SAME ad and its performance history. This is the tool for "remove that one headline", "replace this description", "add two more headlines"; rebuilding the ad instead would reset its learning, burn one of the 3 enabled-RSA slots in the ad group, and leave a paused near-duplicate behind.
TWO WAYS to give the change, and the partial one is usually what you want: • PARTIAL (recommended): remove_headlines / add_headlines / remove_descriptions / add_descriptions. The live ad is read first, only your delta is applied, and everything you did not mention — including each surviving asset's PIN — is written back unchanged. remove_* matches on the exact text; a text that is not in the ad is reported instead of silently ignored. • FULL REPLACE: headlines / descriptions replace ALL existing ones, so you must re-send every line you want to keep. Do not mix the two for the same field. Google limits either way: 3-15 headlines ≤30 chars, 2-4 descriptions ≤90 chars — checked before the call, so an edit that would leave too few is refused rather than rejected by Google.
final_url/path1/path2 optional. To change ONLY the destination URL, pass just final_url (leave the copy fields empty) — this updates final_urls on standard ads (RSA and other final-URL ad types). NOTE: call-only ads (CALL_AD) do NOT allow their URL to be edited via the API (Google returns VALUE_MUST_BE_UNSET); a call ad must be recreated with the new URL. To DELETE an ad entirely use update_ad_status(status='REMOVED'). PINNING: headline_pins / description_pins are optional lists in the SAME ORDER as the headlines/descriptions given; each entry pins that text to a fixed position — headline 1/2/3, description 1/2 (0/empty = unpinned). E.g. headline_pins=[1,0,0] pins the first headline to position 1. Google's own field names are accepted too, so headline_pins=['HEADLINE_1','',''] means the same thing. A position-to-text dictionary is NOT accepted — the list must follow the same order as the headlines you send. Text or pin changes start a new Google review. Pins are part of the replaced content, so send them together with the headlines/descriptions. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| path1 | No | ||
| path2 | No | ||
| confirm | No | ||
| final_url | No | ||
| headlines | No | ||
| customer_id | Yes | ||
| descriptions | No | ||
| add_headlines | No | ||
| headline_pins | No | ||
| add_descriptions | No | ||
| description_pins | No | ||
| remove_headlines | No | ||
| remove_descriptions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/non-idempotent, and the description adds substantial context beyond them: partial vs full replace semantics, that unmatched remove_* text is reported rather than ignored, pre-call Google limit validation (3-15 headlines ≤30 chars, 2-4 descriptions ≤90 chars), the call-only ad VALUE_MUST_BE_UNSET restriction, that edits trigger a new Google review, and confirm=false dry-run behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but densely structured with bullets and labeled sections, and the core distinction (partial vs full replace) is front-loaded. Given 14 undocumented parameters, nearly every sentence earns its place, though it is slightly verbose in places (e.g., the pinning example redundancy).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter mutation tool with an output schema (so return values need not be described), the description covers the operation modes, constraints, pre-call validation, platform-specific caveats, and safety routing. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the burden and does most of it well: it explains the partial (add_*/remove_*) vs full (headlines/descriptions) families, that they must not be mixed, pin list ordering and accepted formats, and the final_url-only edit case plus confirm dry-run. The one gap is path1/path2, which are only called 'optional' with no explanation of their URL-path purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('EDITS the copy of an existing ... RESPONSIVE SEARCH AD in place') and immediately scopes the operation by its effect on the existing ad and its history. It clearly distinguishes itself from create_responsive_search_ad and update_ad_status ('To DELETE an ad entirely use update_ad_status').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the triggering intents ('remove that one headline', 'replace this description') and warns against the alternative of rebuilding the ad, listing the concrete costs (reset learning, burn an RSA slot, paused near-duplicate). It also routes deletion to the correct sibling tool, covering when/when-not and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sitelinkUpdate Sitelink (text / descriptions / URL)ADestructiveInspect
Edits an EXISTING sitelink in place: change its link text, its two DESCRIPTION lines, or the page it points to, without deleting and recreating it. Use this to add the description lines to a sitelink that has none (descriptions give the ad noticeably more space on the results page), to fix a typo, or to repoint a sitelink whose landing page moved. Find the asset_id with list_extension_assets or list_assets(asset_type='SITELINK') — both now report description1/description2 and flag descriptions_missing. Only the fields you pass are changed; an empty field keeps its current value. Google shows the descriptions only as a PAIR, so a sitelink must end up with both lines or neither. Limits: link text 25 characters, each description 35. IMPORTANT: a sitelink is an account-level asset, so editing it changes the sitelink in EVERY campaign and ad group it is linked to, not only one campaign. confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| asset_id | Yes | ||
| final_url | No | ||
| link_text | No | ||
| customer_id | Yes | ||
| description1 | No | ||
| description2 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds high-value context beyond them: the sitelink is an account-level asset so edits propagate to EVERY linked campaign and ad group, unpassed fields retain their values, and descriptions must be set as a pair or neither. These are exactly the consequences an agent needs before mutating.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but every sentence earns its place: the in-place edit statement is front-loaded, followed by use cases, discovery method, mutation semantics, the account-level warning, and the dry-run flag. No filler or repetition despite the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param destructive mutation with 0% schema coverage, the description covers discovery, partial-update semantics, field constraints, blast radius, and dry-run. An output schema exists, so return values need no explanation. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden and does: it explains link_text, description1/description2 (with the pair constraint), final_url repointing, asset_id sourcing, and confirm as dry-run. Character limits (25/35) add constraints absent from the schema. Only customer_id is left implicit, which is trivial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('edits') and resource ('an EXISTING sitelink') plus the exact editable fields (link text, two description lines, URL). Explicitly distinguishes itself from delete-and-recreate workflows and from create tools, so an agent can pick it over siblings like manage_extension_assets or remove_extension_assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use scenarios (adding missing descriptions, fixing a typo, repointing a moved landing page) and names the discovery tools (list_extension_assets, list_assets(asset_type='SITELINK')) to obtain the required asset_id. It also documents the dry-run switch (confirm=false), 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.
update_tiktok_adUpdate TikTok Ad CreativeADestructiveInspect
UPDATES a TikTok ad's CREATIVE in place — the ad text, landing page, call-to-action or display name. Until now only the status could be changed, so fixing a typo or swapping a landing page meant deleting and recreating the ad, which DESTROYS its social proof (likes, comments, shares) and performance history.
Leave a field empty to keep it unchanged — the ad's identity, name, format and creative source are read from the ad itself and resent unchanged (TikTok validates the whole creative on every update, not just the changed fields). On a SPARK ad (one built from an organic TikTok post) the text and display name come from the post and cannot be changed here — only the CTA, landing page and ad name can. Note: TikTok's API does not allow editing ads inside an Upgraded Smart+ campaign at all; those must be edited in TikTok Ads Manager. call_to_action e.g. LEARN_MORE | SHOP_NOW | SIGN_UP | CONTACT_US. confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| ad_name | No | ||
| ad_text | No | ||
| confirm | No | ||
| adgroup_id | Yes | ||
| display_name | No | ||
| advertiser_id | Yes | ||
| call_to_action | No | ||
| landing_page_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, openWorldHint=true and readOnlyHint=false. The description adds substantial context beyond them: empty fields are resent unchanged, the whole creative is validated on every update, SPARK ad text/display name cannot be changed, and confirm=false previews the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite covering several edge cases, the description is front-loaded with the core purpose and then layers constraints efficiently. Every sentence carries operational value, and there is no redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the available annotations, the existing output schema, and the tool's complexity, the description is complete enough for correct invocation. It covers mutation behavior, preview mode, platform-specific limitations, and sibling-tool disambiguation without needing to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for most parameters: it explains empty-field behavior, names the editable creative fields, gives CTA examples, and explains confirm=false. It does not, however, explain the roles of the required advertiser_id, adgroup_id, and ad_id parameters beyond implied identity context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it updates a TikTok ad's creative in place, naming the editable fields (ad text, landing page, call-to-action, display name). It clearly distinguishes itself from status-change siblings by noting that until now only status could be changed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent: use this to fix typos or swap landing pages without deleting/recreating the ad, while posting status updates belongs elsewhere. It also states when-not conditions, including SPARK ad limitations and that Upgraded Smart+ campaign ads cannot be edited via API.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tiktok_adgroupUpdate TikTok Ad Group TargetingADestructiveInspect
UPDATES a TikTok ad group's TARGETING, BID and SCHEDULE in place. Until now only status and budget could be changed, so any targeting tweak meant deleting and rebuilding the ad group — which RESETS the learning phase and throws away performance history. Use this to widen/narrow locations, ages, genders, interests or audiences, change the bid, or extend the run dates without losing what the algorithm already learned.
Leave a field empty to keep it unchanged. location_ids / age_groups / genders / interest_category_ids / audience_ids / excluded_audience_ids are comma-separated. schedule_start / schedule_end: 'YYYY-MM-DD HH:MM:SS'. Passing bid_price switches the ad group to manual bidding automatically (bid_type=BID_TYPE_CUSTOM) — TikTok silently ignores a bid sent without it. Set bid_type=BID_TYPE_NO_BID (with no bid_price) to go back to automatic bidding. pacing: PACING_MODE_SMOOTH (standard) | PACING_MODE_FAST (accelerated; needs a manual bid). confirm=false previews.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| pacing | No | ||
| confirm | No | ||
| genders | No | ||
| bid_type | No | ||
| bid_price | No | ||
| adgroup_id | Yes | ||
| age_groups | No | ||
| audience_ids | No | ||
| location_ids | No | ||
| schedule_end | No | ||
| advertiser_id | Yes | ||
| schedule_start | No | ||
| excluded_audience_ids | No | ||
| interest_category_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=false but carry no operational detail. The description adds rich behavior: empty fields are preserved, bid_price auto-switches to manual bidding, TikTok silently ignores bid without bid_type, confirm=false previews. This is exactly the beyond-annotation context most definitions omit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the key 'why', followed by dense parameter semantics. Every sentence earns its place, though the density is high and could benefit from light formatting. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-param mutation tool with 0% schema coverage and no param enums, the description supplies format, enums, defaults behavior, preview mode, and the critical bid_type coupling. Output schema exists, so return values need not be described. Complete for the calling decision.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It explains format for comma-separated ID lists, the 'YYYY-MM-DD HH:MM:SS' schedule format, pacing enum values (PACING_MODE_SMOOTH/FAST) with semantics, bid_type interplay, and the empty-string-means-unchanged convention. This compensates completely for the zero schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (updates) and resource (TikTok ad group targeting, bid, schedule) with exact scope. Explicitly contrasts with what was previously possible ('only status and budget could be changed') and distinguishes itself from siblings like update_tiktok_adgroup_status and update_tiktok_adgroup_budget.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ('widen/narrow locations, ages, genders... change the bid, or extend run dates') and the critical motivation (avoid resetting learning phase). Names the alternative approach (deleting and rebuilding) and why it's worse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tiktok_adgroup_budgetUpdate TikTok Ad Group BudgetADestructiveInspect
Updates a TikTok ad group budget (in the main unit of the account currency). Budget guardrails apply: +50% per change, +100% cumulative per 24h, no cut deeper than -80%. confirm=false previews, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | Yes | ||
| confirm | No | ||
| adgroup_id | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds concrete behavioral constraints beyond them: currency unit, the +50% per-change cap, the +100% cumulative 24h cap, the -80% cut floor, and the preview/apply semantics of confirm. This is exactly the guardrail context an agent needs before a clamped mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core action, then guardrails, then the control flag. No filler; every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. The description supplies the guardrails, currency, and confirm behavior, but omits parameter-level detail for the two IDs, leaving a minor gap for a 4-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the parameter burden. It clarifies budget (unit = main unit of account currency) and confirm (preview vs apply), but says nothing about advertiser_id or adgroup_id, leaving half the parameters undocumented in text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Updates a TikTok ad group budget'), which cleanly separates it from sibling update_tiktok_adgroup (the entity itself) and update_tiktok_campaign_budget (campaign level). It does not name those siblings explicitly, so differentiation is by resource specificity rather than explicit routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an actionable invocation pattern via the confirm flag ('confirm=false previews, confirm=true applies'), which tells the agent to preview before applying. It does not, however, state when to use this tool versus alternatives like campaign-level budget updates or other budget tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tiktok_adgroup_statusUpdate TikTok Ad Group StatusADestructiveInspect
Enable/pause/delete one or more TikTok ad groups. adgroup_ids is comma-separated. operation: ENABLE | DISABLE | DELETE. confirm=false previews, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| operation | Yes | ||
| adgroup_ids | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, and the description is consistent with that via the DELETE option. It adds genuinely useful context beyond annotations: the confirm=false dry-run versus confirm=true apply two-step workflow, which is not captured in the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four terse sentences, each carrying distinct information, with the core action front-loaded and parameter details following. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive multi-target status mutation, the description covers the action, the ID format, the operation enum, and the safety-affirming preview flow, while an output schema exists so return values need not be described. It falls short only on sibling routing and advertiser_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the load well: it explains adgroup_ids is comma-separated, enumerates operation as ENABLE|DISABLE|DELETE, and defines confirm semantics. Only advertiser_id is left undocumented, which is a minor gap given how standard it is.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (enable/pause/delete) and a specific resource (TikTok ad groups), scoping it clearly against siblings like update_tiktok_ad_status and update_tiktok_campaign_status. It does not explicitly name the general-purpose sibling update_tiktok_adgroup it should be contrasted with, keeping it just below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the confirm preview/apply mechanic, which is operational guidance, but gives no explicit when-to-use versus alternatives (e.g., update_tiktok_adgroup for non-status edits). The scope is implied by 'status' and 'operation' rather than stated as a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tiktok_ad_statusUpdate TikTok Ad StatusADestructiveInspect
Enable/pause/delete TikTok ad(s). ad_ids comma-separated. operation: ENABLE | DISABLE | DELETE. confirm=false previews, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_ids | Yes | ||
| confirm | No | ||
| operation | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered by structured data. The description adds genuinely new behavior: a confirm=false dry-run preview vs confirm=true apply, which is not expressible in the annotations and is critical 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four telegraphic clauses, front-loaded with the action and operation set, then the two argument-format details. No filler and nothing repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the dry-run flag plus the mutation semantics give an agent enough to call this safely. The only gap is that permanence of DELETE (irreversible vs. a recoverable paused state) is never stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it does so well for three of four params: ad_ids format (comma-separated), the operation enum values (absent from the schema, which declares no enum), and confirm's preview/apply semantics. Only advertiser_id is left unexplained, though its meaning is self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (enable/pause/delete TikTok ads) and enumerates the three operations, so an agent knows exactly what state transitions are possible. It does not explicitly distinguish itself from near-siblings like update_tiktok_ad, update_ad_status, or update_tiktok_adgroup_status, so the reader must infer the 1:1 mapping from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the generic update_ad_status or the field-editing update_tiktok_ad/update_tiktok_adgroup_status siblings, and no prerequisites (e.g. ads must be in a state that permits pausing). Usage is only implied by the operation enum.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tiktok_campaignUpdate TikTok CampaignADestructiveInspect
Renames a TikTok campaign. confirm=false is a preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| campaign_id | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 genuine behavioral value beyond that by disclosing a dry-run mode ('confirm=false is a preview'), which an agent cannot infer from the structured fields. It stops short of describing irreversibility 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero waste, with the core action front-loaded ahead of the confirm semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations carry the destructive/read-only profile. The description covers scope and the preview affordance, but omits whether applying is reversible and what error/edge behavior looks like for an irreversible mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains confirm clearly (preview vs apply) and implies name is the renamed field, but says nothing about advertiser_id or campaign_id. Two of four parameters are left to the agent's inference, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Renames a TikTok campaign') and, critically, narrows the ambiguous 'update' name to rename-only, which separates it from siblings like update_tiktok_campaign_status and update_tiktok_campaign_budget. An agent can tell what this does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The confirm=false/confirm=true sentence implies a two-step preview-then-apply workflow but never states when to use this tool versus the status/budget siblings, nor any prerequisites (e.g., needing the campaign to exist or be accessible). 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.
update_tiktok_campaign_budgetUpdate TikTok Campaign BudgetADestructiveInspect
Updates a TikTok campaign budget (in the main unit of the account currency, e.g. 75 = 75.00). Budget guardrails: +50% per change, +100% cumulative per 24h, no cut deeper than -80%. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | Yes | ||
| confirm | No | ||
| campaign_id | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, yet the description adds substantial non-derivable behavior: the +50% per-change / +100% per-24h / -80% cut guardrails, the currency unit convention, and the preview-vs-apply confirm workflow. This is meaningful context an agent cannot infer from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the operation and unit before the guardrails and confirm semantics. Zero filler; every clause carries operative information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with an output schema already covering return values, the description supplies the key invocation-critical facts: currency unit, hard guardrails, and the preview/apply toggle. Nothing essential 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the burden and does so for the two non-obvious params: it explains budget is in the account's main currency unit (75 = 75.00) and defines confirm's preview/apply semantics. advertiser_id and campaign_id are left to their self-evident names, which is a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Updates a TikTok campaign budget') that the agent can distinguish from the sibling update_tiktok_adgroup_budget and from the broader set_campaign_budget. The scope (campaign-level, TikTok) is unambiguous from the first clause.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The confirm=false/confirm=true preview-vs-apply convention gives useful usage context, but no alternative tool is named or contrasted (e.g. set_campaign_budget or update_tiktok_campaign). Usage is implied by the workflow rather than tied to a when-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tiktok_campaign_statusUpdate TikTok Campaign StatusADestructiveInspect
Enable/pause/delete TikTok campaign(s). campaign_ids: comma-separated IDs. operation: ENABLE | DISABLE | DELETE. confirm=false = preview, confirm=true applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| operation | Yes | ||
| campaign_ids | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds meaningful context beyond them: that DELETE is irreversible, that confirm=false performs a dry-run preview before applying, and that multiple campaigns are batched in one call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short clauses, action and required parameters front-loaded, no filler. The telegraphic 'param: meaning' style is efficient though slightly terse rather than flowing prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described. For a destructive multi-target mutation, the preview/apply mechanism and batching are disclosed, which is the key missing piece in most such tools. Only advertiser_id semantics remain unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and largely does: it documents the comma-separated format of campaign_ids, the ENABLE/DISABLE/DELETE values for operation, and the preview semantics of confirm. Only advertiser_id is left unexplained, which is the sole gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (enable/pause/delete) and resource (TikTok campaigns), with the three operations enumerated. It is clearly distinguishable from update_tiktok_campaign (settings edit) and update_tiktok_campaign_budget, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The confirm=false/true preview-versus-apply split gives real invocation guidance, which is better than most. However there is no guidance on when to prefer this over update_tiktok_campaign or update_tiktok_campaign_budget, and no stated prerequisites (e.g. permissions or campaign state required).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_conversion_adjustmentsAdjust Conversions (refund/restate)ADestructiveInspect
ADJUSTS conversions you already reported — the refund/cancellation half of the closed loop. RETRACT cancels a conversion that fell through (refund, cancelled order, unqualified lead); RESTATE corrects its value (partial refund, upsell). Without this, Smart Bidding keeps optimizing toward revenue that never actually landed.
conversion_action = name or ID. adjustments accepts a JSON array OR one row per line as 'key=value;key=value': • type=RETRACT;order_id=A-991;datetime=2026-08-05 09:00:00+03:00 • type=RESTATE;order_id=A-991;datetime=2026-08-05 09:00:00+03:00;value=1200 Identify the original conversion by order_id (recommended) OR by gclid + conversion_datetime. Fields: type (RETRACT|RESTATE), datetime (REQUIRED = when the adjustment happened), order_id, gclid, conversion_datetime (original conversion time, needed with gclid), value (RESTATE only). confirm=false → preview; confirm=true → applies.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| adjustments | Yes | ||
| customer_id | Yes | ||
| currency_code | No | ||
| conversion_action | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds real behavioral value by disclosing the confirm=false preview / confirm=true apply mechanism — critical for a destructive write. It also explains the downstream effect on Smart Bidding. It stops short of documenting permissions/auth requirements or repeat-adjustment behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first clause, then organized into bullets and a field list that are easy to scan. It is longer than average but each block earns its place (mode semantics, input format, field semantics, preview flag); the value=1200 vs value in example formatting is slightly redundant but minor.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers the hard parts of a complex write tool: operation modes, free-text encoding format, required versus conditional fields, and the dry-run gate. Only the customer_id and currency_code parameters are left entirely to an undocumented schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description carries the load and largely does so: it defines conversion_action (name or ID), the two accepted formats for the opaque 'adjustments' string, the full field list with which are required (datetime, conversion_datetime needed with gclid), identification strategy (order_id recommended) and worked examples. customer_id and currency_code remain undocumented, so it is not fully compensating for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('ADJUSTS conversions you already reported — the refund/cancellation half of the closed loop') and immediately disambiguates the two operations RETRACT vs RESTATE. This distinguishes it from the sibling upload tools (upload_offline_conversions, upload_microsoft_offline_conversions) that report new conversions rather than correcting existing ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly scopes usage to conversions already reported and gives concrete when-to-use for each mode (RETRACT for refund/cancelled order/unqualified lead, RESTATE for partial refund/upsell), plus the business reason ('otherwise Smart Bidding keeps optimizing toward revenue that never landed'). It does not explicitly name the sibling alternative for net-new uploads, so the exclusion 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.
upload_imageUpload ImageAInspect
Turns an image into a public image URL you can pass to any tool that needs one. If the photos are already LOCAL FILES in your own environment (the user attached them to the chat) and you can run shell commands, call upload_image() with no arguments to get an upload_url, POST the files there yourself (curl -sS -F file=@photo1.jpg -F file=@photo2.jpg <upload_url>, up to 10 files), then call upload_image(ticket=...) for the public URLs — the user does not have to drag anything. Otherwise: one public image URL you can pass to any tool that needs one (gbp_create_post image_url, gbp_upload_photo, upload_image_asset, upload_meta_image...). FOUR modes, in the order you should prefer them: (1) source_url=... when the photo is ALREADY somewhere on the web — the customer's own website, a WordPress media library, a Drive or Dropbox share link: we fetch it server-side and re-publish it, so NOTHING has to pass through the chat and the user does not have to do anything. Use this first whenever a URL exists. (2) call with NO arguments to get an upload link — give that link to the user, they drop their files, then call this tool again with the returned ticket. ONE link takes up to 10 photos: the user can drag all of them in at once and the link stays open for 45 minutes, so never ask for several links for several photos. (3) ticket=... to read the drop: returns images (one entry per uploaded file, each with its own public URL) plus count, and tells you whether the user can still add more. (4) image_base64=... only for a SMALL image already in the conversation — a real photo is tens of thousands of characters of base64 and will not fit in one model message, so for anything camera-sized use mode 1 or 2 instead. JPG or PNG, at least 250px on the short edge, up to 5 MB each. URLs stay reachable for 7 days, which is what image hosts like Google need because they fetch them asynchronously.
| Name | Required | Description | Default |
|---|---|---|---|
| ticket | No | ||
| filename | No | ||
| source_url | No | ||
| image_base64 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly=false, openWorld=true, idempotent=false, destructive=false); the description goes well beyond that with upload-link lifetime (45 min), URL reachability (7 days, justified by Google's async fetch), file caps (10 files, 5 MB each, 250px min edge, JPG/PNG), and what the ticket read returns. No contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and the mode ordering, and each mode earns its place given the genuinely multi-path interface. It loses a point for redundancy ('a public image URL you can pass to any tool that needs one' appears twice) and for the length of the local-files preamble, which could be compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param, four-mode tool with an output schema, the description supplies the prerequisites (shell access, user-attached files), the branching logic, the format/size constraints, and the lifetime semantics needed to invoke it correctly. Return values are covered by the output schema and the ticket-mode note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden; it does define the semantics of source_url, ticket, and image_base64, including the caveat that base64 will not fit camera-sized photos. The fourth parameter, filename, is never explained (only implicitly via the curl example), so coverage is strong but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('turns an image into a public image URL') and explicitly frames the output as an input to downstream tools, naming several siblings that consume it (gbp_create_post, gbp_upload_photo, upload_image_asset, upload_meta_image). An agent can tell this is the generic image-hosting utility, distinct from the platform-specific upload_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit, ordered decision procedure across four modes, including a stated preference ('Use this first whenever a URL exists') and when-not guidance ('only for a SMALL image already in the conversation... for anything camera-sized use mode 1 or 2'). Alternatives and the conditions that select each are spelled out rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_image_assetUpload Image AssetAInspect
Uploads an image to the Google Ads asset library → returns the asset resource_name. The returned value is used in PMax images, responsive display ads, and image extensions. JPEG/PNG/GIF, ≤5MB. aspect crops/pads the image to the ratio Google requires before upload ("1:1" for logos and square images, "1.91:1" for landscape/image extensions; also "square"/"landscape"/"4:5"); leave empty to upload as-is. fit="cover" crops the overflowing edges from the centre (right for photos), fit="pad" keeps the whole image and fills the rest with pad_color (right for wide logos — use "transparent" or "#FFFFFF"). confirm=false → dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| fit | No | cover | |
| name | No | ||
| aspect | No | ||
| confirm | No | ||
| image_url | Yes | ||
| pad_color | No | #FFFFFF | |
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly, openWorld, non-idempotent, non-destructive. The description adds real value beyond that: the ≤5MB JPEG/PNG/GIF constraint, the confirm=false dry-run mode, and the crop/pad transform behavior that modifies the source image. It does not discuss auth or rate limits, but the added operational context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and return value, then proceeds through format limits, aspect, fit, pad_color, and dry-run in a compact, information-dense way. Slightly long but nearly every clause adds decision-relevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param mutating upload tool with an output schema (so return shape need not be explained), the description covers the tricky parameters and safety constraints well. Only the undocumented name/image_url/customer_id params keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does for the non-obvious params: aspect (with ratio values and what each ratio is for), fit (cover vs pad semantics and edge handling), pad_color (transparent/#FFFFFF with the wide-logo case), and confirm (dry-run). It leaves name, image_url, and customer_id undocumented, which is a minor gap given those are self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Uploads an image to the Google Ads asset library') and names the return value (asset resource_name). This distinguishes it from the numerous sibling uploaders (upload_image, upload_meta_image, upload_tiktok_image, gbp_upload_photo) by pinning the destination to Google Ads assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains downstream consumers (PMax images, responsive display ads, image extensions) and gives decision guidance for fit='cover' vs fit='pad' with concrete scenarios. It stops short of naming when NOT to use it or pointing to sibling uploaders for other platforms.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_meta_imageUpload Meta ImageAInspect
Uploads an image creative to Meta and returns its image_hash — reusable across ads. Give ONE of: object_story_id (an existing Page post — its image is reused, id from list_meta_page_posts), image_url (public link), or image_base64 (the file itself, e.g. one the user dropped into the chat; a data: prefix is accepted). JPEG/PNG/GIF/WebP, max 8MB. Prefer object_story_id for a post's own image: Facebook's CDN links are signed and short-lived, so a link copied earlier in the chat can come back 403 — with the post id the fresh link is resolved server-side. Pass the returned image_hash to create_meta_link_ad / create_meta_video_ad / create_meta_carousel_ad.
| Name | Required | Description | Default |
|---|---|---|---|
| image_url | No | ||
| account_id | Yes | ||
| image_base64 | No | ||
| object_story_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark it non-read-only, open-world, non-idempotent and non-destructive; the description adds value beyond that with supported formats (JPEG/PNG/GIF/WebP), an 8MB size cap, the data: prefix acceptance, and the signed-URL staleness failure mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but disciplined: purpose and return value first, then the mutually exclusive inputs with their constraint, then the preference rationale, then downstream usage. Every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still explains the key return (image_hash) and how to consume it in create_meta_link_ad / create_meta_video_ad / create_meta_carousel_ad. For a 4-param upload tool, nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does: object_story_id is tied to an existing Page post (id from list_meta_page_posts), image_url is a public link, and image_base64 is the file itself. account_id is left unexplained, which is the only gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (uploads an image creative to Meta) and names the concrete artifact produced (image_hash) with its reuse scope. It is clearly distinguishable from siblings such as upload_image, upload_tiktok_image, and upload_meta_video.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Give ONE of' the three source inputs and then gives a preference rule with rationale: prefer object_story_id for a post's own image because Facebook CDN links are signed and short-lived and can 403. It also names the downstream tools to use the hash with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_meta_videoUpload Meta VideoAInspect
Gets a video into the user's Meta ad account and returns its video_id, WITHOUT leaving the chat. Three ways, pick by what the user has: (1) THE FILE IS ON THEIR COMPUTER and they have no link: call this with no arguments. You get a one time drop link to give them; they open it, drag the file in, and that is all they do. Then call this again with ticket= to read the result and carry on building the ad. The upload completes here; it does not require Ads Manager and does not need base64. (2) THEY HAVE A LINK (their own site, Drive, Dropbox, WeTransfer): pass video_url and the file is fetched server side and pushed to Meta, so share links that Meta itself cannot read still work. (3) A video already in the account: reuse its video_id, no upload needed. The video_id is reusable across ads. mp4, mov, m4v or webm, up to 300 MB.
| Name | Required | Description | Default |
|---|---|---|---|
| ticket | No | ||
| video_url | No | ||
| account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds a lot beyond the annotations (readOnlyHint=false, idempotentHint=false): the two-step ticket handshake, that the upload completes in-chat without Ads Manager or base64, that server-side fetch handles links Meta itself can't read, that the resulting video_id is reusable across ads, and the accepted formats/size cap. This is exactly the operational context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the outcome ('Gets a video... returns its video_id'), then a tight numbered list keyed to user situations. Slightly long with a few filler phrases ('and that is all they do', 'carry on building the ad'), but nearly every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be described, and the description still supplies the full workflow, format/size constraints, and reusability note. Nothing an agent needs in order to select and execute this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: ticket is explained as the token returned by the drop-link call, and video_url is tied to case (2). account_id is never explained, which is the one gap, but the other two are covered well enough to invoke correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Gets a video into the user's Meta ad account and returns its video_id'), names the return value, and explicitly distinguishes itself from the many sibling upload/create tools (upload_tiktok_video, upload_meta_image, create_meta_video_ad) by scoping to Meta video upload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit decision rule ('Three ways, pick by what the user has') and enumerates all three cases with their conditions: no argument + drop link flow, video_url for share links Meta cannot read, and reuse of an existing video_id. The when-to-use and when-not-to-use guidance is complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_microsoft_offline_conversionsUpload Microsoft Offline ConversionsDestructiveInspect
Uploads offline conversions to a Microsoft Advertising account so that sales or leads recorded outside the website are attributed to the ad clicks that produced them. conversion_name = an offline conversion goal in the account (list_microsoft_conversion_goals; create one with create_microsoft_conversion_goal if missing). conversions = a JSON array or one row per line as 'msclkid=...;datetime=2026-08-01T14:30:00Z;value=2500'; msclkid and datetime (UTC) are required, value is optional. confirm=false previews, confirm=true uploads.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| currency | No | TRY | |
| account_id | Yes | ||
| conversions | Yes | ||
| conversion_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
upload_offline_conversionsUpload Offline ConversionsADestructiveInspect
UPLOADS OFFLINE CONVERSIONS to Google Ads — the closed loop between your CRM and your ads. Use it when a lead that came from an ad actually became a sale later (phone/showroom/CRM): Google then learns which clicks produce real revenue and Smart Bidding optimizes for money, not just form fills.
conversion_action = the conversion action name or ID (list_conversion_goals / get_conversion_tags). For click-based upload it must be an "Import from clicks" action; for email/phone upload it must have enhanced conversions for leads enabled.
conversions accepts EITHER a JSON array OR one row per line as 'key=value;key=value': • gclid=Cj0KC...;datetime=2026-08-01 14:30:00+03:00;value=2500;order_id=A-991 • email=ali@ornek.com;phone=05321234567;datetime=2026-08-01 14:30:00+03:00;value=2500 Fields: gclid | gbraid | wbraid | email | phone (any identifier), datetime (REQUIRED, 'yyyy-mm-dd hh:mm:ss+03:00' — the time the CONVERSION happened), value (optional), order_id (optional, prevents duplicates). Email/phone are SHA-256 hashed locally before sending — raw personal data never leaves the server. confirm=false → preview (nothing uploaded); confirm=true → uploads.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| conversions | Yes | ||
| customer_id | Yes | ||
| currency_code | No | ||
| conversion_action | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that email/phone are SHA-256 hashed locally, that confirm=false previews while confirm=true uploads, that order_id prevents duplicates, and it states the dependency (action must be 'Import from clicks' or have enhanced conversions enabled). With destructiveHint already given by annotations, this added context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose before mechanics, and bullets/examples keep the format guidance scannable. It is long, but nearly every sentence (hashing, confirm semantics, required datetime) carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation tool with annotations and an output schema, the description covers purpose, format, preconditions, and safety behavior thoroughly. The only missing pieces are brief notes on customer_id and currency_code.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: conversion_action meaning and constraints, the conversions row/JSON format with two concrete examples, all accepted identifier fields, datetime format and requirement, and the confirm flag semantics. It leaves customer_id and currency_code unexplained, which is the only notable gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (upload offline conversions to Google Ads) and frames the business purpose (closing the CRM-to-ads loop so Smart Bidding optimizes for revenue). It is clearly distinguishable from siblings like upload_conversion_adjustments and upload_microsoft_offline_conversions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (a lead from an ad later became an offline sale) and routes to sibling tools (list_conversion_goals / get_conversion_tags) for obtaining conversion_action. It does not, however, contrast itself against the closely-related upload_microsoft_offline_conversions or upload_conversion_adjustments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_tiktok_imageUpload TikTok ImageAInspect
Uploads a TikTok image creative from a public URL → image_id. confirm=false = preview, confirm=true uploads.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| file_name | No | image | |
| image_url | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish a non-read-only, non-destructive, non-idempotent, open-world write. The description adds real value beyond them: it discloses the dry-run default (confirm=false previews), the fact that confirm=true actually mutates, the public-URL sourcing requirement, and the returned image_id. Missing: auth/permission needs and whether re-uploading duplicates assets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, zero filler, and the mutation-relevant confirm semantics are front-loaded after the core purpose. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained (image_id is a bonus). For a mutating upload tool whose annotations already carry the safety profile, the description covers the critical dry-run behavior adequately; only per-parameter and prerequisite detail is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description must compensate. It explains confirm (the two modes) and partially image_url ('public URL'), but says nothing about advertiser_id or file_name, leaving half the surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource ('Uploads a TikTok image creative') plus scope constraint ('from a public URL') and output ('→ image_id'). It implicitly differentiates from upload_tiktok_video by naming the resource type, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The confirm=false/confirm=true pairing gives genuine mode-selection guidance for how to invoke it, and the 'public URL' constraint is a usage precondition. However, it offers no guidance on when to pick this over the many other upload_* siblings (upload_image, upload_image_asset, upload_meta_image).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_tiktok_videoUpload TikTok VideoAInspect
Uploads a TikTok video creative from a public URL → returns video_id (used in create_tiktok_ad). The URL must point at the VIDEO FILE itself (.mp4/.mov); a tiktok.com post link is a web page, not a file — to advertise an existing post use create_tiktok_ad with tiktok_item_id (list_tiktok_posts). confirm=false = preview, confirm=true uploads.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| file_name | No | video | |
| video_url | Yes | ||
| advertiser_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readonly, non-idempotent, non-destructive, open-world behavior. The description complements them with the upload URL constraints and the confirm=false/true preview semantics, which are behaviorally useful. It does not delineate failure modes (what happens to a rejected upload or invalid URL), so it stops 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and return value, then the URL caveat and the sibling alternative, then the confirm semantics. Information-dense with no filler, though the middle clause is a long run-on sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, yet the description still notes video_id's role. Combined with annotation coverage and the URL/confirm guidance, an agent has enough to call it correctly; only advertiser_id semantics and error behavior are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains video_url (must be a direct file, not a web page) and confirm (preview vs upload), but leaves advertiser_id and file_name undocumented anywhere, so the coverage gap is only partially closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (uploads a TikTok video creative from a public URL) and names the downstream consumer (create_tiktok_ad) plus the returned artifact (video_id). It clearly distinguishes itself from sibling tools that create ads from posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly contrasts this tool with the alternative: 'a tiktok.com post link is a web page, not a file — to advertise an existing post use create_tiktok_ad with tiktok_item_id (list_tiktok_posts).' It states the precondition (URL must point at the file itself, .mp4/.mov) and the preview-vs-commit switch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_bulk_replaceBulk Find & Replace (WordPress)DestructiveInspect
Applies the SAME find/replace to MANY WordPress posts/pages in one call, with a mandatory dry-run. wordpress_update_post's replace works well but takes a single id, so fixing the same defect on 11 pages meant 11 calls; this does it once, and its confirm=false PREVIEW shows every page that would change and HOW MANY times before anything is written, so an unintended broad match is visible first. Choose the target pages either with ids=[...] (get them from wordpress_search_content) or with a search filter (search=..., search_in/regex/type/status like wordpress_search_content). replace=[{"find":"old","with":"new"}] — same schema and safety as wordpress_update_post: a missing "with" is refused, never treated as a delete. match="normalized" (top-level or per entry) treats invisible characters (non-breaking space, smart quotes, long dashes) as their plain equivalents. DESTRUCTIVE: confirm=false previews per-page counts and writes NOTHING; confirm=true applies. Elementor/Divi pages whose visible text is not in post_content are reported as skipped, not silently missed. The search filter fetches every post one by one (~1 s each), so on a large site one call stops scanning after about 100 seconds and returns what it found so far with partial=true and next_offset; call again with offset=next_offset (same other arguments) to continue. For big sites it is faster to run wordpress_search_content first and pass its ids here.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| type | No | ||
| match | No | ||
| regex | No | ||
| offset | No | ||
| search | No | ||
| status | No | publish | |
| confirm | No | ||
| replace | No | ||
| max_scan | No | ||
| site_url | No | ||
| search_in | No | content |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
wordpress_contact_formsList WordPress Contact FormsARead-onlyIdempotentInspect
Lists the Contact Form 7 forms on a connected WordPress site, or, with form_id, shows one form's fields, which of them are required, and the e-mail addresses written in its settings (the recipient/sender of the notification mail). Use it to diagnose a contact/quote form whose conversions stay at zero: check which fields are required and where the notification mail goes, then run wordpress_test_contact_form to see whether a submission actually sends the mail. Read-only; nothing is submitted. Needs the Contact Form 7 plugin on the site.
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds behavioral context beyond them: a plugin prerequisite and the reassurance that nothing is submitted. It stops short of covering pagination or the on-site data source, keeping it at a solid 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then layers usage and prerequisites in a single dense paragraph. Every sentence earns its place, though the run-on structure packs several ideas together, slightly reducing scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be spelled out, and the description still covers the workflow, prerequisite, safety profile, and parameter behavior. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It explains form_id's two-mode behavior (default lists all, a value fetches one form's details), but site_url is only implied by 'a connected WordPress site' rather than documented explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (lists Contact Form 7 forms) and goes further by describing the two operating modes: all forms, or a single form's fields/required/e-mail settings when form_id is passed. It distinguishes itself from the sibling wordpress_test_contact_form, which it names explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit scenario ('diagnose a contact/quote form whose conversions stay at zero') and a concrete next step, naming the alternative tool wordpress_test_contact_form with the condition that selects it. It also states the prerequisite (Contact Form 7 plugin must be installed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_create_postCreate WordPress PostAInspect
Create a post or page on a connected WordPress site. Defaults to a draft you can review before publishing.
On a MULTILINGUAL site (Polylang or WPML) pass language ('en', 'tr', 'de'…) to place the page in that language — otherwise it lands in the site's default language (e.g. an English page would get the Turkish menu and enter the Turkish sitemap). The reply's post.language echoes the language the page ended up in, so you can confirm it. On a single-language site language is ignored.
PAGE TEMPLATE + META (for page builders like WPBakery): template sets the page's theme template (the _wp_page_template value, e.g. "templates/vc-page-template.php") so a translated page opens with the same layout instead of the default sidebar one. meta writes arbitrary post meta as a dict — this is how WPBakery's own per-page CSS (_wpb_shortcodes_custom_css) or a theme's page options get onto an API-created page, which they otherwise never do. copy_meta_from= is the shortcut: it copies the template + WPBakery custom CSS (and any keys you add with copy_meta_keys via meta) from a working page to this new one — the usual fix for translation pages that come out unstyled. Needs Connector 0.9.2 or newer.
| Name | Required | Description | Default |
|---|---|---|---|
| meta | No | ||
| slug | No | ||
| tags | No | ||
| type | No | post | |
| title | Yes | ||
| status | No | draft | |
| content | No | ||
| excerpt | No | ||
| language | No | ||
| site_url | No | ||
| template | No | ||
| categories | No | ||
| copy_meta_from | No | ||
| featured_media | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It adds substantial behavioral context beyond the annotations: default draft status, language placement and fallback behavior on multilingual vs single-language sites, how meta and template actually affect the created page, and the Connector version requirement. The readOnlyHint=false and destructiveHint=false annotations are consistent with the described creation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and then organized by use case, with no obvious filler. It is somewhat lengthy, but the detail is largely warranted by the number of non-obvious parameters and the advanced WordPress scenarios covered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values need not be explained, and the annotations cover the basic safety profile. The description covers the hardest operational details for multilingual and page-builder workflows, but it omits important context like how to select the target site via site_url and what status values beyond the default draft are allowed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 14 parameters and 0% schema description coverage, the description carries the burden and does explain the most complex ones: language, template, meta, and copy_meta_from. However, many basic parameters such as site_url, status, type, slug, content, excerpt, categories, tags, and featured_media receive no explanation, leaving significant gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Create a post or page on a connected WordPress site.' It also distinguishes the default behavior ('Defaults to a draft you can review before publishing'), so an agent can tell this is the creation tool rather than an update or list tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear contextual guidance for multilingual sites, page-builder templates, and meta copying, which helps choose the right parameters. It does not explicitly name when to use this versus update_post or bulk_replace, so it lacks full when-not/alternatives routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_edit_page_designEdit WordPress Page DesignADestructiveInspect
Edit the design of an Elementor page: change headings, paragraphs, button labels, links, colours and other element settings.
Use wordpress_page_design first to get element ids and field paths. Then either: edits=[{"id": "", "path": "title", "value": "New heading"}] to change existing values (paths may be nested, e.g. "link.url" or "icon_list.1.text"), or element="" with settings={"title_color": "#d97757"} to set design settings, creating them if absent. The previous version is kept automatically; restore=true rolls the page back to it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| edits | No | ||
| element | No | ||
| restore | No | ||
| settings | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, idempotentHint=false, and readOnlyHint=false. The description adds useful behavior beyond those: previous versions are kept automatically, restore=true rolls back, and settings create absent design keys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then gives prerequisite and two clear invocation patterns with inline examples. Every sentence earns its place and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained. The description covers purpose, prerequisites, edit modes, versioning, and restore, though it omits site_url semantics and permission expectations for this destructive write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains edits, element, settings, restore, and nested paths well, but the required top-level id and the site_url parameter remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Edit the design of an Elementor page'. Names concrete editable fields (headings, paragraphs, buttons, links, colours) and distinguishes the read-first sibling wordpress_page_design.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to use wordpress_page_design first to get element ids and field paths, and explains two edit modes. It lacks when-not-to-use guidance or alternatives such as wordpress_bulk_replace, keeping 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.
wordpress_get_postRead WordPress PostARead-onlyIdempotentInspect
Read one WordPress post or page in full, including its raw content, categories, tags and featured image.
raw=true additionally spells out invisible characters (non-breaking space, smart quotes) and counts them, which is what to check when a replace fails to match text you copied from here. Read the page with this BEFORE editing it. wordpress_list_posts deliberately leaves content out to stay small, so on a shortcode-based page (Avada/Fusion, WPBakery) this is the only way to see the existing layout — overwriting content you have not read wipes the page design.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| raw | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/safe, so safety is covered; the description instead contributes non-obvious behavior — that raw=true escapes non-breaking spaces and smart quotes and counts them, and that wordpress_list_posts omits content. It stops short of noting whether the full payload is large/paginated, but the added context is genuinely useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the raw-flag semantics, then the edit-safety warning. Every sentence earns its place, though the parenthetical framework list (Avada/Fusion, WPBakery) is slightly verbose for the point being made.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param read tool with an output schema (so return shape needn't be described) and full annotation coverage, the description supplies the important usage and hazard context. The only missing piece is any meaning for site_url.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It explains the raw flag thoroughly (escaping and counting invisible characters) but says nothing about the id parameter's expected form or what site_url selects when the account has multiple sites, leaving one of three params unaccounted for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: reads one post/page in full, itemizing what comes back (raw content, categories, tags, featured image). It explicitly contrasts with wordpress_list_posts, so an agent can distinguish it from the closest sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('Read the page with this BEFORE editing it') and a conditional branch for the raw flag ('which is what to check when a replace fails to match text you copied from here'). It also names the alternative list tool and the condition that selects this one over it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_install_pluginInstall WordPress PluginADestructiveInspect
Install a plugin on a connected WordPress site from a wordpress.org slug (e.g. 'wordpress-seo') or a zip URL, and optionally activate it.
Installing and activating are reported separately: if the files land but activation fails you get the real activation error, not a blanket failure. When a plugin that was NOT already on the site fails to activate, its files are removed again (rolled_back=true) so nothing dead is left behind; pass keep_on_failure=true to keep them for debugging.
Page cache plugins in particular need wp-config.php and wp-content to be writable, and some hosts refuse third-party cache plugins outright through a must-use plugin of their own. Both are host limits no retry will fix — check wordpress_performance first, and if it says install_recommended=false, do not install a cache plugin at all.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| zip_url | No | ||
| activate | No | ||
| site_url | No | ||
| keep_on_failure | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint/openWorldHint annotations by disclosing the rollback-on-activation-failure behavior (rolled_back=true), the keep_on_failure override, and that install and activation are reported as distinct outcomes. It also surfaces hard host limits (wp-config.php/wp-content writability, must-use cache-plugin blockers) that no retry can fix.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action in the first sentence, then layers error-handling and host-limit context. Each sentence carries distinct operational value, though the third paragraph is dense enough that a shorter phrasing might improve scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the description covers failure semantics and host constraints thoroughly. The only gap is the unaddressed site_url parameter, which is a minor omission for a multi-site context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load: it explains slug with an example, zip_url as an alternative source, activate as the optional activation step, and keep_on_failure as the debug-retention flag. site_url, however, is never mentioned, leaving one of the five parameters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (install) and resource (plugin) on a connected WordPress site, and specifies the two accepted sources (wordpress.org slug or zip URL) plus the optional activation. This clearly separates it from siblings like wordpress_list_plugins or wordpress_manage_plugin.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not guidance for cache plugins, including the precondition of checking wordpress_performance and the install_recommended=false gate, plus the keep_on_failure escape hatch for debugging. It stops short of routing between this tool and wordpress_manage_plugin for cases where a plugin is already installed, so it is not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_languagesWordPress Site LanguagesADestructiveInspect
Lists the languages a multilingual WordPress site (Polylang / WPML) is set up for, and ADDS a new one. action: 'list' (default) | 'add'.
Adding the language is the FIRST step of publishing a site in another language, and skipping it fails silently: wordpress_create_post(language='de') answers ok while Polylang quietly ignores an unregistered language, so the page ends up with no language at all and falls back to the default one on its next save. list shows each language's code, locale, writing direction, post count and which one is the default.
For 'add', code is the language code you will pass to wordpress_create_post ('de', 'ru', 'ar', 'fr'); locale is optional and derived from the code when omitted; the writing direction is set automatically for right-to-left languages (Arabic, Hebrew, Persian, Urdu) unless you pass rtl yourself. Adding a language is a structural change to a multilingual site, so confirm=false PREVIEWS it — the reply says whether it can actually be added before anything is written. Adding a language twice is safe — the existing one is reported back. WPML has no API for adding languages, so there the reply says to use the WPML screen. After adding a language, create its pages and then connect them with wordpress_link_translations, otherwise the language switcher and the hreflang tags stay empty.
| Name | Required | Description | Default |
|---|---|---|---|
| rtl | No | ||
| code | No | ||
| flag | No | ||
| name | No | ||
| order | No | ||
| action | No | list | |
| locale | No | ||
| confirm | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds what annotations convey: it discloses that confirm=false previews the change, that adding a language twice is safe and reports the existing one, that WPML cannot add languages, and that an unregistered language makes wordpress_create_post silently fall back to default. The destructive/structural nature aligns with destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the two modes and then the high-stakes failure mode before the parameter details, so every sentence carries operational value. It is dense and long for a single paragraph, but there is little outright filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, multi-mode, structural-change tool the description covers the workflow, the silent-failure trap, provider limitations, idempotency behavior and preview semantics. Return values need not be described since an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage the description must carry the parameter burden, and it explains the critical ones well: action default, code semantics (the string later passed to wordpress_create_post), locale derivation from code, automatic rtl for Arabic/Hebrew/Persian/Urdu, and confirm as a preview toggle. It leaves flag, name, order and site_url undocumented, so coverage is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource for both modes: lists the languages a multilingual WordPress site (Polylang/WPML) is configured for and adds a new one, with 'list' as the default action. It is immediately distinguishable from siblings like wordpress_link_translations and wordpress_create_post, which it explicitly names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance and exclusions: add is the FIRST step of publishing in another language, and skipping it fails silently. It also states that WPML has no API for adding languages and routes the agent to the WPML screen, and prescribes the follow-up sequence (create pages, then wordpress_link_translations).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_link_translationsLink WordPress TranslationsADestructiveInspect
Connects pages or posts on a multilingual WordPress site as TRANSLATIONS OF EACH OTHER (Polylang translation group). translations maps language code to post id, e.g. {"tr": 120, "de": 340, "ru": 341} — at least two entries.
Publishing the translated pages is not enough on its own: without this link the language switcher does not offer the new languages and no hreflang tags are generated, so Google treats the pages as unrelated documents and the translated versions compete instead of supporting each other. Every language you pass must already be registered (wordpress_languages action='add' first) — Polylang ignores an unknown language without complaining, which is exactly how a page ends up with no language. A post that has no language yet is pinned to the language you gave it here. The reply returns each page's language and permalink so you can confirm the group is real.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | No | ||
| translations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true and idempotentHint=false, but the description adds substantial behavioral context beyond them: Polylang silently ignores unknown languages, a post with no language gets pinned to the language given, and the reply returns each page's language and permalink. This is exactly the failure-mode disclosure an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then rationale and caveats. It runs five sentences and is somewhat dense, but each carries operative information (prerequisites, silent-failure warning, return contents) rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema, the description supplies the prerequisites, side effects, and SEO consequences an agent needs. The only gap is the undocumented site_url parameter, though its empty-string default makes it largely self-evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry the load, and it does for the key parameter: translations maps language code to post id, with a concrete example {"tr": 120, "de": 340, "ru": 341} and a minimum of two entries. site_url is left unexplained, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource — connecting pages/posts as translations of each other within a Polylang translation group — and immediately distinguishes this from publishing alone. An agent can tell this is a distinct operation from siblings like wordpress_languages or wordpress_update_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete prerequisite (languages must be registered via wordpress_languages action='add' first) and explains the condition under which linking is needed. It doesn't spell out an explicit 'do not use when' exclusion, but the context is clear enough for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_list_pluginsList WordPress PluginsARead-onlyIdempotentInspect
List installed plugins on a connected WordPress site, showing which are active and which have updates available.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the result surfaces active/inactive state and update availability, but says nothing about pagination, ordering, or what happens when site_url is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the resource first and appends the useful payload detail. Nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only listing tool with an output schema that already documents the return shape, the description is nearly sufficient. The only real gap is how the site_url parameter is expected to be supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter and schema description coverage is 0%, so the schema alone gives no guidance. The description only obliquely implies that the call targets one connected site; it never explains that site_url identifies the site, accepts a URL format, or that it is optional with an empty default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List installed plugins') and goes further by naming what the listing reveals (active status, available updates). It is clearly distinct from wordpress_install_plugin and wordpress_manage_plugin by intent, but it never explicitly routes the agent away from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'on a connected WordPress site' implies the general context in which this is used, but there is no explicit when-to-use, no exclusion, and no pointer to wordpress_manage_plugin or wordpress_site_info as alternatives. Usage 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.
wordpress_list_postsList WordPress PostsBRead-onlyIdempotentInspect
List posts or pages on a connected WordPress site. Filter by type (post/page/custom), status, or a search term.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| type | No | post | |
| search | No | ||
| status | No | any | |
| per_page | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only the filterable dimensions and no pagination behavior, default handling, or why openWorldHint is false; with annotations carrying the safety load, this is a modest addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded with the verb and resource, with no filler. It is efficiently sized for the information it conveys, though it could be slightly denser with pagination detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover safety. Still, for a 6-parameter tool with 0% schema coverage, the description omits page/per_page/site_url semantics, leaving the agent to guess how pagination and site targeting work.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and does add value by naming the type values (post/page/custom) and the status/search filters. However page, per_page, and site_url are never mentioned, so pagination and site-scoping semantics remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (posts or pages) on a connected WordPress site, so the core purpose is unambiguous. It does not differentiate itself from adjacent siblings like wordpress_search_content or wordpress_get_post, leaving the agent to infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists what can be filtered but never states when to use this tool versus alternatives such as wordpress_search_content (which also takes a search term) or wordpress_get_post. No exclusions, prerequisites, or selection criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_manage_pluginManage WordPress PluginADestructiveInspect
Activate, deactivate, update or delete a plugin that is already installed on a connected WordPress site.
Use it to switch off a plugin the site does not need — an unused analytics or tracking plugin
keeps loading scripts on every page. Deactivating leaves the plugin and its settings in place,
so it can be switched back on; delete removes its files, and an ACTIVE plugin is refused
unless you deactivate it first. plugin is the file path from wordpress_list_plugins, for
example "statcounter/statcounter.php".
If activating fails, the reply now carries the real reason and a writability check: page cache plugins need wp-config.php and wp-content to be writable, and on hosts where they are not, no cache plugin can be enabled at all.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| plugin | Yes | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and non-idempotent, but the description goes further: deactivation preserves the plugin and its settings while delete removes files, delete of an active plugin is refused, and activation failures now return the real reason plus a writability check on wp-config.php and wp-content. That is exactly the operational context annotations cannot encode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation list, then the deactivate-vs-delete distinction, then failure diagnostics. The cache-plugin writability paragraph is the least essential part but still earns its place as an activation troubleshooting note. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and this description covers mutation consequences, the delete prerequisite, and the activation-failure response. The only real gap is the unexplained `site_url` parameter for multi-site targeting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load. It documents `plugin` well (file path from wordpress_list_plugins, e.g. "statcounter/statcounter.php") and implicitly enumerates the `action` values in the opening sentence, but `site_url` is never mentioned and the action values are not stated as literal tokens. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names four specific operations (activate, deactivate, update, delete) on a well-scoped resource (an already-installed plugin on a connected WordPress site). This cleanly separates it from wordpress_install_plugin and wordpress_list_plugins without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use reasoning is given for the deactivate case (an unused analytics plugin loading scripts on every page), plus a hard prerequisite for delete (an ACTIVE plugin is refused unless you deactivate it first). It also names wordpress_list_plugins as the source of the `plugin` argument, so the caller is routed to the right sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_mediaList WordPress MediaARead-onlyIdempotentInspect
Browse the media library of a connected WordPress site: images already uploaded, with their id, URL, alt text and dimensions.
Search by name to find an existing image instead of uploading a duplicate. The returned id is what you pass as featured_media to wordpress_create_post / wordpress_update_post.
media_id returns ONE image in full: file size in bytes plus every intermediate size WordPress generated (medium, medium_large, large, theme sizes) with its real width, height and source_url, and the srcset WordPress itself would emit. That is what makes a hero/LCP image fixable: without the real list you would have to GUESS the "-768x347.jpg" style filenames, and a wrong guess puts a 404 on a live page. Use the returned srcset rather than building one by hand.
return_image=true (with a media_id) actually SHOWS you the picture: the server fetches the image bytes itself and returns a downscaled (max 512px) preview as an image you can see in chat, instead of just a URL. Use it to match an existing image's style before creating new ones, or to confirm a file is the one you meant. If the server cannot fetch the bytes (site behind a WAF, etc.) it returns the URL and the reason instead.
check_url asks the SITE to HEAD one of its own URLs and returns status, content type and length — for verifying an image variant exists, or checking a link or redirect. Only URLs on that same site are allowed. Needs Opus Growth Connector 0.6.1 or newer.
| Name | Required | Description | Default |
|---|---|---|---|
| mime | No | ||
| page | No | ||
| search | No | ||
| media_id | No | ||
| per_page | No | ||
| site_url | No | ||
| check_url | No | ||
| return_image | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), and the description adds genuinely new behavioral detail: return_image makes the server fetch bytes and return a max-512px downscaled preview, with a documented fallback (URL plus reason) when the fetch fails behind a WAF. It also discloses the connector version prerequisite and explains why guessing derived filenames causes live 404s.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, and the four paragraphs map cleanly to the tool's modes. It is somewhat verbose, with persuasive asides ('you would have to GUESS the "-768x347.jpg" style filenames') that could be tightened, but the length is largely justified by the four distinct call modes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is rightly omitted, and the description covers modes, prerequisites, and safety-relevant constraints. The remaining gap is listing behavior — pagination via page/per_page and the mime filter are never mentioned, which an agent listing a large library would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the whole burden. It meaningfully explains four of eight parameters — search (find existing image), media_id (returns one image with all intermediate sizes and srcset), return_image (requires media_id), and check_url (site-side HEAD, same-site only). However, mime, page, per_page, and site_url are left completely undocumented, so pagination and filtering behavior must be inferred from defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (browse the media library of a connected WordPress site) and enumerates the returned fields (id, URL, alt text, dimensions). It also disambiguates the tool's other modes (media_id detail lookup, return_image preview, check_url HEAD check), so an agent can tell it apart from wordpress_upload_media or upload_image immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing is provided: search by name 'instead of uploading a duplicate,' and the returned id is 'what you pass as featured_media to wordpress_create_post / wordpress_update_post.' It also states when to use return_image (match an existing image's style, confirm a file) and when to use check_url (verify a variant exists, check a link/redirect), plus the constraint that only same-site URLs are allowed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_optionRead/Write WordPress SettingADestructiveInspect
Read, and when asked, write a single WordPress setting by name — including the theme option that holds a theme's own tracking code.
Read first with write=false. Themes and plugins keep settings like tracking snippets in these options, which is where a stray tag usually lives when wordpress_tracking reports it under "Seçenek:". Writing returns the previous value so the change can be undone.
ARRAY OPTIONS: many plugins store a whole settings tab as one array option. Reading now
tells you which case you are in — exists says whether the option is in the database at
all, and type says array or string, so "not set yet, plugin default applies" is no
longer indistinguishable from "array we could not read". To WRITE an array option pass
value_json (a real object/list), not value: writing plain text over an array corrupts it,
and the connector now refuses that instead of silently breaking the site. force_type=true
overrides the refusal if you really mean it. Needs Connector 0.6.1 or newer.
ONE KEY INSIDE AN ARRAY OPTION: pass key=... to change a single setting inside an array
option and leave every other key untouched. This is the normal case for plugins that keep
a whole settings tab in one option: Yoast's wpseo_titles holds more than 150 keys, so
turning author archives into noindex means flipping noindex-author-wpseo alone. Without
key you would have to send the entire array back and risk the site-wide title templates.
The reply gives previous_value, new_value, how many keys the option still has, and
applied read back from the database, so a change that did not stick is not reported as
success. A key that does not exist is refused with the closest matching names instead of
being created. Needs Connector 0.8.1 or newer.
Inside an array option most settings are true/false or numbers, not text: pass them as
value_json=false / value_json=3 so the type is kept. value="false" would store the text
"false", which PHP reads as ON.
PROTECTED SETTINGS: a handful of options can lock the site out or change who may sign in — siteurl, home, users_can_register, default_role and friends. Writing one of those is refused unless you also pass force=true. That is the deliberate override for the real cases (moving a site to a new domain, switching to https): read the current value first, tell the owner exactly what will change, and only then repeat the call with force=true. A wrong siteurl makes the site unreachable from the browser, so never set it blind.
NAMES WITH A DOT: plugins that keep every setting under one prefix name them like
litespeed.conf.cache-exc. Reading those needs Connector 0.7.7 or newer; older versions
answer plugin_outdated for the dotted name only, while plain names on the same site work.
If you see that, the site simply needs the connector update. Writing a dotted name has
always worked, but never write one blind — read it first.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| name | Yes | ||
| force | No | ||
| value | No | ||
| write | No | ||
| site_url | No | ||
| force_type | No | ||
| value_json | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint, openWorldHint and non-idempotent, but the description adds substantial behavior: writes return the previous value for undo, array writes are refused unless value_json/force_type is used, protected options require force, and connector version gates exist (0.6.1/0.7.7/0.8.1). It stops short of describing permission/auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the section headers (ARRAY OPTIONS, ONE KEY INSIDE AN ARRAY OPTION, PROTECTED SETTINGS, NAMES WITH A DOT) make it scannable. It is long but the length tracks genuine complexity; a little repetition on the read-first rule keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still usefully characterizes the reply (previous_value, new_value, key count, applied read-back). Combined with array, key, force and dotted-name guidance, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 8 params, so the description must carry the load, and it does explain name, key, write, value vs value_json (including the type-preservation trap and value="false" pitfall), force, and force_type. Only site_url is left unexplained, a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — read and optionally write a single WordPress setting by name — and carves out the specific case of theme tracking-code options. This clearly separates it from siblings like wordpress_set_seo or wordpress_tracking, which manage higher-level intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit operating instructions: read first with write=false, only write when asked, read before writing a dotted name, and use force=true only after reading and warning the owner. When-not conditions (protected settings, array overwrite) are spelled out with the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_page_designInspect WordPress Page DesignARead-onlyIdempotentInspect
Inspect how a WordPress page is actually built (Elementor, WPBakery, Gutenberg, classic) and read its editable design fields.
Call this BEFORE editing a page. On an Elementor page the visible design lives in page-builder data,
not in the post content, so a plain content update changes nothing. This returns each element's id and
the text, links and settings you can change. Pass element (an id from the list) to get that one
element's full settings, including colours, typography and spacing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| limit | No | ||
| offset | No | ||
| element | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds real context beyond that — the builder-data-vs-post-content distinction and the drill-down behavior of `element`. It does not mention pagination semantics or rate/size limits on 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the purpose then the prerequisite then the mechanism; each sentence carries information. Slightly dense packaging (the builder list and the drill-down detail compete for attention) but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover the safety profile, so the description only needs the workflow context and the element-drill-down behavior — both are present. The remaining gap is that site_url and pagination expectations for a multi-site connector are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description meaningfully explains only one of five parameters (`element`: pass an id from the list to get that element's full settings, including colours, typography, spacing). id, limit, offset and site_url are left to inference; limit/offset are conventional but site_url is not explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Inspect how a WordPress page is actually built") with the concrete scope spelled out: Elementor, WPBakery, Gutenberg, classic, plus reading editable design fields. An agent can distinguish this from wordpress_get_post or wordpress_update_post 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing guidance — "Call this BEFORE editing a page" — and a concrete failure mode explaining why (on Elementor the visible design lives in builder data, so a plain content update changes nothing). It stops short of naming the sibling write tool (wordpress_edit_page_design) as the follow-up, so it's clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_performanceRead WordPress Speed SettingsARead-onlyIdempotentInspect
See a WordPress site's speed settings: which caching plugin runs it, which optimisations are on, and which of them are risky on this particular site.
Run this before changing anything. It reports the page cache, minify, lazy load, combine and defer switches, whether the server actually supports the cache plugin, and which fragile page builders are installed — combining or deferring scripts is a known way to break an Elementor or Slider Revolution site.
When no cache plugin is active, read install_recommended before suggesting one. It is false when the host manages caching itself through a must-use plugin (Natro, SiteGround, WP Engine, Kinsta and similar: cache_managed_by_host=true), when a previous activation was refused by host policy (plugin_activation_blocked=true), when wp-config.php or wp-content is not writable. In each of those cases installing a cache plugin cannot work: say so instead of trying. stale_cache_config=true is separate and does NOT block anything — it only means an earlier cache plugin was removed and left WP_CACHE behind in wp-config.php; mention the history, do not treat it as an error.
WHY ONE PAGE IS NOT CACHED (Connector 0.7.7+, LiteSpeed): cache_exclusions lists what is
kept out of the page cache — do_not_cache_uri, query_string, cookie, user_agent, role,
category and tag, plus private_uri and the forced-cache lists. When page caching is on but
a single page still misses every time, the answer is almost always an entry here. If the
front page itself is excluded, cache_exclusion_warning says so outright. Read this before
blaming TTL. cache_runtime adds crawler_enabled (the cache warmer) and public_ttl: on a
site with many rarely-visited pages a cold cache, not a short TTL, is what visitors hit.
These lists are edited with wordpress_option on the matching litespeed.conf.* name —
read the current value first, then write the full list back.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent, and the description goes far beyond them: it explains what each flag means behaviorally (cache_managed_by_host blocks plugin install, plugin_activation_blocked, unwritable wp-config, and that stale_cache_config does NOT block anything). It also warns which optimisations are dangerous on fragile page builders.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but front-loaded: purpose first, then the pre-change ordering rule, then the install_recommended semantics, then the cache-exclusion troubleshooting. Each paragraph covers a distinct decision the agent must make, though the cache_exclusions section is verbose enough to be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return shape need not be restated, yet the description still explains the semantics of the key diagnostic fields an agent must interpret (cache_exclusions, cache_exclusion_warning, cache_runtime.public_ttl, crawler_enabled) and what to do when a page still misses. Nothing needed to act correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single site_url parameter carries no description in either schema or description. The description adds no syntax or meaning for it, though the parameter is trivially named and defaults to the current site. Baseline for a documented-but-unexplained trivial param is a middling 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource ('See a WordPress site's speed settings') and enumerates exactly what is returned: caching plugin, enabled optimisations, and risky ones. It is clearly distinguishable from siblings like wordpress_set_performance (writes) and wordpress_option (edits the underlying lists).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing instruction ('Run this before changing anything') and explicit routing guidance for the no-cache-plugin case ('read install_recommended before suggesting one'). It also names the write path (wordpress_option on litespeed.conf.*) and tells the agent to read first, then write the full list back.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_purge_cachePurge WordPress CacheADestructiveInspect
Purge a connected WordPress site's page cache — the "Purge All" that a widget, option, SEO or theme-file change needs to actually go live.
wordpress_set_performance already purges LiteSpeed when it flips a speed setting, but editing a widget, an option, an SEO field or a theme file does NOT trigger a purge, so a cached page keeps serving the old version (a LiteSpeed page can stay cached for days). Call this after such a change. It clears whichever page-cache plugin the site runs — LiteSpeed, WP Rocket, W3 Total Cache, WP Super Cache, Cache Enabler, WP Fastest Cache — plus the object cache, and reports which ones it hit.
elementor_regenerate=true ALSO rebuilds Elementor's compiled CSS ("Regenerate CSS & Data"). Use it when a site moved from http to https and Elementor's cached CSS still has http:// font/asset URLs baked in (the usual cause of mixed-content warnings): regenerating rewrites them to https. Needs Connector 0.9.2 or newer.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | No | ||
| elementor_regenerate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=false, and the description adds genuinely new behavioral context: it clears whichever page-cache plugin is installed (six named) plus the object cache, and reports which ones it hit. It also discloses the Elementor CSS rewrite side effect and a Connector version prerequisite (0.9.2+), which annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the key sibling distinction, and every sentence carries information. It runs long because of the Elementor and plugin-list detail, but nothing is redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and the description covers the destructive scope, the triggering conditions, the sibling boundary, and the one non-obvious parameter. Nothing needed to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load. It explains elementor_regenerate thoroughly (rebuilds Elementor compiled CSS, rewrites stale http:// URLs to https, version requirement), but site_url — including what an empty default does — is only implied by 'a connected WordPress site' and never specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Purge a connected WordPress site's page cache') and immediately differentiates from the sibling wordpress_set_performance, which only purges LiteSpeed when flipping a speed setting. An agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions (after a widget, option, SEO field or theme-file change) and the reason it's needed (those edits don't trigger a purge, so the cache serves stale content for days). It also names the sibling that auto-purges and under what narrow condition, so the boundary is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_search_contentSearch WordPress ContentARead-onlyIdempotentInspect
Finds the WordPress posts/pages that contain an EXACT string (or regex) in their content or title — the precise search wordpress_list_posts(search=...) cannot do, because WordPress' own search is fuzzy and word-tokenised (it matches a shortcode like [vc_column_text] on every WPBakery page, and misses bracketed or punctuated tokens). Use it to locate a stale phone number, an outdated claim, or a broken shortcode across a whole site before fixing it, then feed the returned ids to wordpress_bulk_replace. search_in = "content" (default) | "title" | "both". regex=true treats query as a Python regular expression; otherwise it is a literal, case-sensitive substring. type filters post types ("page", "post" or "page,post"; empty scans both). status defaults to "publish". It scans up to max_scan posts (hard cap 400), newest-first, and tells you if the site has more than that. Every post is fetched one by one (~1 s each on a typical host), so one call stops after about 110 seconds and returns what it found so far with partial=true and next_offset; call again with offset=next_offset (same other arguments) to continue where it stopped. Each hit returns id, slug, title, type, match_count and a short snippet around the first match; the hit list is capped so the result stays small. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| query | Yes | ||
| regex | No | ||
| offset | No | ||
| status | No | publish | |
| max_scan | No | ||
| site_url | No | ||
| search_in | No | content |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only cover read-only/idempotent/no-destructive), the description discloses operational realities: ~1s per post fetched one by one, a ~110s per-call ceiling, partial=true with next_offset for continuation, a 400-item hard cap on max_scan, newest-first ordering, and a capped hit list. This is exactly the behavior an agent needs to plan around.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and the sibling contrast before moving into mechanics, and every sentence carries information. It is a dense wall of text, but given 8 parameters and pagination semantics, the length is defensible rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, alternatives, parameter semantics, return shape, and the pagination/continuation protocol. With an output schema present and annotations carrying the safety profile, nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does: it defines search_in values (content/title/both), regex semantics, literal case-sensitive substring behavior, type filter syntax ('page,post' or empty), status default, and the max_scan/offset continuation contract. Only site_url is left implicitly understood.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Finds the WordPress posts/pages that contain an EXACT string') and immediately scopes it against the sibling, explaining why wordpress_list_posts(search=...) cannot do the same job. An agent can distinguish this from other search/list tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it ('locate a stale phone number, an outdated claim, or a broken shortcode') and the downstream step ('feed the returned ids to wordpress_bulk_replace'), while also flagging the alternate tool it supersedes. Nothing 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.
wordpress_seoRead WordPress SEO SettingsARead-onlyIdempotentInspect
Read the SEO settings of a connected WordPress site: which SEO plugin runs it, the search engine verification codes in place, and, for one page, its meta title, meta description, canonical and focus keyword.
Call with no id for the site level. Pass a page or post id to read that page's SEO fields, which is what seo_audit reports on when it says a meta description is missing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and non-open-world, so the safety profile is covered. The description adds genuine behavioral context beyond that: the same tool returns different scopes (site vs page) depending on the id, and enumerates the fields returned. Auth requirements and rate limits remain unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and returned data, then a second short paragraph on the id switch and the seo_audit tie-in. Two sentences with little waste, though the first sentence is a dense field-list that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain return values, and annotations cover the safety profile. It is largely complete, with the notable gap being that site_url goes unexplained and no default site-selection behavior is described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden. It explains id well (absent = site level, present = page/post SEO fields), but site_url is never mentioned in either the schema or the description, leaving half the inputs undocumented for a tool that must identify which site to read.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and resource (SEO settings of a connected WordPress site) and enumerates the returned fields: SEO plugin, verification codes, meta title/description, canonical, focus keyword. It also scopes itself against a sibling by noting the page-level output is what seo_audit references when it flags a missing meta description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent how to route: no id for site level, a page/post id for page-level SEO fields, and ties the latter to seo_audit's missing-meta-description finding. It lacks an explicit 'do not use this when...' or a contrast with the write counterpart wordpress_set_seo, so it falls short of the top mark.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_set_performanceSet WordPress Speed SettingsDestructiveInspect
Turn a WordPress site's speed optimisations on or off, and undo them in one step if the site breaks.
Start with the safe ones: page_cache, browser_cache, minify_css, minify_js, lazy_load. These rarely break a site and give most of the speed.
combine_css, combine_js, defer_js, css_async and guest_mode are the ones that break Elementor and Slider Revolution pages, so they are refused unless you pass confirm_risky=true. Turn them on one at a time and look at the site afterwards. If something breaks, revert=true undoes the MOST RECENT change only, so change a little at a time. exclude=["revslider","elementor"] keeps named scripts out of the deferring or combining, which is the usual fix when a slider stops rendering.
The exclusion list is editable both ways. exclude_from picks the list — "defer", "combine" or "lazy" — and exclude_mode says what to do with the names you pass: "add" (default), "remove" to take entries back out, or "replace" to make the list exactly what you passed (pass an empty list with replace to clear it). Every call returns the FULL list so you can see what is in it, and wordpress_get_performance also reports all three lists. This matters when you are tuning: excluding a hero background image fixes layout shift but can undo the loading-speed win, so you need to take single entries back out and measure again.
clean_dropin=true removes a leftover wp-content/advanced-cache.php whose owning plugin is no longer active. That file is the usual reason every cache plugin fails to activate with a server error: a new one refuses to overwrite a drop-in belonging to a different plugin. It is backed up first, and refused outright if the owning plugin is still active.
LITESPEED IMAGE AND LAYOUT-SHIFT SETTINGS are not switches here; set them with
wordpress_option on the litespeed.conf.* name. LiteSpeed stores them as text, "1" for on
and "" for off, so read first and write value="1" (not value_json=true):
litespeed.conf.media-add_missing_sizes adds width/height to images that lack them, the
usual fix for a high CLS with "images without explicit width and height". It only works
while lazy_load is on. litespeed.conf.media-placeholder_resp reserves space for lazy
images and litespeed.conf.media-lqip shows a blurred preview in that space.
litespeed.conf.img_optm-auto makes LiteSpeed send unoptimised media library images to
QUIC.cloud for compression on its own cron; progress is in litespeed.img_optm._summary
(img_taken, reduced in bytes, last_pulled). Call wordpress_purge_cache afterwards, since a
direct option write does not purge.
| Name | Required | Description | Default |
|---|---|---|---|
| revert | No | ||
| exclude | No | ||
| defer_js | No | ||
| site_url | No | ||
| css_async | No | ||
| lazy_load | No | ||
| minify_js | No | ||
| combine_js | No | ||
| guest_mode | No | ||
| minify_css | No | ||
| page_cache | No | ||
| combine_css | No | ||
| clean_dropin | No | ||
| exclude_from | No | defer | |
| exclude_mode | No | add | |
| browser_cache | No | ||
| confirm_risky | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
wordpress_set_seoSet WordPress SEO SettingsADestructiveInspect
Set SEO fields on a connected WordPress site: the meta description, meta title, canonical or focus keyword of a PAGE or of a CATEGORY/TAG archive, or the site's Google and Bing verification codes.
Pass id for a post or page. Pass term_id (with taxonomy, default 'category') for a category or tag ARCHIVE — those archives rank for their own queries and ship with an empty title and no description unless someone sets them, and the SEO plugin keeps term fields somewhere completely different from page fields, so id and term_id are not interchangeable. Use wordpress_terms to find term ids and to write the archive's own body text, which is the term description rather than an SEO field.
Pass id with description to fix a page whose meta description seo_audit flagged as missing. Pass google_verification with the code from Search Console to verify the site, with no id: you can paste the whole meta tag, the code is extracted from it. Verification is written into the site's SEO plugin when it has one, otherwise the connector outputs the tag itself. An empty string clears a page field; run wordpress_seo first to see the current values. A verification code is never replaced silently: if one is already set you get the existing value back and nothing is written, so you can check with the user before passing overwrite=true. Replacing a code that belongs to another Search Console property drops that property's verification.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| title | No | ||
| noindex | No | ||
| term_id | No | ||
| site_url | No | ||
| taxonomy | No | category | |
| canonical | No | ||
| overwrite | No | ||
| description | No | ||
| focus_keyword | No | ||
| bing_verification | No | ||
| google_verification | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=false), the description discloses concrete behaviors: an empty string clears a page field, verification codes are never replaced silently (existing value returned, nothing written), and replacing a code drops another property's verification. These are exactly the mutation consequences the annotations can only flag generically.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the field inventory, then organized into id/term_id, page-fix, verification, and clearing/overwrite concerns. Dense rather than padded, though a few clauses ('the SEO plugin keeps term fields somewhere completely different from page fields') run longer than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, zero-required mutation tool with no output schema needed (one exists), the description covers target selection, field semantics, verification side effects, and overwrite safety. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does for most: id vs term_id, taxonomy default, description/title for fixing flagged pages, google_verification accepting a whole meta tag, and overwrite gating. It leaves noindex and site_url unexplained, so not fully compensatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Set) and resource (SEO fields on a WordPress site) and enumerates the exact field set: meta description, meta title, canonical, focus keyword, and Google/Bing verification codes. It distinguishes itself from siblings wordpress_seo (read), wordpress_terms (term body text/ids), and seo_audit (missing-description detection) by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use routing: id for posts/pages, term_id+taxonomy for category/tag archives, no id for site verification, and an instruction to run wordpress_seo first to see current values. It also names wordpress_terms as the tool for finding term ids. The overwrite flow ('check with the user before passing overwrite=true') gives a concrete conditional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_set_trackingSet WordPress Tracking TagsADestructiveInspect
Set a WordPress site's Google Tag Manager or GA4 measurement id, add code to the site header, or switch off an old tracking snippet.
gtm_id goes into the GTM4WP plugin when that plugin is active, otherwise the connector emits the tag itself, so this works with or without a tag plugin.
remove_id takes a measurement id like "GTM-5H2L5V63" or "AW-851563016" and removes it wherever
it lives — a plugin setting, a header/footer box, or a WPCode snippet (that one is switched
off, not deleted). This is how you stop a site double-counting after a container change. If the
id is hard-coded in a theme PHP file it is reported back under skipped with the file and line;
that copy can now be removed with wordpress_theme_file(mode="remove_block", contains=""),
which backs the file up and reverts automatically if the edit breaks PHP.
head_code="" clears the header code the connector emits.
To change a few words inside the connector's existing header/footer code (an address in a JSON-LD block, a phone number) without resending the whole block, pass replace=[{"find":"old text","with":"new text"}] and replace_in="head" (default) or "body". The current code is read from the site, each find must match exactly (case-sensitive), and confirm=false PREVIEWS how many times each one matches and writes NOTHING; confirm=true applies and re-reads the code to verify. A find whose replacement is already in place is reported as already_applied and skipped, so repeating the call is safe.
| Name | Required | Description | Default |
|---|---|---|---|
| ga4_id | No | ||
| gtm_id | No | ||
| confirm | No | ||
| replace | No | ||
| site_url | No | ||
| body_code | No | ||
| head_code | No | ||
| remove_id | No | ||
| replace_in | No | head | |
| enable_snippet | No | ||
| disable_snippet | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, and the description adds substantial context beyond them: a WPCode snippet is switched off rather than deleted, a theme-hard-coded id is reported back under skipped with file and line, head_code="" clears emitted code, and confirm=false previews match counts while writing nothing. It also documents the already_applied/skip behavior that makes reruns safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scope statement is front-loaded and each subsequent paragraph addresses a distinct mode (set id, remove id, clear header, surgical replace), so the length is mostly earned. It is dense prose without headers or bullets, which makes the 11-parameter surface harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description thoroughly covers the destructive paths, verification semantics, and the follow-up removal step. The remaining gap is the unexplained snippet-enable/disable and site-selection parameters, which matter for a tool with 0% schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 11 parameters, so the description carries the full explanatory burden. It covers gtm_id, remove_id, head_code, replace, replace_in and confirm well, but leaves enable_snippet, disable_snippet and site_url entirely unexplained and never names ga4_id explicitly (only 'GA4 measurement id').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb (set) plus the resource (a WordPress site's GTM or GA4 measurement id, header code, or an old tracking snippet) and enumerates the distinct operating modes. An agent can differentiate it from siblings such as wordpress_tracking or site_tag_gateway 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong context for the remove_id path ('This is how you stop a site double-counting after a container change') and routes hard-coded theme copies to wordpress_theme_file(mode="remove_block"). It does not, however, say when to prefer this tool over the read/list counterparts (wordpress_tracking) or over connect_tag_manager/connect_ga4, so a little routing inference is left to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_site_infoWordPress Site InfoBRead-onlyIdempotentInspect
Overview of a connected WordPress site: name, active theme, plugin count, WordPress/PHP versions, WooCommerce status.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the description does not contradict it. The only added context is the field inventory, which overlaps the existing output schema and the optional site selection behavior is not explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact, front-loaded sentence fragment with no filler; the field list is the payload and it is easy to scan. Losing a point only because it is a fragment rather than an action-oriented statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and an output schema exists, so return values need not be described and the field list is arguably redundant. What is missing is the site-selection semantics for the optional defaulted parameter and any hint of how this overview differs from site_info or other WordPress listing tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter site_url has a default of empty string, yet the description never mentions it or explains what happens when it is omitted (use currently selected site?). This is a genuine gap the description should have closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear subject (a connected WordPress site) and enumerates exactly what the overview contains: name, theme, plugin count, versions, WooCommerce status. It does not differentiate itself from close siblings such as site_info, wordpress_list_plugins, or list_wordpress_sites, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the many adjacent WordPress/SEO/audit siblings, and no prerequisites (e.g., site must be connected/selected). The 'connected' qualifier hints at a precondition but never says how to satisfy it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_sliderWordPress Slider RevolutionADestructiveInspect
Read and fix Slider Revolution sliders on a connected WordPress site — the hero sliders added with a [rev_slider alias="..."] shortcode. Slider Revolution keeps its slides in its OWN database tables, not in the post content and not in Elementor's data, which is why wordpress_page_design can see the shortcode but never the button, headline or link inside the slide. That is where leftover THEME DEMO content hides: a "Read more" button still pointing at the theme author's demo site, an old phone number, a stale campaign headline. action: 'list' = every slider with its alias, shortcode and slide count; 'get' = the slides of one slider (slider_id) with the texts and links found in each, so you can see exactly what is in there; 'replace' = swap a literal string (find → replace) across that slider's slides, e.g. the demo URL for the real one; 'restore' = undo the last replace. Replace is a plain text swap — the slide structure is never rebuilt, so it cannot corrupt the slider — and it also matches the escaped form URLs take inside the stored JSON. Run 'replace' with confirm=false first: that reports which slides contain the string without changing anything. The previous values are backed up before every write. Requires Opus Growth Connector 0.6.0 or newer.
| Name | Required | Description | Default |
|---|---|---|---|
| find | No | ||
| action | No | list | |
| confirm | No | ||
| replace | No | ||
| site_url | No | ||
| slide_id | No | ||
| slider_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and non-idempotent, and the description adds substantial context beyond them: previous values are backed up before every write, restore undoes the last replace, replace is a literal string swap that never rebuilds slide structure, and it also matches the escaped form URLs take in stored JSON. It even states a connector version prerequisite. This is richer than a generic mutation caveat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the page_design contrast are front-loaded, then the action list, then workflow guidance — a sensible order. The theme-demo narrative ('Read more' button, old phone number, stale campaign headline) is slightly longer than needed to make the point, but every paragraph still carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be spelled out, and annotations cover the safety profile; the description still explains backup/restore and dry-run semantics. The only shortfall is that two parameters (slide_id, site_url) are never characterized anywhere, which for a seven-parameter tool is a minor completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it does document action's four values ('list', 'get', 'replace', 'restore'), the slider_id targeting for 'get', and the find → replace / confirm=false mechanics. It leaves slide_id and site_url unexplained, which is a real gap given seven undocumented parameters, but the meaningful operational parameters are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Read and fix Slider Revolution sliders') and pins down exactly what the tool touches — slides stored in Slider Revolution's own tables. It explicitly distinguishes itself from wordpress_page_design, which 'can see the shortcode but never the button, headline or link inside the slide.' An agent can select this over sibling WordPress tools without further reading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit motivating scenario (leftover theme-demo content: demo URLs, old phone numbers, stale headlines) and names the sibling that cannot handle it. It also prescribes the correct workflow: 'Run replace with confirm=false first' as a dry-run before any write, and lists the four actions with their intended use. When/when-not and alternatives are all covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_termsWordPress Categories & TagsADestructiveInspect
Manage the CATEGORIES and TAGS of a connected WordPress site: list them, create one, rename it, change its slug, set its DESCRIPTION, move it under a parent, or delete it. action: 'list' (default) | 'create' | 'update' | 'delete'.
The description is the only body text a category archive has. Without it the archive is a
bare list of post titles, which is why category pages usually rank for nothing even when
the posts under them do — so a new category is worth two sentences here. For the archive's
SEO title, meta description, focus keyword or noindex use wordpress_set_seo with term_id.On a MULTILINGUAL site every language has its OWN term — the Turkish "Apostil ve Tasdik" and its English counterpart are two different terms with two different ids — so each row carries a language field and all languages are listed together; pass lang to narrow to one. list also reports each term's post count, its live archive URL and its current SEO fields,
so you can see in one call which categories are empty or unoptimised. On create and update lang
does more than filter: it SETS the term's language, which is what puts an English category
on the /en/ archive base instead of the site's default language. Setting the language needs
Opus Growth Connector 0.7.9 on the site; on an older one the call is REFUSED before anything
is written, because there lang is silently ignored and the term lands in the site's default
language with the wrong archive URL. Creating a term that
already exists returns the existing one instead of failing. Changing a slug CHANGES the
archive URL and the reply says so explicitly, because the old address then returns 404 and
needs a redirect. Deleting a term never deletes posts — it only removes the link, and the
reply tells you how many posts were affected. delete needs confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| name | No | ||
| slug | No | ||
| action | No | list | |
| parent | No | ||
| search | No | ||
| confirm | No | ||
| term_id | No | ||
| site_url | No | ||
| taxonomy | No | category | |
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply destructive/openWorld/idempotent flags; the description adds substantial behavior beyond them — create-on-existing returns the existing term rather than failing, slug changes break the old archive URL and regress to 404 requiring a redirect, delete unlinks but never deletes posts and reports the affected count, and the older-connector case is REFUSED before any write because lang would be silently ignored.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb/action list, then behavioral caveats, which is the right order. It is long and contains prescriptive SEO editorial ('a new category is worth two sentences here') that is tangentially motivational rather than operational, slightly diluting the density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-action, 11-parameter mutation tool with an output schema, the description covers action routing, multilingual token handling, idempotency, URL/redirect side effects, delete safety, and prerequisites. An agent has everything needed to pick the right action and anticipate the reply content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry the load, and it does for most parameters: action values, lang (both filter and set semantics, with the version caveat), slug (URL impact), description (SEO purpose), parent, term_id (for handoff to wordpress_set_seo), and confirm. However, name, search, site_url, and the taxonomy default are never explained, leaving several of the 11 params undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Manage the CATEGORIES and TAGS of a connected WordPress site') and enumerates the operations covered under a single tool (list, create, rename, slug change, description, parent move, delete) with the action enum spelled out. An agent can tell this apart from neighboring post/page/plugin tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes SEO-title/meta-description/focus-keyword/noindex work to wordpress_set_seo with term_id, and explains the two distinct uses of lang (filter on list vs. SET on create/update). It also states the precondition (Opus Growth Connector 0.7.9) and the consequence of not meeting it, plus confirm=true for delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_test_contact_formTest WordPress Contact FormADestructiveInspect
Submits a TEST entry to a Contact Form 7 form through the plugin's own REST endpoint and reports what happened: mail_sent (the form works and WordPress sent the notification mail), mail_failed (the entry passed validation but WordPress could NOT send the mail, usually an SMTP/mail setup problem; this is also why a 'wpcf7mailsent' conversion never fires), validation_failed (with the fields that were rejected), or spam (a spam guard such as reCAPTCHA/Akismet blocked the test; real visitors may still get through). fields = {"field-name": "value"}; required fields you leave out are filled with obvious test values (e.g. test@example.com). A real submission sends a REAL e-mail to the form's recipient, so confirm=false (default) only previews the values that would be sent; confirm=true submits once.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| confirm | No | ||
| form_id | Yes | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark it destructive/non-idempotent, and the description justifies and expands that: it warns a real submission sends a REAL e-mail to the form's recipient, and enumerates the outcome states (mail_sent, mail_failed incl. the SMTP-conversion consequence, validation_failed, spam). This adds substantial behavioral context beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the confirm/fields semantics before the outcome taxonomy. It is dense but every clause carries useful information; slightly long for a single paragraph but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need not be documented, yet the description still characterizes the meaningful result states. Combined with the safety/behavioral disclosures, an agent has everything needed to invoke it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage the description must carry parameters, and it does well for the two subtle ones: fields is given the {'field-name':'value'} shape with auto-fill of omitted required fields, and confirm is fully explained. form_id is obvious from the name, but site_url is never mentioned, leaving a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (submits a test entry to a Contact Form 7 form) and the exact mechanism (the plugin's REST endpoint), which distinguishes it from siblings like wordpress_contact_forms and site_form_submissions that list rather than submit. An agent knows precisely what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains the two operational modes and when each applies: confirm=false only previews, confirm=true submits a real e-mail once. This is strong when-to-use guidance, though it does not name sibling alternatives (e.g., the real submission path) explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_theme_fileEdit WordPress Theme FileADestructiveInspect
Read and safely edit the ACTIVE THEME's own files on a connected WordPress site — the last resort for things baked into a theme PHP/CSS file that nothing else can reach: a Google tag hard-coded into header.php (a duplicate gtag the theme prints on every page), a wrong heading level in a template, a stray inline style. wordpress_option reaches plugin/theme SETTINGS and wordpress_snippet adds NEW PHP through WPCode, but neither can change a line the theme itself ships.
action: 'list' = the theme's source files with size and whether each is writable; 'get' (path) = one file's contents; 'edit' (path) = change it; 'restore' (path) = undo the last edit to that file. Scope is deliberately narrow and safe: only files INSIDE the active or parent theme folder, only .php/.css/.js/.html/.txt, no path escapes ('..' is refused), and only files that already exist (it never creates one). Pass path as list/get reports it — e.g. 'wp-content/themes/construction/header.php' or just 'header.php'.
edit has two modes. mode='remove_block' with contains='AW-851563016' removes every / block that contains that text — the clean way to strip a hard-coded gtag / GTM / Google Ads tag out of a theme file (find the id first with wordpress_tracking, which now detects AW- / G- / GT- ids in theme files as well). mode='replace' with find + replace makes a literal text change; count caps how many occurrences may match, and if find appears more times than that nothing is written, so you can make find more specific — this is how you turn an H4 into an H2. SAFETY on every edit: the whole file is backed up first, PHP files are re-checked with php -l and the write is AUTOMATICALLY REVERTED if it would break the syntax, and restore brings the previous version back. confirm=false previews (match count and size delta) without writing; confirm=true applies. Needs Connector 0.9.0 or newer.
| Name | Required | Description | Default |
|---|---|---|---|
| find | No | ||
| mode | No | replace | |
| path | No | ||
| count | No | ||
| action | No | list | |
| confirm | No | ||
| replace | No | ||
| contains | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/write behavior, but the description adds substantial context beyond them: whole-file backup before every edit, `php -l` syntax re-check with automatic revert, restore semantics, confirm=false preview vs confirm=true apply, and the narrow scope rules (theme folder only, specific extensions, no '..' escapes, never creates files).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded, and the action-mode-safety ordering is logical. The prose is dense and lengthy, with some sentences carrying several ideas at once, but for a 9-param mutating tool most of the content earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a write tool with 9 params, zero schema descriptions, and an output schema already handling return values, the description covers scope, actions, edit modes, safety/revert behavior, and preview semantics. Nothing essential for correct invocation appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it largely does: action values, path format with concrete examples, mode values, contains/find/replace semantics, and count's abort-if-exceeded behavior are all spelled out. Minor gap: site_url is never addressed, and defaults aren't noted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read and safely edit the ACTIVE THEME's own files') and immediately scopes it as a last-resort capability. It explicitly distinguishes itself from wordpress_option (plugin/theme settings) and wordpress_snippet (new PHP via WPCode), so an agent can route correctly without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames when to use it ('the last resort for things baked into a theme file that nothing else can reach') and why siblings can't cover that case. It then documents each action value (list/get/edit/restore) and, for edit, which mode to pick for which scenario (strip a gtag via remove_block, turn H4 into H2 via replace).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_trackingRead WordPress Tracking TagsARead-onlyIdempotentInspect
See every place a WordPress site fires a Google Tag Manager or GA4 tag: the GTM4WP plugin, WPCode snippets, header/footer code, and the connector's own output.
Run this before changing a measurement tag. It lists each source with the ids it emits and warns when two different GTM containers are live at once, which double-counts every visit.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds value beyond that: it discloses the detection surface (four named sources) and a non-obvious diagnostic behavior — warning when two different GTM containers are live, which double-counts visits. It omits any note on permissions or what happens when no site is resolvable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the inspection scope, then the pre-change use case and the double-counting warning. Every clause carries information; the source list is slightly dense but earns its place by defining scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be described, and the description still tells the agent what will be found (sources + emitted IDs) and the key risk signal. Missing only edge-case behavior for the optional site_url and any permission prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single site_url parameter, which also has a default of "" and is not required. The description says only "a WordPress site" and never explains how site_url selects the target or what the empty default resolves to, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (see/list) and resource (WordPress tracking tags) and enumerates exactly which sources are inspected: GTM4WP plugin, WPCode snippets, header/footer code, and connector output. An agent can immediately distinguish this read/inspect tool from wordpress_set_tracking and from GTM CRUD tools like list_gtm_tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Run this before changing a measurement tag" gives explicit workflow placement and a clear trigger condition, which is stronger than most siblings. It stops short of naming alternatives (wordpress_set_tracking, site_tag_gateway, conversion_tracking_health) or stating when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_update_connectorUpdate Opus Growth ConnectorDestructiveInspect
Updates the Opus Growth Connector plugin on a connected WordPress site to the latest version, or with check_only=true only reports the installed and latest versions without changing anything. site_url selects the site when more than one is connected.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | No | ||
| check_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
wordpress_update_postUpdate WordPress PostADestructiveInspect
Update an existing WordPress post or page by its ID. Only the fields you pass are changed; edits keep WordPress revisions.
THE RESPONSE DOES NOT CARRY THE PAGE BACK. A write answers with ok, the replaced counts and any charset_warning — the three things that tell you whether the edit landed. The stored content is left out and marked content_omitted: true with content_chars, because a WPBakery home page is 45 KB and returning it made the tool result itself too large to read: the write had succeeded, but the caller saw a size error and could not tell (issue #293). Pass return_content=true if you really need the stored content back and the page is small.
COMMENTS / PINGBACKS: comment_status and ping_status take 'open' or 'closed' and act on THIS post only. WordPress' own Settings > Discussion screen changes the default for NEW posts and leaves existing ones untouched, so closing comments on a published page is only possible here. Needs Opus Growth Connector 0.6.0 or newer on the site.
On a page built with Elementor the content field is not what visitors see, so it is skipped and reported back to you: use wordpress_page_design and wordpress_edit_page_design for those pages. featured_media sets the featured image by media id (get one from wordpress_media); 0 removes it. categories and tags take names and are created if missing, which is how you move a published post out of "Uncategorized". author takes a user id, username or display name and changes the byline; use wordpress_users to find the right one. template, meta and copy_meta_from work as in wordpress_create_post — set the page's theme template, write WPBakery/theme post meta, or copy a working page's layout meta (template + WPBakery CSS) onto this one (Connector 0.9.2+).
On a page built from shortcodes (Avada/Fusion, WPBakery) do NOT rewrite content: pass replace=[{"find": "old text", "with": "new text"}] instead. That changes only the text you name and leaves the shortcode layout untouched. If nothing matches, nothing is written and you are told so. Use wordpress_get_post first to see the exact text to match.
Text copied out of a page often will NOT match literally, because editors leave invisible characters in it — non-breaking spaces, smart quotes, long dashes — that look like ordinary ones. When that happens the reply says so and tells you how many times it WOULD match; send the same call again with match="normalized" and those characters are treated as their plain equivalents. match is also accepted per entry ({"find": ..., "with": ..., "match": "normalized"}) when only one of several replacements needs it; the top-level value applies to every entry that does not carry its own. wordpress_get_post(raw=true) shows the invisible characters spelled out if you want to see them.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| meta | No | ||
| tags | No | ||
| match | No | ||
| title | No | ||
| author | No | ||
| status | No | ||
| content | No | ||
| excerpt | No | ||
| replace | No | ||
| site_url | No | ||
| template | No | ||
| categories | No | ||
| ping_status | No | ||
| comment_status | No | ||
| copy_meta_from | No | ||
| featured_media | No | ||
| return_content | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (destructive, non-idempotent, open-world); the description goes well beyond it — it explains the response does NOT return the page, lists the returned signals (ok, replaced, charset_warning), justifies content_omitted via the 45 KB issue #293 rationale, and notes that content is skipped on Elementor pages. Version-gated comment behavior is also surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core update rule, then response format, then per-parameter notes — a sensible structure with little true redundancy. It is on the long side, with capitalized section headers and an issue-number aside that could be tightened, but nearly every sentence supplies actionable constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter mutation tool with a known output schema, the description covers the risky/ambiguous paths (replace vs content, Elementor skip, comment closing, content omission, connector version requirements) and defers return-value detail appropriately to the output schema. Nothing an agent needs to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and largely does: it defines replace/match semantics (including per-entry match and normalized mode), featured_media (id or 0 to remove), categories/tags (names, auto-created), author (id/username/display name), template/meta/copy_meta_from, and comment_status/ping_status values. Only trivially self-evident fields like status/excerpt/site_url are left implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an existing WordPress post or page by its ID') and immediately scopes it against siblings, naming wordpress_page_design / wordpress_edit_page_design for Elementor pages and wordpress_get_post for inspecting text before edits. An agent can route between this, wordpress_create_post and wordpress_bulk_replace without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use/when-not-to guidance throughout: use replace instead of rewriting shortcode-built content, use wordpress_page_design for Elementor, call wordpress_get_post first to see exact text, resend with match="normalized" when invisible characters block a literal match. Prerequisites (Connector 0.6.0+/0.9.2+) are also disclosed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_upload_mediaUpload WordPress MediaDestructiveInspect
Upload an image into a WordPress site's media library from a public URL, optionally setting it as a post's featured image in the same call.
If the user has the picture on their own computer, call upload_image first to turn it into a public URL, then pass that URL here. Set post_id together with featured=true to make it the featured image of that post or page, which is what Elementor loop grids and most themes display on cards. Always give alt text: it is what screen readers and search engines read.
| Name | Required | Description | Default |
|---|---|---|---|
| alt | No | ||
| url | Yes | ||
| title | No | ||
| post_id | No | ||
| featured | No | ||
| filename | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
wordpress_usersWordPress UsersADestructiveInspect
List the users of a connected WordPress site, or change the name a user is shown under on their posts.
Call with no arguments to list users with their id, login and display name. Pass id together with display_name to fix a byline that shows the wrong name. Roles, passwords and email addresses are not touched.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| site_url | No | ||
| last_name | No | ||
| first_name | No | ||
| display_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true, readOnlyHint=false, idempotentHint=false, openWorldHint=true. The description adds valuable scope-limiting context beyond those flags: it names the only mutated field (display_name) and explicitly states that roles, passwords and email addresses are untouched. It doesn't cover what happens on an invalid id or the openWorld reach, so it's not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the list-then-update split, zero filler. The exclusion guarantee ('Roles, passwords and email addresses are not touched') is the right thing to keep because it drives the destructiveHint safety decision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is dual-mode (read + write), has an output schema (so return format need not be described), and the description covers the read path, the write path, and the write's blast radius. It under-documents site_url and first/last_name, but the essential call semantics are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so five parameters (id, site_url, first_name, last_name, display_name) are undocumented in the schema. The description compensates for two: id and display_name, with their combined semantics. It says nothing about site_url or the first/last name parameters, leaving a real gap even though the overall shape is inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List the users of a connected WordPress site') and a second distinct action ('change the name a user is shown under'). It also names the fields returned, so an agent can distinguish this from siblings like wordpress_list_posts or wordpress_search_content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the no-argument case ('Call with no arguments to list users') and the mutation case ('Pass id together with display_name to fix a byline'). It even carves out exclusions – roles, passwords, email addresses are not touched – which is exactly the when/when-not guidance the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_woo_create_productCreate WooCommerce ProductAInspect
Create a WooCommerce simple product on a connected WordPress site. Defaults to a draft. Requires WooCommerce to be active.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | ||
| name | Yes | ||
| price | No | ||
| stock | No | ||
| status | No | draft | |
| site_url | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description still adds real context beyond them: new products default to draft status, and WooCommerce must be active. It omits the permissions required and what happens on duplicate SKUs, hence 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and scope, then defaults, then prerequisite. No filler and nothing repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and annotations plus the draft-default notice cover the mutation's basic behavior. Still, with 7 undocumented parameters and only a name requirement in the schema, an agent lacks the detail needed to supply sku, price, stock, and site_url correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the description carries the burden and largely fails. It only alludes to the status default ('Defaults to a draft'), saying nothing about sku uniqueness, price format, stock type, site_url targeting, or description content. Most parameters are left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a WooCommerce simple product') plus the hosting context ('on a connected WordPress site'). The 'simple product' qualifier usefully scopes it away from other WooCommerce product types. It does not explicitly name or distinguish itself from siblings like wordpress_woo_products, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a prerequisite ('Requires WooCommerce to be active') and a default behavior, which implies the creation context. However, it offers no when-to-use vs alternative guidance (e.g., list via wordpress_woo_products, update via a future update tool) and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_woo_ordersList WooCommerce OrdersARead-onlyIdempotentInspect
List recent WooCommerce orders on a connected WordPress site (status, total, currency, customer, date). Requires WooCommerce to be active.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| per_page | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint false, and openWorldHint false. The description adds useful context by disclosing the WooCommerce-active requirement and listing what order fields are surfaced, though it does not discuss 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence plus a brief prerequisite. Every clause earns its place and there is no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Annotations cover safety traits. However, the input schema has no parameter descriptions, and the tool description does not compensate for page, per_page, or site_url semantics, leaving invocation details incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three parameters. The description only indirectly gestures at site_url via 'connected WordPress site' and does not explain page or per_page semantics, defaults, or pagination behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: list recent WooCommerce orders on a connected WordPress site. It also names the returned fields and the prerequisite, distinguishing it from sibling tools such as wordpress_woo_products and wordpress_woo_create_product.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear prerequisite (WooCommerce must be active), but it does not explicitly state when to use this tool versus alternatives or when not to use it. Usage is implied by the name and purpose rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_woo_productsList WooCommerce ProductsBRead-onlyIdempotentInspect
List WooCommerce products on a connected WordPress site (name, SKU, price, stock, status). Requires WooCommerce to be active.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| per_page | No | ||
| site_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds one genuine behavioral fact beyond that: WooCommerce must be active, which is a precondition the annotations do not express. It says nothing about pagination or result limits, so it lands at 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler, front-loaded with the operation and then narrowed by the precondition. It is appropriately sized, though its terseness is also the source of the parameter gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations carry the safety profile. The remaining hole is input-side: with four undocumented parameters at 0% schema coverage, the agent gets no guidance on paging (page/per_page defaults) or on how site_url selects among connected WordPress sites, which is material for a multi-site connector.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters (page, per_page, search, site_url), and the description compensates for none of them. The fields it enumerates (name, SKU, price, stock) are output attributes, not inputs, so it adds no meaning to page/per_page/search/site_url.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (List) and resource (WooCommerce products) and enumerates the returned fields (name, SKU, price, stock, status), so the agent knows exactly what it gets. It is distinguishable from wordpress_woo_orders and wordpress_woo_create_product by resource, but it never names those siblings explicitly, keeping it at a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: it applies to a connected WordPress site with WooCommerce active, which is stated as a prerequisite. There is no explicit when-to-use versus the sibling listing tools (orders, posts, plugins) and no exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_channelsYouTube ChannelsARead-onlyIdempotentInspect
Lists the channels of the connected YouTube account (title, subscriber count, total views, video count).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only the returned field list, which is largely redundant with the output schema, and says nothing about pagination or behavior when multiple channels exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb and scope first and the returned fields in parentheses. No padding or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with a full output schema and complete annotations, the description covers what is needed. The only omission is the connectivity prerequisite and its relationship to the YouTube siblings, which is minor given the schema carries the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline for a parameterless tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (channels) scoped to the connected YouTube account, and names the concrete fields returned. It is clear what the tool does, but it never references sibling tools like youtube_overview or youtube_top_videos, so the agent must infer the distinction 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.
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 is given, and no alternatives are named despite several adjacent YouTube siblings (youtube_overview, youtube_top_videos, youtube_traffic_sources). The phrase 'connected YouTube account' hints at a prerequisite connection but does not state it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_overviewYouTube OverviewARead-onlyIdempotentInspect
YouTube channel OVERVIEW (last N days): views, watch time (min), avg. view duration (sec), avg. view percentage, subscribers gained/lost, likes, comments, shares. channel = a value from youtube_channels (leave empty if there's only one channel).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| channel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds meaningful context beyond that: the reporting window is the last N days and it returns a fixed metric set (views, watch time, duration, subscribers gained/lost, engagement). It does not discuss pagination or multi-channel default behavior, but with annotations carrying safety this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the resource and metric list front-loaded, followed by the one non-obvious parameter rule. No filler and nothing repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, yet the description still lists the key metrics. Both parameters are covered. The only gap is behavior when multiple channels exist and channel is left empty, which is implied but not stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and largely does: 'last N days' gives meaning to days, and the channel guidance ('a value from youtube_channels', 'leave empty if there's only one channel') adds real semantics beyond a bare string param. The default of 28 days is not stated, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('YouTube channel OVERVIEW') and enumerates the exact metrics returned, so an agent can distinguish it from youtube_top_videos and youtube_traffic_sources without opening the schema. The time scope ('last N days') is also front-loaded.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the metric list and the channel-selection note, but there is no explicit when-to-use guidance relative to sibling tools like youtube_channels (which the description references as a source of valid values) or youtube_top_videos. The 'leave empty if there's only one channel' hint is the only routing-style guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_top_videosYouTube Top VideosBRead-onlyIdempotentInspect
MOST-WATCHED videos (last N days): title + views + watch time (min) + avg. view duration (sec). channel = from youtube_channels (leave empty if there is only one channel).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| channel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false. The description adds useful behavioral context beyond that: the ranking criterion (MOST-WATCHED), the time window (last N days), and the exact output metrics. It does not cover auth needs, rate limits, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and returned fields, then a parenthetical note for the channel parameter. No filler and no wasted clauses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and annotations plus the output schema cover safety and return structure. However, with zero schema descriptions, the missing explanation of 'limit' and the absence of sibling routing guidance leave meaningful gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full burden for three parameters. It explains days implicitly ('last N days') and channel explicitly, including its source and empty-default behavior, but omits 'limit' entirely, leaving one of three parameters with no meaning anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific retrieval task (most-watched videos over last N days) and enumerates the returned metrics, so the agent knows what the tool produces. It references youtube_channels for channel names, which distinguishes that sibling, but does not differentiate itself from youtube_overview or youtube_traffic_sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage guidance is for the channel parameter ('leave empty if there is only one channel'). There is no guidance on when to use this tool versus other YouTube reporting siblings, and no exclusions or alternative conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_traffic_sourcesYouTube Traffic SourcesARead-onlyIdempotentInspect
How viewers FIND the videos (last N days): views + watch time by traffic source type — YouTube search, suggested, external sites, playlists, subscriptions, Shorts, etc. channel = from youtube_channels (leave empty if there's only one channel).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| channel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered. The description adds context about what is measured and the grouping dimension, but says nothing about aggregation caveats, freshness, or limits. With annotations carrying the safety burden, this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool returns, then follows with the parameter note in a compact two-sentence block. Efficient with no filler, though the uppercase emphasis on 'FIND' is stylistic rather than informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return fields need not be described, and annotations cover the safety profile. For a simple two-parameter analytics tool, the description is complete enough to invoke correctly; only minor caveats about aggregation or date-window behavior are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load and it largely does: 'channel = from youtube_channels' gives provenance plus the empty-string condition, and 'last N days' maps to the days window. It does not restate the 28-day default, but the semantic meaning of both parameters is clarified beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it reports views and watch time broken down by traffic source type, with the metric set and grouping dimension named explicitly. This is enough to distinguish it in practice from youtube_overview and youtube_top_videos, though no sibling is named. Clear and specific, but not explicitly differentiated from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a useful conditional for the channel parameter ('leave empty if there's only one channel') and implies the days window ('last N days'). However, it never says when to choose this tool over youtube_overview, youtube_top_videos, or youtube_channels. 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
470 tool updates
- Added
account_audit - Added
add_keywords - Added
add_location_assets - Added
add_microsoft_ad_extensions - Added
add_microsoft_ad_schedule - Added
add_microsoft_demographic_target - Added
add_microsoft_device_target - Added
add_microsoft_keywords - Added
add_microsoft_location_target - Added
add_microsoft_negative_keywords - Added
add_negative_keyword - Added
add_pmax_images - Added
add_site - Added
apply_recommendation - Added
attach_linkedin_conversion - Added
block_ip_addresses - Added
budget_pacing_alerts - Removed
call_tool - Removed
call_write_tool - Added
chatgpt_ads_ad_preview - Added
chatgpt_ads_conversion_setup - Added
chatgpt_ads_details - Added
chatgpt_ads_geo_lookup - Added
chatgpt_ads_insights - Added
chatgpt_ads_spend_limits - Added
chatgpt_ads_status - Added
client_report - Added
client_report_link - Added
competitor_ads - Added
configure_site_smtp - Added
connect_business_profile - Added
connect_chatgpt_ads - Added
connect_ga4 - Added
connect_google_ads - Added
connect_linkedin_ads - Added
connect_meta_ads - Added
connect_microsoft_ads - Added
connect_search_console - Added
connect_tag_manager - Added
connect_tiktok_ads - Added
connect_youtube - Added
conversion_tracking_health - Added
copy_ad_group - Added
copy_meta_entity - Added
core_web_vitals - Added
create_ad_group - Added
create_app_campaign - Added
create_chatgpt_ads_ad - Added
create_chatgpt_ads_ad_group - Added
create_chatgpt_ads_campaign - Added
create_chatgpt_ads_event_setting - Added
create_customer_match_audience - Added
create_demand_gen_ad - Added
create_demand_gen_campaign - Added
create_google_ads_account - Added
create_gtm_container - Added
create_gtm_tag - Added
create_gtm_trigger - Added
create_gtm_variable - Added
create_gtm_workspace - Added
create_lead_form - Added
create_linkedin_campaign - Added
create_linkedin_campaign_group - Added
create_linkedin_post_ad - Added
create_linkedin_text_ad - Added
create_lookalike_audience - Added
create_meta_ab_test - Added
create_meta_adset - Added
create_meta_campaign - Added
create_meta_carousel_ad - Added
create_meta_custom_conversion - Added
create_meta_dynamic_ad - Added
create_meta_engagement_audience - Added
create_meta_instagram_post_ad - Added
create_meta_lead_form - Added
create_meta_link_ad - Added
create_meta_lookalike_audience - Added
create_meta_post_ad - Added
create_meta_video_ad - Added
create_meta_website_audience - Added
create_microsoft_ad_group - Added
create_microsoft_campaign - Added
create_microsoft_conversion_goal - Added
create_microsoft_remarketing_list - Added
create_microsoft_responsive_search_ad - Added
create_microsoft_uet_tag - Added
create_pmax_campaign - Added
create_responsive_search_ad - Added
create_search_campaign - Added
create_tiktok_ad - Added
create_tiktok_adgroup - Added
create_tiktok_auto_message - Added
create_tiktok_campaign - Added
create_tiktok_customer_file_audience - Added
create_tiktok_lookalike_audience - Added
create_tiktok_pixel - Added
create_trial_site - Added
create_website_audience - Added
delete_gtm_container - Added
delete_gtm_entity - Added
delete_linkedin_campaign - Added
delete_linkedin_campaign_group - Added
delete_linkedin_creative - Added
delete_meta_ad - Added
delete_meta_adset - Added
delete_meta_audience - Added
delete_meta_campaign - Added
delete_microsoft_audience - Added
delete_microsoft_campaign - Added
deploy_site_zip - Added
detach_linkedin_conversion - Added
diagnose_chatgpt_ads_delivery - Added
dismiss_recommendations - Added
download_linkedin_leads - Added
download_meta_leads - Added
download_tiktok_leads - Added
enable_gtm_builtin_variables - Added
extension_asset_performance - Added
find_instagram_media_id - Added
fraud_scan - Added
fraud_setup - Added
ga4_create_conversion - Added
ga4_create_custom_dimension - Added
ga4_link_google_ads - Added
ga4_list_ads_links - Added
ga4_list_conversions - Added
ga4_list_data_streams - Added
ga4_list_properties - Added
ga4_overview - Added
ga4_realtime - Added
ga4_report - Added
gbp_complete_verification - Added
gbp_create_location - Added
gbp_create_post - Added
gbp_insights - Added
gbp_list_locations - Added
gbp_list_posts - Added
gbp_location_details - Added
gbp_manage_services - Added
gbp_reply_review - Added
gbp_reviews - Added
gbp_search_categories - Added
gbp_search_keywords - Added
gbp_social_links - Added
gbp_start_verification - Added
gbp_update_location - Added
gbp_update_photo_category - Added
gbp_update_post - Added
gbp_upload_photo - Added
gbp_upload_video - Added
gbp_verification_options - Added
geo_target_search - Added
get_ad_details - Added
get_ad_schedule - Added
get_billing_status - Added
get_campaign_targeting - Added
get_change_history - Added
get_conversion_settings - Added
get_conversion_tags - Added
get_meta_ad_creative - Added
get_pmax_assets - Added
get_shared_negative_list - Added
get_tiktok_lead_form_fields - Added
gsc_add_site - Added
gsc_delete_sitemap - Added
gsc_inspect_urls - Added
gsc_list_sites - Added
gsc_performance - Added
gsc_sitemaps - Added
gsc_submit_sitemap - Added
gsc_url_inspect - Added
gtm_workspace_status - Added
impression_share_analysis - Added
instagram_follower_growth - Added
instant_audit - Added
issue_status - Added
keyword_historical_metrics - Added
keyword_opportunities - Added
keyword_planner - Added
keyword_quality_report - Added
keyword_report - Added
linkedin_ad_copy - Added
linkedin_audience_forecast - Added
linkedin_bid_recommendations - Added
linkedin_campaign_analytics - Added
linkedin_targeting_search - Added
list_ad_extensions - Added
list_ad_policy_issues - Added
list_assets - Added
list_audiences - Added
list_business_profile_photos - Added
list_conversion_actions - Added
list_conversion_goals - Added
list_custom_conversion_goals - Added
list_extension_assets - Added
list_google_ads_experiments - Added
list_gtm_accounts - Added
list_gtm_containers - Added
list_gtm_permissions - Added
list_gtm_tags - Added
list_gtm_triggers - Added
list_gtm_variables - Added
list_gtm_versions - Added
list_gtm_workspaces - Added
list_ip_exclusions - Added
list_lead_form_submissions - Added
list_linkedin_ad_accounts - Added
list_linkedin_audiences - Added
list_linkedin_campaign_groups - Added
list_linkedin_campaigns - Added
list_linkedin_conversions - Added
list_linkedin_creatives - Added
list_linkedin_lead_forms - Added
list_meta_ad_accounts - Added
list_meta_ads - Added
list_meta_adsets - Added
list_meta_audiences - Added
list_meta_campaigns - Added
list_meta_catalogs - Added
list_meta_custom_conversions - Added
list_meta_instagram_accounts - Added
list_meta_instagram_posts - Added
list_meta_lead_forms - Added
list_meta_page_posts - Added
list_meta_pages - Added
list_meta_pixels - Added
list_meta_product_sets - Added
list_meta_saved_audiences - Added
list_microsoft_accounts - Added
list_microsoft_ad_extensions - Added
list_microsoft_ad_groups - Added
list_microsoft_ads - Added
list_microsoft_audiences - Added
list_microsoft_campaigns - Added
list_microsoft_conversion_goals - Added
list_microsoft_keywords - Added
list_microsoft_negative_keywords - Added
list_microsoft_uet_tags - Added
list_negative_keywords - Added
list_recommendations - Added
list_shared_negative_lists - Added
list_sites - Added
list_tiktok_ad_accounts - Added
list_tiktok_adgroups - Added
list_tiktok_ads - Added
list_tiktok_asset_groups - Added
list_tiktok_audiences - Added
list_tiktok_auto_messages - Added
list_tiktok_bc_advertisers - Added
list_tiktok_bc_pixels - Added
list_tiktok_business_centers - Added
list_tiktok_campaigns - Added
list_tiktok_creative_portfolios - Added
list_tiktok_gmv_max_stores - Added
list_tiktok_identities - Added
list_tiktok_lead_forms - Added
list_tiktok_pixels - Added
list_tiktok_posts - Added
list_tiktok_smart_plus - Added
list_tiktok_videos - Added
list_wordpress_sites - Added
manage_audience_targeting - Added
manage_bidding_strategies - Added
manage_business_logo - Added
manage_business_name - Added
manage_campaign_proximity - Added
manage_campaign_settings - Added
manage_chatgpt_ads_accounts - Added
manage_chatgpt_ads_spend_limit - Added
manage_conversion_actions - Added
manage_device_targeting - Added
manage_extension_assets - Added
manage_gtm_permissions - Added
manage_keywords - Added
manage_portfolio_bidding_strategy - Added
manage_recommendation_auto_apply - Added
manage_shared_negative_list - Added
manage_tiktok_search_negative_keywords - Added
marketing_insights - Added
marketing_overview - Added
meta_campaign_insights - Added
meta_change_history - Added
meta_delivery_estimate - Added
meta_insights_query - Added
meta_reach_estimate - Added
microsoft_entity_performance_report - Added
microsoft_location_search - Added
microsoft_performance_report - Added
microsoft_report_query - Added
microsoft_search_terms_report - Added
pause_campaign - Added
performance_report - Added
portfolio_report - Added
preview_meta_ad - Added
publish_gtm_container - Added
remove_extension_assets - Added
remove_microsoft_ad_extensions - Added
remove_microsoft_negative_keywords - Added
remove_negative_keyword - Added
remove_site - Added
rollback_gtm_version - Added
rsa_asset_performance - Added
scaffold_site - Added
search_meta_interests - Added
search_terms_report - Removed
search_tools - Added
select_google_resource - Added
send_meta_conversion_event - Added
send_tiktok_conversion_event - Added
seo_ai_overview - Added
seo_anchors - Added
seo_audit - Added
seo_backlink_list - Added
seo_backlinks - Added
seo_best_pages_by_links - Added
seo_brand_monitor - Added
seo_broken_backlinks - Added
seo_bulk_spam_score - Added
seo_competitor_gap - Added
seo_content_brief - Added
seo_content_lint - Added
seo_full_analysis - Added
seo_geo_citations - Added
seo_geo_tracker - Added
seo_history - Added
seo_keyword_research - Added
seo_keyword_trends - Added
seo_link_intersect - Added
seo_local_listings - Added
seo_paid_keywords - Added
seo_rank_history - Added
seo_rank_tracker - Added
seo_rank_untrack - Added
seo_ranked_keywords - Added
seo_referring_networks - Added
seo_reviews - Added
seo_serp_analysis - Added
seo_site_crawl - Added
seo_site_technologies - Added
seo_technical_audit - Added
set_ad_group_targeting - Added
set_ad_schedule - Added
set_call_reporting - Added
set_campaign_budget - Added
set_campaign_targeting - Added
set_conversion_settings - Added
set_microsoft_bid_strategy - Added
share_tiktok_audience - Added
site_block_paths - Added
site_command_status - Added
site_csp_reports - Added
site_db_backup - Added
site_db_restore - Added
site_design_guide - Added
site_dns_records - Added
site_edit_file - Added
site_fetch - Added
site_form_submissions - Added
site_headers - Added
site_info - Added
site_list_files - Added
site_preview - Added
site_read_file - Added
site_read_url - Added
site_rebuild - Added
site_redirects - Added
site_restore - Added
site_seo_guide - Added
site_tag_gateway - Added
site_versions - Added
site_write_file - Added
smart_negative_keywords - Added
tiktok_advertiser_qualification - Added
tiktok_campaign_report - Added
tiktok_change_history - Added
tiktok_recommendations - Added
tiktok_region_search - Added
tiktok_report_query - Added
tiktok_targeting_search - Added
unblock_ip_addresses - Added
update_ad_group - Added
update_ad_group_status - Added
update_ad_status - Added
update_campaign - Added
update_campaign_status - Added
update_chatgpt_ads_ad - Added
update_chatgpt_ads_ad_group - Added
update_chatgpt_ads_campaign - Added
update_conversion_action - Added
update_conversion_goal - Added
update_custom_conversion_goal - Added
update_gtm_entity - Added
update_linkedin_campaign - Added
update_linkedin_campaign_group - Added
update_linkedin_campaign_targeting - Added
update_linkedin_creative_status - Added
update_meta_ad - Added
update_meta_ad_creative - Added
update_meta_adset - Added
update_meta_campaign - Added
update_meta_custom_conversion - Added
update_meta_instagram_post_ad - Added
update_microsoft_ad_group - Added
update_microsoft_ad_group_status - Added
update_microsoft_ad_status - Added
update_microsoft_campaign_budget - Added
update_microsoft_campaign_status - Added
update_microsoft_keyword - Added
update_microsoft_responsive_search_ad - Added
update_pmax_asset_group - Added
update_pmax_assets - Added
update_rsa - Added
update_sitelink - Added
update_tiktok_ad - Added
update_tiktok_ad_status - Added
update_tiktok_adgroup - Added
update_tiktok_adgroup_budget - Added
update_tiktok_adgroup_status - Added
update_tiktok_campaign - Added
update_tiktok_campaign_budget - Added
update_tiktok_campaign_status - Added
upload_conversion_adjustments - Added
upload_image - Added
upload_image_asset - Added
upload_meta_image - Added
upload_meta_video - Added
upload_microsoft_offline_conversions - Added
upload_offline_conversions - Added
upload_tiktok_image - Added
upload_tiktok_video - Added
wordpress_bulk_replace - Added
wordpress_contact_forms - Added
wordpress_create_post - Added
wordpress_edit_menu - Added
wordpress_edit_page_design - Added
wordpress_get_post - Added
wordpress_install_plugin - Added
wordpress_languages - Added
wordpress_link_translations - Added
wordpress_list_plugins - Added
wordpress_list_posts - Added
wordpress_manage_plugin - Added
wordpress_media - Added
wordpress_menus - Added
wordpress_option - Added
wordpress_page_design - Added
wordpress_performance - Added
wordpress_purge_cache - Added
wordpress_search_content - Added
wordpress_seo - Added
wordpress_set_performance - Added
wordpress_set_seo - Added
wordpress_set_tracking - Added
wordpress_site_info - Added
wordpress_slider - Added
wordpress_terms - Added
wordpress_test_contact_form - Added
wordpress_theme_file - Added
wordpress_tracking - Added
wordpress_update_connector - Added
wordpress_update_post - Added
wordpress_upload_media - Added
wordpress_users - Added
wordpress_woo_create_product - Added
wordpress_woo_orders - Added
wordpress_woo_products - Added
youtube_channels - Added
youtube_overview - Added
youtube_top_videos - Added
youtube_traffic_sources
470 tool updates
- Removed
account_audit - Removed
add_keywords - Removed
add_location_assets - Removed
add_microsoft_ad_extensions - Removed
add_microsoft_ad_schedule - Removed
add_microsoft_demographic_target - Removed
add_microsoft_device_target - Removed
add_microsoft_keywords - Removed
add_microsoft_location_target - Removed
add_microsoft_negative_keywords - Removed
add_negative_keyword - Removed
add_pmax_images - Removed
add_site - Removed
apply_recommendation - Removed
attach_linkedin_conversion - Removed
block_ip_addresses - Removed
budget_pacing_alerts - Added
call_tool - Added
call_write_tool - Removed
chatgpt_ads_ad_preview - Removed
chatgpt_ads_conversion_setup - Removed
chatgpt_ads_details - Removed
chatgpt_ads_geo_lookup - Removed
chatgpt_ads_insights - Removed
chatgpt_ads_spend_limits - Removed
chatgpt_ads_status - Removed
client_report - Removed
client_report_link - Removed
competitor_ads - Removed
configure_site_smtp - Removed
connect_business_profile - Removed
connect_chatgpt_ads - Removed
connect_ga4 - Removed
connect_google_ads - Removed
connect_linkedin_ads - Removed
connect_meta_ads - Removed
connect_microsoft_ads - Removed
connect_search_console - Removed
connect_tag_manager - Removed
connect_tiktok_ads - Removed
connect_youtube - Removed
conversion_tracking_health - Removed
copy_ad_group - Removed
copy_meta_entity - Removed
core_web_vitals - Removed
create_ad_group - Removed
create_app_campaign - Removed
create_chatgpt_ads_ad - Removed
create_chatgpt_ads_ad_group - Removed
create_chatgpt_ads_campaign - Removed
create_chatgpt_ads_event_setting - Removed
create_customer_match_audience - Removed
create_demand_gen_ad - Removed
create_demand_gen_campaign - Removed
create_google_ads_account - Removed
create_gtm_container - Removed
create_gtm_tag - Removed
create_gtm_trigger - Removed
create_gtm_variable - Removed
create_gtm_workspace - Removed
create_lead_form - Removed
create_linkedin_campaign - Removed
create_linkedin_campaign_group - Removed
create_linkedin_post_ad - Removed
create_linkedin_text_ad - Removed
create_lookalike_audience - Removed
create_meta_ab_test - Removed
create_meta_adset - Removed
create_meta_campaign - Removed
create_meta_carousel_ad - Removed
create_meta_custom_conversion - Removed
create_meta_dynamic_ad - Removed
create_meta_engagement_audience - Removed
create_meta_instagram_post_ad - Removed
create_meta_lead_form - Removed
create_meta_link_ad - Removed
create_meta_lookalike_audience - Removed
create_meta_post_ad - Removed
create_meta_video_ad - Removed
create_meta_website_audience - Removed
create_microsoft_ad_group - Removed
create_microsoft_campaign - Removed
create_microsoft_conversion_goal - Removed
create_microsoft_remarketing_list - Removed
create_microsoft_responsive_search_ad - Removed
create_microsoft_uet_tag - Removed
create_pmax_campaign - Removed
create_responsive_search_ad - Removed
create_search_campaign - Removed
create_tiktok_ad - Removed
create_tiktok_adgroup - Removed
create_tiktok_auto_message - Removed
create_tiktok_campaign - Removed
create_tiktok_customer_file_audience - Removed
create_tiktok_lookalike_audience - Removed
create_tiktok_pixel - Removed
create_trial_site - Removed
create_website_audience - Removed
delete_gtm_container - Removed
delete_gtm_entity - Removed
delete_linkedin_campaign - Removed
delete_linkedin_campaign_group - Removed
delete_linkedin_creative - Removed
delete_meta_ad - Removed
delete_meta_adset - Removed
delete_meta_audience - Removed
delete_meta_campaign - Removed
delete_microsoft_audience - Removed
delete_microsoft_campaign - Removed
deploy_site_zip - Removed
detach_linkedin_conversion - Removed
diagnose_chatgpt_ads_delivery - Removed
dismiss_recommendations - Removed
download_linkedin_leads - Removed
download_meta_leads - Removed
download_tiktok_leads - Removed
enable_gtm_builtin_variables - Removed
extension_asset_performance - Removed
find_instagram_media_id - Removed
fraud_scan - Removed
fraud_setup - Removed
ga4_create_conversion - Removed
ga4_create_custom_dimension - Removed
ga4_link_google_ads - Removed
ga4_list_ads_links - Removed
ga4_list_conversions - Removed
ga4_list_data_streams - Removed
ga4_list_properties - Removed
ga4_overview - Removed
ga4_realtime - Removed
ga4_report - Removed
gbp_complete_verification - Removed
gbp_create_location - Removed
gbp_create_post - Removed
gbp_insights - Removed
gbp_list_locations - Removed
gbp_list_posts - Removed
gbp_location_details - Removed
gbp_manage_services - Removed
gbp_reply_review - Removed
gbp_reviews - Removed
gbp_search_categories - Removed
gbp_search_keywords - Removed
gbp_social_links - Removed
gbp_start_verification - Removed
gbp_update_location - Removed
gbp_update_photo_category - Removed
gbp_update_post - Removed
gbp_upload_photo - Removed
gbp_upload_video - Removed
gbp_verification_options - Removed
geo_target_search - Removed
get_ad_details - Removed
get_ad_schedule - Removed
get_billing_status - Removed
get_campaign_targeting - Removed
get_change_history - Removed
get_conversion_settings - Removed
get_conversion_tags - Removed
get_meta_ad_creative - Removed
get_pmax_assets - Removed
get_shared_negative_list - Removed
get_tiktok_lead_form_fields - Removed
gsc_add_site - Removed
gsc_delete_sitemap - Removed
gsc_inspect_urls - Removed
gsc_list_sites - Removed
gsc_performance - Removed
gsc_sitemaps - Removed
gsc_submit_sitemap - Removed
gsc_url_inspect - Removed
gtm_workspace_status - Removed
impression_share_analysis - Removed
instagram_follower_growth - Removed
instant_audit - Removed
issue_status - Removed
keyword_historical_metrics - Removed
keyword_opportunities - Removed
keyword_planner - Removed
keyword_quality_report - Removed
keyword_report - Removed
linkedin_ad_copy - Removed
linkedin_audience_forecast - Removed
linkedin_bid_recommendations - Removed
linkedin_campaign_analytics - Removed
linkedin_targeting_search - Removed
list_ad_extensions - Removed
list_ad_policy_issues - Removed
list_assets - Removed
list_audiences - Removed
list_business_profile_photos - Removed
list_conversion_actions - Removed
list_conversion_goals - Removed
list_custom_conversion_goals - Removed
list_extension_assets - Removed
list_google_ads_experiments - Removed
list_gtm_accounts - Removed
list_gtm_containers - Removed
list_gtm_permissions - Removed
list_gtm_tags - Removed
list_gtm_triggers - Removed
list_gtm_variables - Removed
list_gtm_versions - Removed
list_gtm_workspaces - Removed
list_ip_exclusions - Removed
list_lead_form_submissions - Removed
list_linkedin_ad_accounts - Removed
list_linkedin_audiences - Removed
list_linkedin_campaign_groups - Removed
list_linkedin_campaigns - Removed
list_linkedin_conversions - Removed
list_linkedin_creatives - Removed
list_linkedin_lead_forms - Removed
list_meta_ad_accounts - Removed
list_meta_ads - Removed
list_meta_adsets - Removed
list_meta_audiences - Removed
list_meta_campaigns - Removed
list_meta_catalogs - Removed
list_meta_custom_conversions - Removed
list_meta_instagram_accounts - Removed
list_meta_instagram_posts - Removed
list_meta_lead_forms - Removed
list_meta_page_posts - Removed
list_meta_pages - Removed
list_meta_pixels - Removed
list_meta_product_sets - Removed
list_meta_saved_audiences - Removed
list_microsoft_accounts - Removed
list_microsoft_ad_extensions - Removed
list_microsoft_ad_groups - Removed
list_microsoft_ads - Removed
list_microsoft_audiences - Removed
list_microsoft_campaigns - Removed
list_microsoft_conversion_goals - Removed
list_microsoft_keywords - Removed
list_microsoft_negative_keywords - Removed
list_microsoft_uet_tags - Removed
list_negative_keywords - Removed
list_recommendations - Removed
list_shared_negative_lists - Removed
list_sites - Removed
list_tiktok_ad_accounts - Removed
list_tiktok_adgroups - Removed
list_tiktok_ads - Removed
list_tiktok_asset_groups - Removed
list_tiktok_audiences - Removed
list_tiktok_auto_messages - Removed
list_tiktok_bc_advertisers - Removed
list_tiktok_bc_pixels - Removed
list_tiktok_business_centers - Removed
list_tiktok_campaigns - Removed
list_tiktok_creative_portfolios - Removed
list_tiktok_gmv_max_stores - Removed
list_tiktok_identities - Removed
list_tiktok_lead_forms - Removed
list_tiktok_pixels - Removed
list_tiktok_posts - Removed
list_tiktok_smart_plus - Removed
list_tiktok_videos - Removed
list_wordpress_sites - Removed
manage_audience_targeting - Removed
manage_bidding_strategies - Removed
manage_business_logo - Removed
manage_business_name - Removed
manage_campaign_proximity - Removed
manage_campaign_settings - Removed
manage_chatgpt_ads_accounts - Removed
manage_chatgpt_ads_spend_limit - Removed
manage_conversion_actions - Removed
manage_device_targeting - Removed
manage_extension_assets - Removed
manage_gtm_permissions - Removed
manage_keywords - Removed
manage_portfolio_bidding_strategy - Removed
manage_recommendation_auto_apply - Removed
manage_shared_negative_list - Removed
manage_tiktok_search_negative_keywords - Removed
marketing_insights - Removed
marketing_overview - Removed
meta_campaign_insights - Removed
meta_change_history - Removed
meta_delivery_estimate - Removed
meta_insights_query - Removed
meta_reach_estimate - Removed
microsoft_entity_performance_report - Removed
microsoft_location_search - Removed
microsoft_performance_report - Removed
microsoft_report_query - Removed
microsoft_search_terms_report - Removed
pause_campaign - Removed
performance_report - Removed
portfolio_report - Removed
preview_meta_ad - Removed
publish_gtm_container - Removed
remove_extension_assets - Removed
remove_microsoft_ad_extensions - Removed
remove_microsoft_negative_keywords - Removed
remove_negative_keyword - Removed
remove_site - Removed
rollback_gtm_version - Removed
rsa_asset_performance - Removed
scaffold_site - Removed
search_meta_interests - Removed
search_terms_report - Added
search_tools - Removed
select_google_resource - Removed
send_meta_conversion_event - Removed
send_tiktok_conversion_event - Removed
seo_ai_overview - Removed
seo_anchors - Removed
seo_audit - Removed
seo_backlink_list - Removed
seo_backlinks - Removed
seo_best_pages_by_links - Removed
seo_brand_monitor - Removed
seo_broken_backlinks - Removed
seo_bulk_spam_score - Removed
seo_competitor_gap - Removed
seo_content_brief - Removed
seo_content_lint - Removed
seo_full_analysis - Removed
seo_geo_citations - Removed
seo_geo_tracker - Removed
seo_history - Removed
seo_keyword_research - Removed
seo_keyword_trends - Removed
seo_link_intersect - Removed
seo_local_listings - Removed
seo_paid_keywords - Removed
seo_rank_history - Removed
seo_rank_tracker - Removed
seo_rank_untrack - Removed
seo_ranked_keywords - Removed
seo_referring_networks - Removed
seo_reviews - Removed
seo_serp_analysis - Removed
seo_site_crawl - Removed
seo_site_technologies - Removed
seo_technical_audit - Removed
set_ad_group_targeting - Removed
set_ad_schedule - Removed
set_call_reporting - Removed
set_campaign_budget - Removed
set_campaign_targeting - Removed
set_conversion_settings - Removed
set_microsoft_bid_strategy - Removed
share_tiktok_audience - Removed
site_block_paths - Removed
site_command_status - Removed
site_csp_reports - Removed
site_db_backup - Removed
site_db_restore - Removed
site_design_guide - Removed
site_dns_records - Removed
site_edit_file - Removed
site_fetch - Removed
site_form_submissions - Removed
site_headers - Removed
site_info - Removed
site_list_files - Removed
site_preview - Removed
site_read_file - Removed
site_read_url - Removed
site_rebuild - Removed
site_redirects - Removed
site_restore - Removed
site_seo_guide - Removed
site_tag_gateway - Removed
site_versions - Removed
site_write_file - Removed
smart_negative_keywords - Removed
tiktok_advertiser_qualification - Removed
tiktok_campaign_report - Removed
tiktok_change_history - Removed
tiktok_recommendations - Removed
tiktok_region_search - Removed
tiktok_report_query - Removed
tiktok_targeting_search - Removed
unblock_ip_addresses - Removed
update_ad_group - Removed
update_ad_group_status - Removed
update_ad_status - Removed
update_campaign - Removed
update_campaign_status - Removed
update_chatgpt_ads_ad - Removed
update_chatgpt_ads_ad_group - Removed
update_chatgpt_ads_campaign - Removed
update_conversion_action - Removed
update_conversion_goal - Removed
update_custom_conversion_goal - Removed
update_gtm_entity - Removed
update_linkedin_campaign - Removed
update_linkedin_campaign_group - Removed
update_linkedin_campaign_targeting - Removed
update_linkedin_creative_status - Removed
update_meta_ad - Removed
update_meta_ad_creative - Removed
update_meta_adset - Removed
update_meta_campaign - Removed
update_meta_custom_conversion - Removed
update_meta_instagram_post_ad - Removed
update_microsoft_ad_group - Removed
update_microsoft_ad_group_status - Removed
update_microsoft_ad_status - Removed
update_microsoft_campaign_budget - Removed
update_microsoft_campaign_status - Removed
update_microsoft_keyword - Removed
update_microsoft_responsive_search_ad - Removed
update_pmax_asset_group - Removed
update_pmax_assets - Removed
update_rsa - Removed
update_sitelink - Removed
update_tiktok_ad - Removed
update_tiktok_ad_status - Removed
update_tiktok_adgroup - Removed
update_tiktok_adgroup_budget - Removed
update_tiktok_adgroup_status - Removed
update_tiktok_campaign - Removed
update_tiktok_campaign_budget - Removed
update_tiktok_campaign_status - Removed
upload_conversion_adjustments - Removed
upload_image - Removed
upload_image_asset - Removed
upload_meta_image - Removed
upload_meta_video - Removed
upload_microsoft_offline_conversions - Removed
upload_offline_conversions - Removed
upload_tiktok_image - Removed
upload_tiktok_video - Removed
wordpress_bulk_replace - Removed
wordpress_contact_forms - Removed
wordpress_create_post - Removed
wordpress_edit_menu - Removed
wordpress_edit_page_design - Removed
wordpress_get_post - Removed
wordpress_install_plugin - Removed
wordpress_languages - Removed
wordpress_link_translations - Removed
wordpress_list_plugins - Removed
wordpress_list_posts - Removed
wordpress_manage_plugin - Removed
wordpress_media - Removed
wordpress_menus - Removed
wordpress_option - Removed
wordpress_page_design - Removed
wordpress_performance - Removed
wordpress_purge_cache - Removed
wordpress_search_content - Removed
wordpress_seo - Removed
wordpress_set_performance - Removed
wordpress_set_seo - Removed
wordpress_set_tracking - Removed
wordpress_site_info - Removed
wordpress_slider - Removed
wordpress_terms - Removed
wordpress_test_contact_form - Removed
wordpress_theme_file - Removed
wordpress_tracking - Removed
wordpress_update_connector - Removed
wordpress_update_post - Removed
wordpress_upload_media - Removed
wordpress_users - Removed
wordpress_woo_create_product - Removed
wordpress_woo_orders - Removed
wordpress_woo_products - Removed
youtube_channels - Removed
youtube_overview - Removed
youtube_top_videos - Removed
youtube_traffic_sources
4 tool updates
- Added
copy_ad_group - Added
gsc_add_site - Added
site_block_paths - Added
site_dns_records
466 tool updates
- Added
account_audit - Added
add_keywords - Added
add_location_assets - Added
add_microsoft_ad_extensions - Added
add_microsoft_ad_schedule - Added
add_microsoft_demographic_target - Added
add_microsoft_device_target - Added
add_microsoft_keywords - Added
add_microsoft_location_target - Added
add_microsoft_negative_keywords - Added
add_negative_keyword - Added
add_pmax_images - Added
add_site - Added
apply_recommendation - Added
attach_linkedin_conversion - Added
block_ip_addresses - Added
budget_pacing_alerts - Removed
call_tool - Removed
call_write_tool - Added
chatgpt_ads_ad_preview - Added
chatgpt_ads_conversion_setup - Added
chatgpt_ads_details - Added
chatgpt_ads_geo_lookup - Added
chatgpt_ads_insights - Added
chatgpt_ads_spend_limits - Added
chatgpt_ads_status - Added
client_report - Added
client_report_link - Added
competitor_ads - Added
configure_site_smtp - Added
connect_business_profile - Added
connect_chatgpt_ads - Added
connect_ga4 - Added
connect_google_ads - Added
connect_linkedin_ads - Added
connect_meta_ads - Added
connect_microsoft_ads - Added
connect_search_console - Added
connect_tag_manager - Added
connect_tiktok_ads - Added
connect_youtube - Added
conversion_tracking_health - Added
copy_meta_entity - Added
core_web_vitals - Added
create_ad_group - Added
create_app_campaign - Added
create_chatgpt_ads_ad - Added
create_chatgpt_ads_ad_group - Added
create_chatgpt_ads_campaign - Added
create_chatgpt_ads_event_setting - Added
create_customer_match_audience - Added
create_demand_gen_ad - Added
create_demand_gen_campaign - Added
create_google_ads_account - Added
create_gtm_container - Added
create_gtm_tag - Added
create_gtm_trigger - Added
create_gtm_variable - Added
create_gtm_workspace - Added
create_lead_form - Added
create_linkedin_campaign - Added
create_linkedin_campaign_group - Added
create_linkedin_post_ad - Added
create_linkedin_text_ad - Added
create_lookalike_audience - Added
create_meta_ab_test - Added
create_meta_adset - Added
create_meta_campaign - Added
create_meta_carousel_ad - Added
create_meta_custom_conversion - Added
create_meta_dynamic_ad - Added
create_meta_engagement_audience - Added
create_meta_instagram_post_ad - Added
create_meta_lead_form - Added
create_meta_link_ad - Added
create_meta_lookalike_audience - Added
create_meta_post_ad - Added
create_meta_video_ad - Added
create_meta_website_audience - Added
create_microsoft_ad_group - Added
create_microsoft_campaign - Added
create_microsoft_conversion_goal - Added
create_microsoft_remarketing_list - Added
create_microsoft_responsive_search_ad - Added
create_microsoft_uet_tag - Added
create_pmax_campaign - Added
create_responsive_search_ad - Added
create_search_campaign - Added
create_tiktok_ad - Added
create_tiktok_adgroup - Added
create_tiktok_auto_message - Added
create_tiktok_campaign - Added
create_tiktok_customer_file_audience - Added
create_tiktok_lookalike_audience - Added
create_tiktok_pixel - Added
create_trial_site - Added
create_website_audience - Added
delete_gtm_container - Added
delete_gtm_entity - Added
delete_linkedin_campaign - Added
delete_linkedin_campaign_group - Added
delete_linkedin_creative - Added
delete_meta_ad - Added
delete_meta_adset - Added
delete_meta_audience - Added
delete_meta_campaign - Added
delete_microsoft_audience - Added
delete_microsoft_campaign - Added
deploy_site_zip - Added
detach_linkedin_conversion - Added
diagnose_chatgpt_ads_delivery - Added
dismiss_recommendations - Added
download_linkedin_leads - Added
download_meta_leads - Added
download_tiktok_leads - Added
enable_gtm_builtin_variables - Added
extension_asset_performance - Added
find_instagram_media_id - Added
fraud_scan - Added
fraud_setup - Added
ga4_create_conversion - Added
ga4_create_custom_dimension - Added
ga4_link_google_ads - Added
ga4_list_ads_links - Added
ga4_list_conversions - Added
ga4_list_data_streams - Added
ga4_list_properties - Added
ga4_overview - Added
ga4_realtime - Added
ga4_report - Added
gbp_complete_verification - Added
gbp_create_location - Added
gbp_create_post - Added
gbp_insights - Added
gbp_list_locations - Added
gbp_list_posts - Added
gbp_location_details - Added
gbp_manage_services - Added
gbp_reply_review - Added
gbp_reviews - Added
gbp_search_categories - Added
gbp_search_keywords - Added
gbp_social_links - Added
gbp_start_verification - Added
gbp_update_location - Added
gbp_update_photo_category - Added
gbp_update_post - Added
gbp_upload_photo - Added
gbp_upload_video - Added
gbp_verification_options - Added
geo_target_search - Added
get_ad_details - Added
get_ad_schedule - Added
get_billing_status - Added
get_campaign_targeting - Added
get_change_history - Added
get_conversion_settings - Added
get_conversion_tags - Added
get_meta_ad_creative - Added
get_pmax_assets - Added
get_shared_negative_list - Added
get_tiktok_lead_form_fields - Added
gsc_delete_sitemap - Added
gsc_inspect_urls - Added
gsc_list_sites - Added
gsc_performance - Added
gsc_sitemaps - Added
gsc_submit_sitemap - Added
gsc_url_inspect - Added
gtm_workspace_status - Added
impression_share_analysis - Added
instagram_follower_growth - Added
instant_audit - Added
issue_status - Added
keyword_historical_metrics - Added
keyword_opportunities - Added
keyword_planner - Added
keyword_quality_report - Added
keyword_report - Added
linkedin_ad_copy - Added
linkedin_audience_forecast - Added
linkedin_bid_recommendations - Added
linkedin_campaign_analytics - Added
linkedin_targeting_search - Added
list_ad_extensions - Added
list_ad_policy_issues - Added
list_assets - Added
list_audiences - Added
list_business_profile_photos - Added
list_conversion_actions - Added
list_conversion_goals - Added
list_custom_conversion_goals - Added
list_extension_assets - Added
list_google_ads_experiments - Added
list_gtm_accounts - Added
list_gtm_containers - Added
list_gtm_permissions - Added
list_gtm_tags - Added
list_gtm_triggers - Added
list_gtm_variables - Added
list_gtm_versions - Added
list_gtm_workspaces - Added
list_ip_exclusions - Added
list_lead_form_submissions - Added
list_linkedin_ad_accounts - Added
list_linkedin_audiences - Added
list_linkedin_campaign_groups - Added
list_linkedin_campaigns - Added
list_linkedin_conversions - Added
list_linkedin_creatives - Added
list_linkedin_lead_forms - Added
list_meta_ad_accounts - Added
list_meta_ads - Added
list_meta_adsets - Added
list_meta_audiences - Added
list_meta_campaigns - Added
list_meta_catalogs - Added
list_meta_custom_conversions - Added
list_meta_instagram_accounts - Added
list_meta_instagram_posts - Added
list_meta_lead_forms - Added
list_meta_page_posts - Added
list_meta_pages - Added
list_meta_pixels - Added
list_meta_product_sets - Added
list_meta_saved_audiences - Added
list_microsoft_accounts - Added
list_microsoft_ad_extensions - Added
list_microsoft_ad_groups - Added
list_microsoft_ads - Added
list_microsoft_audiences - Added
list_microsoft_campaigns - Added
list_microsoft_conversion_goals - Added
list_microsoft_keywords - Added
list_microsoft_negative_keywords - Added
list_microsoft_uet_tags - Added
list_negative_keywords - Added
list_recommendations - Added
list_shared_negative_lists - Added
list_sites - Added
list_tiktok_ad_accounts - Added
list_tiktok_adgroups - Added
list_tiktok_ads - Added
list_tiktok_asset_groups - Added
list_tiktok_audiences - Added
list_tiktok_auto_messages - Added
list_tiktok_bc_advertisers - Added
list_tiktok_bc_pixels - Added
list_tiktok_business_centers - Added
list_tiktok_campaigns - Added
list_tiktok_creative_portfolios - Added
list_tiktok_gmv_max_stores - Added
list_tiktok_identities - Added
list_tiktok_lead_forms - Added
list_tiktok_pixels - Added
list_tiktok_posts - Added
list_tiktok_smart_plus - Added
list_tiktok_videos - Added
list_wordpress_sites - Added
manage_audience_targeting - Added
manage_bidding_strategies - Added
manage_business_logo - Added
manage_business_name - Added
manage_campaign_proximity - Added
manage_campaign_settings - Added
manage_chatgpt_ads_accounts - Added
manage_chatgpt_ads_spend_limit - Added
manage_conversion_actions - Added
manage_device_targeting - Added
manage_extension_assets - Added
manage_gtm_permissions - Added
manage_keywords - Added
manage_portfolio_bidding_strategy - Added
manage_recommendation_auto_apply - Added
manage_shared_negative_list - Added
manage_tiktok_search_negative_keywords - Added
marketing_insights - Added
marketing_overview - Added
meta_campaign_insights - Added
meta_change_history - Added
meta_delivery_estimate - Added
meta_insights_query - Added
meta_reach_estimate - Added
microsoft_entity_performance_report - Added
microsoft_location_search - Added
microsoft_performance_report - Added
microsoft_report_query - Added
microsoft_search_terms_report - Added
pause_campaign - Added
performance_report - Added
portfolio_report - Added
preview_meta_ad - Added
publish_gtm_container - Added
remove_extension_assets - Added
remove_microsoft_ad_extensions - Added
remove_microsoft_negative_keywords - Added
remove_negative_keyword - Added
remove_site - Added
rollback_gtm_version - Added
rsa_asset_performance - Added
scaffold_site - Added
search_meta_interests - Added
search_terms_report - Removed
search_tools - Added
select_google_resource - Added
send_meta_conversion_event - Added
send_tiktok_conversion_event - Added
seo_ai_overview - Added
seo_anchors - Added
seo_audit - Added
seo_backlink_list - Added
seo_backlinks - Added
seo_best_pages_by_links - Added
seo_brand_monitor - Added
seo_broken_backlinks - Added
seo_bulk_spam_score - Added
seo_competitor_gap - Added
seo_content_brief - Added
seo_content_lint - Added
seo_full_analysis - Added
seo_geo_citations - Added
seo_geo_tracker - Added
seo_history - Added
seo_keyword_research - Added
seo_keyword_trends - Added
seo_link_intersect - Added
seo_local_listings - Added
seo_paid_keywords - Added
seo_rank_history - Added
seo_rank_tracker - Added
seo_rank_untrack - Added
seo_ranked_keywords - Added
seo_referring_networks - Added
seo_reviews - Added
seo_serp_analysis - Added
seo_site_crawl - Added
seo_site_technologies - Added
seo_technical_audit - Added
set_ad_group_targeting - Added
set_ad_schedule - Added
set_call_reporting - Added
set_campaign_budget - Added
set_campaign_targeting - Added
set_conversion_settings - Added
set_microsoft_bid_strategy - Added
share_tiktok_audience - Added
site_command_status - Added
site_csp_reports - Added
site_db_backup - Added
site_db_restore - Added
site_design_guide - Added
site_edit_file - Added
site_fetch - Added
site_form_submissions - Added
site_headers - Added
site_info - Added
site_list_files - Added
site_preview - Added
site_read_file - Added
site_read_url - Added
site_rebuild - Added
site_redirects - Added
site_restore - Added
site_seo_guide - Added
site_tag_gateway - Added
site_versions - Added
site_write_file - Added
smart_negative_keywords - Added
tiktok_advertiser_qualification - Added
tiktok_campaign_report - Added
tiktok_change_history - Added
tiktok_recommendations - Added
tiktok_region_search - Added
tiktok_report_query - Added
tiktok_targeting_search - Added
unblock_ip_addresses - Added
update_ad_group - Added
update_ad_group_status - Added
update_ad_status - Added
update_campaign - Added
update_campaign_status - Added
update_chatgpt_ads_ad - Added
update_chatgpt_ads_ad_group - Added
update_chatgpt_ads_campaign - Added
update_conversion_action - Added
update_conversion_goal - Added
update_custom_conversion_goal - Added
update_gtm_entity - Added
update_linkedin_campaign - Added
update_linkedin_campaign_group - Added
update_linkedin_campaign_targeting - Added
update_linkedin_creative_status - Added
update_meta_ad - Added
update_meta_ad_creative - Added
update_meta_adset - Added
update_meta_campaign - Added
update_meta_custom_conversion - Added
update_meta_instagram_post_ad - Added
update_microsoft_ad_group - Added
update_microsoft_ad_group_status - Added
update_microsoft_ad_status - Added
update_microsoft_campaign_budget - Added
update_microsoft_campaign_status - Added
update_microsoft_keyword - Added
update_microsoft_responsive_search_ad - Added
update_pmax_asset_group - Added
update_pmax_assets - Added
update_rsa - Added
update_sitelink - Added
update_tiktok_ad - Added
update_tiktok_ad_status - Added
update_tiktok_adgroup - Added
update_tiktok_adgroup_budget - Added
update_tiktok_adgroup_status - Added
update_tiktok_campaign - Added
update_tiktok_campaign_budget - Added
update_tiktok_campaign_status - Added
upload_conversion_adjustments - Added
upload_image - Added
upload_image_asset - Added
upload_meta_image - Added
upload_meta_video - Added
upload_microsoft_offline_conversions - Added
upload_offline_conversions - Added
upload_tiktok_image - Added
upload_tiktok_video - Added
wordpress_bulk_replace - Added
wordpress_contact_forms - Added
wordpress_create_post - Added
wordpress_edit_menu - Added
wordpress_edit_page_design - Added
wordpress_get_post - Added
wordpress_install_plugin - Added
wordpress_languages - Added
wordpress_link_translations - Added
wordpress_list_plugins - Added
wordpress_list_posts - Added
wordpress_manage_plugin - Added
wordpress_media - Added
wordpress_menus - Added
wordpress_option - Added
wordpress_page_design - Added
wordpress_performance - Added
wordpress_purge_cache - Added
wordpress_search_content - Added
wordpress_seo - Added
wordpress_set_performance - Added
wordpress_set_seo - Added
wordpress_set_tracking - Added
wordpress_site_info - Added
wordpress_slider - Added
wordpress_terms - Added
wordpress_test_contact_form - Added
wordpress_theme_file - Added
wordpress_tracking - Added
wordpress_update_connector - Added
wordpress_update_post - Added
wordpress_upload_media - Added
wordpress_users - Added
wordpress_woo_create_product - Added
wordpress_woo_orders - Added
wordpress_woo_products - Added
youtube_channels - Added
youtube_overview - Added
youtube_top_videos - Added
youtube_traffic_sources
466 tool updates
- Removed
account_audit - Removed
add_keywords - Removed
add_location_assets - Removed
add_microsoft_ad_extensions - Removed
add_microsoft_ad_schedule - Removed
add_microsoft_demographic_target - Removed
add_microsoft_device_target - Removed
add_microsoft_keywords - Removed
add_microsoft_location_target - Removed
add_microsoft_negative_keywords - Removed
add_negative_keyword - Removed
add_pmax_images - Removed
add_site - Removed
apply_recommendation - Removed
attach_linkedin_conversion - Removed
block_ip_addresses - Removed
budget_pacing_alerts - Added
call_tool - Added
call_write_tool - Removed
chatgpt_ads_ad_preview - Removed
chatgpt_ads_conversion_setup - Removed
chatgpt_ads_details - Removed
chatgpt_ads_geo_lookup - Removed
chatgpt_ads_insights - Removed
chatgpt_ads_spend_limits - Removed
chatgpt_ads_status - Removed
client_report - Removed
client_report_link - Removed
competitor_ads - Removed
configure_site_smtp - Removed
connect_business_profile - Removed
connect_chatgpt_ads - Removed
connect_ga4 - Removed
connect_google_ads - Removed
connect_linkedin_ads - Removed
connect_meta_ads - Removed
connect_microsoft_ads - Removed
connect_search_console - Removed
connect_tag_manager - Removed
connect_tiktok_ads - Removed
connect_youtube - Removed
conversion_tracking_health - Removed
copy_meta_entity - Removed
core_web_vitals - Removed
create_ad_group - Removed
create_app_campaign - Removed
create_chatgpt_ads_ad - Removed
create_chatgpt_ads_ad_group - Removed
create_chatgpt_ads_campaign - Removed
create_chatgpt_ads_event_setting - Removed
create_customer_match_audience - Removed
create_demand_gen_ad - Removed
create_demand_gen_campaign - Removed
create_google_ads_account - Removed
create_gtm_container - Removed
create_gtm_tag - Removed
create_gtm_trigger - Removed
create_gtm_variable - Removed
create_gtm_workspace - Removed
create_lead_form - Removed
create_linkedin_campaign - Removed
create_linkedin_campaign_group - Removed
create_linkedin_post_ad - Removed
create_linkedin_text_ad - Removed
create_lookalike_audience - Removed
create_meta_ab_test - Removed
create_meta_adset - Removed
create_meta_campaign - Removed
create_meta_carousel_ad - Removed
create_meta_custom_conversion - Removed
create_meta_dynamic_ad - Removed
create_meta_engagement_audience - Removed
create_meta_instagram_post_ad - Removed
create_meta_lead_form - Removed
create_meta_link_ad - Removed
create_meta_lookalike_audience - Removed
create_meta_post_ad - Removed
create_meta_video_ad - Removed
create_meta_website_audience - Removed
create_microsoft_ad_group - Removed
create_microsoft_campaign - Removed
create_microsoft_conversion_goal - Removed
create_microsoft_remarketing_list - Removed
create_microsoft_responsive_search_ad - Removed
create_microsoft_uet_tag - Removed
create_pmax_campaign - Removed
create_responsive_search_ad - Removed
create_search_campaign - Removed
create_tiktok_ad - Removed
create_tiktok_adgroup - Removed
create_tiktok_auto_message - Removed
create_tiktok_campaign - Removed
create_tiktok_customer_file_audience - Removed
create_tiktok_lookalike_audience - Removed
create_tiktok_pixel - Removed
create_trial_site - Removed
create_website_audience - Removed
delete_gtm_container - Removed
delete_gtm_entity - Removed
delete_linkedin_campaign - Removed
delete_linkedin_campaign_group - Removed
delete_linkedin_creative - Removed
delete_meta_ad - Removed
delete_meta_adset - Removed
delete_meta_audience - Removed
delete_meta_campaign - Removed
delete_microsoft_audience - Removed
delete_microsoft_campaign - Removed
deploy_site_zip - Removed
detach_linkedin_conversion - Removed
diagnose_chatgpt_ads_delivery - Removed
dismiss_recommendations - Removed
download_linkedin_leads - Removed
download_meta_leads - Removed
download_tiktok_leads - Removed
enable_gtm_builtin_variables - Removed
extension_asset_performance - Removed
find_instagram_media_id - Removed
fraud_scan - Removed
fraud_setup - Removed
ga4_create_conversion - Removed
ga4_create_custom_dimension - Removed
ga4_link_google_ads - Removed
ga4_list_ads_links - Removed
ga4_list_conversions - Removed
ga4_list_data_streams - Removed
ga4_list_properties - Removed
ga4_overview - Removed
ga4_realtime - Removed
ga4_report - Removed
gbp_complete_verification - Removed
gbp_create_location - Removed
gbp_create_post - Removed
gbp_insights - Removed
gbp_list_locations - Removed
gbp_list_posts - Removed
gbp_location_details - Removed
gbp_manage_services - Removed
gbp_reply_review - Removed
gbp_reviews - Removed
gbp_search_categories - Removed
gbp_search_keywords - Removed
gbp_social_links - Removed
gbp_start_verification - Removed
gbp_update_location - Removed
gbp_update_photo_category - Removed
gbp_update_post - Removed
gbp_upload_photo - Removed
gbp_upload_video - Removed
gbp_verification_options - Removed
geo_target_search - Removed
get_ad_details - Removed
get_ad_schedule - Removed
get_billing_status - Removed
get_campaign_targeting - Removed
get_change_history - Removed
get_conversion_settings - Removed
get_conversion_tags - Removed
get_meta_ad_creative - Removed
get_pmax_assets - Removed
get_shared_negative_list - Removed
get_tiktok_lead_form_fields - Removed
gsc_delete_sitemap - Removed
gsc_inspect_urls - Removed
gsc_list_sites - Removed
gsc_performance - Removed
gsc_sitemaps - Removed
gsc_submit_sitemap - Removed
gsc_url_inspect - Removed
gtm_workspace_status - Removed
impression_share_analysis - Removed
instagram_follower_growth - Removed
instant_audit - Removed
issue_status - Removed
keyword_historical_metrics - Removed
keyword_opportunities - Removed
keyword_planner - Removed
keyword_quality_report - Removed
keyword_report - Removed
linkedin_ad_copy - Removed
linkedin_audience_forecast - Removed
linkedin_bid_recommendations - Removed
linkedin_campaign_analytics - Removed
linkedin_targeting_search - Removed
list_ad_extensions - Removed
list_ad_policy_issues - Removed
list_assets - Removed
list_audiences - Removed
list_business_profile_photos - Removed
list_conversion_actions - Removed
list_conversion_goals - Removed
list_custom_conversion_goals - Removed
list_extension_assets - Removed
list_google_ads_experiments - Removed
list_gtm_accounts - Removed
list_gtm_containers - Removed
list_gtm_permissions - Removed
list_gtm_tags - Removed
list_gtm_triggers - Removed
list_gtm_variables - Removed
list_gtm_versions - Removed
list_gtm_workspaces - Removed
list_ip_exclusions - Removed
list_lead_form_submissions - Removed
list_linkedin_ad_accounts - Removed
list_linkedin_audiences - Removed
list_linkedin_campaign_groups - Removed
list_linkedin_campaigns - Removed
list_linkedin_conversions - Removed
list_linkedin_creatives - Removed
list_linkedin_lead_forms - Removed
list_meta_ad_accounts - Removed
list_meta_ads - Removed
list_meta_adsets - Removed
list_meta_audiences - Removed
list_meta_campaigns - Removed
list_meta_catalogs - Removed
list_meta_custom_conversions - Removed
list_meta_instagram_accounts - Removed
list_meta_instagram_posts - Removed
list_meta_lead_forms - Removed
list_meta_page_posts - Removed
list_meta_pages - Removed
list_meta_pixels - Removed
list_meta_product_sets - Removed
list_meta_saved_audiences - Removed
list_microsoft_accounts - Removed
list_microsoft_ad_extensions - Removed
list_microsoft_ad_groups - Removed
list_microsoft_ads - Removed
list_microsoft_audiences - Removed
list_microsoft_campaigns - Removed
list_microsoft_conversion_goals - Removed
list_microsoft_keywords - Removed
list_microsoft_negative_keywords - Removed
list_microsoft_uet_tags - Removed
list_negative_keywords - Removed
list_recommendations - Removed
list_shared_negative_lists - Removed
list_sites - Removed
list_tiktok_ad_accounts - Removed
list_tiktok_adgroups - Removed
list_tiktok_ads - Removed
list_tiktok_asset_groups - Removed
list_tiktok_audiences - Removed
list_tiktok_auto_messages - Removed
list_tiktok_bc_advertisers - Removed
list_tiktok_bc_pixels - Removed
list_tiktok_business_centers - Removed
list_tiktok_campaigns - Removed
list_tiktok_creative_portfolios - Removed
list_tiktok_gmv_max_stores - Removed
list_tiktok_identities - Removed
list_tiktok_lead_forms - Removed
list_tiktok_pixels - Removed
list_tiktok_posts - Removed
list_tiktok_smart_plus - Removed
list_tiktok_videos - Removed
list_wordpress_sites - Removed
manage_audience_targeting - Removed
manage_bidding_strategies - Removed
manage_business_logo - Removed
manage_business_name - Removed
manage_campaign_proximity - Removed
manage_campaign_settings - Removed
manage_chatgpt_ads_accounts - Removed
manage_chatgpt_ads_spend_limit - Removed
manage_conversion_actions - Removed
manage_device_targeting - Removed
manage_extension_assets - Removed
manage_gtm_permissions - Removed
manage_keywords - Removed
manage_portfolio_bidding_strategy - Removed
manage_recommendation_auto_apply - Removed
manage_shared_negative_list - Removed
manage_tiktok_search_negative_keywords - Removed
marketing_insights - Removed
marketing_overview - Removed
meta_campaign_insights - Removed
meta_change_history - Removed
meta_delivery_estimate - Removed
meta_insights_query - Removed
meta_reach_estimate - Removed
microsoft_entity_performance_report - Removed
microsoft_location_search - Removed
microsoft_performance_report - Removed
microsoft_report_query - Removed
microsoft_search_terms_report - Removed
pause_campaign - Removed
performance_report - Removed
portfolio_report - Removed
preview_meta_ad - Removed
publish_gtm_container - Removed
remove_extension_assets - Removed
remove_microsoft_ad_extensions - Removed
remove_microsoft_negative_keywords - Removed
remove_negative_keyword - Removed
remove_site - Removed
rollback_gtm_version - Removed
rsa_asset_performance - Removed
scaffold_site - Removed
search_meta_interests - Removed
search_terms_report - Added
search_tools - Removed
select_google_resource - Removed
send_meta_conversion_event - Removed
send_tiktok_conversion_event - Removed
seo_ai_overview - Removed
seo_anchors - Removed
seo_audit - Removed
seo_backlink_list - Removed
seo_backlinks - Removed
seo_best_pages_by_links - Removed
seo_brand_monitor - Removed
seo_broken_backlinks - Removed
seo_bulk_spam_score - Removed
seo_competitor_gap - Removed
seo_content_brief - Removed
seo_content_lint - Removed
seo_full_analysis - Removed
seo_geo_citations - Removed
seo_geo_tracker - Removed
seo_history - Removed
seo_keyword_research - Removed
seo_keyword_trends - Removed
seo_link_intersect - Removed
seo_local_listings - Removed
seo_paid_keywords - Removed
seo_rank_history - Removed
seo_rank_tracker - Removed
seo_rank_untrack - Removed
seo_ranked_keywords - Removed
seo_referring_networks - Removed
seo_reviews - Removed
seo_serp_analysis - Removed
seo_site_crawl - Removed
seo_site_technologies - Removed
seo_technical_audit - Removed
set_ad_group_targeting - Removed
set_ad_schedule - Removed
set_call_reporting - Removed
set_campaign_budget - Removed
set_campaign_targeting - Removed
set_conversion_settings - Removed
set_microsoft_bid_strategy - Removed
share_tiktok_audience - Removed
site_command_status - Removed
site_csp_reports - Removed
site_db_backup - Removed
site_db_restore - Removed
site_design_guide - Removed
site_edit_file - Removed
site_fetch - Removed
site_form_submissions - Removed
site_headers - Removed
site_info - Removed
site_list_files - Removed
site_preview - Removed
site_read_file - Removed
site_read_url - Removed
site_rebuild - Removed
site_redirects - Removed
site_restore - Removed
site_seo_guide - Removed
site_tag_gateway - Removed
site_versions - Removed
site_write_file - Removed
smart_negative_keywords - Removed
tiktok_advertiser_qualification - Removed
tiktok_campaign_report - Removed
tiktok_change_history - Removed
tiktok_recommendations - Removed
tiktok_region_search - Removed
tiktok_report_query - Removed
tiktok_targeting_search - Removed
unblock_ip_addresses - Removed
update_ad_group - Removed
update_ad_group_status - Removed
update_ad_status - Removed
update_campaign - Removed
update_campaign_status - Removed
update_chatgpt_ads_ad - Removed
update_chatgpt_ads_ad_group - Removed
update_chatgpt_ads_campaign - Removed
update_conversion_action - Removed
update_conversion_goal - Removed
update_custom_conversion_goal - Removed
update_gtm_entity - Removed
update_linkedin_campaign - Removed
update_linkedin_campaign_group - Removed
update_linkedin_campaign_targeting - Removed
update_linkedin_creative_status - Removed
update_meta_ad - Removed
update_meta_ad_creative - Removed
update_meta_adset - Removed
update_meta_campaign - Removed
update_meta_custom_conversion - Removed
update_meta_instagram_post_ad - Removed
update_microsoft_ad_group - Removed
update_microsoft_ad_group_status - Removed
update_microsoft_ad_status - Removed
update_microsoft_campaign_budget - Removed
update_microsoft_campaign_status - Removed
update_microsoft_keyword - Removed
update_microsoft_responsive_search_ad - Removed
update_pmax_asset_group - Removed
update_pmax_assets - Removed
update_rsa - Removed
update_sitelink - Removed
update_tiktok_ad - Removed
update_tiktok_ad_status - Removed
update_tiktok_adgroup - Removed
update_tiktok_adgroup_budget - Removed
update_tiktok_adgroup_status - Removed
update_tiktok_campaign - Removed
update_tiktok_campaign_budget - Removed
update_tiktok_campaign_status - Removed
upload_conversion_adjustments - Removed
upload_image - Removed
upload_image_asset - Removed
upload_meta_image - Removed
upload_meta_video - Removed
upload_microsoft_offline_conversions - Removed
upload_offline_conversions - Removed
upload_tiktok_image - Removed
upload_tiktok_video - Removed
wordpress_bulk_replace - Removed
wordpress_contact_forms - Removed
wordpress_create_post - Removed
wordpress_edit_menu - Removed
wordpress_edit_page_design - Removed
wordpress_get_post - Removed
wordpress_install_plugin - Removed
wordpress_languages - Removed
wordpress_link_translations - Removed
wordpress_list_plugins - Removed
wordpress_list_posts - Removed
wordpress_manage_plugin - Removed
wordpress_media - Removed
wordpress_menus - Removed
wordpress_option - Removed
wordpress_page_design - Removed
wordpress_performance - Removed
wordpress_purge_cache - Removed
wordpress_search_content - Removed
wordpress_seo - Removed
wordpress_set_performance - Removed
wordpress_set_seo - Removed
wordpress_set_tracking - Removed
wordpress_site_info - Removed
wordpress_slider - Removed
wordpress_terms - Removed
wordpress_test_contact_form - Removed
wordpress_theme_file - Removed
wordpress_tracking - Removed
wordpress_update_connector - Removed
wordpress_update_post - Removed
wordpress_upload_media - Removed
wordpress_users - Removed
wordpress_woo_create_product - Removed
wordpress_woo_orders - Removed
wordpress_woo_products - Removed
youtube_channels - Removed
youtube_overview - Removed
youtube_top_videos - Removed
youtube_traffic_sources
1 tool update
- Changed
wordpress_bulk_replace1 field changed- added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "type": "integer" +}
466 tool updates
- Added
account_audit - Added
add_keywords - Added
add_location_assets - Added
add_microsoft_ad_extensions - Added
add_microsoft_ad_schedule - Added
add_microsoft_demographic_target - Added
add_microsoft_device_target - Added
add_microsoft_keywords - Added
add_microsoft_location_target - Added
add_microsoft_negative_keywords - Added
add_negative_keyword - Added
add_pmax_images - Added
add_site - Added
apply_recommendation - Added
attach_linkedin_conversion - Added
block_ip_addresses - Added
budget_pacing_alerts - Removed
call_tool - Removed
call_write_tool - Added
chatgpt_ads_ad_preview - Added
chatgpt_ads_conversion_setup - Added
chatgpt_ads_details - Added
chatgpt_ads_geo_lookup - Added
chatgpt_ads_insights - Added
chatgpt_ads_spend_limits - Added
chatgpt_ads_status - Added
client_report - Added
client_report_link - Added
competitor_ads - Added
configure_site_smtp - Added
connect_business_profile - Added
connect_chatgpt_ads - Added
connect_ga4 - Added
connect_google_ads - Added
connect_linkedin_ads - Added
connect_meta_ads - Added
connect_microsoft_ads - Added
connect_search_console - Added
connect_tag_manager - Added
connect_tiktok_ads - Added
connect_youtube - Added
conversion_tracking_health - Added
copy_meta_entity - Added
core_web_vitals - Added
create_ad_group - Added
create_app_campaign - Added
create_chatgpt_ads_ad - Added
create_chatgpt_ads_ad_group - Added
create_chatgpt_ads_campaign - Added
create_chatgpt_ads_event_setting - Added
create_customer_match_audience - Added
create_demand_gen_ad - Added
create_demand_gen_campaign - Added
create_google_ads_account - Added
create_gtm_container - Added
create_gtm_tag - Added
create_gtm_trigger - Added
create_gtm_variable - Added
create_gtm_workspace - Added
create_lead_form - Added
create_linkedin_campaign - Added
create_linkedin_campaign_group - Added
create_linkedin_post_ad - Added
create_linkedin_text_ad - Added
create_lookalike_audience - Added
create_meta_ab_test - Added
create_meta_adset - Added
create_meta_campaign - Added
create_meta_carousel_ad - Added
create_meta_custom_conversion - Added
create_meta_dynamic_ad - Added
create_meta_engagement_audience - Added
create_meta_instagram_post_ad - Added
create_meta_lead_form - Added
create_meta_link_ad - Added
create_meta_lookalike_audience - Added
create_meta_post_ad - Added
create_meta_video_ad - Added
create_meta_website_audience - Added
create_microsoft_ad_group - Added
create_microsoft_campaign - Added
create_microsoft_conversion_goal - Added
create_microsoft_remarketing_list - Added
create_microsoft_responsive_search_ad - Added
create_microsoft_uet_tag - Added
create_pmax_campaign - Added
create_responsive_search_ad - Added
create_search_campaign - Added
create_tiktok_ad - Added
create_tiktok_adgroup - Added
create_tiktok_auto_message - Added
create_tiktok_campaign - Added
create_tiktok_customer_file_audience - Added
create_tiktok_lookalike_audience - Added
create_tiktok_pixel - Added
create_trial_site - Added
create_website_audience - Added
delete_gtm_container - Added
delete_gtm_entity - Added
delete_linkedin_campaign - Added
delete_linkedin_campaign_group - Added
delete_linkedin_creative - Added
delete_meta_ad - Added
delete_meta_adset - Added
delete_meta_audience - Added
delete_meta_campaign - Added
delete_microsoft_audience - Added
delete_microsoft_campaign - Added
deploy_site_zip - Added
detach_linkedin_conversion - Added
diagnose_chatgpt_ads_delivery - Added
dismiss_recommendations - Added
download_linkedin_leads - Added
download_meta_leads - Added
download_tiktok_leads - Added
enable_gtm_builtin_variables - Added
extension_asset_performance - Added
find_instagram_media_id - Added
fraud_scan - Added
fraud_setup - Added
ga4_create_conversion - Added
ga4_create_custom_dimension - Added
ga4_link_google_ads - Added
ga4_list_ads_links - Added
ga4_list_conversions - Added
ga4_list_data_streams - Added
ga4_list_properties - Added
ga4_overview - Added
ga4_realtime - Added
ga4_report - Added
gbp_complete_verification - Added
gbp_create_location - Added
gbp_create_post - Added
gbp_insights - Added
gbp_list_locations - Added
gbp_list_posts - Added
gbp_location_details - Added
gbp_manage_services - Added
gbp_reply_review - Added
gbp_reviews - Added
gbp_search_categories - Added
gbp_search_keywords - Added
gbp_social_links - Added
gbp_start_verification - Added
gbp_update_location - Added
gbp_update_photo_category - Added
gbp_update_post - Added
gbp_upload_photo - Added
gbp_upload_video - Added
gbp_verification_options - Added
geo_target_search - Added
get_ad_details - Added
get_ad_schedule - Added
get_billing_status - Added
get_campaign_targeting - Added
get_change_history - Added
get_conversion_settings - Added
get_conversion_tags - Added
get_meta_ad_creative - Added
get_pmax_assets - Added
get_shared_negative_list - Added
get_tiktok_lead_form_fields - Added
gsc_delete_sitemap - Added
gsc_inspect_urls - Added
gsc_list_sites - Added
gsc_performance - Added
gsc_sitemaps - Added
gsc_submit_sitemap - Added
gsc_url_inspect - Added
gtm_workspace_status - Added
impression_share_analysis - Added
instagram_follower_growth - Added
instant_audit - Added
issue_status - Added
keyword_historical_metrics - Added
keyword_opportunities - Added
keyword_planner - Added
keyword_quality_report - Added
keyword_report - Added
linkedin_ad_copy - Added
linkedin_audience_forecast - Added
linkedin_bid_recommendations - Added
linkedin_campaign_analytics - Added
linkedin_targeting_search - Added
list_ad_extensions - Added
list_ad_policy_issues - Added
list_assets - Added
list_audiences - Added
list_business_profile_photos - Added
list_conversion_actions - Added
list_conversion_goals - Added
list_custom_conversion_goals - Added
list_extension_assets - Added
list_google_ads_experiments - Added
list_gtm_accounts - Added
list_gtm_containers - Added
list_gtm_permissions - Added
list_gtm_tags - Added
list_gtm_triggers - Added
list_gtm_variables - Added
list_gtm_versions - Added
list_gtm_workspaces - Added
list_ip_exclusions - Added
list_lead_form_submissions - Added
list_linkedin_ad_accounts - Added
list_linkedin_audiences - Added
list_linkedin_campaign_groups - Added
list_linkedin_campaigns - Added
list_linkedin_conversions - Added
list_linkedin_creatives - Added
list_linkedin_lead_forms - Added
list_meta_ad_accounts - Added
list_meta_ads - Added
list_meta_adsets - Added
list_meta_audiences - Added
list_meta_campaigns - Added
list_meta_catalogs - Added
list_meta_custom_conversions - Added
list_meta_instagram_accounts - Added
list_meta_instagram_posts - Added
list_meta_lead_forms - Added
list_meta_page_posts - Added
list_meta_pages - Added
list_meta_pixels - Added
list_meta_product_sets - Added
list_meta_saved_audiences - Added
list_microsoft_accounts - Added
list_microsoft_ad_extensions - Added
list_microsoft_ad_groups - Added
list_microsoft_ads - Added
list_microsoft_audiences - Added
list_microsoft_campaigns - Added
list_microsoft_conversion_goals - Added
list_microsoft_keywords - Added
list_microsoft_negative_keywords - Added
list_microsoft_uet_tags - Added
list_negative_keywords - Added
list_recommendations - Added
list_shared_negative_lists - Added
list_sites - Added
list_tiktok_ad_accounts - Added
list_tiktok_adgroups - Added
list_tiktok_ads - Added
list_tiktok_asset_groups - Added
list_tiktok_audiences - Added
list_tiktok_auto_messages - Added
list_tiktok_bc_advertisers - Added
list_tiktok_bc_pixels - Added
list_tiktok_business_centers - Added
list_tiktok_campaigns - Added
list_tiktok_creative_portfolios - Added
list_tiktok_gmv_max_stores - Added
list_tiktok_identities - Added
list_tiktok_lead_forms - Added
list_tiktok_pixels - Added
list_tiktok_posts - Added
list_tiktok_smart_plus - Added
list_tiktok_videos - Added
list_wordpress_sites - Added
manage_audience_targeting - Added
manage_bidding_strategies - Added
manage_business_logo - Added
manage_business_name - Added
manage_campaign_proximity - Added
manage_campaign_settings - Added
manage_chatgpt_ads_accounts - Added
manage_chatgpt_ads_spend_limit - Added
manage_conversion_actions - Added
manage_device_targeting - Added
manage_extension_assets - Added
manage_gtm_permissions - Added
manage_keywords - Added
manage_portfolio_bidding_strategy - Added
manage_recommendation_auto_apply - Added
manage_shared_negative_list - Added
manage_tiktok_search_negative_keywords - Added
marketing_insights - Added
marketing_overview - Added
meta_campaign_insights - Added
meta_change_history - Added
meta_delivery_estimate - Added
meta_insights_query - Added
meta_reach_estimate - Added
microsoft_entity_performance_report - Added
microsoft_location_search - Added
microsoft_performance_report - Added
microsoft_report_query - Added
microsoft_search_terms_report - Added
pause_campaign - Added
performance_report - Added
portfolio_report - Added
preview_meta_ad - Added
publish_gtm_container - Added
remove_extension_assets - Added
remove_microsoft_ad_extensions - Added
remove_microsoft_negative_keywords - Added
remove_negative_keyword - Added
remove_site - Added
rollback_gtm_version - Added
rsa_asset_performance - Added
scaffold_site - Added
search_meta_interests - Added
search_terms_report - Removed
search_tools - Added
select_google_resource - Added
send_meta_conversion_event - Added
send_tiktok_conversion_event - Added
seo_ai_overview - Added
seo_anchors - Added
seo_audit - Added
seo_backlink_list - Added
seo_backlinks - Added
seo_best_pages_by_links - Added
seo_brand_monitor - Added
seo_broken_backlinks - Added
seo_bulk_spam_score - Added
seo_competitor_gap - Added
seo_content_brief - Added
seo_content_lint - Added
seo_full_analysis - Added
seo_geo_citations - Added
seo_geo_tracker - Added
seo_history - Added
seo_keyword_research - Added
seo_keyword_trends - Added
seo_link_intersect - Added
seo_local_listings - Added
seo_paid_keywords - Added
seo_rank_history - Added
seo_rank_tracker - Added
seo_rank_untrack - Added
seo_ranked_keywords - Added
seo_referring_networks - Added
seo_reviews - Added
seo_serp_analysis - Added
seo_site_crawl - Added
seo_site_technologies - Added
seo_technical_audit - Added
set_ad_group_targeting - Added
set_ad_schedule - Added
set_call_reporting - Added
set_campaign_budget - Added
set_campaign_targeting - Added
set_conversion_settings - Added
set_microsoft_bid_strategy - Added
share_tiktok_audience - Added
site_command_status - Added
site_csp_reports - Added
site_db_backup - Added
site_db_restore - Added
site_design_guide - Added
site_edit_file - Added
site_fetch - Added
site_form_submissions - Added
site_headers - Added
site_info - Added
site_list_files - Added
site_preview - Added
site_read_file - Added
site_read_url - Added
site_rebuild - Added
site_redirects - Added
site_restore - Added
site_seo_guide - Added
site_tag_gateway - Added
site_versions - Added
site_write_file - Added
smart_negative_keywords - Added
tiktok_advertiser_qualification - Added
tiktok_campaign_report - Added
tiktok_change_history - Added
tiktok_recommendations - Added
tiktok_region_search - Added
tiktok_report_query - Added
tiktok_targeting_search - Added
unblock_ip_addresses - Added
update_ad_group - Added
update_ad_group_status - Added
update_ad_status - Added
update_campaign - Added
update_campaign_status - Added
update_chatgpt_ads_ad - Added
update_chatgpt_ads_ad_group - Added
update_chatgpt_ads_campaign - Added
update_conversion_action - Added
update_conversion_goal - Added
update_custom_conversion_goal - Added
update_gtm_entity - Added
update_linkedin_campaign - Added
update_linkedin_campaign_group - Added
update_linkedin_campaign_targeting - Added
update_linkedin_creative_status - Added
update_meta_ad - Added
update_meta_ad_creative - Added
update_meta_adset - Added
update_meta_campaign - Added
update_meta_custom_conversion - Added
update_meta_instagram_post_ad - Added
update_microsoft_ad_group - Added
update_microsoft_ad_group_status - Added
update_microsoft_ad_status - Added
update_microsoft_campaign_budget - Added
update_microsoft_campaign_status - Added
update_microsoft_keyword - Added
update_microsoft_responsive_search_ad - Added
update_pmax_asset_group - Added
update_pmax_assets - Added
update_rsa - Added
update_sitelink - Added
update_tiktok_ad - Added
update_tiktok_ad_status - Added
update_tiktok_adgroup - Added
update_tiktok_adgroup_budget - Added
update_tiktok_adgroup_status - Added
update_tiktok_campaign - Added
update_tiktok_campaign_budget - Added
update_tiktok_campaign_status - Added
upload_conversion_adjustments - Added
upload_image - Added
upload_image_asset - Added
upload_meta_image - Added
upload_meta_video - Added
upload_microsoft_offline_conversions - Added
upload_offline_conversions - Added
upload_tiktok_image - Added
upload_tiktok_video - Added
wordpress_bulk_replace - Added
wordpress_contact_forms - Added
wordpress_create_post - Added
wordpress_edit_menu - Added
wordpress_edit_page_design - Added
wordpress_get_post - Added
wordpress_install_plugin - Added
wordpress_languages - Added
wordpress_link_translations - Added
wordpress_list_plugins - Added
wordpress_list_posts - Added
wordpress_manage_plugin - Added
wordpress_media - Added
wordpress_menus - Added
wordpress_option - Added
wordpress_page_design - Added
wordpress_performance - Added
wordpress_purge_cache - Added
wordpress_search_content - Added
wordpress_seo - Added
wordpress_set_performance - Added
wordpress_set_seo - Added
wordpress_set_tracking - Added
wordpress_site_info - Added
wordpress_slider - Added
wordpress_terms - Added
wordpress_test_contact_form - Added
wordpress_theme_file - Added
wordpress_tracking - Added
wordpress_update_connector - Added
wordpress_update_post - Added
wordpress_upload_media - Added
wordpress_users - Added
wordpress_woo_create_product - Added
wordpress_woo_orders - Added
wordpress_woo_products - Added
youtube_channels - Added
youtube_overview - Added
youtube_top_videos - Added
youtube_traffic_sources
466 tool updates
- Removed
account_audit - Removed
add_keywords - Removed
add_location_assets - Removed
add_microsoft_ad_extensions - Removed
add_microsoft_ad_schedule - Removed
add_microsoft_demographic_target - Removed
add_microsoft_device_target - Removed
add_microsoft_keywords - Removed
add_microsoft_location_target - Removed
add_microsoft_negative_keywords - Removed
add_negative_keyword - Removed
add_pmax_images - Removed
add_site - Removed
apply_recommendation - Removed
attach_linkedin_conversion - Removed
block_ip_addresses - Removed
budget_pacing_alerts - Added
call_tool - Added
call_write_tool - Removed
chatgpt_ads_ad_preview - Removed
chatgpt_ads_conversion_setup - Removed
chatgpt_ads_details - Removed
chatgpt_ads_geo_lookup - Removed
chatgpt_ads_insights - Removed
chatgpt_ads_spend_limits - Removed
chatgpt_ads_status - Removed
client_report - Removed
client_report_link - Removed
competitor_ads - Removed
configure_site_smtp - Removed
connect_business_profile - Removed
connect_chatgpt_ads - Removed
connect_ga4 - Removed
connect_google_ads - Removed
connect_linkedin_ads - Removed
connect_meta_ads - Removed
connect_microsoft_ads - Removed
connect_search_console - Removed
connect_tag_manager - Removed
connect_tiktok_ads - Removed
connect_youtube - Removed
conversion_tracking_health - Removed
copy_meta_entity - Removed
core_web_vitals - Removed
create_ad_group - Removed
create_app_campaign - Removed
create_chatgpt_ads_ad - Removed
create_chatgpt_ads_ad_group - Removed
create_chatgpt_ads_campaign - Removed
create_chatgpt_ads_event_setting - Removed
create_customer_match_audience - Removed
create_demand_gen_ad - Removed
create_demand_gen_campaign - Removed
create_google_ads_account - Removed
create_gtm_container - Removed
create_gtm_tag - Removed
create_gtm_trigger - Removed
create_gtm_variable - Removed
create_gtm_workspace - Removed
create_lead_form - Removed
create_linkedin_campaign - Removed
create_linkedin_campaign_group - Removed
create_linkedin_post_ad - Removed
create_linkedin_text_ad - Removed
create_lookalike_audience - Removed
create_meta_ab_test - Removed
create_meta_adset - Removed
create_meta_campaign - Removed
create_meta_carousel_ad - Removed
create_meta_custom_conversion - Removed
create_meta_dynamic_ad - Removed
create_meta_engagement_audience - Removed
create_meta_instagram_post_ad - Removed
create_meta_lead_form - Removed
create_meta_link_ad - Removed
create_meta_lookalike_audience - Removed
create_meta_post_ad - Removed
create_meta_video_ad - Removed
create_meta_website_audience - Removed
create_microsoft_ad_group - Removed
create_microsoft_campaign - Removed
create_microsoft_conversion_goal - Removed
create_microsoft_remarketing_list - Removed
create_microsoft_responsive_search_ad - Removed
create_microsoft_uet_tag - Removed
create_pmax_campaign - Removed
create_responsive_search_ad - Removed
create_search_campaign - Removed
create_tiktok_ad - Removed
create_tiktok_adgroup - Removed
create_tiktok_auto_message - Removed
create_tiktok_campaign - Removed
create_tiktok_customer_file_audience - Removed
create_tiktok_lookalike_audience - Removed
create_tiktok_pixel - Removed
create_trial_site - Removed
create_website_audience - Removed
delete_gtm_container - Removed
delete_gtm_entity - Removed
delete_linkedin_campaign - Removed
delete_linkedin_campaign_group - Removed
delete_linkedin_creative - Removed
delete_meta_ad - Removed
delete_meta_adset - Removed
delete_meta_audience - Removed
delete_meta_campaign - Removed
delete_microsoft_audience - Removed
delete_microsoft_campaign - Removed
deploy_site_zip - Removed
detach_linkedin_conversion - Removed
diagnose_chatgpt_ads_delivery - Removed
dismiss_recommendations - Removed
download_linkedin_leads - Removed
download_meta_leads - Removed
download_tiktok_leads - Removed
enable_gtm_builtin_variables - Removed
extension_asset_performance - Removed
find_instagram_media_id - Removed
fraud_scan - Removed
fraud_setup - Removed
ga4_create_conversion - Removed
ga4_create_custom_dimension - Removed
ga4_link_google_ads - Removed
ga4_list_ads_links - Removed
ga4_list_conversions - Removed
ga4_list_data_streams - Removed
ga4_list_properties - Removed
ga4_overview - Removed
ga4_realtime - Removed
ga4_report - Removed
gbp_complete_verification - Removed
gbp_create_location - Removed
gbp_create_post - Removed
gbp_insights - Removed
gbp_list_locations - Removed
gbp_list_posts - Removed
gbp_location_details - Removed
gbp_manage_services - Removed
gbp_reply_review - Removed
gbp_reviews - Removed
gbp_search_categories - Removed
gbp_search_keywords - Removed
gbp_social_links - Removed
gbp_start_verification - Removed
gbp_update_location - Removed
gbp_update_photo_category - Removed
gbp_update_post - Removed
gbp_upload_photo - Removed
gbp_upload_video - Removed
gbp_verification_options - Removed
geo_target_search - Removed
get_ad_details - Removed
get_ad_schedule - Removed
get_billing_status - Removed
get_campaign_targeting - Removed
get_change_history - Removed
get_conversion_settings - Removed
get_conversion_tags - Removed
get_meta_ad_creative - Removed
get_pmax_assets - Removed
get_shared_negative_list - Removed
get_tiktok_lead_form_fields - Removed
gsc_delete_sitemap - Removed
gsc_inspect_urls - Removed
gsc_list_sites - Removed
gsc_performance - Removed
gsc_sitemaps - Removed
gsc_submit_sitemap - Removed
gsc_url_inspect - Removed
gtm_workspace_status - Removed
impression_share_analysis - Removed
instagram_follower_growth - Removed
instant_audit - Removed
issue_status - Removed
keyword_historical_metrics - Removed
keyword_opportunities - Removed
keyword_planner - Removed
keyword_quality_report - Removed
keyword_report - Removed
linkedin_ad_copy - Removed
linkedin_audience_forecast - Removed
linkedin_bid_recommendations - Removed
linkedin_campaign_analytics - Removed
linkedin_targeting_search - Removed
list_ad_extensions - Removed
list_ad_policy_issues - Removed
list_assets - Removed
list_audiences - Removed
list_business_profile_photos - Removed
list_conversion_actions - Removed
list_conversion_goals - Removed
list_custom_conversion_goals - Removed
list_extension_assets - Removed
list_google_ads_experiments - Removed
list_gtm_accounts - Removed
list_gtm_containers - Removed
list_gtm_permissions - Removed
list_gtm_tags - Removed
list_gtm_triggers - Removed
list_gtm_variables - Removed
list_gtm_versions - Removed
list_gtm_workspaces - Removed
list_ip_exclusions - Removed
list_lead_form_submissions - Removed
list_linkedin_ad_accounts - Removed
list_linkedin_audiences - Removed
list_linkedin_campaign_groups - Removed
list_linkedin_campaigns - Removed
list_linkedin_conversions - Removed
list_linkedin_creatives - Removed
list_linkedin_lead_forms - Removed
list_meta_ad_accounts - Removed
list_meta_ads - Removed
list_meta_adsets - Removed
list_meta_audiences - Removed
list_meta_campaigns - Removed
list_meta_catalogs - Removed
list_meta_custom_conversions - Removed
list_meta_instagram_accounts - Removed
list_meta_instagram_posts - Removed
list_meta_lead_forms - Removed
list_meta_page_posts - Removed
list_meta_pages - Removed
list_meta_pixels - Removed
list_meta_product_sets - Removed
list_meta_saved_audiences - Removed
list_microsoft_accounts - Removed
list_microsoft_ad_extensions - Removed
list_microsoft_ad_groups - Removed
list_microsoft_ads - Removed
list_microsoft_audiences - Removed
list_microsoft_campaigns - Removed
list_microsoft_conversion_goals - Removed
list_microsoft_keywords - Removed
list_microsoft_negative_keywords - Removed
list_microsoft_uet_tags - Removed
list_negative_keywords - Removed
list_recommendations - Removed
list_shared_negative_lists - Removed
list_sites - Removed
list_tiktok_ad_accounts - Removed
list_tiktok_adgroups - Removed
list_tiktok_ads - Removed
list_tiktok_asset_groups - Removed
list_tiktok_audiences - Removed
list_tiktok_auto_messages - Removed
list_tiktok_bc_advertisers - Removed
list_tiktok_bc_pixels - Removed
list_tiktok_business_centers - Removed
list_tiktok_campaigns - Removed
list_tiktok_creative_portfolios - Removed
list_tiktok_gmv_max_stores - Removed
list_tiktok_identities - Removed
list_tiktok_lead_forms - Removed
list_tiktok_pixels - Removed
list_tiktok_posts - Removed
list_tiktok_smart_plus - Removed
list_tiktok_videos - Removed
list_wordpress_sites - Removed
manage_audience_targeting - Removed
manage_bidding_strategies - Removed
manage_business_logo - Removed
manage_business_name - Removed
manage_campaign_proximity - Removed
manage_campaign_settings - Removed
manage_chatgpt_ads_accounts - Removed
manage_chatgpt_ads_spend_limit - Removed
manage_conversion_actions - Removed
manage_device_targeting - Removed
manage_extension_assets - Removed
manage_gtm_permissions - Removed
manage_keywords - Removed
manage_portfolio_bidding_strategy - Removed
manage_recommendation_auto_apply - Removed
manage_shared_negative_list - Removed
manage_tiktok_search_negative_keywords - Removed
marketing_insights - Removed
marketing_overview - Removed
meta_campaign_insights - Removed
meta_change_history - Removed
meta_delivery_estimate - Removed
meta_insights_query - Removed
meta_reach_estimate - Removed
microsoft_entity_performance_report - Removed
microsoft_location_search - Removed
microsoft_performance_report - Removed
microsoft_report_query - Removed
microsoft_search_terms_report - Removed
pause_campaign - Removed
performance_report - Removed
portfolio_report - Removed
preview_meta_ad - Removed
publish_gtm_container - Removed
remove_extension_assets - Removed
remove_microsoft_ad_extensions - Removed
remove_microsoft_negative_keywords - Removed
remove_negative_keyword - Removed
remove_site - Removed
rollback_gtm_version - Removed
rsa_asset_performance - Removed
scaffold_site - Removed
search_meta_interests - Removed
search_terms_report - Added
search_tools - Removed
select_google_resource - Removed
send_meta_conversion_event - Removed
send_tiktok_conversion_event - Removed
seo_ai_overview - Removed
seo_anchors - Removed
seo_audit - Removed
seo_backlink_list - Removed
seo_backlinks - Removed
seo_best_pages_by_links - Removed
seo_brand_monitor - Removed
seo_broken_backlinks - Removed
seo_bulk_spam_score - Removed
seo_competitor_gap - Removed
seo_content_brief - Removed
seo_content_lint - Removed
seo_full_analysis - Removed
seo_geo_citations - Removed
seo_geo_tracker - Removed
seo_history - Removed
seo_keyword_research - Removed
seo_keyword_trends - Removed
seo_link_intersect - Removed
seo_local_listings - Removed
seo_paid_keywords - Removed
seo_rank_history - Removed
seo_rank_tracker - Removed
seo_rank_untrack - Removed
seo_ranked_keywords - Removed
seo_referring_networks - Removed
seo_reviews - Removed
seo_serp_analysis - Removed
seo_site_crawl - Removed
seo_site_technologies - Removed
seo_technical_audit - Removed
set_ad_group_targeting - Removed
set_ad_schedule - Removed
set_call_reporting - Removed
set_campaign_budget - Removed
set_campaign_targeting - Removed
set_conversion_settings - Removed
set_microsoft_bid_strategy - Removed
share_tiktok_audience - Removed
site_command_status - Removed
site_csp_reports - Removed
site_db_backup - Removed
site_db_restore - Removed
site_design_guide - Removed
site_edit_file - Removed
site_fetch - Removed
site_form_submissions - Removed
site_headers - Removed
site_info - Removed
site_list_files - Removed
site_preview - Removed
site_read_file - Removed
site_read_url - Removed
site_rebuild - Removed
site_redirects - Removed
site_restore - Removed
site_seo_guide - Removed
site_tag_gateway - Removed
site_versions - Removed
site_write_file - Removed
smart_negative_keywords - Removed
tiktok_advertiser_qualification - Removed
tiktok_campaign_report - Removed
tiktok_change_history - Removed
tiktok_recommendations - Removed
tiktok_region_search - Removed
tiktok_report_query - Removed
tiktok_targeting_search - Removed
unblock_ip_addresses - Removed
update_ad_group - Removed
update_ad_group_status - Removed
update_ad_status - Removed
update_campaign - Removed
update_campaign_status - Removed
update_chatgpt_ads_ad - Removed
update_chatgpt_ads_ad_group - Removed
update_chatgpt_ads_campaign - Removed
update_conversion_action - Removed
update_conversion_goal - Removed
update_custom_conversion_goal - Removed
update_gtm_entity - Removed
update_linkedin_campaign - Removed
update_linkedin_campaign_group - Removed
update_linkedin_campaign_targeting - Removed
update_linkedin_creative_status - Removed
update_meta_ad - Removed
update_meta_ad_creative - Removed
update_meta_adset - Removed
update_meta_campaign - Removed
update_meta_custom_conversion - Removed
update_meta_instagram_post_ad - Removed
update_microsoft_ad_group - Removed
update_microsoft_ad_group_status - Removed
update_microsoft_ad_status - Removed
update_microsoft_campaign_budget - Removed
update_microsoft_campaign_status - Removed
update_microsoft_keyword - Removed
update_microsoft_responsive_search_ad - Removed
update_pmax_asset_group - Removed
update_pmax_assets - Removed
update_rsa - Removed
update_sitelink - Removed
update_tiktok_ad - Removed
update_tiktok_ad_status - Removed
update_tiktok_adgroup - Removed
update_tiktok_adgroup_budget - Removed
update_tiktok_adgroup_status - Removed
update_tiktok_campaign - Removed
update_tiktok_campaign_budget - Removed
update_tiktok_campaign_status - Removed
upload_conversion_adjustments - Removed
upload_image - Removed
upload_image_asset - Removed
upload_meta_image - Removed
upload_meta_video - Removed
upload_microsoft_offline_conversions - Removed
upload_offline_conversions - Removed
upload_tiktok_image - Removed
upload_tiktok_video - Removed
wordpress_bulk_replace - Removed
wordpress_contact_forms - Removed
wordpress_create_post - Removed
wordpress_edit_menu - Removed
wordpress_edit_page_design - Removed
wordpress_get_post - Removed
wordpress_install_plugin - Removed
wordpress_languages - Removed
wordpress_link_translations - Removed
wordpress_list_plugins - Removed
wordpress_list_posts - Removed
wordpress_manage_plugin - Removed
wordpress_media - Removed
wordpress_menus - Removed
wordpress_option - Removed
wordpress_page_design - Removed
wordpress_performance - Removed
wordpress_purge_cache - Removed
wordpress_search_content - Removed
wordpress_seo - Removed
wordpress_set_performance - Removed
wordpress_set_seo - Removed
wordpress_set_tracking - Removed
wordpress_site_info - Removed
wordpress_slider - Removed
wordpress_terms - Removed
wordpress_test_contact_form - Removed
wordpress_theme_file - Removed
wordpress_tracking - Removed
wordpress_update_connector - Removed
wordpress_update_post - Removed
wordpress_upload_media - Removed
wordpress_users - Removed
wordpress_woo_create_product - Removed
wordpress_woo_orders - Removed
wordpress_woo_products - Removed
youtube_channels - Removed
youtube_overview - Removed
youtube_top_videos - Removed
youtube_traffic_sources
466 tool updates
- Added
account_audit - Added
add_keywords - Added
add_location_assets - Added
add_microsoft_ad_extensions - Added
add_microsoft_ad_schedule - Added
add_microsoft_demographic_target - Added
add_microsoft_device_target - Added
add_microsoft_keywords - Added
add_microsoft_location_target - Added
add_microsoft_negative_keywords - Added
add_negative_keyword - Added
add_pmax_images - Added
add_site - Added
apply_recommendation - Added
attach_linkedin_conversion - Added
block_ip_addresses - Added
budget_pacing_alerts - Removed
call_tool - Removed
call_write_tool - Added
chatgpt_ads_ad_preview - Added
chatgpt_ads_conversion_setup - Added
chatgpt_ads_details - Added
chatgpt_ads_geo_lookup - Added
chatgpt_ads_insights - Added
chatgpt_ads_spend_limits - Added
chatgpt_ads_status - Added
client_report - Added
client_report_link - Added
competitor_ads - Added
configure_site_smtp - Added
connect_business_profile - Added
connect_chatgpt_ads - Added
connect_ga4 - Added
connect_google_ads - Added
connect_linkedin_ads - Added
connect_meta_ads - Added
connect_microsoft_ads - Added
connect_search_console - Added
connect_tag_manager - Added
connect_tiktok_ads - Added
connect_youtube - Added
conversion_tracking_health - Added
copy_meta_entity - Added
core_web_vitals - Added
create_ad_group - Added
create_app_campaign - Added
create_chatgpt_ads_ad - Added
create_chatgpt_ads_ad_group - Added
create_chatgpt_ads_campaign - Added
create_chatgpt_ads_event_setting - Added
create_customer_match_audience - Added
create_demand_gen_ad - Added
create_demand_gen_campaign - Added
create_google_ads_account - Added
create_gtm_container - Added
create_gtm_tag - Added
create_gtm_trigger - Added
create_gtm_variable - Added
create_gtm_workspace - Added
create_lead_form - Added
create_linkedin_campaign - Added
create_linkedin_campaign_group - Added
create_linkedin_post_ad - Added
create_linkedin_text_ad - Added
create_lookalike_audience - Added
create_meta_ab_test - Added
create_meta_adset - Added
create_meta_campaign - Added
create_meta_carousel_ad - Added
create_meta_custom_conversion - Added
create_meta_dynamic_ad - Added
create_meta_engagement_audience - Added
create_meta_instagram_post_ad - Added
create_meta_lead_form - Added
create_meta_link_ad - Added
create_meta_lookalike_audience - Added
create_meta_post_ad - Added
create_meta_video_ad - Added
create_meta_website_audience - Added
create_microsoft_ad_group - Added
create_microsoft_campaign - Added
create_microsoft_conversion_goal - Added
create_microsoft_remarketing_list - Added
create_microsoft_responsive_search_ad - Added
create_microsoft_uet_tag - Added
create_pmax_campaign - Added
create_responsive_search_ad - Added
create_search_campaign - Added
create_tiktok_ad - Added
create_tiktok_adgroup - Added
create_tiktok_auto_message - Added
create_tiktok_campaign - Added
create_tiktok_customer_file_audience - Added
create_tiktok_lookalike_audience - Added
create_tiktok_pixel - Added
create_trial_site - Added
create_website_audience - Added
delete_gtm_container - Added
delete_gtm_entity - Added
delete_linkedin_campaign - Added
delete_linkedin_campaign_group - Added
delete_linkedin_creative - Added
delete_meta_ad - Added
delete_meta_adset - Added
delete_meta_audience - Added
delete_meta_campaign - Added
delete_microsoft_audience - Added
delete_microsoft_campaign - Added
deploy_site_zip - Added
detach_linkedin_conversion - Added
diagnose_chatgpt_ads_delivery - Added
dismiss_recommendations - Added
download_linkedin_leads - Added
download_meta_leads - Added
download_tiktok_leads - Added
enable_gtm_builtin_variables - Added
extension_asset_performance - Added
find_instagram_media_id - Added
fraud_scan - Added
fraud_setup - Added
ga4_create_conversion - Added
ga4_create_custom_dimension - Added
ga4_link_google_ads - Added
ga4_list_ads_links - Added
ga4_list_conversions - Added
ga4_list_data_streams - Added
ga4_list_properties - Added
ga4_overview - Added
ga4_realtime - Added
ga4_report - Added
gbp_complete_verification - Added
gbp_create_location - Added
gbp_create_post - Added
gbp_insights - Added
gbp_list_locations - Added
gbp_list_posts - Added
gbp_location_details - Added
gbp_manage_services - Added
gbp_reply_review - Added
gbp_reviews - Added
gbp_search_categories - Added
gbp_search_keywords - Added
gbp_social_links - Added
gbp_start_verification - Added
gbp_update_location - Added
gbp_update_photo_category - Added
gbp_update_post - Added
gbp_upload_photo - Added
gbp_upload_video - Added
gbp_verification_options - Added
geo_target_search - Added
get_ad_details - Added
get_ad_schedule - Added
get_billing_status - Added
get_campaign_targeting - Added
get_change_history - Added
get_conversion_settings - Added
get_conversion_tags - Added
get_meta_ad_creative - Added
get_pmax_assets - Added
get_shared_negative_list - Added
get_tiktok_lead_form_fields - Added
gsc_delete_sitemap - Added
gsc_inspect_urls - Added
gsc_list_sites - Added
gsc_performance - Added
gsc_sitemaps - Added
gsc_submit_sitemap - Added
gsc_url_inspect - Added
gtm_workspace_status - Added
impression_share_analysis - Added
instagram_follower_growth - Added
instant_audit - Added
issue_status - Added
keyword_historical_metrics - Added
keyword_opportunities - Added
keyword_planner - Added
keyword_quality_report - Added
keyword_report - Added
linkedin_ad_copy - Added
linkedin_audience_forecast - Added
linkedin_bid_recommendations - Added
linkedin_campaign_analytics - Added
linkedin_targeting_search - Added
list_ad_extensions - Added
list_ad_policy_issues - Added
list_assets - Added
list_audiences - Added
list_business_profile_photos - Added
list_conversion_actions - Added
list_conversion_goals - Added
list_custom_conversion_goals - Added
list_extension_assets - Added
list_google_ads_experiments - Added
list_gtm_accounts - Added
list_gtm_containers - Added
list_gtm_permissions - Added
list_gtm_tags - Added
list_gtm_triggers - Added
list_gtm_variables - Added
list_gtm_versions - Added
list_gtm_workspaces - Added
list_ip_exclusions - Added
list_lead_form_submissions - Added
list_linkedin_ad_accounts - Added
list_linkedin_audiences - Added
list_linkedin_campaign_groups - Added
list_linkedin_campaigns - Added
list_linkedin_conversions - Added
list_linkedin_creatives - Added
list_linkedin_lead_forms - Added
list_meta_ad_accounts - Added
list_meta_ads - Added
list_meta_adsets - Added
list_meta_audiences - Added
list_meta_campaigns - Added
list_meta_catalogs - Added
list_meta_custom_conversions - Added
list_meta_instagram_accounts - Added
list_meta_instagram_posts - Added
list_meta_lead_forms - Added
list_meta_page_posts - Added
list_meta_pages - Added
list_meta_pixels - Added
list_meta_product_sets - Added
list_meta_saved_audiences - Added
list_microsoft_accounts - Added
list_microsoft_ad_extensions - Added
list_microsoft_ad_groups - Added
list_microsoft_ads - Added
list_microsoft_audiences - Added
list_microsoft_campaigns - Added
list_microsoft_conversion_goals - Added
list_microsoft_keywords - Added
list_microsoft_negative_keywords - Added
list_microsoft_uet_tags - Added
list_negative_keywords - Added
list_recommendations - Added
list_shared_negative_lists - Added
list_sites - Added
list_tiktok_ad_accounts - Added
list_tiktok_adgroups - Added
list_tiktok_ads - Added
list_tiktok_asset_groups - Added
list_tiktok_audiences - Added
list_tiktok_auto_messages - Added
list_tiktok_bc_advertisers - Added
list_tiktok_bc_pixels - Added
list_tiktok_business_centers - Added
list_tiktok_campaigns - Added
list_tiktok_creative_portfolios - Added
list_tiktok_gmv_max_stores - Added
list_tiktok_identities - Added
list_tiktok_lead_forms - Added
list_tiktok_pixels - Added
list_tiktok_posts - Added
list_tiktok_smart_plus - Added
list_tiktok_videos - Added
list_wordpress_sites - Added
manage_audience_targeting - Added
manage_bidding_strategies - Added
manage_business_logo - Added
manage_business_name - Added
manage_campaign_proximity - Added
manage_campaign_settings - Added
manage_chatgpt_ads_accounts - Added
manage_chatgpt_ads_spend_limit - Added
manage_conversion_actions - Added
manage_device_targeting - Added
manage_extension_assets - Added
manage_gtm_permissions - Added
manage_keywords - Added
manage_portfolio_bidding_strategy - Added
manage_recommendation_auto_apply - Added
manage_shared_negative_list - Added
manage_tiktok_search_negative_keywords - Added
marketing_insights - Added
marketing_overview - Added
meta_campaign_insights - Added
meta_change_history - Added
meta_delivery_estimate - Added
meta_insights_query - Added
meta_reach_estimate - Added
microsoft_entity_performance_report - Added
microsoft_location_search - Added
microsoft_performance_report - Added
microsoft_report_query - Added
microsoft_search_terms_report - Added
pause_campaign - Added
performance_report - Added
portfolio_report - Added
preview_meta_ad - Added
publish_gtm_container - Added
remove_extension_assets - Added
remove_microsoft_ad_extensions - Added
remove_microsoft_negative_keywords - Added
remove_negative_keyword - Added
remove_site - Added
rollback_gtm_version - Added
rsa_asset_performance - Added
scaffold_site - Added
search_meta_interests - Added
search_terms_report - Removed
search_tools - Added
select_google_resource - Added
send_meta_conversion_event - Added
send_tiktok_conversion_event - Added
seo_ai_overview - Added
seo_anchors - Added
seo_audit - Added
seo_backlink_list - Added
seo_backlinks - Added
seo_best_pages_by_links - Added
seo_brand_monitor - Added
seo_broken_backlinks - Added
seo_bulk_spam_score - Added
seo_competitor_gap - Added
seo_content_brief - Added
seo_content_lint - Added
seo_full_analysis - Added
seo_geo_citations - Added
seo_geo_tracker - Added
seo_history - Added
seo_keyword_research - Added
seo_keyword_trends - Added
seo_link_intersect - Added
seo_local_listings - Added
seo_paid_keywords - Added
seo_rank_history - Added
seo_rank_tracker - Added
seo_rank_untrack - Added
seo_ranked_keywords - Added
seo_referring_networks - Added
seo_reviews - Added
seo_serp_analysis - Added
seo_site_crawl - Added
seo_site_technologies - Added
seo_technical_audit - Added
set_ad_group_targeting - Added
set_ad_schedule - Added
set_call_reporting - Added
set_campaign_budget - Added
set_campaign_targeting - Added
set_conversion_settings - Added
set_microsoft_bid_strategy - Added
share_tiktok_audience - Added
site_command_status - Added
site_csp_reports - Added
site_db_backup - Added
site_db_restore - Added
site_design_guide - Added
site_edit_file - Added
site_fetch - Added
site_form_submissions - Added
site_headers - Added
site_info - Added
site_list_files - Added
site_preview - Added
site_read_file - Added
site_read_url - Added
site_rebuild - Added
site_redirects - Added
site_restore - Added
site_seo_guide - Added
site_tag_gateway - Added
site_versions - Added
site_write_file - Added
smart_negative_keywords - Added
tiktok_advertiser_qualification - Added
tiktok_campaign_report - Added
tiktok_change_history - Added
tiktok_recommendations - Added
tiktok_region_search - Added
tiktok_report_query - Added
tiktok_targeting_search - Added
unblock_ip_addresses - Added
update_ad_group - Added
update_ad_group_status - Added
update_ad_status - Added
update_campaign - Added
update_campaign_status - Added
update_chatgpt_ads_ad - Added
update_chatgpt_ads_ad_group - Added
update_chatgpt_ads_campaign - Added
update_conversion_action - Added
update_conversion_goal - Added
update_custom_conversion_goal - Added
update_gtm_entity - Added
update_linkedin_campaign - Added
update_linkedin_campaign_group - Added
update_linkedin_campaign_targeting - Added
update_linkedin_creative_status - Added
update_meta_ad - Added
update_meta_ad_creative - Added
update_meta_adset - Added
update_meta_campaign - Added
update_meta_custom_conversion - Added
update_meta_instagram_post_ad - Added
update_microsoft_ad_group - Added
update_microsoft_ad_group_status - Added
update_microsoft_ad_status - Added
update_microsoft_campaign_budget - Added
update_microsoft_campaign_status - Added
update_microsoft_keyword - Added
update_microsoft_responsive_search_ad - Added
update_pmax_asset_group - Added
update_pmax_assets - Added
update_rsa - Added
update_sitelink - Added
update_tiktok_ad - Added
update_tiktok_ad_status - Added
update_tiktok_adgroup - Added
update_tiktok_adgroup_budget - Added
update_tiktok_adgroup_status - Added
update_tiktok_campaign - Added
update_tiktok_campaign_budget - Added
update_tiktok_campaign_status - Added
upload_conversion_adjustments - Added
upload_image - Added
upload_image_asset - Added
upload_meta_image - Added
upload_meta_video - Added
upload_microsoft_offline_conversions - Added
upload_offline_conversions - Added
upload_tiktok_image - Added
upload_tiktok_video - Added
wordpress_bulk_replace - Added
wordpress_contact_forms - Added
wordpress_create_post - Added
wordpress_edit_menu - Added
wordpress_edit_page_design - Added
wordpress_get_post - Added
wordpress_install_plugin - Added
wordpress_languages - Added
wordpress_link_translations - Added
wordpress_list_plugins - Added
wordpress_list_posts - Added
wordpress_manage_plugin - Added
wordpress_media - Added
wordpress_menus - Added
wordpress_option - Added
wordpress_page_design - Added
wordpress_performance - Added
wordpress_purge_cache - Added
wordpress_search_content - Added
wordpress_seo - Added
wordpress_set_performance - Added
wordpress_set_seo - Added
wordpress_set_tracking - Added
wordpress_site_info - Added
wordpress_slider - Added
wordpress_terms - Added
wordpress_test_contact_form - Added
wordpress_theme_file - Added
wordpress_tracking - Added
wordpress_update_connector - Added
wordpress_update_post - Added
wordpress_upload_media - Added
wordpress_users - Added
wordpress_woo_create_product - Added
wordpress_woo_orders - Added
wordpress_woo_products - Added
youtube_channels - Added
youtube_overview - Added
youtube_top_videos - Added
youtube_traffic_sources
466 tool updates
- Removed
account_audit - Removed
add_keywords - Removed
add_location_assets - Removed
add_microsoft_ad_extensions - Removed
add_microsoft_ad_schedule - Removed
add_microsoft_demographic_target - Removed
add_microsoft_device_target - Removed
add_microsoft_keywords - Removed
add_microsoft_location_target - Removed
add_microsoft_negative_keywords - Removed
add_negative_keyword - Removed
add_pmax_images - Removed
add_site - Removed
apply_recommendation - Removed
attach_linkedin_conversion - Removed
block_ip_addresses - Removed
budget_pacing_alerts - Added
call_tool - Added
call_write_tool - Removed
chatgpt_ads_ad_preview - Removed
chatgpt_ads_conversion_setup - Removed
chatgpt_ads_details - Removed
chatgpt_ads_geo_lookup - Removed
chatgpt_ads_insights - Removed
chatgpt_ads_spend_limits - Removed
chatgpt_ads_status - Removed
client_report - Removed
client_report_link - Removed
competitor_ads - Removed
configure_site_smtp - Removed
connect_business_profile - Removed
connect_chatgpt_ads - Removed
connect_ga4 - Removed
connect_google_ads - Removed
connect_linkedin_ads - Removed
connect_meta_ads - Removed
connect_microsoft_ads - Removed
connect_search_console - Removed
connect_tag_manager - Removed
connect_tiktok_ads - Removed
connect_youtube - Removed
conversion_tracking_health - Removed
copy_meta_entity - Removed
core_web_vitals - Removed
create_ad_group - Removed
create_app_campaign - Removed
create_chatgpt_ads_ad - Removed
create_chatgpt_ads_ad_group - Removed
create_chatgpt_ads_campaign - Removed
create_chatgpt_ads_event_setting - Removed
create_customer_match_audience - Removed
create_demand_gen_ad - Removed
create_demand_gen_campaign - Removed
create_google_ads_account - Removed
create_gtm_container - Removed
create_gtm_tag - Removed
create_gtm_trigger - Removed
create_gtm_variable - Removed
create_gtm_workspace - Removed
create_lead_form - Removed
create_linkedin_campaign - Removed
create_linkedin_campaign_group - Removed
create_linkedin_post_ad - Removed
create_linkedin_text_ad - Removed
create_lookalike_audience - Removed
create_meta_ab_test - Removed
create_meta_adset - Removed
create_meta_campaign - Removed
create_meta_carousel_ad - Removed
create_meta_custom_conversion - Removed
create_meta_dynamic_ad - Removed
create_meta_engagement_audience - Removed
create_meta_instagram_post_ad - Removed
create_meta_lead_form - Removed
create_meta_link_ad - Removed
create_meta_lookalike_audience - Removed
create_meta_post_ad - Removed
create_meta_video_ad - Removed
create_meta_website_audience - Removed
create_microsoft_ad_group - Removed
create_microsoft_campaign - Removed
create_microsoft_conversion_goal - Removed
create_microsoft_remarketing_list - Removed
create_microsoft_responsive_search_ad - Removed
create_microsoft_uet_tag - Removed
create_pmax_campaign - Removed
create_responsive_search_ad - Removed
create_search_campaign - Removed
create_tiktok_ad - Removed
create_tiktok_adgroup - Removed
create_tiktok_auto_message - Removed
create_tiktok_campaign - Removed
create_tiktok_customer_file_audience - Removed
create_tiktok_lookalike_audience - Removed
create_tiktok_pixel - Removed
create_trial_site - Removed
create_website_audience - Removed
delete_gtm_container - Removed
delete_gtm_entity - Removed
delete_linkedin_campaign - Removed
delete_linkedin_campaign_group - Removed
delete_linkedin_creative - Removed
delete_meta_ad - Removed
delete_meta_adset - Removed
delete_meta_audience - Removed
delete_meta_campaign - Removed
delete_microsoft_audience - Removed
delete_microsoft_campaign - Removed
deploy_site_zip - Removed
detach_linkedin_conversion - Removed
diagnose_chatgpt_ads_delivery - Removed
dismiss_recommendations - Removed
download_linkedin_leads - Removed
download_meta_leads - Removed
download_tiktok_leads - Removed
enable_gtm_builtin_variables - Removed
extension_asset_performance - Removed
find_instagram_media_id - Removed
fraud_scan - Removed
fraud_setup - Removed
ga4_create_conversion - Removed
ga4_create_custom_dimension - Removed
ga4_link_google_ads - Removed
ga4_list_ads_links - Removed
ga4_list_conversions - Removed
ga4_list_data_streams - Removed
ga4_list_properties - Removed
ga4_overview - Removed
ga4_realtime - Removed
ga4_report - Removed
gbp_complete_verification - Removed
gbp_create_location - Removed
gbp_create_post - Removed
gbp_insights - Removed
gbp_list_locations - Removed
gbp_list_posts - Removed
gbp_location_details - Removed
gbp_manage_services - Removed
gbp_reply_review - Removed
gbp_reviews - Removed
gbp_search_categories - Removed
gbp_search_keywords - Removed
gbp_social_links - Removed
gbp_start_verification - Removed
gbp_update_location - Removed
gbp_update_photo_category - Removed
gbp_update_post - Removed
gbp_upload_photo - Removed
gbp_upload_video - Removed
gbp_verification_options - Removed
geo_target_search - Removed
get_ad_details - Removed
get_ad_schedule - Removed
get_billing_status - Removed
get_campaign_targeting - Removed
get_change_history - Removed
get_conversion_settings - Removed
get_conversion_tags - Removed
get_meta_ad_creative - Removed
get_pmax_assets - Removed
get_shared_negative_list - Removed
get_tiktok_lead_form_fields - Removed
gsc_delete_sitemap - Removed
gsc_inspect_urls - Removed
gsc_list_sites - Removed
gsc_performance - Removed
gsc_sitemaps - Removed
gsc_submit_sitemap - Removed
gsc_url_inspect - Removed
gtm_workspace_status - Removed
impression_share_analysis - Removed
instagram_follower_growth - Removed
instant_audit - Removed
issue_status - Removed
keyword_historical_metrics - Removed
keyword_opportunities - Removed
keyword_planner - Removed
keyword_quality_report - Removed
keyword_report - Removed
linkedin_ad_copy - Removed
linkedin_audience_forecast - Removed
linkedin_bid_recommendations - Removed
linkedin_campaign_analytics - Removed
linkedin_targeting_search - Removed
list_ad_extensions - Removed
list_ad_policy_issues - Removed
list_assets - Removed
list_audiences - Removed
list_business_profile_photos - Removed
list_conversion_actions - Removed
list_conversion_goals - Removed
list_custom_conversion_goals - Removed
list_extension_assets - Removed
list_google_ads_experiments - Removed
list_gtm_accounts - Removed
list_gtm_containers - Removed
list_gtm_permissions - Removed
list_gtm_tags - Removed
list_gtm_triggers - Removed
list_gtm_variables - Removed
list_gtm_versions - Removed
list_gtm_workspaces - Removed
list_ip_exclusions - Removed
list_lead_form_submissions - Removed
list_linkedin_ad_accounts - Removed
list_linkedin_audiences - Removed
list_linkedin_campaign_groups - Removed
list_linkedin_campaigns - Removed
list_linkedin_conversions - Removed
list_linkedin_creatives - Removed
list_linkedin_lead_forms - Removed
list_meta_ad_accounts - Removed
list_meta_ads - Removed
list_meta_adsets - Removed
list_meta_audiences - Removed
list_meta_campaigns - Removed
list_meta_catalogs - Removed
list_meta_custom_conversions - Removed
list_meta_instagram_accounts - Removed
list_meta_instagram_posts - Removed
list_meta_lead_forms - Removed
list_meta_page_posts - Removed
list_meta_pages - Removed
list_meta_pixels - Removed
list_meta_product_sets - Removed
list_meta_saved_audiences - Removed
list_microsoft_accounts - Removed
list_microsoft_ad_extensions - Removed
list_microsoft_ad_groups - Removed
list_microsoft_ads - Removed
list_microsoft_audiences - Removed
list_microsoft_campaigns - Removed
list_microsoft_conversion_goals - Removed
list_microsoft_keywords - Removed
list_microsoft_negative_keywords - Removed
list_microsoft_uet_tags - Removed
list_negative_keywords - Removed
list_recommendations - Removed
list_shared_negative_lists - Removed
list_sites - Removed
list_tiktok_ad_accounts - Removed
list_tiktok_adgroups - Removed
list_tiktok_ads - Removed
list_tiktok_asset_groups - Removed
list_tiktok_audiences - Removed
list_tiktok_auto_messages - Removed
list_tiktok_bc_advertisers - Removed
list_tiktok_bc_pixels - Removed
list_tiktok_business_centers - Removed
list_tiktok_campaigns - Removed
list_tiktok_creative_portfolios - Removed
list_tiktok_gmv_max_stores - Removed
list_tiktok_identities - Removed
list_tiktok_lead_forms - Removed
list_tiktok_pixels - Removed
list_tiktok_posts - Removed
list_tiktok_smart_plus - Removed
list_tiktok_videos - Removed
list_wordpress_sites - Removed
manage_audience_targeting - Removed
manage_bidding_strategies - Removed
manage_business_logo - Removed
manage_business_name - Removed
manage_campaign_proximity - Removed
manage_campaign_settings - Removed
manage_chatgpt_ads_accounts - Removed
manage_chatgpt_ads_spend_limit - Removed
manage_conversion_actions - Removed
manage_device_targeting - Removed
manage_extension_assets - Removed
manage_gtm_permissions - Removed
manage_keywords - Removed
manage_portfolio_bidding_strategy - Removed
manage_recommendation_auto_apply - Removed
manage_shared_negative_list - Removed
manage_tiktok_search_negative_keywords - Removed
marketing_insights - Removed
marketing_overview - Removed
meta_campaign_insights - Removed
meta_change_history - Removed
meta_delivery_estimate - Removed
meta_insights_query - Removed
meta_reach_estimate - Removed
microsoft_entity_performance_report - Removed
microsoft_location_search - Removed
microsoft_performance_report - Removed
microsoft_report_query - Removed
microsoft_search_terms_report - Removed
pause_campaign - Removed
performance_report - Removed
portfolio_report - Removed
preview_meta_ad - Removed
publish_gtm_container - Removed
remove_extension_assets - Removed
remove_microsoft_ad_extensions - Removed
remove_microsoft_negative_keywords - Removed
remove_negative_keyword - Removed
remove_site - Removed
rollback_gtm_version - Removed
rsa_asset_performance - Removed
scaffold_site - Removed
search_meta_interests - Removed
search_terms_report - Added
search_tools - Removed
select_google_resource - Removed
send_meta_conversion_event - Removed
send_tiktok_conversion_event - Removed
seo_ai_overview - Removed
seo_anchors - Removed
seo_audit - Removed
seo_backlink_list - Removed
seo_backlinks - Removed
seo_best_pages_by_links - Removed
seo_brand_monitor - Removed
seo_broken_backlinks - Removed
seo_bulk_spam_score - Removed
seo_competitor_gap - Removed
seo_content_brief - Removed
seo_content_lint - Removed
seo_full_analysis - Removed
seo_geo_citations - Removed
seo_geo_tracker - Removed
seo_history - Removed
seo_keyword_research - Removed
seo_keyword_trends - Removed
seo_link_intersect - Removed
seo_local_listings - Removed
seo_paid_keywords - Removed
seo_rank_history - Removed
seo_rank_tracker - Removed
seo_rank_untrack - Removed
seo_ranked_keywords - Removed
seo_referring_networks - Removed
seo_reviews - Removed
seo_serp_analysis - Removed
seo_site_crawl - Removed
seo_site_technologies - Removed
seo_technical_audit - Removed
set_ad_group_targeting - Removed
set_ad_schedule - Removed
set_call_reporting - Removed
set_campaign_budget - Removed
set_campaign_targeting - Removed
set_conversion_settings - Removed
set_microsoft_bid_strategy - Removed
share_tiktok_audience - Removed
site_command_status - Removed
site_csp_reports - Removed
site_db_backup - Removed
site_db_restore - Removed
site_design_guide - Removed
site_edit_file - Removed
site_fetch - Removed
site_form_submissions - Removed
site_headers - Removed
site_info - Removed
site_list_files - Removed
site_preview - Removed
site_read_file - Removed
site_read_url - Removed
site_rebuild - Removed
site_redirects - Removed
site_restore - Removed
site_seo_guide - Removed
site_tag_gateway - Removed
site_versions - Removed
site_write_file - Removed
smart_negative_keywords - Removed
tiktok_advertiser_qualification - Removed
tiktok_campaign_report - Removed
tiktok_change_history - Removed
tiktok_recommendations - Removed
tiktok_region_search - Removed
tiktok_report_query - Removed
tiktok_targeting_search - Removed
unblock_ip_addresses - Removed
update_ad_group - Removed
update_ad_group_status - Removed
update_ad_status - Removed
update_campaign - Removed
update_campaign_status - Removed
update_chatgpt_ads_ad - Removed
update_chatgpt_ads_ad_group - Removed
update_chatgpt_ads_campaign - Removed
update_conversion_action - Removed
update_conversion_goal - Removed
update_custom_conversion_goal - Removed
update_gtm_entity - Removed
update_linkedin_campaign - Removed
update_linkedin_campaign_group - Removed
update_linkedin_campaign_targeting - Removed
update_linkedin_creative_status - Removed
update_meta_ad - Removed
update_meta_ad_creative - Removed
update_meta_adset - Removed
update_meta_campaign - Removed
update_meta_custom_conversion - Removed
update_meta_instagram_post_ad - Removed
update_microsoft_ad_group - Removed
update_microsoft_ad_group_status - Removed
update_microsoft_ad_status - Removed
update_microsoft_campaign_budget - Removed
update_microsoft_campaign_status - Removed
update_microsoft_keyword - Removed
update_microsoft_responsive_search_ad - Removed
update_pmax_asset_group - Removed
update_pmax_assets - Removed
update_rsa - Removed
update_sitelink - Removed
update_tiktok_ad - Removed
update_tiktok_ad_status - Removed
update_tiktok_adgroup - Removed
update_tiktok_adgroup_budget - Removed
update_tiktok_adgroup_status - Removed
update_tiktok_campaign - Removed
update_tiktok_campaign_budget - Removed
update_tiktok_campaign_status - Removed
upload_conversion_adjustments - Removed
upload_image - Removed
upload_image_asset - Removed
upload_meta_image - Removed
upload_meta_video - Removed
upload_microsoft_offline_conversions - Removed
upload_offline_conversions - Removed
upload_tiktok_image - Removed
upload_tiktok_video - Removed
wordpress_bulk_replace - Removed
wordpress_contact_forms - Removed
wordpress_create_post - Removed
wordpress_edit_menu - Removed
wordpress_edit_page_design - Removed
wordpress_get_post - Removed
wordpress_install_plugin - Removed
wordpress_languages - Removed
wordpress_link_translations - Removed
wordpress_list_plugins - Removed
wordpress_list_posts - Removed
wordpress_manage_plugin - Removed
wordpress_media - Removed
wordpress_menus - Removed
wordpress_option - Removed
wordpress_page_design - Removed
wordpress_performance - Removed
wordpress_purge_cache - Removed
wordpress_search_content - Removed
wordpress_seo - Removed
wordpress_set_performance - Removed
wordpress_set_seo - Removed
wordpress_set_tracking - Removed
wordpress_site_info - Removed
wordpress_slider - Removed
wordpress_terms - Removed
wordpress_test_contact_form - Removed
wordpress_theme_file - Removed
wordpress_tracking - Removed
wordpress_update_connector - Removed
wordpress_update_post - Removed
wordpress_upload_media - Removed
wordpress_users - Removed
wordpress_woo_create_product - Removed
wordpress_woo_orders - Removed
wordpress_woo_products - Removed
youtube_channels - Removed
youtube_overview - Removed
youtube_top_videos - Removed
youtube_traffic_sources
466 tool updates
- Added
account_audit - Added
add_keywords - Added
add_location_assets - Added
add_microsoft_ad_extensions - Added
add_microsoft_ad_schedule - Added
add_microsoft_demographic_target - Added
add_microsoft_device_target - Added
add_microsoft_keywords - Added
add_microsoft_location_target - Added
add_microsoft_negative_keywords - Added
add_negative_keyword - Added
add_pmax_images - Added
add_site - Added
apply_recommendation - Added
attach_linkedin_conversion - Added
block_ip_addresses - Added
budget_pacing_alerts - Removed
call_tool - Removed
call_write_tool - Added
chatgpt_ads_ad_preview - Added
chatgpt_ads_conversion_setup - Added
chatgpt_ads_details - Added
chatgpt_ads_geo_lookup - Added
chatgpt_ads_insights - Added
chatgpt_ads_spend_limits - Added
chatgpt_ads_status - Added
client_report - Added
client_report_link - Added
competitor_ads - Added
configure_site_smtp - Added
connect_business_profile - Added
connect_chatgpt_ads - Added
connect_ga4 - Added
connect_google_ads - Added
connect_linkedin_ads - Added
connect_meta_ads - Added
connect_microsoft_ads - Added
connect_search_console - Added
connect_tag_manager - Added
connect_tiktok_ads - Added
connect_youtube - Added
conversion_tracking_health - Added
copy_meta_entity - Added
core_web_vitals - Added
create_ad_group - Added
create_app_campaign - Added
create_chatgpt_ads_ad - Added
create_chatgpt_ads_ad_group - Added
create_chatgpt_ads_campaign - Added
create_chatgpt_ads_event_setting - Added
create_customer_match_audience - Added
create_demand_gen_ad - Added
create_demand_gen_campaign - Added
create_google_ads_account - Added
create_gtm_container - Added
create_gtm_tag - Added
create_gtm_trigger - Added
create_gtm_variable - Added
create_gtm_workspace - Added
create_lead_form - Added
create_linkedin_campaign - Added
create_linkedin_campaign_group - Added
create_linkedin_post_ad - Added
create_linkedin_text_ad - Added
create_lookalike_audience - Added
create_meta_ab_test - Added
create_meta_adset - Added
create_meta_campaign - Added
create_meta_carousel_ad - Added
create_meta_custom_conversion - Added
create_meta_dynamic_ad - Added
create_meta_engagement_audience - Added
create_meta_instagram_post_ad - Added
create_meta_lead_form - Added
create_meta_link_ad - Added
create_meta_lookalike_audience - Added
create_meta_post_ad - Added
create_meta_video_ad - Added
create_meta_website_audience - Added
create_microsoft_ad_group - Added
create_microsoft_campaign - Added
create_microsoft_conversion_goal - Added
create_microsoft_remarketing_list - Added
create_microsoft_responsive_search_ad - Added
create_microsoft_uet_tag - Added
create_pmax_campaign - Added
create_responsive_search_ad - Added
create_search_campaign - Added
create_tiktok_ad - Added
create_tiktok_adgroup - Added
create_tiktok_auto_message - Added
create_tiktok_campaign - Added
create_tiktok_customer_file_audience - Added
create_tiktok_lookalike_audience - Added
create_tiktok_pixel - Added
create_trial_site - Added
create_website_audience - Added
delete_gtm_container - Added
delete_gtm_entity - Added
delete_linkedin_campaign - Added
delete_linkedin_campaign_group - Added
delete_linkedin_creative - Added
delete_meta_ad - Added
delete_meta_adset - Added
delete_meta_audience - Added
delete_meta_campaign - Added
delete_microsoft_audience - Added
delete_microsoft_campaign - Added
deploy_site_zip - Added
detach_linkedin_conversion - Added
diagnose_chatgpt_ads_delivery - Added
dismiss_recommendations - Added
download_linkedin_leads - Added
download_meta_leads - Added
download_tiktok_leads - Added
enable_gtm_builtin_variables - Added
extension_asset_performance - Added
find_instagram_media_id - Added
fraud_scan - Added
fraud_setup - Added
ga4_create_conversion - Added
ga4_create_custom_dimension - Added
ga4_link_google_ads - Added
ga4_list_ads_links - Added
ga4_list_conversions - Added
ga4_list_data_streams - Added
ga4_list_properties - Added
ga4_overview - Added
ga4_realtime - Added
ga4_report - Added
gbp_complete_verification - Added
gbp_create_location - Added
gbp_create_post - Added
gbp_insights - Added
gbp_list_locations - Added
gbp_list_posts - Added
gbp_location_details - Added
gbp_manage_services - Added
gbp_reply_review - Added
gbp_reviews - Added
gbp_search_categories - Added
gbp_search_keywords - Added
gbp_social_links - Added
gbp_start_verification - Added
gbp_update_location - Added
gbp_update_photo_category - Added
gbp_update_post - Added
gbp_upload_photo - Added
gbp_upload_video - Added
gbp_verification_options - Added
geo_target_search - Added
get_ad_details - Added
get_ad_schedule - Added
get_billing_status - Added
get_campaign_targeting - Added
get_change_history - Added
get_conversion_settings - Added
get_conversion_tags - Added
get_meta_ad_creative - Added
get_pmax_assets - Added
get_shared_negative_list - Added
get_tiktok_lead_form_fields - Added
gsc_delete_sitemap - Added
gsc_inspect_urls - Added
gsc_list_sites - Added
gsc_performance - Added
gsc_sitemaps - Added
gsc_submit_sitemap - Added
gsc_url_inspect - Added
gtm_workspace_status - Added
impression_share_analysis - Added
instagram_follower_growth - Added
instant_audit - Added
issue_status - Added
keyword_historical_metrics - Added
keyword_opportunities - Added
keyword_planner - Added
keyword_quality_report - Added
keyword_report - Added
linkedin_ad_copy - Added
linkedin_audience_forecast - Added
linkedin_bid_recommendations - Added
linkedin_campaign_analytics - Added
linkedin_targeting_search - Added
list_ad_extensions - Added
list_ad_policy_issues - Added
list_assets - Added
list_audiences - Added
list_business_profile_photos - Added
list_conversion_actions - Added
list_conversion_goals - Added
list_custom_conversion_goals - Added
list_extension_assets - Added
list_google_ads_experiments - Added
list_gtm_accounts - Added
list_gtm_containers - Added
list_gtm_permissions - Added
list_gtm_tags - Added
list_gtm_triggers - Added
list_gtm_variables - Added
list_gtm_versions - Added
list_gtm_workspaces - Added
list_ip_exclusions - Added
list_lead_form_submissions - Added
list_linkedin_ad_accounts - Added
list_linkedin_audiences - Added
list_linkedin_campaign_groups - Added
list_linkedin_campaigns - Added
list_linkedin_conversions - Added
list_linkedin_creatives - Added
list_linkedin_lead_forms - Added
list_meta_ad_accounts - Added
list_meta_ads - Added
list_meta_adsets - Added
list_meta_audiences - Added
list_meta_campaigns - Added
list_meta_catalogs - Added
list_meta_custom_conversions - Added
list_meta_instagram_accounts - Added
list_meta_instagram_posts - Added
list_meta_lead_forms - Added
list_meta_page_posts - Added
list_meta_pages - Added
list_meta_pixels - Added
list_meta_product_sets - Added
list_meta_saved_audiences - Added
list_microsoft_accounts - Added
list_microsoft_ad_extensions - Added
list_microsoft_ad_groups - Added
list_microsoft_ads - Added
list_microsoft_audiences - Added
list_microsoft_campaigns - Added
list_microsoft_conversion_goals - Added
list_microsoft_keywords - Added
list_microsoft_negative_keywords - Added
list_microsoft_uet_tags - Added
list_negative_keywords - Added
list_recommendations - Added
list_shared_negative_lists - Added
list_sites - Added
list_tiktok_ad_accounts - Added
list_tiktok_adgroups - Added
list_tiktok_ads - Added
list_tiktok_asset_groups - Added
list_tiktok_audiences - Added
list_tiktok_auto_messages - Added
list_tiktok_bc_advertisers - Added
list_tiktok_bc_pixels - Added
list_tiktok_business_centers - Added
list_tiktok_campaigns - Added
list_tiktok_creative_portfolios - Added
list_tiktok_gmv_max_stores - Added
list_tiktok_identities - Added
list_tiktok_lead_forms - Added
list_tiktok_pixels - Added
list_tiktok_posts - Added
list_tiktok_smart_plus - Added
list_tiktok_videos - Added
list_wordpress_sites - Added
manage_audience_targeting - Added
manage_bidding_strategies - Added
manage_business_logo - Added
manage_business_name - Added
manage_campaign_proximity - Added
manage_campaign_settings - Added
manage_chatgpt_ads_accounts - Added
manage_chatgpt_ads_spend_limit - Added
manage_conversion_actions - Added
manage_device_targeting - Added
manage_extension_assets - Added
manage_gtm_permissions - Added
manage_keywords - Added
manage_portfolio_bidding_strategy - Added
manage_recommendation_auto_apply - Added
manage_shared_negative_list - Added
manage_tiktok_search_negative_keywords - Added
marketing_insights - Added
marketing_overview - Added
meta_campaign_insights - Added
meta_change_history - Added
meta_delivery_estimate - Added
meta_insights_query - Added
meta_reach_estimate - Added
microsoft_entity_performance_report - Added
microsoft_location_search - Added
microsoft_performance_report - Added
microsoft_report_query - Added
microsoft_search_terms_report - Added
pause_campaign - Added
performance_report - Added
portfolio_report - Added
preview_meta_ad - Added
publish_gtm_container - Added
remove_extension_assets - Added
remove_microsoft_ad_extensions - Added
remove_microsoft_negative_keywords - Added
remove_negative_keyword - Added
remove_site - Added
rollback_gtm_version - Added
rsa_asset_performance - Added
scaffold_site - Added
search_meta_interests - Added
search_terms_report - Removed
search_tools - Added
select_google_resource - Added
send_meta_conversion_event - Added
send_tiktok_conversion_event - Added
seo_ai_overview - Added
seo_anchors - Added
seo_audit - Added
seo_backlink_list - Added
seo_backlinks - Added
seo_best_pages_by_links - Added
seo_brand_monitor - Added
seo_broken_backlinks - Added
seo_bulk_spam_score - Added
seo_competitor_gap - Added
seo_content_brief - Added
seo_content_lint - Added
seo_full_analysis - Added
seo_geo_citations - Added
seo_geo_tracker - Added
seo_history - Added
seo_keyword_research - Added
seo_keyword_trends - Added
seo_link_intersect - Added
seo_local_listings - Added
seo_paid_keywords - Added
seo_rank_history - Added
seo_rank_tracker - Added
seo_rank_untrack - Added
seo_ranked_keywords - Added
seo_referring_networks - Added
seo_reviews - Added
seo_serp_analysis - Added
seo_site_crawl - Added
seo_site_technologies - Added
seo_technical_audit - Added
set_ad_group_targeting - Added
set_ad_schedule - Added
set_call_reporting - Added
set_campaign_budget - Added
set_campaign_targeting - Added
set_conversion_settings - Added
set_microsoft_bid_strategy - Added
share_tiktok_audience - Added
site_command_status - Added
site_csp_reports - Added
site_db_backup - Added
site_db_restore - Added
site_design_guide - Added
site_edit_file - Added
site_fetch - Added
site_form_submissions - Added
site_headers - Added
site_info - Added
site_list_files - Added
site_preview - Added
site_read_file - Added
site_read_url - Added
site_rebuild - Added
site_redirects - Added
site_restore - Added
site_seo_guide - Added
site_tag_gateway - Added
site_versions - Added
site_write_file - Added
smart_negative_keywords - Added
tiktok_advertiser_qualification - Added
tiktok_campaign_report - Added
tiktok_change_history - Added
tiktok_recommendations - Added
tiktok_region_search - Added
tiktok_report_query - Added
tiktok_targeting_search - Added
unblock_ip_addresses - Added
update_ad_group - Added
update_ad_group_status - Added
update_ad_status - Added
update_campaign - Added
update_campaign_status - Added
update_chatgpt_ads_ad - Added
update_chatgpt_ads_ad_group - Added
update_chatgpt_ads_campaign - Added
update_conversion_action - Added
update_conversion_goal - Added
update_custom_conversion_goal - Added
update_gtm_entity - Added
update_linkedin_campaign - Added
update_linkedin_campaign_group - Added
update_linkedin_campaign_targeting - Added
update_linkedin_creative_status - Added
update_meta_ad - Added
update_meta_ad_creative - Added
update_meta_adset - Added
update_meta_campaign - Added
update_meta_custom_conversion - Added
update_meta_instagram_post_ad - Added
update_microsoft_ad_group - Added
update_microsoft_ad_group_status - Added
update_microsoft_ad_status - Added
update_microsoft_campaign_budget - Added
update_microsoft_campaign_status - Added
update_microsoft_keyword - Added
update_microsoft_responsive_search_ad - Added
update_pmax_asset_group - Added
update_pmax_assets - Added
update_rsa - Added
update_sitelink - Added
update_tiktok_ad - Added
update_tiktok_ad_status - Added
update_tiktok_adgroup - Added
update_tiktok_adgroup_budget - Added
update_tiktok_adgroup_status - Added
update_tiktok_campaign - Added
update_tiktok_campaign_budget - Added
update_tiktok_campaign_status - Added
upload_conversion_adjustments - Added
upload_image - Added
upload_image_asset - Added
upload_meta_image - Added
upload_meta_video - Added
upload_microsoft_offline_conversions - Added
upload_offline_conversions - Added
upload_tiktok_image - Added
upload_tiktok_video - Added
wordpress_bulk_replace - Added
wordpress_contact_forms - Added
wordpress_create_post - Added
wordpress_edit_menu - Added
wordpress_edit_page_design - Added
wordpress_get_post - Added
wordpress_install_plugin - Added
wordpress_languages - Added
wordpress_link_translations - Added
wordpress_list_plugins - Added
wordpress_list_posts - Added
wordpress_manage_plugin - Added
wordpress_media - Added
wordpress_menus - Added
wordpress_option - Added
wordpress_page_design - Added
wordpress_performance - Added
wordpress_purge_cache - Added
wordpress_search_content - Added
wordpress_seo - Added
wordpress_set_performance - Added
wordpress_set_seo - Added
wordpress_set_tracking - Added
wordpress_site_info - Added
wordpress_slider - Added
wordpress_terms - Added
wordpress_test_contact_form - Added
wordpress_theme_file - Added
wordpress_tracking - Added
wordpress_update_connector - Added
wordpress_update_post - Added
wordpress_upload_media - Added
wordpress_users - Added
wordpress_woo_create_product - Added
wordpress_woo_orders - Added
wordpress_woo_products - Added
youtube_channels - Added
youtube_overview - Added
youtube_top_videos - Added
youtube_traffic_sources
466 tool updates
- Removed
account_audit - Removed
add_keywords - Removed
add_location_assets - Removed
add_microsoft_ad_extensions - Removed
add_microsoft_ad_schedule - Removed
add_microsoft_demographic_target - Removed
add_microsoft_device_target - Removed
add_microsoft_keywords - Removed
add_microsoft_location_target - Removed
add_microsoft_negative_keywords - Removed
add_negative_keyword - Removed
add_pmax_images - Removed
add_site - Removed
apply_recommendation - Removed
attach_linkedin_conversion - Removed
block_ip_addresses - Removed
budget_pacing_alerts - Added
call_tool - Added
call_write_tool - Removed
chatgpt_ads_ad_preview - Removed
chatgpt_ads_conversion_setup - Removed
chatgpt_ads_details - Removed
chatgpt_ads_geo_lookup - Removed
chatgpt_ads_insights - Removed
chatgpt_ads_spend_limits - Removed
chatgpt_ads_status - Removed
client_report - Removed
client_report_link - Removed
competitor_ads - Removed
configure_site_smtp - Removed
connect_business_profile - Removed
connect_chatgpt_ads - Removed
connect_ga4 - Removed
connect_google_ads - Removed
connect_linkedin_ads - Removed
connect_meta_ads - Removed
connect_microsoft_ads - Removed
connect_search_console - Removed
connect_tag_manager - Removed
connect_tiktok_ads - Removed
connect_youtube - Removed
conversion_tracking_health - Removed
copy_meta_entity - Removed
core_web_vitals - Removed
create_ad_group - Removed
create_app_campaign - Removed
create_chatgpt_ads_ad - Removed
create_chatgpt_ads_ad_group - Removed
create_chatgpt_ads_campaign - Removed
create_chatgpt_ads_event_setting - Removed
create_customer_match_audience - Removed
create_demand_gen_ad - Removed
create_demand_gen_campaign - Removed
create_google_ads_account - Removed
create_gtm_container - Removed
create_gtm_tag - Removed
create_gtm_trigger - Removed
create_gtm_variable - Removed
create_gtm_workspace - Removed
create_lead_form - Removed
create_linkedin_campaign - Removed
create_linkedin_campaign_group - Removed
create_linkedin_post_ad - Removed
create_linkedin_text_ad - Removed
create_lookalike_audience - Removed
create_meta_ab_test - Removed
create_meta_adset - Removed
create_meta_campaign - Removed
create_meta_carousel_ad - Removed
create_meta_custom_conversion - Removed
create_meta_dynamic_ad - Removed
create_meta_engagement_audience - Removed
create_meta_instagram_post_ad - Removed
create_meta_lead_form - Removed
create_meta_link_ad - Removed
create_meta_lookalike_audience - Removed
create_meta_post_ad - Removed
create_meta_video_ad - Removed
create_meta_website_audience - Removed
create_microsoft_ad_group - Removed
create_microsoft_campaign - Removed
create_microsoft_conversion_goal - Removed
create_microsoft_remarketing_list - Removed
create_microsoft_responsive_search_ad - Removed
create_microsoft_uet_tag - Removed
create_pmax_campaign - Removed
create_responsive_search_ad - Removed
create_search_campaign - Removed
create_tiktok_ad - Removed
create_tiktok_adgroup - Removed
create_tiktok_auto_message - Removed
create_tiktok_campaign - Removed
create_tiktok_customer_file_audience - Removed
create_tiktok_lookalike_audience - Removed
create_tiktok_pixel - Removed
create_trial_site - Removed
create_website_audience - Removed
delete_gtm_container - Removed
delete_gtm_entity - Removed
delete_linkedin_campaign - Removed
delete_linkedin_campaign_group - Removed
delete_linkedin_creative - Removed
delete_meta_ad - Removed
delete_meta_adset - Removed
delete_meta_audience - Removed
delete_meta_campaign - Removed
delete_microsoft_audience - Removed
delete_microsoft_campaign - Removed
deploy_site_zip - Removed
detach_linkedin_conversion - Removed
diagnose_chatgpt_ads_delivery - Removed
dismiss_recommendations - Removed
download_linkedin_leads - Removed
download_meta_leads - Removed
download_tiktok_leads - Removed
enable_gtm_builtin_variables - Removed
extension_asset_performance - Removed
find_instagram_media_id - Removed
fraud_scan - Removed
fraud_setup - Removed
ga4_create_conversion - Removed
ga4_create_custom_dimension - Removed
ga4_link_google_ads - Removed
ga4_list_ads_links - Removed
ga4_list_conversions - Removed
ga4_list_data_streams - Removed
ga4_list_properties - Removed
ga4_overview - Removed
ga4_realtime - Removed
ga4_report - Removed
gbp_complete_verification - Removed
gbp_create_location - Removed
gbp_create_post - Removed
gbp_insights - Removed
gbp_list_locations - Removed
gbp_list_posts - Removed
gbp_location_details - Removed
gbp_manage_services - Removed
gbp_reply_review - Removed
gbp_reviews - Removed
gbp_search_categories - Removed
gbp_search_keywords - Removed
gbp_social_links - Removed
gbp_start_verification - Removed
gbp_update_location - Removed
gbp_update_photo_category - Removed
gbp_update_post - Removed
gbp_upload_photo - Removed
gbp_upload_video - Removed
gbp_verification_options - Removed
geo_target_search - Removed
get_ad_details - Removed
get_ad_schedule - Removed
get_billing_status - Removed
get_campaign_targeting - Removed
get_change_history - Removed
get_conversion_settings - Removed
get_conversion_tags - Removed
get_meta_ad_creative - Removed
get_pmax_assets - Removed
get_shared_negative_list - Removed
get_tiktok_lead_form_fields - Removed
gsc_delete_sitemap - Removed
gsc_inspect_urls - Removed
gsc_list_sites - Removed
gsc_performance - Removed
gsc_sitemaps - Removed
gsc_submit_sitemap - Removed
gsc_url_inspect - Removed
gtm_workspace_status - Removed
impression_share_analysis - Removed
instagram_follower_growth - Removed
instant_audit - Removed
issue_status - Removed
keyword_historical_metrics - Removed
keyword_opportunities - Removed
keyword_planner - Removed
keyword_quality_report - Removed
keyword_report - Removed
linkedin_ad_copy - Removed
linkedin_audience_forecast - Removed
linkedin_bid_recommendations - Removed
linkedin_campaign_analytics - Removed
linkedin_targeting_search - Removed
list_ad_extensions - Removed
list_ad_policy_issues - Removed
list_assets - Removed
list_audiences - Removed
list_business_profile_photos - Removed
list_conversion_actions - Removed
list_conversion_goals - Removed
list_custom_conversion_goals - Removed
list_extension_assets - Removed
list_google_ads_experiments - Removed
list_gtm_accounts - Removed
list_gtm_containers - Removed
list_gtm_permissions - Removed
list_gtm_tags - Removed
list_gtm_triggers - Removed
list_gtm_variables - Removed
list_gtm_versions - Removed
list_gtm_workspaces - Removed
list_ip_exclusions - Removed
list_lead_form_submissions - Removed
list_linkedin_ad_accounts - Removed
list_linkedin_audiences - Removed
list_linkedin_campaign_groups - Removed
list_linkedin_campaigns - Removed
list_linkedin_conversions - Removed
list_linkedin_creatives - Removed
list_linkedin_lead_forms - Removed
list_meta_ad_accounts - Removed
list_meta_ads - Removed
list_meta_adsets - Removed
list_meta_audiences - Removed
list_meta_campaigns - Removed
list_meta_catalogs - Removed
list_meta_custom_conversions - Removed
list_meta_instagram_accounts - Removed
list_meta_instagram_posts - Removed
list_meta_lead_forms - Removed
list_meta_page_posts - Removed
list_meta_pages - Removed
list_meta_pixels - Removed
list_meta_product_sets - Removed
list_meta_saved_audiences - Removed
list_microsoft_accounts - Removed
list_microsoft_ad_extensions - Removed
list_microsoft_ad_groups - Removed
list_microsoft_ads - Removed
list_microsoft_audiences - Removed
list_microsoft_campaigns - Removed
list_microsoft_conversion_goals - Removed
list_microsoft_keywords - Removed
list_microsoft_negative_keywords - Removed
list_microsoft_uet_tags - Removed
list_negative_keywords - Removed
list_recommendations - Removed
list_shared_negative_lists - Removed
list_sites - Removed
list_tiktok_ad_accounts - Removed
list_tiktok_adgroups - Removed
list_tiktok_ads - Removed
list_tiktok_asset_groups - Removed
list_tiktok_audiences - Removed
list_tiktok_auto_messages - Removed
list_tiktok_bc_advertisers - Removed
list_tiktok_bc_pixels - Removed
list_tiktok_business_centers - Removed
list_tiktok_campaigns - Removed
list_tiktok_creative_portfolios - Removed
list_tiktok_gmv_max_stores - Removed
list_tiktok_identities - Removed
list_tiktok_lead_forms - Removed
list_tiktok_pixels - Removed
list_tiktok_posts - Removed
list_tiktok_smart_plus - Removed
list_tiktok_videos - Removed
list_wordpress_sites - Removed
manage_audience_targeting - Removed
manage_bidding_strategies - Removed
manage_business_logo - Removed
manage_business_name - Removed
manage_campaign_proximity - Removed
manage_campaign_settings - Removed
manage_chatgpt_ads_accounts - Removed
manage_chatgpt_ads_spend_limit - Removed
manage_conversion_actions - Removed
manage_device_targeting - Removed
manage_extension_assets - Removed
manage_gtm_permissions - Removed
manage_keywords - Removed
manage_portfolio_bidding_strategy - Removed
manage_recommendation_auto_apply - Removed
manage_shared_negative_list - Removed
manage_tiktok_search_negative_keywords - Removed
marketing_insights - Removed
marketing_overview - Removed
meta_campaign_insights - Removed
meta_change_history - Removed
meta_delivery_estimate - Removed
meta_insights_query - Removed
meta_reach_estimate - Removed
microsoft_entity_performance_report - Removed
microsoft_location_search - Removed
microsoft_performance_report - Removed
microsoft_report_query - Removed
microsoft_search_terms_report - Removed
pause_campaign - Removed
performance_report - Removed
portfolio_report - Removed
preview_meta_ad - Removed
publish_gtm_container - Removed
remove_extension_assets - Removed
remove_microsoft_ad_extensions - Removed
remove_microsoft_negative_keywords - Removed
remove_negative_keyword - Removed
remove_site - Removed
rollback_gtm_version - Removed
rsa_asset_performance - Removed
scaffold_site - Removed
search_meta_interests - Removed
search_terms_report - Added
search_tools - Removed
select_google_resource - Removed
send_meta_conversion_event - Removed
send_tiktok_conversion_event - Removed
seo_ai_overview - Removed
seo_anchors - Removed
seo_audit - Removed
seo_backlink_list - Removed
seo_backlinks - Removed
seo_best_pages_by_links - Removed
seo_brand_monitor - Removed
seo_broken_backlinks - Removed
seo_bulk_spam_score - Removed
seo_competitor_gap - Removed
seo_content_brief - Removed
seo_content_lint - Removed
seo_full_analysis - Removed
seo_geo_citations - Removed
seo_geo_tracker - Removed
seo_history - Removed
seo_keyword_research - Removed
seo_keyword_trends - Removed
seo_link_intersect - Removed
seo_local_listings - Removed
seo_paid_keywords - Removed
seo_rank_history - Removed
seo_rank_tracker - Removed
seo_rank_untrack - Removed
seo_ranked_keywords - Removed
seo_referring_networks - Removed
seo_reviews - Removed
seo_serp_analysis - Removed
seo_site_crawl - Removed
seo_site_technologies - Removed
seo_technical_audit - Removed
set_ad_group_targeting - Removed
set_ad_schedule - Removed
set_call_reporting - Removed
set_campaign_budget - Removed
set_campaign_targeting - Removed
set_conversion_settings - Removed
set_microsoft_bid_strategy - Removed
share_tiktok_audience - Removed
site_command_status - Removed
site_csp_reports - Removed
site_db_backup - Removed
site_db_restore - Removed
site_design_guide - Removed
site_edit_file - Removed
site_fetch - Removed
site_form_submissions - Removed
site_headers - Removed
site_info - Removed
site_list_files - Removed
site_preview - Removed
site_read_file - Removed
site_read_url - Removed
site_rebuild - Removed
site_redirects - Removed
site_restore - Removed
site_seo_guide - Removed
site_tag_gateway - Removed
site_versions - Removed
site_write_file - Removed
smart_negative_keywords - Removed
tiktok_advertiser_qualification - Removed
tiktok_campaign_report - Removed
tiktok_change_history - Removed
tiktok_recommendations - Removed
tiktok_region_search - Removed
tiktok_report_query - Removed
tiktok_targeting_search - Removed
unblock_ip_addresses - Removed
update_ad_group - Removed
update_ad_group_status - Removed
update_ad_status - Removed
update_campaign - Removed
update_campaign_status - Removed
update_chatgpt_ads_ad - Removed
update_chatgpt_ads_ad_group - Removed
update_chatgpt_ads_campaign - Removed
update_conversion_action - Removed
update_conversion_goal - Removed
update_custom_conversion_goal - Removed
update_gtm_entity - Removed
update_linkedin_campaign - Removed
update_linkedin_campaign_group - Removed
update_linkedin_campaign_targeting - Removed
update_linkedin_creative_status - Removed
update_meta_ad - Removed
update_meta_ad_creative - Removed
update_meta_adset - Removed
update_meta_campaign - Removed
update_meta_custom_conversion - Removed
update_meta_instagram_post_ad - Removed
update_microsoft_ad_group - Removed
update_microsoft_ad_group_status - Removed
update_microsoft_ad_status - Removed
update_microsoft_campaign_budget - Removed
update_microsoft_campaign_status - Removed
update_microsoft_keyword - Removed
update_microsoft_responsive_search_ad - Removed
update_pmax_asset_group - Removed
update_pmax_assets - Removed
update_rsa - Removed
update_sitelink - Removed
update_tiktok_ad - Removed
update_tiktok_ad_status - Removed
update_tiktok_adgroup - Removed
update_tiktok_adgroup_budget - Removed
update_tiktok_adgroup_status - Removed
update_tiktok_campaign - Removed
update_tiktok_campaign_budget - Removed
update_tiktok_campaign_status - Removed
upload_conversion_adjustments - Removed
upload_image - Removed
upload_image_asset - Removed
upload_meta_image - Removed
upload_meta_video - Removed
upload_microsoft_offline_conversions - Removed
upload_offline_conversions - Removed
upload_tiktok_image - Removed
upload_tiktok_video - Removed
wordpress_bulk_replace - Removed
wordpress_contact_forms - Removed
wordpress_create_post - Removed
wordpress_edit_menu - Removed
wordpress_edit_page_design - Removed
wordpress_get_post - Removed
wordpress_install_plugin - Removed
wordpress_languages - Removed
wordpress_link_translations - Removed
wordpress_list_plugins - Removed
wordpress_list_posts - Removed
wordpress_manage_plugin - Removed
wordpress_media - Removed
wordpress_menus - Removed
wordpress_option - Removed
wordpress_page_design - Removed
wordpress_performance - Removed
wordpress_purge_cache - Removed
wordpress_search_content - Removed
wordpress_seo - Removed
wordpress_set_performance - Removed
wordpress_set_seo - Removed
wordpress_set_tracking - Removed
wordpress_site_info - Removed
wordpress_slider - Removed
wordpress_terms - Removed
wordpress_test_contact_form - Removed
wordpress_theme_file - Removed
wordpress_tracking - Removed
wordpress_update_connector - Removed
wordpress_update_post - Removed
wordpress_upload_media - Removed
wordpress_users - Removed
wordpress_woo_create_product - Removed
wordpress_woo_orders - Removed
wordpress_woo_products - Removed
youtube_channels - Removed
youtube_overview - Removed
youtube_top_videos - Removed
youtube_traffic_sources
466 tool updates
- Added
account_audit - Added
add_keywords - Added
add_location_assets - Added
add_microsoft_ad_extensions - Added
add_microsoft_ad_schedule - Added
add_microsoft_demographic_target - Added
add_microsoft_device_target - Added
add_microsoft_keywords - Added
add_microsoft_location_target - Added
add_microsoft_negative_keywords - Added
add_negative_keyword - Added
add_pmax_images - Added
add_site - Added
apply_recommendation - Added
attach_linkedin_conversion - Added
block_ip_addresses - Added
budget_pacing_alerts - Removed
call_tool - Removed
call_write_tool - Added
chatgpt_ads_ad_preview - Added
chatgpt_ads_conversion_setup - Added
chatgpt_ads_details - Added
chatgpt_ads_geo_lookup - Added
chatgpt_ads_insights - Added
chatgpt_ads_spend_limits - Added
chatgpt_ads_status - Added
client_report - Added
client_report_link - Added
competitor_ads - Added
configure_site_smtp - Added
connect_business_profile - Added
connect_chatgpt_ads - Added
connect_ga4 - Added
connect_google_ads - Added
connect_linkedin_ads - Added
connect_meta_ads - Added
connect_microsoft_ads - Added
connect_search_console - Added
connect_tag_manager - Added
connect_tiktok_ads - Added
connect_youtube - Added
conversion_tracking_health - Added
copy_meta_entity - Added
core_web_vitals - Added
create_ad_group - Added
create_app_campaign - Added
create_chatgpt_ads_ad - Added
create_chatgpt_ads_ad_group - Added
create_chatgpt_ads_campaign - Added
create_chatgpt_ads_event_setting - Added
create_customer_match_audience - Added
create_demand_gen_ad - Added
create_demand_gen_campaign - Added
create_google_ads_account - Added
create_gtm_container - Added
create_gtm_tag - Added
create_gtm_trigger - Added
create_gtm_variable - Added
create_gtm_workspace - Added
create_lead_form - Added
create_linkedin_campaign - Added
create_linkedin_campaign_group - Added
create_linkedin_post_ad - Added
create_linkedin_text_ad - Added
create_lookalike_audience - Added
create_meta_ab_test - Added
create_meta_adset - Added
create_meta_campaign - Added
create_meta_carousel_ad - Added
create_meta_custom_conversion - Added
create_meta_dynamic_ad - Added
create_meta_engagement_audience - Added
create_meta_instagram_post_ad - Added
create_meta_lead_form - Added
create_meta_link_ad - Added
create_meta_lookalike_audience - Added
create_meta_post_ad - Added
create_meta_video_ad - Added
create_meta_website_audience - Added
create_microsoft_ad_group - Added
create_microsoft_campaign - Added
create_microsoft_conversion_goal - Added
create_microsoft_remarketing_list - Added
create_microsoft_responsive_search_ad - Added
create_microsoft_uet_tag - Added
create_pmax_campaign - Added
create_responsive_search_ad - Added
create_search_campaign - Added
create_tiktok_ad - Added
create_tiktok_adgroup - Added
create_tiktok_auto_message - Added
create_tiktok_campaign - Added
create_tiktok_customer_file_audience - Added
create_tiktok_lookalike_audience - Added
create_tiktok_pixel - Added
create_trial_site - Added
create_website_audience - Added
delete_gtm_container - Added
delete_gtm_entity - Added
delete_linkedin_campaign - Added
delete_linkedin_campaign_group - Added
delete_linkedin_creative - Added
delete_meta_ad - Added
delete_meta_adset - Added
delete_meta_audience - Added
delete_meta_campaign - Added
delete_microsoft_audience - Added
delete_microsoft_campaign - Added
deploy_site_zip - Added
detach_linkedin_conversion - Added
diagnose_chatgpt_ads_delivery - Added
dismiss_recommendations - Added
download_linkedin_leads - Added
download_meta_leads - Added
download_tiktok_leads - Added
enable_gtm_builtin_variables - Added
extension_asset_performance - Added
find_instagram_media_id - Added
fraud_scan - Added
fraud_setup - Added
ga4_create_conversion - Added
ga4_create_custom_dimension - Added
ga4_link_google_ads - Added
ga4_list_ads_links - Added
ga4_list_conversions - Added
ga4_list_data_streams - Added
ga4_list_properties - Added
ga4_overview - Added
ga4_realtime - Added
ga4_report - Added
gbp_complete_verification - Added
gbp_create_location - Added
gbp_create_post - Added
gbp_insights - Added
gbp_list_locations - Added
gbp_list_posts - Added
gbp_location_details - Added
gbp_manage_services - Added
gbp_reply_review - Added
gbp_reviews - Added
gbp_search_categories - Added
gbp_search_keywords - Added
gbp_social_links - Added
gbp_start_verification - Added
gbp_update_location - Added
gbp_update_photo_category - Added
gbp_update_post - Added
gbp_upload_photo - Added
gbp_upload_video - Added
gbp_verification_options - Added
geo_target_search - Added
get_ad_details - Added
get_ad_schedule - Added
get_billing_status - Added
get_campaign_targeting - Added
get_change_history - Added
get_conversion_settings - Added
get_conversion_tags - Added
get_meta_ad_creative - Added
get_pmax_assets - Added
get_shared_negative_list - Added
get_tiktok_lead_form_fields - Added
gsc_delete_sitemap - Added
gsc_inspect_urls - Added
gsc_list_sites - Added
gsc_performance - Added
gsc_sitemaps - Added
gsc_submit_sitemap - Added
gsc_url_inspect - Added
gtm_workspace_status - Added
impression_share_analysis - Added
instagram_follower_growth - Added
instant_audit - Added
issue_status - Added
keyword_historical_metrics - Added
keyword_opportunities - Added
keyword_planner - Added
keyword_quality_report - Added
keyword_report - Added
linkedin_ad_copy - Added
linkedin_audience_forecast - Added
linkedin_bid_recommendations - Added
linkedin_campaign_analytics - Added
linkedin_targeting_search - Added
list_ad_extensions - Added
list_ad_policy_issues - Added
list_assets - Added
list_audiences - Added
list_business_profile_photos - Added
list_conversion_actions - Added
list_conversion_goals - Added
list_custom_conversion_goals - Added
list_extension_assets - Added
list_google_ads_experiments - Added
list_gtm_accounts - Added
list_gtm_containers - Added
list_gtm_permissions - Added
list_gtm_tags - Added
list_gtm_triggers - Added
list_gtm_variables - Added
list_gtm_versions - Added
list_gtm_workspaces - Added
list_ip_exclusions - Added
list_lead_form_submissions - Added
list_linkedin_ad_accounts - Added
list_linkedin_audiences - Added
list_linkedin_campaign_groups - Added
list_linkedin_campaigns - Added
list_linkedin_conversions - Added
list_linkedin_creatives - Added
list_linkedin_lead_forms - Added
list_meta_ad_accounts - Added
list_meta_ads - Added
list_meta_adsets - Added
list_meta_audiences - Added
list_meta_campaigns - Added
list_meta_catalogs - Added
list_meta_custom_conversions - Added
list_meta_instagram_accounts - Added
list_meta_instagram_posts - Added
list_meta_lead_forms - Added
list_meta_page_posts - Added
list_meta_pages - Added
list_meta_pixels - Added
list_meta_product_sets - Added
list_meta_saved_audiences - Added
list_microsoft_accounts - Added
list_microsoft_ad_extensions - Added
list_microsoft_ad_groups - Added
list_microsoft_ads - Added
list_microsoft_audiences - Added
list_microsoft_campaigns - Added
list_microsoft_conversion_goals - Added
list_microsoft_keywords - Added
list_microsoft_negative_keywords - Added
list_microsoft_uet_tags - Added
list_negative_keywords - Added
list_recommendations - Added
list_shared_negative_lists - Added
list_sites - Added
list_tiktok_ad_accounts - Added
list_tiktok_adgroups - Added
list_tiktok_ads - Added
list_tiktok_asset_groups - Added
list_tiktok_audiences - Added
list_tiktok_auto_messages - Added
list_tiktok_bc_advertisers - Added
list_tiktok_bc_pixels - Added
list_tiktok_business_centers - Added
list_tiktok_campaigns - Added
list_tiktok_creative_portfolios - Added
list_tiktok_gmv_max_stores - Added
list_tiktok_identities - Added
list_tiktok_lead_forms - Added
list_tiktok_pixels - Added
list_tiktok_posts - Added
list_tiktok_smart_plus - Added
list_tiktok_videos - Added
list_wordpress_sites - Added
manage_audience_targeting - Added
manage_bidding_strategies - Added
manage_business_logo - Added
manage_business_name - Added
manage_campaign_proximity - Added
manage_campaign_settings - Added
manage_chatgpt_ads_accounts - Added
manage_chatgpt_ads_spend_limit - Added
manage_conversion_actions - Added
manage_device_targeting - Added
manage_extension_assets - Added
manage_gtm_permissions - Added
manage_keywords - Added
manage_portfolio_bidding_strategy - Added
manage_recommendation_auto_apply - Added
manage_shared_negative_list - Added
manage_tiktok_search_negative_keywords - Added
marketing_insights - Added
marketing_overview - Added
meta_campaign_insights - Added
meta_change_history - Added
meta_delivery_estimate - Added
meta_insights_query - Added
meta_reach_estimate - Added
microsoft_entity_performance_report - Added
microsoft_location_search - Added
microsoft_performance_report - Added
microsoft_report_query - Added
microsoft_search_terms_report - Added
pause_campaign - Added
performance_report - Added
portfolio_report - Added
preview_meta_ad - Added
publish_gtm_container - Added
remove_extension_assets - Added
remove_microsoft_ad_extensions - Added
remove_microsoft_negative_keywords - Added
remove_negative_keyword - Added
remove_site - Added
rollback_gtm_version - Added
rsa_asset_performance - Added
scaffold_site - Added
search_meta_interests - Added
search_terms_report - Removed
search_tools - Added
select_google_resource - Added
send_meta_conversion_event - Added
send_tiktok_conversion_event - Added
seo_ai_overview - Added
seo_anchors - Added
seo_audit - Added
seo_backlink_list - Added
seo_backlinks - Added
seo_best_pages_by_links - Added
seo_brand_monitor - Added
seo_broken_backlinks - Added
seo_bulk_spam_score - Added
seo_competitor_gap - Added
seo_content_brief - Added
seo_content_lint - Added
seo_full_analysis - Added
seo_geo_citations - Added
seo_geo_tracker - Added
seo_history - Added
seo_keyword_research - Added
seo_keyword_trends - Added
seo_link_intersect - Added
seo_local_listings - Added
seo_paid_keywords - Added
seo_rank_history - Added
seo_rank_tracker - Added
seo_rank_untrack - Added
seo_ranked_keywords - Added
seo_referring_networks - Added
seo_reviews - Added
seo_serp_analysis - Added
seo_site_crawl - Added
seo_site_technologies - Added
seo_technical_audit - Added
set_ad_group_targeting - Added
set_ad_schedule - Added
set_call_reporting - Added
set_campaign_budget - Added
set_campaign_targeting - Added
set_conversion_settings - Added
set_microsoft_bid_strategy - Added
share_tiktok_audience - Added
site_command_status - Added
site_csp_reports - Added
site_db_backup - Added
site_db_restore - Added
site_design_guide - Added
site_edit_file - Added
site_fetch - Added
site_form_submissions - Added
site_headers - Added
site_info - Added
site_list_files - Added
site_preview - Added
site_read_file - Added
site_read_url - Added
site_rebuild - Added
site_redirects - Added
site_restore - Added
site_seo_guide - Added
site_tag_gateway - Added
site_versions - Added
site_write_file - Added
smart_negative_keywords - Added
tiktok_advertiser_qualification - Added
tiktok_campaign_report - Added
tiktok_change_history - Added
tiktok_recommendations - Added
tiktok_region_search - Added
tiktok_report_query - Added
tiktok_targeting_search - Added
unblock_ip_addresses - Added
update_ad_group - Added
update_ad_group_status - Added
update_ad_status - Added
update_campaign - Added
update_campaign_status - Added
update_chatgpt_ads_ad - Added
update_chatgpt_ads_ad_group - Added
update_chatgpt_ads_campaign - Added
update_conversion_action - Added
update_conversion_goal - Added
update_custom_conversion_goal - Added
update_gtm_entity - Added
update_linkedin_campaign - Added
update_linkedin_campaign_group - Added
update_linkedin_campaign_targeting - Added
update_linkedin_creative_status - Added
update_meta_ad - Added
update_meta_ad_creative - Added
update_meta_adset - Added
update_meta_campaign - Added
update_meta_custom_conversion - Added
update_meta_instagram_post_ad - Added
update_microsoft_ad_group - Added
update_microsoft_ad_group_status - Added
update_microsoft_ad_status - Added
update_microsoft_campaign_budget - Added
update_microsoft_campaign_status - Added
update_microsoft_keyword - Added
update_microsoft_responsive_search_ad - Added
update_pmax_asset_group - Added
update_pmax_assets - Added
update_rsa - Added
update_sitelink - Added
update_tiktok_ad - Added
update_tiktok_ad_status - Added
update_tiktok_adgroup - Added
update_tiktok_adgroup_budget - Added
update_tiktok_adgroup_status - Added
update_tiktok_campaign - Added
update_tiktok_campaign_budget - Added
update_tiktok_campaign_status - Added
upload_conversion_adjustments - Added
upload_image - Added
upload_image_asset - Added
upload_meta_image - Added
upload_meta_video - Added
upload_microsoft_offline_conversions - Added
upload_offline_conversions - Added
upload_tiktok_image - Added
upload_tiktok_video - Added
wordpress_bulk_replace - Added
wordpress_contact_forms - Added
wordpress_create_post - Added
wordpress_edit_menu - Added
wordpress_edit_page_design - Added
wordpress_get_post - Added
wordpress_install_plugin - Added
wordpress_languages - Added
wordpress_link_translations - Added
wordpress_list_plugins - Added
wordpress_list_posts - Added
wordpress_manage_plugin - Added
wordpress_media - Added
wordpress_menus - Added
wordpress_option - Added
wordpress_page_design - Added
wordpress_performance - Added
wordpress_purge_cache - Added
wordpress_search_content - Added
wordpress_seo - Added
wordpress_set_performance - Added
wordpress_set_seo - Added
wordpress_set_tracking - Added
wordpress_site_info - Added
wordpress_slider - Added
wordpress_terms - Added
wordpress_test_contact_form - Added
wordpress_theme_file - Added
wordpress_tracking - Added
wordpress_update_connector - Added
wordpress_update_post - Added
wordpress_upload_media - Added
wordpress_users - Added
wordpress_woo_create_product - Added
wordpress_woo_orders - Added
wordpress_woo_products - Added
youtube_channels - Added
youtube_overview - Added
youtube_top_videos - Added
youtube_traffic_sources
465 tool updates
- Removed
account_audit - Removed
add_keywords - Removed
add_location_assets - Removed
add_microsoft_ad_extensions - Removed
add_microsoft_ad_schedule - Removed
add_microsoft_demographic_target - Removed
add_microsoft_device_target - Removed
add_microsoft_keywords - Removed
add_microsoft_location_target - Removed
add_microsoft_negative_keywords - Removed
add_negative_keyword - Removed
add_pmax_images - Removed
add_site - Removed
apply_recommendation - Removed
attach_linkedin_conversion - Removed
block_ip_addresses - Removed
budget_pacing_alerts - Added
call_tool - Added
call_write_tool - Removed
chatgpt_ads_ad_preview - Removed
chatgpt_ads_conversion_setup - Removed
chatgpt_ads_details - Removed
chatgpt_ads_geo_lookup - Removed
chatgpt_ads_insights - Removed
chatgpt_ads_spend_limits - Removed
chatgpt_ads_status - Removed
client_report - Removed
client_report_link - Removed
competitor_ads - Removed
configure_site_smtp - Removed
connect_business_profile - Removed
connect_chatgpt_ads - Removed
connect_ga4 - Removed
connect_google_ads - Removed
connect_linkedin_ads - Removed
connect_meta_ads - Removed
connect_microsoft_ads - Removed
connect_search_console - Removed
connect_tag_manager - Removed
connect_tiktok_ads - Removed
connect_youtube - Removed
conversion_tracking_health - Removed
copy_meta_entity - Removed
core_web_vitals - Removed
create_ad_group - Removed
create_app_campaign - Removed
create_chatgpt_ads_ad - Removed
create_chatgpt_ads_ad_group - Removed
create_chatgpt_ads_campaign - Removed
create_chatgpt_ads_event_setting - Removed
create_customer_match_audience - Removed
create_demand_gen_ad - Removed
create_demand_gen_campaign - Removed
create_google_ads_account - Removed
create_gtm_container - Removed
create_gtm_tag - Removed
create_gtm_trigger - Removed
create_gtm_variable - Removed
create_gtm_workspace - Removed
create_lead_form - Removed
create_linkedin_campaign - Removed
create_linkedin_campaign_group - Removed
create_linkedin_post_ad - Removed
create_linkedin_text_ad - Removed
create_lookalike_audience - Removed
create_meta_ab_test - Removed
create_meta_adset - Removed
create_meta_campaign - Removed
create_meta_carousel_ad - Removed
create_meta_custom_conversion - Removed
create_meta_dynamic_ad - Removed
create_meta_engagement_audience - Removed
create_meta_instagram_post_ad - Removed
create_meta_lead_form - Removed
create_meta_link_ad - Removed
create_meta_lookalike_audience - Removed
create_meta_post_ad - Removed
create_meta_video_ad - Removed
create_meta_website_audience - Removed
create_microsoft_ad_group - Removed
create_microsoft_campaign - Removed
create_microsoft_conversion_goal - Removed
create_microsoft_remarketing_list - Removed
create_microsoft_responsive_search_ad - Removed
create_microsoft_uet_tag - Removed
create_pmax_campaign - Removed
create_responsive_search_ad - Removed
create_search_campaign - Removed
create_tiktok_ad - Removed
create_tiktok_adgroup - Removed
create_tiktok_auto_message - Removed
create_tiktok_campaign - Removed
create_tiktok_customer_file_audience - Removed
create_tiktok_lookalike_audience - Removed
create_tiktok_pixel - Removed
create_trial_site - Removed
create_website_audience - Removed
delete_gtm_container - Removed
delete_gtm_entity - Removed
delete_linkedin_campaign - Removed
delete_linkedin_campaign_group - Removed
delete_linkedin_creative - Removed
delete_meta_ad - Removed
delete_meta_adset - Removed
delete_meta_audience - Removed
delete_meta_campaign - Removed
delete_microsoft_audience - Removed
delete_microsoft_campaign - Removed
deploy_site_zip - Removed
detach_linkedin_conversion - Removed
diagnose_chatgpt_ads_delivery - Removed
dismiss_recommendations - Removed
download_linkedin_leads - Removed
download_meta_leads - Removed
download_tiktok_leads - Removed
enable_gtm_builtin_variables - Removed
extension_asset_performance - Removed
find_instagram_media_id - Removed
fraud_scan - Removed
fraud_setup - Removed
ga4_create_conversion - Removed
ga4_create_custom_dimension - Removed
ga4_link_google_ads - Removed
ga4_list_ads_links - Removed
ga4_list_conversions - Removed
ga4_list_data_streams - Removed
ga4_list_properties - Removed
ga4_overview - Removed
ga4_realtime - Removed
ga4_report - Removed
gbp_complete_verification - Removed
gbp_create_location - Removed
gbp_create_post - Removed
gbp_insights - Removed
gbp_list_locations - Removed
gbp_list_posts - Removed
gbp_location_details - Removed
gbp_manage_services - Removed
gbp_reply_review - Removed
gbp_reviews - Removed
gbp_search_categories - Removed
gbp_search_keywords - Removed
gbp_social_links - Removed
gbp_start_verification - Removed
gbp_update_location - Removed
gbp_update_photo_category - Removed
gbp_update_post - Removed
gbp_upload_photo - Removed
gbp_upload_video - Removed
gbp_verification_options - Removed
geo_target_search - Removed
get_ad_details - Removed
get_ad_schedule - Removed
get_billing_status - Removed
get_campaign_targeting - Removed
get_change_history - Removed
get_conversion_settings - Removed
get_conversion_tags - Removed
get_meta_ad_creative - Removed
get_pmax_assets - Removed
get_shared_negative_list - Removed
get_tiktok_lead_form_fields - Removed
gsc_delete_sitemap - Removed
gsc_inspect_urls - Removed
gsc_list_sites - Removed
gsc_performance - Removed
gsc_sitemaps - Removed
gsc_submit_sitemap - Removed
gsc_url_inspect - Removed
gtm_workspace_status - Removed
impression_share_analysis - Removed
instagram_follower_growth - Removed
instant_audit - Removed
issue_status - Removed
keyword_historical_metrics - Removed
keyword_opportunities - Removed
keyword_planner - Removed
keyword_quality_report - Removed
keyword_report - Removed
linkedin_ad_copy - Removed
linkedin_audience_forecast - Removed
linkedin_bid_recommendations - Removed
linkedin_campaign_analytics - Removed
linkedin_targeting_search - Removed
list_ad_extensions - Removed
list_ad_policy_issues - Removed
list_assets - Removed
list_audiences - Removed
list_business_profile_photos - Removed
list_conversion_actions - Removed
list_conversion_goals - Removed
list_custom_conversion_goals - Removed
list_extension_assets - Removed
list_google_ads_experiments - Removed
list_gtm_accounts - Removed
list_gtm_containers - Removed
list_gtm_permissions - Removed
list_gtm_tags - Removed
list_gtm_triggers - Removed
list_gtm_variables - Removed
list_gtm_versions - Removed
list_gtm_workspaces - Removed
list_ip_exclusions - Removed
list_lead_form_submissions - Removed
list_linkedin_ad_accounts - Removed
list_linkedin_audiences - Removed
list_linkedin_campaign_groups - Removed
list_linkedin_campaigns - Removed
list_linkedin_conversions - Removed
list_linkedin_creatives - Removed
list_linkedin_lead_forms - Removed
list_meta_ad_accounts - Removed
list_meta_ads - Removed
list_meta_adsets - Removed
list_meta_audiences - Removed
list_meta_campaigns - Removed
list_meta_catalogs - Removed
list_meta_custom_conversions - Removed
list_meta_instagram_accounts - Removed
list_meta_instagram_posts - Removed
list_meta_lead_forms - Removed
list_meta_page_posts - Removed
list_meta_pages - Removed
list_meta_pixels - Removed
list_meta_product_sets - Removed
list_meta_saved_audiences - Removed
list_microsoft_accounts - Removed
list_microsoft_ad_extensions - Removed
list_microsoft_ad_groups - Removed
list_microsoft_ads - Removed
list_microsoft_audiences - Removed
list_microsoft_campaigns - Removed
list_microsoft_conversion_goals - Removed
list_microsoft_keywords - Removed
list_microsoft_negative_keywords - Removed
list_microsoft_uet_tags - Removed
list_negative_keywords - Removed
list_recommendations - Removed
list_shared_negative_lists - Removed
list_sites - Removed
list_tiktok_ad_accounts - Removed
list_tiktok_adgroups - Removed
list_tiktok_ads - Removed
list_tiktok_asset_groups - Removed
list_tiktok_audiences - Removed
list_tiktok_auto_messages - Removed
list_tiktok_bc_advertisers - Removed
list_tiktok_bc_pixels - Removed
list_tiktok_business_centers - Removed
list_tiktok_campaigns - Removed
list_tiktok_creative_portfolios - Removed
list_tiktok_gmv_max_stores - Removed
list_tiktok_identities - Removed
list_tiktok_lead_forms - Removed
list_tiktok_pixels - Removed
list_tiktok_posts - Removed
list_tiktok_smart_plus - Removed
list_tiktok_videos - Removed
list_wordpress_sites - Removed
manage_audience_targeting - Removed
manage_bidding_strategies - Removed
manage_business_logo - Removed
manage_business_name - Removed
manage_campaign_proximity - Removed
manage_campaign_settings - Removed
manage_chatgpt_ads_accounts - Removed
manage_chatgpt_ads_spend_limit - Removed
manage_conversion_actions - Removed
manage_device_targeting - Removed
manage_extension_assets - Removed
manage_gtm_permissions - Removed
manage_keywords - Removed
manage_portfolio_bidding_strategy - Removed
manage_shared_negative_list - Removed
manage_tiktok_search_negative_keywords - Removed
marketing_insights - Removed
marketing_overview - Removed
meta_campaign_insights - Removed
meta_change_history - Removed
meta_delivery_estimate - Removed
meta_insights_query - Removed
meta_reach_estimate - Removed
microsoft_entity_performance_report - Removed
microsoft_location_search - Removed
microsoft_performance_report - Removed
microsoft_report_query - Removed
microsoft_search_terms_report - Removed
pause_campaign - Removed
performance_report - Removed
portfolio_report - Removed
preview_meta_ad - Removed
publish_gtm_container - Removed
remove_extension_assets - Removed
remove_microsoft_ad_extensions - Removed
remove_microsoft_negative_keywords - Removed
remove_negative_keyword - Removed
remove_site - Removed
rollback_gtm_version - Removed
rsa_asset_performance - Removed
scaffold_site - Removed
search_meta_interests - Removed
search_terms_report - Added
search_tools - Removed
select_google_resource - Removed
send_meta_conversion_event - Removed
send_tiktok_conversion_event - Removed
seo_ai_overview - Removed
seo_anchors - Removed
seo_audit - Removed
seo_backlink_list - Removed
seo_backlinks - Removed
seo_best_pages_by_links - Removed
seo_brand_monitor - Removed
seo_broken_backlinks - Removed
seo_bulk_spam_score - Removed
seo_competitor_gap - Removed
seo_content_brief - Removed
seo_content_lint - Removed
seo_full_analysis - Removed
seo_geo_citations - Removed
seo_geo_tracker - Removed
seo_history - Removed
seo_keyword_research - Removed
seo_keyword_trends - Removed
seo_link_intersect - Removed
seo_local_listings - Removed
seo_paid_keywords - Removed
seo_rank_history - Removed
seo_rank_tracker - Removed
seo_rank_untrack - Removed
seo_ranked_keywords - Removed
seo_referring_networks - Removed
seo_reviews - Removed
seo_serp_analysis - Removed
seo_site_crawl - Removed
seo_site_technologies - Removed
seo_technical_audit - Removed
set_ad_group_targeting - Removed
set_ad_schedule - Removed
set_call_reporting - Removed
set_campaign_budget - Removed
set_campaign_targeting - Removed
set_conversion_settings - Removed
set_microsoft_bid_strategy - Removed
share_tiktok_audience - Removed
site_command_status - Removed
site_csp_reports - Removed
site_db_backup - Removed
site_db_restore - Removed
site_design_guide - Removed
site_edit_file - Removed
site_fetch - Removed
site_form_submissions - Removed
site_headers - Removed
site_info - Removed
site_list_files - Removed
site_preview - Removed
site_read_file - Removed
site_read_url - Removed
site_rebuild - Removed
site_redirects - Removed
site_restore - Removed
site_seo_guide - Removed
site_tag_gateway - Removed
site_versions - Removed
site_write_file - Removed
smart_negative_keywords - Removed
tiktok_advertiser_qualification - Removed
tiktok_campaign_report - Removed
tiktok_change_history - Removed
tiktok_recommendations - Removed
tiktok_region_search - Removed
tiktok_report_query - Removed
tiktok_targeting_search - Removed
unblock_ip_addresses - Removed
update_ad_group - Removed
update_ad_group_status - Removed
update_ad_status - Removed
update_campaign - Removed
update_campaign_status - Removed
update_chatgpt_ads_ad - Removed
update_chatgpt_ads_ad_group - Removed
update_chatgpt_ads_campaign - Removed
update_conversion_action - Removed
update_conversion_goal - Removed
update_custom_conversion_goal - Removed
update_gtm_entity - Removed
update_linkedin_campaign - Removed
update_linkedin_campaign_group - Removed
update_linkedin_campaign_targeting - Removed
update_linkedin_creative_status - Removed
update_meta_ad - Removed
update_meta_ad_creative - Removed
update_meta_adset - Removed
update_meta_campaign - Removed
update_meta_custom_conversion - Removed
update_meta_instagram_post_ad - Removed
update_microsoft_ad_group - Removed
update_microsoft_ad_group_status - Removed
update_microsoft_ad_status - Removed
update_microsoft_campaign_budget - Removed
update_microsoft_campaign_status - Removed
update_microsoft_keyword - Removed
update_microsoft_responsive_search_ad - Removed
update_pmax_asset_group - Removed
update_pmax_assets - Removed
update_rsa - Removed
update_sitelink - Removed
update_tiktok_ad - Removed
update_tiktok_ad_status - Removed
update_tiktok_adgroup - Removed
update_tiktok_adgroup_budget - Removed
update_tiktok_adgroup_status - Removed
update_tiktok_campaign - Removed
update_tiktok_campaign_budget - Removed
update_tiktok_campaign_status - Removed
upload_conversion_adjustments - Removed
upload_image - Removed
upload_image_asset - Removed
upload_meta_image - Removed
upload_meta_video - Removed
upload_microsoft_offline_conversions - Removed
upload_offline_conversions - Removed
upload_tiktok_image - Removed
upload_tiktok_video - Removed
wordpress_bulk_replace - Removed
wordpress_contact_forms - Removed
wordpress_create_post - Removed
wordpress_edit_menu - Removed
wordpress_edit_page_design - Removed
wordpress_get_post - Removed
wordpress_install_plugin - Removed
wordpress_languages - Removed
wordpress_link_translations - Removed
wordpress_list_plugins - Removed
wordpress_list_posts - Removed
wordpress_manage_plugin - Removed
wordpress_media - Removed
wordpress_menus - Removed
wordpress_option - Removed
wordpress_page_design - Removed
wordpress_performance - Removed
wordpress_purge_cache - Removed
wordpress_search_content - Removed
wordpress_seo - Removed
wordpress_set_performance - Removed
wordpress_set_seo - Removed
wordpress_set_tracking - Removed
wordpress_site_info - Removed
wordpress_slider - Removed
wordpress_terms - Removed
wordpress_test_contact_form - Removed
wordpress_theme_file - Removed
wordpress_tracking - Removed
wordpress_update_connector - Removed
wordpress_update_post - Removed
wordpress_upload_media - Removed
wordpress_users - Removed
wordpress_woo_create_product - Removed
wordpress_woo_orders - Removed
wordpress_woo_products - Removed
youtube_channels - Removed
youtube_overview - Removed
youtube_top_videos - Removed
youtube_traffic_sources
465 tool updates
- Added
account_audit - Added
add_keywords - Added
add_location_assets - Added
add_microsoft_ad_extensions - Added
add_microsoft_ad_schedule - Added
add_microsoft_demographic_target - Added
add_microsoft_device_target - Added
add_microsoft_keywords - Added
add_microsoft_location_target - Added
add_microsoft_negative_keywords - Added
add_negative_keyword - Added
add_pmax_images - Added
add_site - Added
apply_recommendation - Added
attach_linkedin_conversion - Added
block_ip_addresses - Added
budget_pacing_alerts - Removed
call_tool - Removed
call_write_tool - Added
chatgpt_ads_ad_preview - Added
chatgpt_ads_conversion_setup - Added
chatgpt_ads_details - Added
chatgpt_ads_geo_lookup - Added
chatgpt_ads_insights - Added
chatgpt_ads_spend_limits - Added
chatgpt_ads_status - Added
client_report - Added
client_report_link - Added
competitor_ads - Added
configure_site_smtp - Added
connect_business_profile - Added
connect_chatgpt_ads - Added
connect_ga4 - Added
connect_google_ads - Added
connect_linkedin_ads - Added
connect_meta_ads - Added
connect_microsoft_ads - Added
connect_search_console - Added
connect_tag_manager - Added
connect_tiktok_ads - Added
connect_youtube - Added
conversion_tracking_health - Added
copy_meta_entity - Added
core_web_vitals - Added
create_ad_group - Added
create_app_campaign - Added
create_chatgpt_ads_ad - Added
create_chatgpt_ads_ad_group - Added
create_chatgpt_ads_campaign - Added
create_chatgpt_ads_event_setting - Added
create_customer_match_audience - Added
create_demand_gen_ad - Added
create_demand_gen_campaign - Added
create_google_ads_account - Added
create_gtm_container - Added
create_gtm_tag - Added
create_gtm_trigger - Added
create_gtm_variable - Added
create_gtm_workspace - Added
create_lead_form - Added
create_linkedin_campaign - Added
create_linkedin_campaign_group - Added
create_linkedin_post_ad - Added
create_linkedin_text_ad - Added
create_lookalike_audience - Added
create_meta_ab_test - Added
create_meta_adset - Added
create_meta_campaign - Added
create_meta_carousel_ad - Added
create_meta_custom_conversion - Added
create_meta_dynamic_ad - Added
create_meta_engagement_audience - Added
create_meta_instagram_post_ad - Added
create_meta_lead_form - Added
create_meta_link_ad - Added
create_meta_lookalike_audience - Added
create_meta_post_ad - Added
create_meta_video_ad - Added
create_meta_website_audience - Added
create_microsoft_ad_group - Added
create_microsoft_campaign - Added
create_microsoft_conversion_goal - Added
create_microsoft_remarketing_list - Added
create_microsoft_responsive_search_ad - Added
create_microsoft_uet_tag - Added
create_pmax_campaign - Added
create_responsive_search_ad - Added
create_search_campaign - Added
create_tiktok_ad - Added
create_tiktok_adgroup - Added
create_tiktok_auto_message - Added
create_tiktok_campaign - Added
create_tiktok_customer_file_audience - Added
create_tiktok_lookalike_audience - Added
create_tiktok_pixel - Added
create_trial_site - Added
create_website_audience - Added
delete_gtm_container - Added
delete_gtm_entity - Added
delete_linkedin_campaign - Added
delete_linkedin_campaign_group - Added
delete_linkedin_creative - Added
delete_meta_ad - Added
delete_meta_adset - Added
delete_meta_audience - Added
delete_meta_campaign - Added
delete_microsoft_audience - Added
delete_microsoft_campaign - Added
deploy_site_zip - Added
detach_linkedin_conversion - Added
diagnose_chatgpt_ads_delivery - Added
dismiss_recommendations - Added
download_linkedin_leads - Added
download_meta_leads - Added
download_tiktok_leads - Added
enable_gtm_builtin_variables - Added
extension_asset_performance - Added
find_instagram_media_id - Added
fraud_scan - Added
fraud_setup - Added
ga4_create_conversion - Added
ga4_create_custom_dimension - Added
ga4_link_google_ads - Added
ga4_list_ads_links - Added
ga4_list_conversions - Added
ga4_list_data_streams - Added
ga4_list_properties - Added
ga4_overview - Added
ga4_realtime - Added
ga4_report - Added
gbp_complete_verification - Added
gbp_create_location - Added
gbp_create_post - Added
gbp_insights - Added
gbp_list_locations - Added
gbp_list_posts - Added
gbp_location_details - Added
gbp_manage_services - Added
gbp_reply_review - Added
gbp_reviews - Added
gbp_search_categories - Added
gbp_search_keywords - Added
gbp_social_links - Added
gbp_start_verification - Added
gbp_update_location - Added
gbp_update_photo_category - Added
gbp_update_post - Added
gbp_upload_photo - Added
gbp_upload_video - Added
gbp_verification_options - Added
geo_target_search - Added
get_ad_details - Added
get_ad_schedule - Added
get_billing_status - Added
get_campaign_targeting - Added
get_change_history - Added
get_conversion_settings - Added
get_conversion_tags - Added
get_meta_ad_creative - Added
get_pmax_assets - Added
get_shared_negative_list - Added
get_tiktok_lead_form_fields - Added
gsc_delete_sitemap - Added
gsc_inspect_urls - Added
gsc_list_sites - Added
gsc_performance - Added
gsc_sitemaps - Added
gsc_submit_sitemap - Added
gsc_url_inspect - Added
gtm_workspace_status - Added
impression_share_analysis - Added
instagram_follower_growth - Added
instant_audit - Added
issue_status - Added
keyword_historical_metrics - Added
keyword_opportunities - Added
keyword_planner - Added
keyword_quality_report - Added
keyword_report - Added
linkedin_ad_copy - Added
linkedin_audience_forecast - Added
linkedin_bid_recommendations - Added
linkedin_campaign_analytics - Added
linkedin_targeting_search - Added
list_ad_extensions - Added
list_ad_policy_issues - Added
list_assets - Added
list_audiences - Added
list_business_profile_photos - Added
list_conversion_actions - Added
list_conversion_goals - Added
list_custom_conversion_goals - Added
list_extension_assets - Added
list_google_ads_experiments - Added
list_gtm_accounts - Added
list_gtm_containers - Added
list_gtm_permissions - Added
list_gtm_tags - Added
list_gtm_triggers - Added
list_gtm_variables - Added
list_gtm_versions - Added
list_gtm_workspaces - Added
list_ip_exclusions - Added
list_lead_form_submissions - Added
list_linkedin_ad_accounts - Added
list_linkedin_audiences - Added
list_linkedin_campaign_groups - Added
list_linkedin_campaigns - Added
list_linkedin_conversions - Added
list_linkedin_creatives - Added
list_linkedin_lead_forms - Added
list_meta_ad_accounts - Added
list_meta_ads - Added
list_meta_adsets - Added
list_meta_audiences - Added
list_meta_campaigns - Added
list_meta_catalogs - Added
list_meta_custom_conversions - Added
list_meta_instagram_accounts - Added
list_meta_instagram_posts - Added
list_meta_lead_forms - Added
list_meta_page_posts - Added
list_meta_pages - Added
list_meta_pixels - Added
list_meta_product_sets - Added
list_meta_saved_audiences - Added
list_microsoft_accounts - Added
list_microsoft_ad_extensions - Added
list_microsoft_ad_groups - Added
list_microsoft_ads - Added
list_microsoft_audiences - Added
list_microsoft_campaigns - Added
list_microsoft_conversion_goals - Added
list_microsoft_keywords - Added
list_microsoft_negative_keywords - Added
list_microsoft_uet_tags - Added
list_negative_keywords - Added
list_recommendations - Added
list_shared_negative_lists - Added
list_sites - Added
list_tiktok_ad_accounts - Added
list_tiktok_adgroups - Added
list_tiktok_ads - Added
list_tiktok_asset_groups - Added
list_tiktok_audiences - Added
list_tiktok_auto_messages - Added
list_tiktok_bc_advertisers - Added
list_tiktok_bc_pixels - Added
list_tiktok_business_centers - Added
list_tiktok_campaigns - Added
list_tiktok_creative_portfolios - Added
list_tiktok_gmv_max_stores - Added
list_tiktok_identities - Added
list_tiktok_lead_forms - Added
list_tiktok_pixels - Added
list_tiktok_posts - Added
list_tiktok_smart_plus - Added
list_tiktok_videos - Added
list_wordpress_sites - Added
manage_audience_targeting - Added
manage_bidding_strategies - Added
manage_business_logo - Added
manage_business_name - Added
manage_campaign_proximity - Added
manage_campaign_settings - Added
manage_chatgpt_ads_accounts - Added
manage_chatgpt_ads_spend_limit - Added
manage_conversion_actions - Added
manage_device_targeting - Added
manage_extension_assets - Added
manage_gtm_permissions - Added
manage_keywords - Added
manage_portfolio_bidding_strategy - Added
manage_shared_negative_list - Added
manage_tiktok_search_negative_keywords - Added
marketing_insights - Added
marketing_overview - Added
meta_campaign_insights - Added
meta_change_history - Added
meta_delivery_estimate - Added
meta_insights_query - Added
meta_reach_estimate - Added
microsoft_entity_performance_report - Added
microsoft_location_search - Added
microsoft_performance_report - Added
microsoft_report_query - Added
microsoft_search_terms_report - Added
pause_campaign - Added
performance_report - Added
portfolio_report - Added
preview_meta_ad - Added
publish_gtm_container - Added
remove_extension_assets - Added
remove_microsoft_ad_extensions - Added
remove_microsoft_negative_keywords - Added
remove_negative_keyword - Added
remove_site - Added
rollback_gtm_version - Added
rsa_asset_performance - Added
scaffold_site - Added
search_meta_interests - Added
search_terms_report - Removed
search_tools - Added
select_google_resource - Added
send_meta_conversion_event - Added
send_tiktok_conversion_event - Added
seo_ai_overview - Added
seo_anchors - Added
seo_audit - Added
seo_backlink_list - Added
seo_backlinks - Added
seo_best_pages_by_links - Added
seo_brand_monitor - Added
seo_broken_backlinks - Added
seo_bulk_spam_score - Added
seo_competitor_gap - Added
seo_content_brief - Added
seo_content_lint - Added
seo_full_analysis - Added
seo_geo_citations - Added
seo_geo_tracker - Added
seo_history - Added
seo_keyword_research - Added
seo_keyword_trends - Added
seo_link_intersect - Added
seo_local_listings - Added
seo_paid_keywords - Added
seo_rank_history - Added
seo_rank_tracker - Added
seo_rank_untrack - Added
seo_ranked_keywords - Added
seo_referring_networks - Added
seo_reviews - Added
seo_serp_analysis - Added
seo_site_crawl - Added
seo_site_technologies - Added
seo_technical_audit - Added
set_ad_group_targeting - Added
set_ad_schedule - Added
set_call_reporting - Added
set_campaign_budget - Added
set_campaign_targeting - Added
set_conversion_settings - Added
set_microsoft_bid_strategy - Added
share_tiktok_audience - Added
site_command_status - Added
site_csp_reports - Added
site_db_backup - Added
site_db_restore - Added
site_design_guide - Added
site_edit_file - Added
site_fetch - Added
site_form_submissions - Added
site_headers - Added
site_info - Added
site_list_files - Added
site_preview - Added
site_read_file - Added
site_read_url - Added
site_rebuild - Added
site_redirects - Added
site_restore - Added
site_seo_guide - Added
site_tag_gateway - Added
site_versions - Added
site_write_file - Added
smart_negative_keywords - Added
tiktok_advertiser_qualification - Added
tiktok_campaign_report - Added
tiktok_change_history - Added
tiktok_recommendations - Added
tiktok_region_search - Added
tiktok_report_query - Added
tiktok_targeting_search - Added
unblock_ip_addresses - Added
update_ad_group - Added
update_ad_group_status - Added
update_ad_status - Added
update_campaign - Added
update_campaign_status - Added
update_chatgpt_ads_ad - Added
update_chatgpt_ads_ad_group - Added
update_chatgpt_ads_campaign - Added
update_conversion_action - Added
update_conversion_goal - Added
update_custom_conversion_goal - Added
update_gtm_entity - Added
update_linkedin_campaign - Added
update_linkedin_campaign_group - Added
update_linkedin_campaign_targeting - Added
update_linkedin_creative_status - Added
update_meta_ad - Added
update_meta_ad_creative - Added
update_meta_adset - Added
update_meta_campaign - Added
update_meta_custom_conversion - Added
update_meta_instagram_post_ad - Added
update_microsoft_ad_group - Added
update_microsoft_ad_group_status - Added
update_microsoft_ad_status - Added
update_microsoft_campaign_budget - Added
update_microsoft_campaign_status - Added
update_microsoft_keyword - Added
update_microsoft_responsive_search_ad - Added
update_pmax_asset_group - Added
update_pmax_assets - Added
update_rsa - Added
update_sitelink - Added
update_tiktok_ad - Added
update_tiktok_ad_status - Added
update_tiktok_adgroup - Added
update_tiktok_adgroup_budget - Added
update_tiktok_adgroup_status - Added
update_tiktok_campaign - Added
update_tiktok_campaign_budget - Added
update_tiktok_campaign_status - Added
upload_conversion_adjustments - Added
upload_image - Added
upload_image_asset - Added
upload_meta_image - Added
upload_meta_video - Added
upload_microsoft_offline_conversions - Added
upload_offline_conversions - Added
upload_tiktok_image - Added
upload_tiktok_video - Added
wordpress_bulk_replace - Added
wordpress_contact_forms - Added
wordpress_create_post - Added
wordpress_edit_menu - Added
wordpress_edit_page_design - Added
wordpress_get_post - Added
wordpress_install_plugin - Added
wordpress_languages - Added
wordpress_link_translations - Added
wordpress_list_plugins - Added
wordpress_list_posts - Added
wordpress_manage_plugin - Added
wordpress_media - Added
wordpress_menus - Added
wordpress_option - Added
wordpress_page_design - Added
wordpress_performance - Added
wordpress_purge_cache - Added
wordpress_search_content - Added
wordpress_seo - Added
wordpress_set_performance - Added
wordpress_set_seo - Added
wordpress_set_tracking - Added
wordpress_site_info - Added
wordpress_slider - Added
wordpress_terms - Added
wordpress_test_contact_form - Added
wordpress_theme_file - Added
wordpress_tracking - Added
wordpress_update_connector - Added
wordpress_update_post - Added
wordpress_upload_media - Added
wordpress_users - Added
wordpress_woo_create_product - Added
wordpress_woo_orders - Added
wordpress_woo_products - Added
youtube_channels - Added
youtube_overview - Added
youtube_top_videos - Added
youtube_traffic_sources
465 tool updates
- Removed
account_audit - Removed
add_keywords - Removed
add_location_assets - Removed
add_microsoft_ad_extensions - Removed
add_microsoft_ad_schedule - Removed
add_microsoft_demographic_target - Removed
add_microsoft_device_target - Removed
add_microsoft_keywords - Removed
add_microsoft_location_target - Removed
add_microsoft_negative_keywords - Removed
add_negative_keyword - Removed
add_pmax_images - Removed
add_site - Removed
apply_recommendation - Removed
attach_linkedin_conversion - Removed
block_ip_addresses - Removed
budget_pacing_alerts - Added
call_tool - Added
call_write_tool - Removed
chatgpt_ads_ad_preview - Removed
chatgpt_ads_conversion_setup - Removed
chatgpt_ads_details - Removed
chatgpt_ads_geo_lookup - Removed
chatgpt_ads_insights - Removed
chatgpt_ads_spend_limits - Removed
chatgpt_ads_status - Removed
client_report - Removed
client_report_link - Removed
competitor_ads - Removed
configure_site_smtp - Removed
connect_business_profile - Removed
connect_chatgpt_ads - Removed
connect_ga4 - Removed
connect_google_ads - Removed
connect_linkedin_ads - Removed
connect_meta_ads - Removed
connect_microsoft_ads - Removed
connect_search_console - Removed
connect_tag_manager - Removed
connect_tiktok_ads - Removed
connect_youtube - Removed
conversion_tracking_health - Removed
copy_meta_entity - Removed
core_web_vitals - Removed
create_ad_group - Removed
create_app_campaign - Removed
create_chatgpt_ads_ad - Removed
create_chatgpt_ads_ad_group - Removed
create_chatgpt_ads_campaign - Removed
create_chatgpt_ads_event_setting - Removed
create_customer_match_audience - Removed
create_demand_gen_ad - Removed
create_demand_gen_campaign - Removed
create_google_ads_account - Removed
create_gtm_container - Removed
create_gtm_tag - Removed
create_gtm_trigger - Removed
create_gtm_variable - Removed
create_gtm_workspace - Removed
create_lead_form - Removed
create_linkedin_campaign - Removed
create_linkedin_campaign_group - Removed
create_linkedin_post_ad - Removed
create_linkedin_text_ad - Removed
create_lookalike_audience - Removed
create_meta_ab_test - Removed
create_meta_adset - Removed
create_meta_campaign - Removed
create_meta_carousel_ad - Removed
create_meta_custom_conversion - Removed
create_meta_dynamic_ad - Removed
create_meta_engagement_audience - Removed
create_meta_instagram_post_ad - Removed
create_meta_lead_form - Removed
create_meta_link_ad - Removed
create_meta_lookalike_audience - Removed
create_meta_post_ad - Removed
create_meta_video_ad - Removed
create_meta_website_audience - Removed
create_microsoft_ad_group - Removed
create_microsoft_campaign - Removed
create_microsoft_conversion_goal - Removed
create_microsoft_remarketing_list - Removed
create_microsoft_responsive_search_ad - Removed
create_microsoft_uet_tag - Removed
create_pmax_campaign - Removed
create_responsive_search_ad - Removed
create_search_campaign - Removed
create_tiktok_ad - Removed
create_tiktok_adgroup - Removed
create_tiktok_auto_message - Removed
create_tiktok_campaign - Removed
create_tiktok_customer_file_audience - Removed
create_tiktok_lookalike_audience - Removed
create_tiktok_pixel - Removed
create_trial_site - Removed
create_website_audience - Removed
delete_gtm_container - Removed
delete_gtm_entity - Removed
delete_linkedin_campaign - Removed
delete_linkedin_campaign_group - Removed
delete_linkedin_creative - Removed
delete_meta_ad - Removed
delete_meta_adset - Removed
delete_meta_audience - Removed
delete_meta_campaign - Removed
delete_microsoft_audience - Removed
delete_microsoft_campaign - Removed
deploy_site_zip - Removed
detach_linkedin_conversion - Removed
diagnose_chatgpt_ads_delivery - Removed
dismiss_recommendations - Removed
download_linkedin_leads - Removed
download_meta_leads - Removed
download_tiktok_leads - Removed
enable_gtm_builtin_variables - Removed
extension_asset_performance - Removed
find_instagram_media_id - Removed
fraud_scan - Removed
fraud_setup - Removed
ga4_create_conversion - Removed
ga4_create_custom_dimension - Removed
ga4_link_google_ads - Removed
ga4_list_ads_links - Removed
ga4_list_conversions - Removed
ga4_list_data_streams - Removed
ga4_list_properties - Removed
ga4_overview - Removed
ga4_realtime - Removed
ga4_report - Removed
gbp_complete_verification - Removed
gbp_create_location - Removed
gbp_create_post - Removed
gbp_insights - Removed
gbp_list_locations - Removed
gbp_list_posts - Removed
gbp_location_details - Removed
gbp_manage_services - Removed
gbp_reply_review - Removed
gbp_reviews - Removed
gbp_search_categories - Removed
gbp_search_keywords - Removed
gbp_social_links - Removed
gbp_start_verification - Removed
gbp_update_location - Removed
gbp_update_photo_category - Removed
gbp_update_post - Removed
gbp_upload_photo - Removed
gbp_upload_video - Removed
gbp_verification_options - Removed
geo_target_search - Removed
get_ad_details - Removed
get_ad_schedule - Removed
get_billing_status - Removed
get_campaign_targeting - Removed
get_change_history - Removed
get_conversion_settings - Removed
get_conversion_tags - Removed
get_meta_ad_creative - Removed
get_pmax_assets - Removed
get_shared_negative_list - Removed
get_tiktok_lead_form_fields - Removed
gsc_delete_sitemap - Removed
gsc_inspect_urls - Removed
gsc_list_sites - Removed
gsc_performance - Removed
gsc_sitemaps - Removed
gsc_submit_sitemap - Removed
gsc_url_inspect - Removed
gtm_workspace_status - Removed
impression_share_analysis - Removed
instagram_follower_growth - Removed
instant_audit - Removed
issue_status - Removed
keyword_historical_metrics - Removed
keyword_opportunities - Removed
keyword_planner - Removed
keyword_quality_report - Removed
keyword_report - Removed
linkedin_ad_copy - Removed
linkedin_audience_forecast - Removed
linkedin_bid_recommendations - Removed
linkedin_campaign_analytics - Removed
linkedin_targeting_search - Removed
list_ad_extensions - Removed
list_ad_policy_issues - Removed
list_assets - Removed
list_audiences - Removed
list_business_profile_photos - Removed
list_conversion_actions - Removed
list_conversion_goals - Removed
list_custom_conversion_goals - Removed
list_extension_assets - Removed
list_google_ads_experiments - Removed
list_gtm_accounts - Removed
list_gtm_containers - Removed
list_gtm_permissions - Removed
list_gtm_tags - Removed
list_gtm_triggers - Removed
list_gtm_variables - Removed
list_gtm_versions - Removed
list_gtm_workspaces - Removed
list_ip_exclusions - Removed
list_lead_form_submissions - Removed
list_linkedin_ad_accounts - Removed
list_linkedin_audiences - Removed
list_linkedin_campaign_groups - Removed
list_linkedin_campaigns - Removed
list_linkedin_conversions - Removed
list_linkedin_creatives - Removed
list_linkedin_lead_forms - Removed
list_meta_ad_accounts - Removed
list_meta_ads - Removed
list_meta_adsets - Removed
list_meta_audiences - Removed
list_meta_campaigns - Removed
list_meta_catalogs - Removed
list_meta_custom_conversions - Removed
list_meta_instagram_accounts - Removed
list_meta_instagram_posts - Removed
list_meta_lead_forms - Removed
list_meta_page_posts - Removed
list_meta_pages - Removed
list_meta_pixels - Removed
list_meta_product_sets - Removed
list_meta_saved_audiences - Removed
list_microsoft_accounts - Removed
list_microsoft_ad_extensions - Removed
list_microsoft_ad_groups - Removed
list_microsoft_ads - Removed
list_microsoft_audiences - Removed
list_microsoft_campaigns - Removed
list_microsoft_conversion_goals - Removed
list_microsoft_keywords - Removed
list_microsoft_negative_keywords - Removed
list_microsoft_uet_tags - Removed
list_negative_keywords - Removed
list_recommendations - Removed
list_shared_negative_lists - Removed
list_sites - Removed
list_tiktok_ad_accounts - Removed
list_tiktok_adgroups - Removed
list_tiktok_ads - Removed
list_tiktok_asset_groups - Removed
list_tiktok_audiences - Removed
list_tiktok_auto_messages - Removed
list_tiktok_bc_advertisers - Removed
list_tiktok_bc_pixels - Removed
list_tiktok_business_centers - Removed
list_tiktok_campaigns - Removed
list_tiktok_creative_portfolios - Removed
list_tiktok_gmv_max_stores - Removed
list_tiktok_identities - Removed
list_tiktok_lead_forms - Removed
list_tiktok_pixels - Removed
list_tiktok_posts - Removed
list_tiktok_smart_plus - Removed
list_tiktok_videos - Removed
list_wordpress_sites - Removed
manage_audience_targeting - Removed
manage_bidding_strategies - Removed
manage_business_logo - Removed
manage_business_name - Removed
manage_campaign_proximity - Removed
manage_campaign_settings - Removed
manage_chatgpt_ads_accounts - Removed
manage_chatgpt_ads_spend_limit - Removed
manage_conversion_actions - Removed
manage_device_targeting - Removed
manage_extension_assets - Removed
manage_gtm_permissions - Removed
manage_keywords - Removed
manage_portfolio_bidding_strategy - Removed
manage_shared_negative_list - Removed
manage_tiktok_search_negative_keywords - Removed
marketing_insights - Removed
marketing_overview - Removed
meta_campaign_insights - Removed
meta_change_history - Removed
meta_delivery_estimate - Removed
meta_insights_query - Removed
meta_reach_estimate - Removed
microsoft_entity_performance_report - Removed
microsoft_location_search - Removed
microsoft_performance_report - Removed
microsoft_report_query - Removed
microsoft_search_terms_report - Removed
pause_campaign - Removed
performance_report - Removed
portfolio_report - Removed
preview_meta_ad - Removed
publish_gtm_container - Removed
remove_extension_assets - Removed
remove_microsoft_ad_extensions - Removed
remove_microsoft_negative_keywords - Removed
remove_negative_keyword - Removed
remove_site - Removed
rollback_gtm_version - Removed
rsa_asset_performance - Removed
scaffold_site - Removed
search_meta_interests - Removed
search_terms_report - Added
search_tools - Removed
select_google_resource - Removed
send_meta_conversion_event - Removed
send_tiktok_conversion_event - Removed
seo_ai_overview - Removed
seo_anchors - Removed
seo_audit - Removed
seo_backlink_list - Removed
seo_backlinks - Removed
seo_best_pages_by_links - Removed
seo_brand_monitor - Removed
seo_broken_backlinks - Removed
seo_bulk_spam_score - Removed
seo_competitor_gap - Removed
seo_content_brief - Removed
seo_content_lint - Removed
seo_full_analysis - Removed
seo_geo_citations - Removed
seo_geo_tracker - Removed
seo_history - Removed
seo_keyword_research - Removed
seo_keyword_trends - Removed
seo_link_intersect - Removed
seo_local_listings - Removed
seo_paid_keywords - Removed
seo_rank_history - Removed
seo_rank_tracker - Removed
seo_rank_untrack - Removed
seo_ranked_keywords - Removed
seo_referring_networks - Removed
seo_reviews - Removed
seo_serp_analysis - Removed
seo_site_crawl - Removed
seo_site_technologies - Removed
seo_technical_audit - Removed
set_ad_group_targeting - Removed
set_ad_schedule - Removed
set_call_reporting - Removed
set_campaign_budget - Removed
set_campaign_targeting - Removed
set_conversion_settings - Removed
set_microsoft_bid_strategy - Removed
share_tiktok_audience - Removed
site_command_status - Removed
site_csp_reports - Removed
site_db_backup - Removed
site_db_restore - Removed
site_design_guide - Removed
site_edit_file - Removed
site_fetch - Removed
site_form_submissions - Removed
site_headers - Removed
site_info - Removed
site_list_files - Removed
site_preview - Removed
site_read_file - Removed
site_read_url - Removed
site_rebuild - Removed
site_redirects - Removed
site_restore - Removed
site_seo_guide - Removed
site_tag_gateway - Removed
site_versions - Removed
site_write_file - Removed
smart_negative_keywords - Removed
tiktok_advertiser_qualification - Removed
tiktok_campaign_report - Removed
tiktok_change_history - Removed
tiktok_recommendations - Removed
tiktok_region_search - Removed
tiktok_report_query - Removed
tiktok_targeting_search - Removed
unblock_ip_addresses - Removed
update_ad_group - Removed
update_ad_group_status - Removed
update_ad_status - Removed
update_campaign - Removed
update_campaign_status - Removed
update_chatgpt_ads_ad - Removed
update_chatgpt_ads_ad_group - Removed
update_chatgpt_ads_campaign - Removed
update_conversion_action - Removed
update_conversion_goal - Removed
update_custom_conversion_goal - Removed
update_gtm_entity - Removed
update_linkedin_campaign - Removed
update_linkedin_campaign_group - Removed
update_linkedin_campaign_targeting - Removed
update_linkedin_creative_status - Removed
update_meta_ad - Removed
update_meta_ad_creative - Removed
update_meta_adset - Removed
update_meta_campaign - Removed
update_meta_custom_conversion - Removed
update_meta_instagram_post_ad - Removed
update_microsoft_ad_group - Removed
update_microsoft_ad_group_status - Removed
update_microsoft_ad_status - Removed
update_microsoft_campaign_budget - Removed
update_microsoft_campaign_status - Removed
update_microsoft_keyword - Removed
update_microsoft_responsive_search_ad - Removed
update_pmax_asset_group - Removed
update_pmax_assets - Removed
update_rsa - Removed
update_sitelink - Removed
update_tiktok_ad - Removed
update_tiktok_ad_status - Removed
update_tiktok_adgroup - Removed
update_tiktok_adgroup_budget - Removed
update_tiktok_adgroup_status - Removed
update_tiktok_campaign - Removed
update_tiktok_campaign_budget - Removed
update_tiktok_campaign_status - Removed
upload_conversion_adjustments - Removed
upload_image - Removed
upload_image_asset - Removed
upload_meta_image - Removed
upload_meta_video - Removed
upload_microsoft_offline_conversions - Removed
upload_offline_conversions - Removed
upload_tiktok_image - Removed
upload_tiktok_video - Removed
wordpress_bulk_replace - Removed
wordpress_contact_forms - Removed
wordpress_create_post - Removed
wordpress_edit_menu - Removed
wordpress_edit_page_design - Removed
wordpress_get_post - Removed
wordpress_install_plugin - Removed
wordpress_languages - Removed
wordpress_link_translations - Removed
wordpress_list_plugins - Removed
wordpress_list_posts - Removed
wordpress_manage_plugin - Removed
wordpress_media - Removed
wordpress_menus - Removed
wordpress_option - Removed
wordpress_page_design - Removed
wordpress_performance - Removed
wordpress_purge_cache - Removed
wordpress_search_content - Removed
wordpress_seo - Removed
wordpress_set_performance - Removed
wordpress_set_seo - Removed
wordpress_set_tracking - Removed
wordpress_site_info - Removed
wordpress_slider - Removed
wordpress_terms - Removed
wordpress_test_contact_form - Removed
wordpress_theme_file - Removed
wordpress_tracking - Removed
wordpress_update_connector - Removed
wordpress_update_post - Removed
wordpress_upload_media - Removed
wordpress_users - Removed
wordpress_woo_create_product - Removed
wordpress_woo_orders - Removed
wordpress_woo_products - Removed
youtube_channels - Removed
youtube_overview - Removed
youtube_top_videos - Removed
youtube_traffic_sources
465 tool updates
- Added
account_audit - Added
add_keywords - Added
add_location_assets - Added
add_microsoft_ad_extensions - Added
add_microsoft_ad_schedule - Added
add_microsoft_demographic_target - Added
add_microsoft_device_target - Added
add_microsoft_keywords - Added
add_microsoft_location_target - Added
add_microsoft_negative_keywords - Added
add_negative_keyword - Added
add_pmax_images - Added
add_site - Added
apply_recommendation - Added
attach_linkedin_conversion - Added
block_ip_addresses - Added
budget_pacing_alerts - Removed
call_tool - Removed
call_write_tool - Added
chatgpt_ads_ad_preview - Added
chatgpt_ads_conversion_setup - Added
chatgpt_ads_details - Added
chatgpt_ads_geo_lookup - Added
chatgpt_ads_insights - Added
chatgpt_ads_spend_limits - Added
chatgpt_ads_status - Added
client_report - Added
client_report_link - Added
competitor_ads - Added
configure_site_smtp - Added
connect_business_profile - Added
connect_chatgpt_ads - Added
connect_ga4 - Added
connect_google_ads - Added
connect_linkedin_ads - Added
connect_meta_ads - Added
connect_microsoft_ads - Added
connect_search_console - Added
connect_tag_manager - Added
connect_tiktok_ads - Added
connect_youtube - Added
conversion_tracking_health - Added
copy_meta_entity - Added
core_web_vitals - Added
create_ad_group - Added
create_app_campaign - Added
create_chatgpt_ads_ad - Added
create_chatgpt_ads_ad_group - Added
create_chatgpt_ads_campaign - Added
create_chatgpt_ads_event_setting - Added
create_customer_match_audience - Added
create_demand_gen_ad - Added
create_demand_gen_campaign - Added
create_google_ads_account - Added
create_gtm_container - Added
create_gtm_tag - Added
create_gtm_trigger - Added
create_gtm_variable - Added
create_gtm_workspace - Added
create_lead_form - Added
create_linkedin_campaign - Added
create_linkedin_campaign_group - Added
create_linkedin_post_ad - Added
create_linkedin_text_ad - Added
create_lookalike_audience - Added
create_meta_ab_test - Added
create_meta_adset - Added
create_meta_campaign - Added
create_meta_carousel_ad - Added
create_meta_custom_conversion - Added
create_meta_dynamic_ad - Added
create_meta_engagement_audience - Added
create_meta_instagram_post_ad - Added
create_meta_lead_form - Added
create_meta_link_ad - Added
create_meta_lookalike_audience - Added
create_meta_post_ad - Added
create_meta_video_ad - Added
create_meta_website_audience - Added
create_microsoft_ad_group - Added
create_microsoft_campaign - Added
create_microsoft_conversion_goal - Added
create_microsoft_remarketing_list - Added
create_microsoft_responsive_search_ad - Added
create_microsoft_uet_tag - Added
create_pmax_campaign - Added
create_responsive_search_ad - Added
create_search_campaign - Added
create_tiktok_ad - Added
create_tiktok_adgroup - Added
create_tiktok_auto_message - Added
create_tiktok_campaign - Added
create_tiktok_customer_file_audience - Added
create_tiktok_lookalike_audience - Added
create_tiktok_pixel - Added
create_trial_site - Added
create_website_audience - Added
delete_gtm_container - Added
delete_gtm_entity - Added
delete_linkedin_campaign - Added
delete_linkedin_campaign_group - Added
delete_linkedin_creative - Added
delete_meta_ad - Added
delete_meta_adset - Added
delete_meta_audience - Added
delete_meta_campaign - Added
delete_microsoft_audience - Added
delete_microsoft_campaign - Added
deploy_site_zip - Added
detach_linkedin_conversion - Added
diagnose_chatgpt_ads_delivery - Added
dismiss_recommendations - Added
download_linkedin_leads - Added
download_meta_leads - Added
download_tiktok_leads - Added
enable_gtm_builtin_variables - Added
extension_asset_performance - Added
find_instagram_media_id - Added
fraud_scan - Added
fraud_setup - Added
ga4_create_conversion - Added
ga4_create_custom_dimension - Added
ga4_link_google_ads - Added
ga4_list_ads_links - Added
ga4_list_conversions - Added
ga4_list_data_streams - Added
ga4_list_properties - Added
ga4_overview - Added
ga4_realtime - Added
ga4_report - Added
gbp_complete_verification - Added
gbp_create_location - Added
gbp_create_post - Added
gbp_insights - Added
gbp_list_locations - Added
gbp_list_posts - Added
gbp_location_details - Added
gbp_manage_services - Added
gbp_reply_review - Added
gbp_reviews - Added
gbp_search_categories - Added
gbp_search_keywords - Added
gbp_social_links - Added
gbp_start_verification - Added
gbp_update_location - Added
gbp_update_photo_category - Added
gbp_update_post - Added
gbp_upload_photo - Added
gbp_upload_video - Added
gbp_verification_options - Added
geo_target_search - Added
get_ad_details - Added
get_ad_schedule - Added
get_billing_status - Added
get_campaign_targeting - Added
get_change_history - Added
get_conversion_settings - Added
get_conversion_tags - Added
get_meta_ad_creative - Added
get_pmax_assets - Added
get_shared_negative_list - Added
get_tiktok_lead_form_fields - Added
gsc_delete_sitemap - Added
gsc_inspect_urls - Added
gsc_list_sites - Added
gsc_performance - Added
gsc_sitemaps - Added
gsc_submit_sitemap - Added
gsc_url_inspect - Added
gtm_workspace_status - Added
impression_share_analysis - Added
instagram_follower_growth - Added
instant_audit - Added
issue_status - Added
keyword_historical_metrics - Added
keyword_opportunities - Added
keyword_planner - Added
keyword_quality_report - Added
keyword_report - Added
linkedin_ad_copy - Added
linkedin_audience_forecast - Added
linkedin_bid_recommendations - Added
linkedin_campaign_analytics - Added
linkedin_targeting_search - Added
list_ad_extensions - Added
list_ad_policy_issues - Added
list_assets - Added
list_audiences - Added
list_business_profile_photos - Added
list_conversion_actions - Added
list_conversion_goals - Added
list_custom_conversion_goals - Added
list_extension_assets - Added
list_google_ads_experiments - Added
list_gtm_accounts - Added
list_gtm_containers - Added
list_gtm_permissions - Added
list_gtm_tags - Added
list_gtm_triggers - Added
list_gtm_variables - Added
list_gtm_versions - Added
list_gtm_workspaces - Added
list_ip_exclusions - Added
list_lead_form_submissions - Added
list_linkedin_ad_accounts - Added
list_linkedin_audiences - Added
list_linkedin_campaign_groups - Added
list_linkedin_campaigns - Added
list_linkedin_conversions - Added
list_linkedin_creatives - Added
list_linkedin_lead_forms - Added
list_meta_ad_accounts - Added
list_meta_ads - Added
list_meta_adsets - Added
list_meta_audiences - Added
list_meta_campaigns - Added
list_meta_catalogs - Added
list_meta_custom_conversions - Added
list_meta_instagram_accounts - Added
list_meta_instagram_posts - Added
list_meta_lead_forms - Added
list_meta_page_posts - Added
list_meta_pages - Added
list_meta_pixels - Added
list_meta_product_sets - Added
list_meta_saved_audiences - Added
list_microsoft_accounts - Added
list_microsoft_ad_extensions - Added
list_microsoft_ad_groups - Added
list_microsoft_ads - Added
list_microsoft_audiences - Added
list_microsoft_campaigns - Added
list_microsoft_conversion_goals - Added
list_microsoft_keywords - Added
list_microsoft_negative_keywords - Added
list_microsoft_uet_tags - Added
list_negative_keywords - Added
list_recommendations - Added
list_shared_negative_lists - Added
list_sites - Added
list_tiktok_ad_accounts - Added
list_tiktok_adgroups - Added
list_tiktok_ads - Added
list_tiktok_asset_groups - Added
list_tiktok_audiences - Added
list_tiktok_auto_messages - Added
list_tiktok_bc_advertisers - Added
list_tiktok_bc_pixels - Added
list_tiktok_business_centers - Added
list_tiktok_campaigns - Added
list_tiktok_creative_portfolios - Added
list_tiktok_gmv_max_stores - Added
list_tiktok_identities - Added
list_tiktok_lead_forms - Added
list_tiktok_pixels - Added
list_tiktok_posts - Added
list_tiktok_smart_plus - Added
list_tiktok_videos - Added
list_wordpress_sites - Added
manage_audience_targeting - Added
manage_bidding_strategies - Added
manage_business_logo - Added
manage_business_name - Added
manage_campaign_proximity - Added
manage_campaign_settings - Added
manage_chatgpt_ads_accounts - Added
manage_chatgpt_ads_spend_limit - Added
manage_conversion_actions - Added
manage_device_targeting - Added
manage_extension_assets - Added
manage_gtm_permissions - Added
manage_keywords - Added
manage_portfolio_bidding_strategy - Added
manage_shared_negative_list - Added
manage_tiktok_search_negative_keywords - Added
marketing_insights - Added
marketing_overview - Added
meta_campaign_insights - Added
meta_change_history - Added
meta_delivery_estimate - Added
meta_insights_query - Added
meta_reach_estimate - Added
microsoft_entity_performance_report - Added
microsoft_location_search - Added
microsoft_performance_report - Added
microsoft_report_query - Added
microsoft_search_terms_report - Added
pause_campaign - Added
performance_report - Added
portfolio_report - Added
preview_meta_ad - Added
publish_gtm_container - Added
remove_extension_assets - Added
remove_microsoft_ad_extensions - Added
remove_microsoft_negative_keywords - Added
remove_negative_keyword - Added
remove_site - Added
rollback_gtm_version - Added
rsa_asset_performance - Added
scaffold_site - Added
search_meta_interests - Added
search_terms_report - Removed
search_tools - Added
select_google_resource - Added
send_meta_conversion_event - Added
send_tiktok_conversion_event - Added
seo_ai_overview - Added
seo_anchors - Added
seo_audit - Added
seo_backlink_list - Added
seo_backlinks - Added
seo_best_pages_by_links - Added
seo_brand_monitor - Added
seo_broken_backlinks - Added
seo_bulk_spam_score - Added
seo_competitor_gap - Added
seo_content_brief - Added
seo_content_lint - Added
seo_full_analysis - Added
seo_geo_citations - Added
seo_geo_tracker - Added
seo_history - Added
seo_keyword_research - Added
seo_keyword_trends - Added
seo_link_intersect - Added
seo_local_listings - Added
seo_paid_keywords - Added
seo_rank_history - Added
seo_rank_tracker - Added
seo_rank_untrack - Added
seo_ranked_keywords - Added
seo_referring_networks - Added
seo_reviews - Added
seo_serp_analysis - Added
seo_site_crawl - Added
seo_site_technologies - Added
seo_technical_audit - Added
set_ad_group_targeting - Added
set_ad_schedule - Added
set_call_reporting - Added
set_campaign_budget - Added
set_campaign_targeting - Added
set_conversion_settings - Added
set_microsoft_bid_strategy - Added
share_tiktok_audience - Added
site_command_status - Added
site_csp_reports - Added
site_db_backup - Added
site_db_restore - Added
site_design_guide - Added
site_edit_file - Added
site_fetch - Added
site_form_submissions - Added
site_headers - Added
site_info - Added
site_list_files - Added
site_preview - Added
site_read_file - Added
site_read_url - Added
site_rebuild - Added
site_redirects - Added
site_restore - Added
site_seo_guide - Added
site_tag_gateway - Added
site_versions - Added
site_write_file - Added
smart_negative_keywords - Added
tiktok_advertiser_qualification - Added
tiktok_campaign_report - Added
tiktok_change_history - Added
tiktok_recommendations - Added
tiktok_region_search - Added
tiktok_report_query - Added
tiktok_targeting_search - Added
unblock_ip_addresses - Added
update_ad_group - Added
update_ad_group_status - Added
update_ad_status - Added
update_campaign - Added
update_campaign_status - Added
update_chatgpt_ads_ad - Added
update_chatgpt_ads_ad_group - Added
update_chatgpt_ads_campaign - Added
update_conversion_action - Added
update_conversion_goal - Added
update_custom_conversion_goal - Added
update_gtm_entity - Added
update_linkedin_campaign - Added
update_linkedin_campaign_group - Added
update_linkedin_campaign_targeting - Added
update_linkedin_creative_status - Added
update_meta_ad - Added
update_meta_ad_creative - Added
update_meta_adset - Added
update_meta_campaign - Added
update_meta_custom_conversion - Added
update_meta_instagram_post_ad - Added
update_microsoft_ad_group - Added
update_microsoft_ad_group_status - Added
update_microsoft_ad_status - Added
update_microsoft_campaign_budget - Added
update_microsoft_campaign_status - Added
update_microsoft_keyword - Added
update_microsoft_responsive_search_ad - Added
update_pmax_asset_group - Added
update_pmax_assets - Added
update_rsa - Added
update_sitelink - Added
update_tiktok_ad - Added
update_tiktok_ad_status - Added
update_tiktok_adgroup - Added
update_tiktok_adgroup_budget - Added
update_tiktok_adgroup_status - Added
update_tiktok_campaign - Added
update_tiktok_campaign_budget - Added
update_tiktok_campaign_status - Added
upload_conversion_adjustments - Added
upload_image - Added
upload_image_asset - Added
upload_meta_image - Added
upload_meta_video - Added
upload_microsoft_offline_conversions - Added
upload_offline_conversions - Added
upload_tiktok_image - Added
upload_tiktok_video - Added
wordpress_bulk_replace - Added
wordpress_contact_forms - Added
wordpress_create_post - Added
wordpress_edit_menu - Added
wordpress_edit_page_design - Added
wordpress_get_post - Added
wordpress_install_plugin - Added
wordpress_languages - Added
wordpress_link_translations - Added
wordpress_list_plugins - Added
wordpress_list_posts - Added
wordpress_manage_plugin - Added
wordpress_media - Added
wordpress_menus - Added
wordpress_option - Added
wordpress_page_design - Added
wordpress_performance - Added
wordpress_purge_cache - Added
wordpress_search_content - Added
wordpress_seo - Added
wordpress_set_performance - Added
wordpress_set_seo - Added
wordpress_set_tracking - Added
wordpress_site_info - Added
wordpress_slider - Added
wordpress_terms - Added
wordpress_test_contact_form - Added
wordpress_theme_file - Added
wordpress_tracking - Added
wordpress_update_connector - Added
wordpress_update_post - Added
wordpress_upload_media - Added
wordpress_users - Added
wordpress_woo_create_product - Added
wordpress_woo_orders - Added
wordpress_woo_products - Added
youtube_channels - Added
youtube_overview - Added
youtube_top_videos - Added
youtube_traffic_sources
465 tool updates
- Removed
account_audit - Removed
add_keywords - Removed
add_location_assets - Removed
add_microsoft_ad_extensions - Removed
add_microsoft_ad_schedule - Removed
add_microsoft_demographic_target - Removed
add_microsoft_device_target - Removed
add_microsoft_keywords - Removed
add_microsoft_location_target - Removed
add_microsoft_negative_keywords - Removed
add_negative_keyword - Removed
add_pmax_images - Removed
add_site - Removed
apply_recommendation - Removed
attach_linkedin_conversion - Removed
block_ip_addresses - Removed
budget_pacing_alerts - Added
call_tool - Added
call_write_tool - Removed
chatgpt_ads_ad_preview - Removed
chatgpt_ads_conversion_setup - Removed
chatgpt_ads_details - Removed
chatgpt_ads_geo_lookup - Removed
chatgpt_ads_insights - Removed
chatgpt_ads_spend_limits - Removed
chatgpt_ads_status - Removed
client_report - Removed
client_report_link - Removed
competitor_ads - Removed
configure_site_smtp - Removed
connect_business_profile - Removed
connect_chatgpt_ads - Removed
connect_ga4 - Removed
connect_google_ads - Removed
connect_linkedin_ads - Removed
connect_meta_ads - Removed
connect_microsoft_ads - Removed
connect_search_console - Removed
connect_tag_manager - Removed
connect_tiktok_ads - Removed
connect_youtube - Removed
conversion_tracking_health - Removed
copy_meta_entity - Removed
core_web_vitals - Removed
create_ad_group - Removed
create_app_campaign - Removed
create_chatgpt_ads_ad - Removed
create_chatgpt_ads_ad_group - Removed
create_chatgpt_ads_campaign - Removed
create_chatgpt_ads_event_setting - Removed
create_customer_match_audience - Removed
create_demand_gen_ad - Removed
create_demand_gen_campaign - Removed
create_google_ads_account - Removed
create_gtm_container - Removed
create_gtm_tag - Removed
create_gtm_trigger - Removed
create_gtm_variable - Removed
create_gtm_workspace - Removed
create_lead_form - Removed
create_linkedin_campaign - Removed
create_linkedin_campaign_group - Removed
create_linkedin_post_ad - Removed
create_linkedin_text_ad - Removed
create_lookalike_audience - Removed
create_meta_ab_test - Removed
create_meta_adset - Removed
create_meta_campaign - Removed
create_meta_carousel_ad - Removed
create_meta_custom_conversion - Removed
create_meta_dynamic_ad - Removed
create_meta_engagement_audience - Removed
create_meta_instagram_post_ad - Removed
create_meta_lead_form - Removed
create_meta_link_ad - Removed
create_meta_lookalike_audience - Removed
create_meta_post_ad - Removed
create_meta_video_ad - Removed
create_meta_website_audience - Removed
create_microsoft_ad_group - Removed
create_microsoft_campaign - Removed
create_microsoft_conversion_goal - Removed
create_microsoft_remarketing_list - Removed
create_microsoft_responsive_search_ad - Removed
create_microsoft_uet_tag - Removed
create_pmax_campaign - Removed
create_responsive_search_ad - Removed
create_search_campaign - Removed
create_tiktok_ad - Removed
create_tiktok_adgroup - Removed
create_tiktok_auto_message - Removed
create_tiktok_campaign - Removed
create_tiktok_customer_file_audience - Removed
create_tiktok_lookalike_audience - Removed
create_tiktok_pixel - Removed
create_trial_site - Removed
create_website_audience - Removed
delete_gtm_container - Removed
delete_gtm_entity - Removed
delete_linkedin_campaign - Removed
delete_linkedin_campaign_group - Removed
delete_linkedin_creative - Removed
delete_meta_ad - Removed
delete_meta_adset - Removed
delete_meta_audience - Removed
delete_meta_campaign - Removed
delete_microsoft_audience - Removed
delete_microsoft_campaign - Removed
deploy_site_zip - Removed
detach_linkedin_conversion - Removed
diagnose_chatgpt_ads_delivery - Removed
dismiss_recommendations - Removed
download_linkedin_leads - Removed
download_meta_leads - Removed
download_tiktok_leads - Removed
enable_gtm_builtin_variables - Removed
extension_asset_performance - Removed
find_instagram_media_id - Removed
fraud_scan - Removed
fraud_setup - Removed
ga4_create_conversion - Removed
ga4_create_custom_dimension - Removed
ga4_link_google_ads - Removed
ga4_list_ads_links - Removed
ga4_list_conversions - Removed
ga4_list_data_streams - Removed
ga4_list_properties - Removed
ga4_overview - Removed
ga4_realtime - Removed
ga4_report - Removed
gbp_complete_verification - Removed
gbp_create_location - Removed
gbp_create_post - Removed
gbp_insights - Removed
gbp_list_locations - Removed
gbp_list_posts - Removed
gbp_location_details - Removed
gbp_manage_services - Removed
gbp_reply_review - Removed
gbp_reviews - Removed
gbp_search_categories - Removed
gbp_search_keywords - Removed
gbp_social_links - Removed
gbp_start_verification - Removed
gbp_update_location - Removed
gbp_update_photo_category - Removed
gbp_update_post - Removed
gbp_upload_photo - Removed
gbp_upload_video - Removed
gbp_verification_options - Removed
geo_target_search - Removed
get_ad_details - Removed
get_ad_schedule - Removed
get_billing_status - Removed
get_campaign_targeting - Removed
get_change_history - Removed
get_conversion_settings - Removed
get_conversion_tags - Removed
get_meta_ad_creative - Removed
get_pmax_assets - Removed
get_shared_negative_list - Removed
get_tiktok_lead_form_fields - Removed
gsc_delete_sitemap - Removed
gsc_inspect_urls - Removed
gsc_list_sites - Removed
gsc_performance - Removed
gsc_sitemaps - Removed
gsc_submit_sitemap - Removed
gsc_url_inspect - Removed
gtm_workspace_status - Removed
impression_share_analysis - Removed
instagram_follower_growth - Removed
instant_audit - Removed
issue_status - Removed
keyword_historical_metrics - Removed
keyword_opportunities - Removed
keyword_planner - Removed
keyword_quality_report - Removed
keyword_report - Removed
linkedin_ad_copy - Removed
linkedin_audience_forecast - Removed
linkedin_bid_recommendations - Removed
linkedin_campaign_analytics - Removed
linkedin_targeting_search - Removed
list_ad_extensions - Removed
list_ad_policy_issues - Removed
list_assets - Removed
list_audiences - Removed
list_business_profile_photos - Removed
list_conversion_actions - Removed
list_conversion_goals - Removed
list_custom_conversion_goals - Removed
list_extension_assets - Removed
list_google_ads_experiments - Removed
list_gtm_accounts - Removed
list_gtm_containers - Removed
list_gtm_permissions - Removed
list_gtm_tags - Removed
list_gtm_triggers - Removed
list_gtm_variables - Removed
list_gtm_versions - Removed
list_gtm_workspaces - Removed
list_ip_exclusions - Removed
list_lead_form_submissions - Removed
list_linkedin_ad_accounts - Removed
list_linkedin_audiences - Removed
list_linkedin_campaign_groups - Removed
list_linkedin_campaigns - Removed
list_linkedin_conversions - Removed
list_linkedin_creatives - Removed
list_linkedin_lead_forms - Removed
list_meta_ad_accounts - Removed
list_meta_ads - Removed
list_meta_adsets - Removed
list_meta_audiences - Removed
list_meta_campaigns - Removed
list_meta_catalogs - Removed
list_meta_custom_conversions - Removed
list_meta_instagram_accounts - Removed
list_meta_instagram_posts - Removed
list_meta_lead_forms - Removed
list_meta_page_posts - Removed
list_meta_pages - Removed
list_meta_pixels - Removed
list_meta_product_sets - Removed
list_meta_saved_audiences - Removed
list_microsoft_accounts - Removed
list_microsoft_ad_extensions - Removed
list_microsoft_ad_groups - Removed
list_microsoft_ads - Removed
list_microsoft_audiences - Removed
list_microsoft_campaigns - Removed
list_microsoft_conversion_goals - Removed
list_microsoft_keywords - Removed
list_microsoft_negative_keywords - Removed
list_microsoft_uet_tags - Removed
list_negative_keywords - Removed
list_recommendations - Removed
list_shared_negative_lists - Removed
list_sites - Removed
list_tiktok_ad_accounts - Removed
list_tiktok_adgroups - Removed
list_tiktok_ads - Removed
list_tiktok_asset_groups - Removed
list_tiktok_audiences - Removed
list_tiktok_auto_messages - Removed
list_tiktok_bc_advertisers - Removed
list_tiktok_bc_pixels - Removed
list_tiktok_business_centers - Removed
list_tiktok_campaigns - Removed
list_tiktok_creative_portfolios - Removed
list_tiktok_gmv_max_stores - Removed
list_tiktok_identities - Removed
list_tiktok_lead_forms - Removed
list_tiktok_pixels - Removed
list_tiktok_posts - Removed
list_tiktok_smart_plus - Removed
list_tiktok_videos - Removed
list_wordpress_sites - Removed
manage_audience_targeting - Removed
manage_bidding_strategies - Removed
manage_business_logo - Removed
manage_business_name - Removed
manage_campaign_proximity - Removed
manage_campaign_settings - Removed
manage_chatgpt_ads_accounts - Removed
manage_chatgpt_ads_spend_limit - Removed
manage_conversion_actions - Removed
manage_device_targeting - Removed
manage_extension_assets - Removed
manage_gtm_permissions - Removed
manage_keywords - Removed
manage_portfolio_bidding_strategy - Removed
manage_shared_negative_list - Removed
manage_tiktok_search_negative_keywords - Removed
marketing_insights - Removed
marketing_overview - Removed
meta_campaign_insights - Removed
meta_change_history - Removed
meta_delivery_estimate - Removed
meta_insights_query - Removed
meta_reach_estimate - Removed
microsoft_entity_performance_report - Removed
microsoft_location_search - Removed
microsoft_performance_report - Removed
microsoft_report_query - Removed
microsoft_search_terms_report - Removed
pause_campaign - Removed
performance_report - Removed
portfolio_report - Removed
preview_meta_ad - Removed
publish_gtm_container - Removed
remove_extension_assets - Removed
remove_microsoft_ad_extensions - Removed
remove_microsoft_negative_keywords - Removed
remove_negative_keyword - Removed
remove_site - Removed
rollback_gtm_version - Removed
rsa_asset_performance - Removed
scaffold_site - Removed
search_meta_interests - Removed
search_terms_report - Added
search_tools - Removed
select_google_resource - Removed
send_meta_conversion_event - Removed
send_tiktok_conversion_event - Removed
seo_ai_overview - Removed
seo_anchors - Removed
seo_audit - Removed
seo_backlink_list - Removed
seo_backlinks - Removed
seo_best_pages_by_links - Removed
seo_brand_monitor - Removed
seo_broken_backlinks - Removed
seo_bulk_spam_score - Removed
seo_competitor_gap - Removed
seo_content_brief - Removed
seo_content_lint - Removed
seo_full_analysis - Removed
seo_geo_citations - Removed
seo_geo_tracker - Removed
seo_history - Removed
seo_keyword_research - Removed
seo_keyword_trends - Removed
seo_link_intersect - Removed
seo_local_listings - Removed
seo_paid_keywords - Removed
seo_rank_history - Removed
seo_rank_tracker - Removed
seo_rank_untrack - Removed
seo_ranked_keywords - Removed
seo_referring_networks - Removed
seo_reviews - Removed
seo_serp_analysis - Removed
seo_site_crawl - Removed
seo_site_technologies - Removed
seo_technical_audit - Removed
set_ad_group_targeting - Removed
set_ad_schedule - Removed
set_call_reporting - Removed
set_campaign_budget - Removed
set_campaign_targeting - Removed
set_conversion_settings - Removed
set_microsoft_bid_strategy - Removed
share_tiktok_audience - Removed
site_command_status - Removed
site_csp_reports - Removed
site_db_backup - Removed
site_db_restore - Removed
site_design_guide - Removed
site_edit_file - Removed
site_fetch - Removed
site_form_submissions - Removed
site_headers - Removed
site_info - Removed
site_list_files - Removed
site_preview - Removed
site_read_file - Removed
site_read_url - Removed
site_rebuild - Removed
site_redirects - Removed
site_restore - Removed
site_seo_guide - Removed
site_tag_gateway - Removed
site_versions - Removed
site_write_file - Removed
smart_negative_keywords - Removed
tiktok_advertiser_qualification - Removed
tiktok_campaign_report - Removed
tiktok_change_history - Removed
tiktok_recommendations - Removed
tiktok_region_search - Removed
tiktok_report_query - Removed
tiktok_targeting_search - Removed
unblock_ip_addresses - Removed
update_ad_group - Removed
update_ad_group_status - Removed
update_ad_status - Removed
update_campaign - Removed
update_campaign_status - Removed
update_chatgpt_ads_ad - Removed
update_chatgpt_ads_ad_group - Removed
update_chatgpt_ads_campaign - Removed
update_conversion_action - Removed
update_conversion_goal - Removed
update_custom_conversion_goal - Removed
update_gtm_entity - Removed
update_linkedin_campaign - Removed
update_linkedin_campaign_group - Removed
update_linkedin_campaign_targeting - Removed
update_linkedin_creative_status - Removed
update_meta_ad - Removed
update_meta_ad_creative - Removed
update_meta_adset - Removed
update_meta_campaign - Removed
update_meta_custom_conversion - Removed
update_meta_instagram_post_ad - Removed
update_microsoft_ad_group - Removed
update_microsoft_ad_group_status - Removed
update_microsoft_ad_status - Removed
update_microsoft_campaign_budget - Removed
update_microsoft_campaign_status - Removed
update_microsoft_keyword - Removed
update_microsoft_responsive_search_ad - Removed
update_pmax_asset_group - Removed
update_pmax_assets - Removed
update_rsa - Removed
update_sitelink - Removed
update_tiktok_ad - Removed
update_tiktok_ad_status - Removed
update_tiktok_adgroup - Removed
update_tiktok_adgroup_budget - Removed
update_tiktok_adgroup_status - Removed
update_tiktok_campaign - Removed
update_tiktok_campaign_budget - Removed
update_tiktok_campaign_status - Removed
upload_conversion_adjustments - Removed
upload_image - Removed
upload_image_asset - Removed
upload_meta_image - Removed
upload_meta_video - Removed
upload_microsoft_offline_conversions - Removed
upload_offline_conversions - Removed
upload_tiktok_image - Removed
upload_tiktok_video - Removed
wordpress_bulk_replace - Removed
wordpress_contact_forms - Removed
wordpress_create_post - Removed
wordpress_edit_menu - Removed
wordpress_edit_page_design - Removed
wordpress_get_post - Removed
wordpress_install_plugin - Removed
wordpress_languages - Removed
wordpress_link_translations - Removed
wordpress_list_plugins - Removed
wordpress_list_posts - Removed
wordpress_manage_plugin - Removed
wordpress_media - Removed
wordpress_menus - Removed
wordpress_option - Removed
wordpress_page_design - Removed
wordpress_performance - Removed
wordpress_purge_cache - Removed
wordpress_search_content - Removed
wordpress_seo - Removed
wordpress_set_performance - Removed
wordpress_set_seo - Removed
wordpress_set_tracking - Removed
wordpress_site_info - Removed
wordpress_slider - Removed
wordpress_terms - Removed
wordpress_test_contact_form - Removed
wordpress_theme_file - Removed
wordpress_tracking - Removed
wordpress_update_connector - Removed
wordpress_update_post - Removed
wordpress_upload_media - Removed
wordpress_users - Removed
wordpress_woo_create_product - Removed
wordpress_woo_orders - Removed
wordpress_woo_products - Removed
youtube_channels - Removed
youtube_overview - Removed
youtube_top_videos - Removed
youtube_traffic_sources
465 tool updates
- Added
account_audit - Added
add_keywords - Added
add_location_assets - Added
add_microsoft_ad_extensions - Added
add_microsoft_ad_schedule - Added
add_microsoft_demographic_target - Added
add_microsoft_device_target - Added
add_microsoft_keywords - Added
add_microsoft_location_target - Added
add_microsoft_negative_keywords - Added
add_negative_keyword - Added
add_pmax_images - Added
add_site - Added
apply_recommendation - Added
attach_linkedin_conversion - Added
block_ip_addresses - Added
budget_pacing_alerts - Removed
call_tool - Removed
call_write_tool - Added
chatgpt_ads_ad_preview - Added
chatgpt_ads_conversion_setup - Added
chatgpt_ads_details - Added
chatgpt_ads_geo_lookup - Added
chatgpt_ads_insights - Added
chatgpt_ads_spend_limits - Added
chatgpt_ads_status - Added
client_report - Added
client_report_link - Added
competitor_ads - Added
configure_site_smtp - Added
connect_business_profile - Added
connect_chatgpt_ads - Added
connect_ga4 - Added
connect_google_ads - Added
connect_linkedin_ads - Added
connect_meta_ads - Added
connect_microsoft_ads - Added
connect_search_console - Added
connect_tag_manager - Added
connect_tiktok_ads - Added
connect_youtube - Added
conversion_tracking_health - Added
copy_meta_entity - Added
core_web_vitals - Added
create_ad_group - Added
create_app_campaign - Added
create_chatgpt_ads_ad - Added
create_chatgpt_ads_ad_group - Added
create_chatgpt_ads_campaign - Added
create_chatgpt_ads_event_setting - Added
create_customer_match_audience - Added
create_demand_gen_ad - Added
create_demand_gen_campaign - Added
create_google_ads_account - Added
create_gtm_container - Added
create_gtm_tag - Added
create_gtm_trigger - Added
create_gtm_variable - Added
create_gtm_workspace - Added
create_lead_form - Added
create_linkedin_campaign - Added
create_linkedin_campaign_group - Added
create_linkedin_post_ad - Added
create_linkedin_text_ad - Added
create_lookalike_audience - Added
create_meta_ab_test - Added
create_meta_adset - Added
create_meta_campaign - Added
create_meta_carousel_ad - Added
create_meta_custom_conversion - Added
create_meta_dynamic_ad - Added
create_meta_engagement_audience - Added
create_meta_instagram_post_ad - Added
create_meta_lead_form - Added
create_meta_link_ad - Added
create_meta_lookalike_audience - Added
create_meta_post_ad - Added
create_meta_video_ad - Added
create_meta_website_audience - Added
create_microsoft_ad_group - Added
create_microsoft_campaign - Added
create_microsoft_conversion_goal - Added
create_microsoft_remarketing_list - Added
create_microsoft_responsive_search_ad - Added
create_microsoft_uet_tag - Added
create_pmax_campaign - Added
create_responsive_search_ad - Added
create_search_campaign - Added
create_tiktok_ad - Added
create_tiktok_adgroup - Added
create_tiktok_auto_message - Added
create_tiktok_campaign - Added
create_tiktok_customer_file_audience - Added
create_tiktok_lookalike_audience - Added
create_tiktok_pixel - Added
create_trial_site - Added
create_website_audience - Added
delete_gtm_container - Added
delete_gtm_entity - Added
delete_linkedin_campaign - Added
delete_linkedin_campaign_group - Added
delete_linkedin_creative - Added
delete_meta_ad - Added
delete_meta_adset - Added
delete_meta_audience - Added
delete_meta_campaign - Added
delete_microsoft_audience - Added
delete_microsoft_campaign - Added
deploy_site_zip - Added
detach_linkedin_conversion - Added
diagnose_chatgpt_ads_delivery - Added
dismiss_recommendations - Added
download_linkedin_leads - Added
download_meta_leads - Added
download_tiktok_leads - Added
enable_gtm_builtin_variables - Added
extension_asset_performance - Added
find_instagram_media_id - Added
fraud_scan - Added
fraud_setup - Added
ga4_create_conversion - Added
ga4_create_custom_dimension - Added
ga4_link_google_ads - Added
ga4_list_ads_links - Added
ga4_list_conversions - Added
ga4_list_data_streams - Added
ga4_list_properties - Added
ga4_overview - Added
ga4_realtime - Added
ga4_report - Added
gbp_complete_verification - Added
gbp_create_location - Added
gbp_create_post - Added
gbp_insights - Added
gbp_list_locations - Added
gbp_list_posts - Added
gbp_location_details - Added
gbp_manage_services - Added
gbp_reply_review - Added
gbp_reviews - Added
gbp_search_categories - Added
gbp_search_keywords - Added
gbp_social_links - Added
gbp_start_verification - Added
gbp_update_location - Added
gbp_update_photo_category - Added
gbp_update_post - Added
gbp_upload_photo - Added
gbp_upload_video - Added
gbp_verification_options - Added
geo_target_search - Added
get_ad_details - Added
get_ad_schedule - Added
get_billing_status - Added
get_campaign_targeting - Added
get_change_history - Added
get_conversion_settings - Added
get_conversion_tags - Added
get_meta_ad_creative - Added
get_pmax_assets - Added
get_shared_negative_list - Added
get_tiktok_lead_form_fields - Added
gsc_delete_sitemap - Added
gsc_inspect_urls - Added
gsc_list_sites - Added
gsc_performance - Added
gsc_sitemaps - Added
gsc_submit_sitemap - Added
gsc_url_inspect - Added
gtm_workspace_status - Added
impression_share_analysis - Added
instagram_follower_growth - Added
instant_audit - Added
issue_status - Added
keyword_historical_metrics - Added
keyword_opportunities - Added
keyword_planner - Added
keyword_quality_report - Added
keyword_report - Added
linkedin_ad_copy - Added
linkedin_audience_forecast - Added
linkedin_bid_recommendations - Added
linkedin_campaign_analytics - Added
linkedin_targeting_search - Added
list_ad_extensions - Added
list_ad_policy_issues - Added
list_assets - Added
list_audiences - Added
list_business_profile_photos - Added
list_conversion_actions - Added
list_conversion_goals - Added
list_custom_conversion_goals - Added
list_extension_assets - Added
list_google_ads_experiments - Added
list_gtm_accounts - Added
list_gtm_containers - Added
list_gtm_permissions - Added
list_gtm_tags - Added
list_gtm_triggers - Added
list_gtm_variables - Added
list_gtm_versions - Added
list_gtm_workspaces - Added
list_ip_exclusions - Added
list_lead_form_submissions - Added
list_linkedin_ad_accounts - Added
list_linkedin_audiences - Added
list_linkedin_campaign_groups - Added
list_linkedin_campaigns - Added
list_linkedin_conversions - Added
list_linkedin_creatives - Added
list_linkedin_lead_forms - Added
list_meta_ad_accounts - Added
list_meta_ads - Added
list_meta_adsets - Added
list_meta_audiences - Added
list_meta_campaigns - Added
list_meta_catalogs - Added
list_meta_custom_conversions - Added
list_meta_instagram_accounts - Added
list_meta_instagram_posts - Added
list_meta_lead_forms - Added
list_meta_page_posts - Added
list_meta_pages - Added
list_meta_pixels - Added
list_meta_product_sets - Added
list_meta_saved_audiences - Added
list_microsoft_accounts - Added
list_microsoft_ad_extensions - Added
list_microsoft_ad_groups - Added
list_microsoft_ads - Added
list_microsoft_audiences - Added
list_microsoft_campaigns - Added
list_microsoft_conversion_goals - Added
list_microsoft_keywords - Added
list_microsoft_negative_keywords - Added
list_microsoft_uet_tags - Added
list_negative_keywords - Added
list_recommendations - Added
list_shared_negative_lists - Added
list_sites - Added
list_tiktok_ad_accounts - Added
list_tiktok_adgroups - Added
list_tiktok_ads - Added
list_tiktok_asset_groups - Added
list_tiktok_audiences - Added
list_tiktok_auto_messages - Added
list_tiktok_bc_advertisers - Added
list_tiktok_bc_pixels - Added
list_tiktok_business_centers - Added
list_tiktok_campaigns - Added
list_tiktok_creative_portfolios - Added
list_tiktok_gmv_max_stores - Added
list_tiktok_identities - Added
list_tiktok_lead_forms - Added
list_tiktok_pixels - Added
list_tiktok_posts - Added
list_tiktok_smart_plus - Added
list_tiktok_videos - Added
list_wordpress_sites - Added
manage_audience_targeting - Added
manage_bidding_strategies - Added
manage_business_logo - Added
manage_business_name - Added
manage_campaign_proximity - Added
manage_campaign_settings - Added
manage_chatgpt_ads_accounts - Added
manage_chatgpt_ads_spend_limit - Added
manage_conversion_actions - Added
manage_device_targeting - Added
manage_extension_assets - Added
manage_gtm_permissions - Added
manage_keywords - Added
manage_portfolio_bidding_strategy - Added
manage_shared_negative_list - Added
manage_tiktok_search_negative_keywords - Added
marketing_insights - Added
marketing_overview - Added
meta_campaign_insights - Added
meta_change_history - Added
meta_delivery_estimate - Added
meta_insights_query - Added
meta_reach_estimate - Added
microsoft_entity_performance_report - Added
microsoft_location_search - Added
microsoft_performance_report - Added
microsoft_report_query - Added
microsoft_search_terms_report - Added
pause_campaign - Added
performance_report - Added
portfolio_report - Added
preview_meta_ad - Added
publish_gtm_container - Added
remove_extension_assets - Added
remove_microsoft_ad_extensions - Added
remove_microsoft_negative_keywords - Added
remove_negative_keyword - Added
remove_site - Added
rollback_gtm_version - Added
rsa_asset_performance - Added
scaffold_site - Added
search_meta_interests - Added
search_terms_report - Removed
search_tools - Added
select_google_resource - Added
send_meta_conversion_event - Added
send_tiktok_conversion_event - Added
seo_ai_overview - Added
seo_anchors - Added
seo_audit - Added
seo_backlink_list - Added
seo_backlinks - Added
seo_best_pages_by_links - Added
seo_brand_monitor - Added
seo_broken_backlinks - Added
seo_bulk_spam_score - Added
seo_competitor_gap - Added
seo_content_brief - Added
seo_content_lint - Added
seo_full_analysis - Added
seo_geo_citations - Added
seo_geo_tracker - Added
seo_history - Added
seo_keyword_research - Added
seo_keyword_trends - Added
seo_link_intersect - Added
seo_local_listings - Added
seo_paid_keywords - Added
seo_rank_history - Added
seo_rank_tracker - Added
seo_rank_untrack - Added
seo_ranked_keywords - Added
seo_referring_networks - Added
seo_reviews - Added
seo_serp_analysis - Added
seo_site_crawl - Added
seo_site_technologies - Added
seo_technical_audit - Added
set_ad_group_targeting - Added
set_ad_schedule - Added
set_call_reporting - Added
set_campaign_budget - Added
set_campaign_targeting - Added
set_conversion_settings - Added
set_microsoft_bid_strategy - Added
share_tiktok_audience - Added
site_command_status - Added
site_csp_reports - Added
site_db_backup - Added
site_db_restore - Added
site_design_guide - Added
site_edit_file - Added
site_fetch - Added
site_form_submissions - Added
site_headers - Added
site_info - Added
site_list_files - Added
site_preview - Added
site_read_file - Added
site_read_url - Added
site_rebuild - Added
site_redirects - Added
site_restore - Added
site_seo_guide - Added
site_tag_gateway - Added
site_versions - Added
site_write_file - Added
smart_negative_keywords - Added
tiktok_advertiser_qualification - Added
tiktok_campaign_report - Added
tiktok_change_history - Added
tiktok_recommendations - Added
tiktok_region_search - Added
tiktok_report_query - Added
tiktok_targeting_search - Added
unblock_ip_addresses - Added
update_ad_group - Added
update_ad_group_status - Added
update_ad_status - Added
update_campaign - Added
update_campaign_status - Added
update_chatgpt_ads_ad - Added
update_chatgpt_ads_ad_group - Added
update_chatgpt_ads_campaign - Added
update_conversion_action - Added
update_conversion_goal - Added
update_custom_conversion_goal - Added
update_gtm_entity - Added
update_linkedin_campaign - Added
update_linkedin_campaign_group - Added
update_linkedin_campaign_targeting - Added
update_linkedin_creative_status - Added
update_meta_ad - Added
update_meta_ad_creative - Added
update_meta_adset - Added
update_meta_campaign - Added
update_meta_custom_conversion - Added
update_meta_instagram_post_ad - Added
update_microsoft_ad_group - Added
update_microsoft_ad_group_status - Added
update_microsoft_ad_status - Added
update_microsoft_campaign_budget - Added
update_microsoft_campaign_status - Added
update_microsoft_keyword - Added
update_microsoft_responsive_search_ad - Added
update_pmax_asset_group - Added
update_pmax_assets - Added
update_rsa - Added
update_sitelink - Added
update_tiktok_ad - Added
update_tiktok_ad_status - Added
update_tiktok_adgroup - Added
update_tiktok_adgroup_budget - Added
update_tiktok_adgroup_status - Added
update_tiktok_campaign - Added
update_tiktok_campaign_budget - Added
update_tiktok_campaign_status - Added
upload_conversion_adjustments - Added
upload_image - Added
upload_image_asset - Added
upload_meta_image - Added
upload_meta_video - Added
upload_microsoft_offline_conversions - Added
upload_offline_conversions - Added
upload_tiktok_image - Added
upload_tiktok_video - Added
wordpress_bulk_replace - Added
wordpress_contact_forms - Added
wordpress_create_post - Added
wordpress_edit_menu - Added
wordpress_edit_page_design - Added
wordpress_get_post - Added
wordpress_install_plugin - Added
wordpress_languages - Added
wordpress_link_translations - Added
wordpress_list_plugins - Added
wordpress_list_posts - Added
wordpress_manage_plugin - Added
wordpress_media - Added
wordpress_menus - Added
wordpress_option - Added
wordpress_page_design - Added
wordpress_performance - Added
wordpress_purge_cache - Added
wordpress_search_content - Added
wordpress_seo - Added
wordpress_set_performance - Added
wordpress_set_seo - Added
wordpress_set_tracking - Added
wordpress_site_info - Added
wordpress_slider - Added
wordpress_terms - Added
wordpress_test_contact_form - Added
wordpress_theme_file - Added
wordpress_tracking - Added
wordpress_update_connector - Added
wordpress_update_post - Added
wordpress_upload_media - Added
wordpress_users - Added
wordpress_woo_create_product - Added
wordpress_woo_orders - Added
wordpress_woo_products - Added
youtube_channels - Added
youtube_overview - Added
youtube_top_videos - Added
youtube_traffic_sources
Publisher details
- Operator
- Opus Growth is a trading brand of Talat KOÇ, a sole proprietorship registered in Türkiye (Gökalp Tax Office).
- Operator website
- https://opus-growth.com
- Vendor relationship
- Unknown
- Documentation
- https://platform.opus-growth.com/docs/setup
- Trust center
- https://platform.opus-growth.com/docs/security
- Restrictions
- An Opus Growth account is required. New accounts start with 75 free credits that never expire; after that a paid plan applies, from $49/month. Each user connects their own advertising accounts over OAuth and sees only their own data. One connected ad account on Free and Pro, several on Agency. Every write returns a dry run first and applies only after an explicit confirmation call. Reads are cheap, writes cost more, previews are free. Hosting tools are off on the free plan. No regional restriction.
Related MCP Connectors
Run Google Ads, Meta Ads, LinkedIn Ads and ChatGPT Ads from Claude or ChatGPT. You approve every change.
Run Google Ads and Meta Ads from ChatGPT or Claude: audit wasted spend, create and manage campaigns.
Create, launch, and manage Meta + Google ads from Claude and ChatGPT.
Google Ads and Meta Ads from Claude or ChatGPT: live reports, wasted spend, changes you approve.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceCreate, launch, and manage Meta + Google ads from Claude and ChatGPT. Analytics, strategy, and autopilot automation for any store.1Apache 2.0
- FlicenseNot gradedqualityCmaintenanceConnects AI assistants to Google Ads, Meta Ads, ChatGPT Ads, TikTok Ads and LinkedIn Ads so users can query live campaign performance, budgets and audiences in the account's own currency and prepare changes as proposals that only take effect after explicit approval. Reads run immediately, while every write is staged as an approvable proposal with before/after values, and newly created campaigns, ad sets and ads start paused.1-
- AlicenseNot gradedqualityCmaintenanceEnables users to manage any Google Ads account through Claude Code or Claude Desktop, automating campaign creation, ad copy generation, asset and image handling, bid optimization, and performance reporting. It covers Search, Shopping, Performance Max, and Display campaigns with multi-country configuration, batch processing, guardrail validation, and Merchant Center integration.MIT

PaidSync MCP Serverofficial
AlicenseNot gradedqualityFmaintenanceConnects Google Ads, Meta Ads, and LinkedIn Ads to AI assistants, enabling natural language ad campaign management, reporting, and optimization across platforms.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.