Apple Ads MCP
Provides tools for interacting with Apple Ads Platform API, including app discovery, keyword suggestions, advertising insights, reporting, campaign audits, and receipt-gated campaign management for Apple Search Ads.
Provides tools for looking up App Store apps, checking eligibility, and querying App Store product pages and product-page locales to support advertising research and campaign preparation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Apple Ads MCPAudit my ad account health and recent change history."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Apple Ads MCP
Apple Ads MCP is a local-first Model Context Protocol server for the Apple Ads Platform API v1. It gives Codex, Claude, and other MCP clients typed tools to research, inspect, and safely operate App Store advertising accounts.
The server is read-only by default. Credentials stay on your machine, every account-scoped call names an explicit profile and ad account, and every mutation requires a preview plus a short-lived single-use receipt.
Apple Ads MCP is independent open-source software. It is not affiliated with, endorsed by, or sponsored by Apple Inc. Apple Ads and App Store are trademarks of Apple Inc.
Quick start
Install the released binary with Homebrew on macOS or Linux:
brew install zelentsov-dev/tap/apple-ads-mcp
apple-ads-mcp versionCreate a local read-only profile. The command stores an absolute private-key path; never paste the private key into a chat, issue, log, or repository:
apple-ads-mcp config init
apple-ads-mcp auth doctor --profile production-read-only
apple-ads-mcp accounts discover --profile production-read-onlyRegister the server with an absolute Homebrew path so desktop apps and IDE extensions do not depend on their inherited shell PATH.
Codex:
codex mcp add apple-ads -- "$(brew --prefix)/bin/apple-ads-mcp" serve --stdio
codex mcp listClaude Code:
claude mcp add --scope user apple-ads -- "$(brew --prefix)/bin/apple-ads-mcp" serve --stdio
claude mcp get apple-adsRestart an already running desktop app, CLI session, or IDE extension, then start a new conversation. A safe first request is:
Call
server_info, then runaccount_healthfor my explicit profile, ad account, and app. Do not enable writes.
Other useful read-only starters:
“List the apps I can advertise and explain any eligibility gaps.”
“Audit my current Apple Ads campaign structure without changing anything.”
“Find keyword opportunities and separate Apple evidence from your inferences.”
Related MCP server: google-ads-mcp-plus
Current release
v0.3.7 is the current release. It honors Apple rate-limit timing, validates bid strategies in their campaign and ad-group context, updates report grouping, and deprecates CPA cap without removing existing tools. Explicit strategy requests and optimizer recommendations now have separate history policies. See the v0.3.7 release and migration notes.
The v0.3.5 version-final archive naming, formula-scoped trust from v0.3.4, exact-path verification from v0.3.3, and one-command onboarding from v0.3.2 remain intact.
Optimization is never autonomous: the server has no scheduler and never changes spend in the background. A read-only session can build a baseline and plan. Applying a plan still requires every write gate, an active named policy, one receipt, a fresh report and inventory drift check, and item-level verification.
The release supports the four App Store placements exposed by Apple:
Search Results
Search Tab
Today Tab
Product Pages
Placement availability still depends on the selected account, app, storefront, creative, and Apple's eligibility response. An unavailable placement is reported as not_eligible; the server does not attempt to bypass Apple validation.
Keywords and negative keywords are Search Results resources. The Platform API rejects explicit Ad resources for Search Results campaigns, so that placement is operated through its campaign, ad group, keywords, and product-page configuration; explicit ads remain eligibility-gated for the other placements. A Default Product Page creative is unique per app and ad account, so operators should query and reuse it instead of attempting to create a duplicate.
What it can do
Area | Main tools |
Access and readiness |
|
Apps and storefronts |
|
Inventory |
|
Diagnostics | rejection reasons, campaign status reasons, change history, account and campaign audits |
Research | keyword, phrase, category, target-CPA suggestions, search popularity, impression share |
Reports | typed campaign, ad-group, ad, keyword, and search-term reports |
Campaign operation | create/update, budget, countries, schedule, pause, and resume previews |
Ad-group operation | create/update, schedule, targeting, Search Match, bid, deprecated CPA cap, pause, and resume previews |
Keywords | individual and bulk targeting/negative keyword create/update, bid, pause, and resume previews |
Ads and creatives | typed App Store creative and ad create/update, pause, and resume previews |
Recommendations | read, apply-preview, and dismiss-preview for daily budget and target CPA |
Optimization | named local policies, 28-day baselines, learning/active plans, composite preview/apply/verify, and bounded history |
Shared budgets | typed LOC-only create/update/assign/unassign previews with private local billing profiles |
Lifecycle | separately gated campaign, ad-group, keyword, negative-keyword, ad, creative, and shared-budget delete previews |
Verification |
|
Every list is bounded to 200 items and uses next pagination. Responses include concise text plus MCP structuredContent; raw Apple envelopes and billing contact PII are not exposed.
There is no raw-request tool, account/delegation mutation, automatic scheduler, Apple Maps surface, or legacy Campaign Management API v5 support.
Safety model
A write is possible only when all gates pass:
The Apple API user has a compatible write role.
The server starts with
--allow-writes.The selected profile has
allowWrites: true.A specialized
*_previewtool validates the account, app, storefront, placement, currency, and payload.operations_applyreceives the same unexpired receipt.The affected inventory still matches the state captured during preview.
Preview receipts expire after ten minutes and are single-use for apply. A bounded tombstone preserves the explicit expired state after the full receipt record is pruned. Every mutation receipt binds canonical object scopes for its target IDs and retains exact read fingerprints; creates and parent deletes also bind the affected inventory and bounded cascade scopes. Generic, bulk, delete, recommendation, shared-budget, and optimization verification shapes for overlapping objects therefore cannot dispatch concurrently. Independent ad-group inventories remain parallel. Bulk receipts return item-level applied, failed, or unknown states. One targeting-keyword bulk receipt may contain multiple per-item ad groups while still sending one Apple bulk request. Apple may partially accept a batch; the server never promises rollback. If an optimization apply has an unresolved outcome, a sanitized recovery recipe remains in owner-only local history so operations_verify can reconcile the supplied receipt after a process restart or normal preview eviction.
Independent previews from the same inventory snapshot intentionally drift after the first apply. Put related keyword creates into one bulk preview when they must be applied as a unit; the server does not weaken this fail-closed invariant.
Mutation requests are not retried after a timeout. The result is committed_unverified, or item-level unknown, until operations_verify and direct readback establish the actual state.
Recommendation apply operations require an explicit maximumAmount. The recommendation currency must match the ad account, the proposed amount must stay under the cap, and the recommendation plus promoted campaign are re-read before apply.
An irreversible delete has five additional gates: --allow-deletes, profile allowDeletes: true, session-only APPLE_ADS_ALLOW_DELETES=true, an exact expected object name or keyword text, and a specialized delete receipt. Campaigns and parents must be PAUSED; cascade inventory is bounded and hashed; creatives must have no referencing ads; shared budgets must have no assignments. DELETE is never retried after an ambiguous result.
Release validation
The v0.3.7 release requires the complete compatibility suite, MCP stdio contract tests, unit and HTTP tests, the race detector, static analysis, vulnerability and secret scans, and distribution validation. Cross-platform CI runs on macOS, Linux, and Windows.
This release uses synthetic acceptance only; no live advertising mutations are part of v0.3.7 validation. Runtime confirmation is a separate owner-controlled gate. On 2026-08-31, the v0.3.6 P2 read-only matrix and a separately authorized PAUSED targeting-keyword bulk fixture with 2 and 28 items passed against Apple Ads API v1. Both aggregate receipts applied and verified every returned keyword ID directly; the campaign and ad group remained PAUSED throughout the write acceptance.
Earlier v0.3.x live acceptance confirmed read-only optimization baselines and plans, PAUSED fixture creation and readback, budget/bid/strategy updates, pause/resume, receipt drift checks, item verification, and deletion of disposable campaigns, ad groups, keywords, and negative keywords. All retained fixtures remained PAUSED with zero spend. This historical evidence does not prove v0.3.7 live acceptance.
Account-dependent paths have an explicit evidence boundary:
Active optimization-plan apply and
MAX_CONVERSIONSchanges remain automated-test verified for this release. Optimizer recommendations require the existing history minimums; explicit user-requested previews instead show a warning that statistical readiness has not been established, while preserving contract validation and write gates.Shared-budget create/update/assignment/delete remain contract- and HTTP-test verified because the live acceptance account uses
PAYG; Apple requiresLOC.Default Product Page ad and creative deletion is confirmed as
not_eligiblebecause Apple does not allow those resources to be deleted individually.
These boundaries do not weaken the default safety model: unsupported or insufficiently evidenced operations fail closed and never become successful empty responses.
Install
Platform | Homebrew | GitHub archive | OCI image |
macOS arm64 / amd64 | Yes |
| Linux container only |
Linux arm64 / amd64 | Yes |
| Yes |
Windows arm64 / amd64 | No |
| Linux container only |
Homebrew
The official tap installs a checksum-pinned release binary:
brew install zelentsov-dev/tap/apple-ads-mcpUpgrade later releases with:
brew update
brew upgrade apple-ads-mcpGitHub release
Download the archive for your platform from GitHub Releases. Releases include SHA-256 checksums and SPDX SBOMs.
Apple silicon example:
curl -LO https://github.com/zelentsov-dev/apple-ads-mcp/releases/download/v0.3.7/apple-ads-mcp_darwin_arm64_0.3.7.tar.gz
curl -LO https://github.com/zelentsov-dev/apple-ads-mcp/releases/download/v0.3.7/checksums.txt
shasum -a 256 -c checksums.txt --ignore-missing
tar -xzf apple-ads-mcp_darwin_arm64_0.3.7.tar.gz
sudo install -m 0755 apple-ads-mcp /usr/local/bin/apple-ads-mcpWindows users should verify checksums.txt, extract the matching ZIP, and register the executable with its absolute path.
OCI image
docker pull ghcr.io/zelentsov-dev/apple-ads-mcp:0.3.7The image runs serve --stdio by default. Mount accounts.json and its referenced private key read-only.
Build from source
git clone https://github.com/zelentsov-dev/apple-ads-mcp.git
cd apple-ads-mcp
go build -trimpath -o ./apple-ads-mcp ./cmd/apple-ads-mcpGo 1.26.9 or newer is required.
Apple API setup
Apple Ads API access is separate from App Store Connect access. An Apple Ads Account Admin must add an API user with the appropriate role. Prefer API Account Read Only until campaign changes are needed.
Generate an ES256 key pair locally:
umask 077
openssl ecparam -name prime256v1 -genkey -noout -out apple-ads-private-key.pem
openssl ec -in apple-ads-private-key.pem -pubout -out apple-ads-public-key.pem
chmod 600 apple-ads-private-key.pemUpload only the public key in Apple Ads. Never paste the private key into an agent conversation, issue, log, or repository. After Apple registers the key, record the client ID, team ID, and key ID shown in the Apple Ads UI.
Configure
Create a profile interactively:
apple-ads-mcp config initThe default configuration path is ~/.config/apple-ads-mcp/accounts.json:
{
"profiles": [
{
"name": "production-read-only",
"clientId": "SEARCHADS.example-client-id",
"teamId": "SEARCHADS.example-team-id",
"keyId": "EXAMPLEKEY",
"privateKeyPath": "/absolute/path/to/apple-ads-private-key.pem",
"defaultAdAccountId": "123456789",
"allowWrites": false,
"allowDeletes": false
}
]
}On POSIX systems, the configuration and private key must be owner-only:
chmod 600 ~/.config/apple-ads-mcp/accounts.json /absolute/path/to/apple-ads-private-key.pemValidate authentication and discover accessible ad accounts:
apple-ads-mcp auth doctor --profile production-read-only
apple-ads-mcp accounts discover --profile production-read-onlyConfiguration precedence is --config, APPLE_ADS_MCP_CONFIG, the default file, then single-profile APPLE_ADS_* environment variables. Supported single-profile variables are APPLE_ADS_PROFILE, APPLE_ADS_CLIENT_ID, APPLE_ADS_TEAM_ID, APPLE_ADS_KEY_ID, APPLE_ADS_PRIVATE_KEY_PATH, APPLE_ADS_AD_ACCOUNT_ID, APPLE_ADS_ALLOW_WRITES, and APPLE_ADS_ALLOW_DELETES. For a file-backed profile, environment variables do not silently grant persistent write or delete permission.
Connect an MCP client
The server uses stdio and writes MCP JSON-RPC only to stdout:
apple-ads-mcp serve --stdioFor clients with a CLI, prefer an absolute binary path.
Codex global configuration:
codex mcp add apple-ads -- "$(brew --prefix)/bin/apple-ads-mcp" serve --stdio
codex mcp listCodex Desktop, the Codex CLI, and the IDE extension share the same host configuration. Restart an already running client and open a new conversation after adding the server.
Claude Code user configuration:
claude mcp add --scope user apple-ads -- "$(brew --prefix)/bin/apple-ads-mcp" serve --stdio
claude mcp get apple-adsClaude project configuration can use the repository's .mcp.json, but each workspace/server may remain pending until the user approves it. Reconnect from /mcp or restart Claude Code after approval.
Generic MCP configuration for clients without a registration command:
{
"mcpServers": {
"apple-ads": {
"command": "apple-ads-mcp",
"args": ["serve", "--stdio"]
}
}
}Replace apple-ads-mcp with the absolute executable path when the client does not inherit the Homebrew or shell PATH. On Apple silicon the default Homebrew path is /opt/homebrew/bin/apple-ads-mcp; on Intel macOS it is normally /usr/local/bin/apple-ads-mcp.
Plugin and skill bundle
Release archives include .codex-plugin/plugin.json, .mcp.json, and the apple-ads-operator skill. These files describe the server and safe operating workflow for compatible plugin loaders, but they do not install the executable, register the MCP server, or grant Apple Ads access by themselves. This repository is not currently distributed through a public Codex plugin marketplace; Homebrew plus client registration is the supported public setup path.
Verify the connection
After restarting the client, confirm that apple-ads is enabled or connected and ask it to call server_info. After local credentials are ready, use the explicit profile and account for auth_check, ad_accounts_list, and account_health.
All setup verification must remain read-only. Do not add --allow-writes, --allow-deletes, allowWrites, or allowDeletes while troubleshooting installation or authentication.
Troubleshooting
Executable not found: use
"$(brew --prefix)/bin/apple-ads-mcp"in the client configuration instead of a bare command.Server already exists: remove only that client's existing
apple-adsentry, then add it again with the absolute path.Claude shows pending approval: approve the project MCP server, reconnect from
/mcp, and start a new conversation.A running client still lacks tools: fully restart the desktop app, CLI session, or IDE extension after changing MCP configuration.
Authentication fails: run
apple-ads-mcp auth doctor --profile <profile>locally and confirm file permissions and non-secret identifiers; never paste the private key into chat.Homebrew rejects a downloaded local formula: install from the trusted tap with
brew install zelentsov-dev/tap/apple-ads-mcp.
Agent-led setup
An agent may diagnose and perform installation only with the user's approval. It should verify the binary, use an absolute path, register the intended client scope, restart the client, and stop after read-only health checks. It must never request private-key contents or silently enable mutation gates.
Enable writes for one session
Keep persistent profiles read-only. For one explicitly authorized operator session, enable both local gates:
APPLE_ADS_PROFILE=production-read-only \
APPLE_ADS_ALLOW_WRITES=true \
apple-ads-mcp serve --stdio --allow-writesThis does not change anything by itself. Every mutation still needs explicit profile, adAccountId, a specialized preview, receipt apply, and verification.
Configure on-demand optimization
Create a named local policy:
apple-ads-mcp optimization policy init
apple-ads-mcp optimization policy validate --name mature-product-balanced
apple-ads-mcp optimization doctor --policy mature-product-balancedPolicies are stored in ~/.config/apple-ads-mcp/optimization-policies.json with mode 0600. Each policy binds one profile, one ad account, one promoted app, and at most 20 campaign IDs. learning mode requires no business target and only returns evidence. active mode requires targetInstallCPA, total and per-campaign daily-budget caps, and explicit permissions for budget, bid, strategy, pause, resume, and retest. A policy that allows bid changes must also set a positive, account-currency maxBid; the daily-budget cap is never reused as a bid cap.
The balanced preset requires exactly 28 unique consecutive completed UTC days ending yesterday, compares the latest 7 days with the previous 7, applies a 72-hour cooldown, normally proposes 10% changes, and never exceeds 20% per run. Missing, duplicate, future, malformed, or overflowing report evidence fails closed. It can propose MAX_CONVERSIONS only for eligible Search Results Search Match inventory averaging at least five tap installs per day over 14 days. It never proposes deletion.
Typical agent flow:
Call
optimization_baselineandoptimization_planin a read-only server.Review Apple recommendations separately from calculated actions.
Start an authorized write session and call
optimization_plan_preview.Inspect
OperationImpact, apply the same receipt once, then calloperations_verify.Review bounded local history under
~/.local/share/apple-ads-mcp/optimization/.
Immediately before the first Apple write, the server durably persists a receipt-hash-bound applying intent and sanitized typed verification recipe under an inter-process file lock. POSIX commits sync the containing directory; Windows uses replace-with-write-through semantics. An unknown result, inconclusive verification, or interrupted history update blocks later optimization plans until operations_verify conclusively reconciles every affected item. Recovery survives process restart and normal in-memory receipt expiry, but requires the original opaque receipt from the operator. A reconciled matched or matched_after action starts cooldown from its original intent/apply time; matched_before does not. A campaign can be auto-resumed only when a verified optimizer-owned pause still has the same Apple modificationTime; any later manual change revokes that permission. No receipt, credential, raw Apple envelope, or billing contact is stored in optimization history.
Shared budgets and lifecycle operations
Shared-budget mutations are available only when Apple reports the account payment model as LOC. Create and update operations bind the budget exclusively to the explicitly selected ad account. Campaign assignment tools preserve unrelated existing assignments, and cross-account shared budgets fail closed. Initialize private billing data locally:
apple-ads-mcp billing profile init~/.config/apple-ads-mcp/billing-profiles.json must be 0600. MCP inputs contain only the local billingProfile name. Buyer names and email addresses are not returned in tool output, logs, history, or receipt previews. PAYG accounts return not_eligible without attempting a write.
For an explicitly authorized destructive maintenance session:
APPLE_ADS_ALLOW_WRITES=true \
APPLE_ADS_ALLOW_DELETES=true \
apple-ads-mcp serve --stdio --allow-writes --allow-deletesThe selected file-backed profile must already contain allowDeletes: true; allowWrites may be enabled for only the current process with APPLE_ADS_ALLOW_WRITES=true. The server and session delete gates remain independent. Use a specialized *_delete_preview, compare the full cascade impact and exact expected text, apply once, and verify deleted: true. Do not use lifecycle operations as part of an optimization plan.
Operational limits
Apple provides no public Ads API sandbox. Live mutation acceptance is manual, explicitly enabled, uses clearly named
PAUSEDfixtures, and is never part of automatic CI.Eligibility, suggestions, popularity, recommendations, reports, and creative support vary by account and storefront.
Cold accounts may have no target-CPA or daily-budget recommendations.
Campaign and object names are validated by Apple; the web UI and API may accept different punctuation.
Apple rejects the vertical-bar character (
|) in campaign names; use a hyphenated readable name instead. Ad-group creation requires an ISO 8601startTimein the ad-account timezone.Reports can lag and remain empty until delivery occurs.
Apple rejects individual deletion of an ad that uses the Default Product Page (
CAN_NOT_DELETE_DPP_CREATIVE_AD). The server returnsnot_eligibleduring preview; use lifecycle deletion only for disposable Custom Product Page ads and creatives.Trial and subscription attribution belongs to your attribution stack; the Apple Ads Platform API alone does not prove keyword-to-trial attribution.
Known Apple API responses
As of 2026-08-25, the documented v1 request shapes used by this server have produced two repeatable upstream behaviors during live acceptance:
phrase_suggestionsandcategory_suggestionsmay return Apple HTTP500for aSUGGESTIONquery even whenkeyword_suggestionsandtarget_cpa_suggestionswork for the same owned app.impression_sharemay return Apple HTTP400on a cold or fully paused account. An owner-controlled acceptance account supplied no code or diagnostic details; public reproductions have also reported codeINVALID_VALUE. Missing recent delivery may be relevant, but it is not a confirmed Apple prerequisite or workaround.
The server returns these as bounded structured Apple errors and does not convert them into empty or successful results. Safe Apple code, message, and detail fields are retained for 4xx; request bodies, credentials, arbitrary fields, and 5xx bodies are not returned. The request shapes match the current Apple Ads Platform API and the official Apple Java client. Comparable public v1 reproductions are recorded in App Store Connect CLI PR #2057 and PR #2020. Recheck after Apple changes the API or the account has meaningful delivery history.
Compatibility
v0.3 preserves all v0.2.1 tool names and schemas, then adds optimization, shared-budget mutation, bid-strategy, and lifecycle tools. v0.3.1 adds a required maxBid when bid permission is enabled and fail-closed reconciliation rules; see the v0.3.1 migration notes. v0.3.2 changes distribution and onboarding only. v0.3.3 switches release verification to the exact tap formula path, v0.3.4 adds formula-scoped trust for Homebrew 6, and v0.3.5 disambiguates Homebrew version detection by placing the semantic version at the end of archive names. v0.3.6 keeps existing tool names and compatible legacy inputs while adding typed aliases, query shortcuts, diagnostics, and stricter required scopes; see the v0.3.6 notes. v0.3.7 adds header-aware request pacing, contextual bid validation, report grouping corrections, and persisted preview warnings; see the v0.3.7 notes. Older clients should also read the v0.3 notes and v0.2 notes.
The public tool schema is not frozen before v1.0. API-family scope and operation status are tracked in the machine-readable operation matrix. The official Java client baseline and App Store endpoint inventory are tracked in upstream-baseline.json.
Development
gofmt -w cmd internal
go test ./...
go test -race ./...
go vet ./...
go run honnef.co/go/tools/cmd/staticcheck@v0.8.1 -checks 'all,-ST1000,-ST1005' ./...
go run golang.org/x/vuln/cmd/govulncheck@v1.7.0 ./...
go run github.com/zricethezav/gitleaks/v8@v8.29.1 dir --no-banner --redact .
go run github.com/goreleaser/goreleaser/v2@v2.17.1 check
go run github.com/rhysd/actionlint/cmd/actionlint@v1.7.12
npx --yes markdownlint-cli2@0.23.2 '**/*.md'
python3 scripts/validate_distribution.py
python3 scripts/audit_upstream.pySee CONTRIBUTING.md, SECURITY.md, and the roadmap.
License
Available Tools
110 toolsaccount_healthCRead-onlyIdempotent
Collect a read-only identity, access, and account baseline.
| Name | Required | Description | Default |
|---|---|---|---|
| adamId | No | optional App Store Adam ID to verify ownership | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, and the description's only behavioral claim ('read-only') simply restates that. It does not explain what the baseline consists of, whether partial failures are reported, or what access verification means in practice, adding essentially nothing beyond the structured 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?
It is a single front-loaded sentence with no waste. It is efficiently structured, though its brevity contributes to the vagueness noted elsewhere rather than being a flaw of verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema and rich annotations exist, so return shape and safety need not be spelled out. However, for a composite tool that gathers identity, access, and account data across a profile and ad account, the description gives no indication of what the check validates or how to interpret results, leaving the definition under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (adamId, profile, adAccountId) are documented in the schema, so the schema carries parameter meaning. The description adds no extra syntax, format, or dependency semantics (e.g., why adamId is optional), making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb ('collect') and a resource ('identity, access, and account baseline'), so the reader gets the general idea of a consolidated health check. But 'baseline' is vague and the description never distinguishes this tool from adjacent siblings like auth_check, ad_account_get, or org_get, leaving ambiguity about what is actually aggregated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (profile and adAccountId are required), and no routing to alternatives even though auth_check and ad_account_get clearly overlap. The agent must infer the appropriate caller context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_account_getBRead-onlyIdempotent
Read sanitized account currency, timezone, payment model, features, and delegations.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds useful context by saying the data is 'sanitized' and listing the fields read, but it does not disclose auth requirements, rate limits, or error behavior; with an output schema present, that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that names the action and resource immediately. Every phrase contributes to scope and there is no 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?
For a simple two-parameter read tool with complete schema coverage, annotations, and an output schema, the description is nearly sufficient. It tells the agent what account data is retrieved and that it is sanitized, though it lacks explicit routing guidance versus related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description adds no parameter-specific meaning beyond what is in the schema, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: reading account data. It also enumerates the exact attributes returned (currency, timezone, payment model, features, delegations), which helps distinguish it from list-style siblings such as ad_accounts_list, though the single-account scope is only implicit via the required adAccountId.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as ad_accounts_list or org_get. The description identifies the operation but leaves alternative selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_accounts_listBRead-onlyIdempotent
Discover Apple Ads account ACLs available to a profile.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds that results are ACLs available to a profile, but does not add further behavioral context such as pagination, rate limits, 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?
A single front-loaded sentence with no filler. The scoping condition (available to a profile) is stated immediately and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity list tool with full schema coverage, rich annotations, and an output schema, the description is largely complete. The main remaining gap is routing guidance against related account-listing and account-getting 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 100%, and the single profile parameter is already documented as a local Apple Ads profile name. The description reinforces that the profile scopes the result to available ACLs, but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (Discover) and a precise resource (Apple Ads account ACLs) scoped to a profile. It is clearly a list/discovery operation, but it does not explicitly differentiate itself from siblings like ad_account_get or advertiser_resources_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 implies the tool is used with a profile, but does not state when to use it versus alternatives such as ad_account_get or advertiser_resources_list. There are no exclusions or prerequisite guidance beyond the required profile parameter already in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_create_previewCRead-onlyIdempotent
Preview creation of one ad.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | typed create payload for the resource | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 known. The description adds nothing beyond that: it does not say whether the preview validates the payload, what it returns (e.g. errors or diff), or that nothing is persisted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the key concept (preview) front-loaded. It is efficient, though its brevity comes at the cost of information rather than achieving compression of useful content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool takes a nested typed payload and has an output schema, so return values need not be explained, but for a preview operation in a large family of preview/apply pairs the description should clarify what the preview checks and how it relates to applying changes. One sentence is insufficient here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the nested payload with its required fields, so the schema carries parameter meaning. The description adds no additional semantics about profile, adAccountId, or the payload fields, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Preview creation of one ad" states a verb and a resource, but it is close to a restatement of the name ad_create_preview and offers no differentiation from the many sibling preview tools (ad_update_preview, ad_delete_preview, ad_group_create_preview). It also leaves what 'preview' actually means (dry-run validation vs. draft creation) undetermined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 call this rather than ad_update_preview, ad_get, or operations_apply. The obvious workflow implication — preview first, then apply — is never stated, so the agent must infer the tool's role in the write pipeline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_delete_previewARead-onlyDestructiveIdempotent
Preview irreversible deletion of one ad under a paused campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| expectedText | Yes | exact current resource name or keyword text |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true paired with destructiveHint=true and idempotentHint=true, so the safety profile is largely pre-disclosed. The description reinforces this with 'irreversible deletion' and adds the paused-campaign constraint, but never explains that the preview itself performs no mutation or that it must be followed by an apply step, leaving the readOnly/destructive pairing to be inferred.
Agents need to know what a tool does to the 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 destructive scope and precondition stated first. No filler, nothing redundant, nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 schema covers most parameters. However, for a high-stakes deletion preview with four required parameters and an expectedText confirmation argument, the description never mentions the confirmation requirement or the preview-to-apply lifecycle, which 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?
The description's 'one ad' maps directly to the id parameter, and the schema already documents 75% of parameters including profile and adAccountId. It does not explain expectedText as an exact-match confirmation guardrail, which is the most important semantic behavior of this schema, 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?
The description states a specific verb (preview deletion) and a precise resource scope ('one ad'), which lets an agent distinguish it from the many sibling delete-preview tools (ad_group_delete_preview, campaign_delete_preview, keyword_delete_preview, creative_delete_preview). It stops short of naming those siblings explicitly, but the singular-ad 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?
It supplies one real precondition ('under a paused campaign'), which implies the when-to-use context, but gives no guidance on what to do after the preview, how it relates to the corresponding apply step (operations_apply / ad_delete execution), or when a caller should skip the preview. 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.
ad_getARead-onlyIdempotent
Read one ad by ID for current-state verification.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy ad ID | |
| adId | No | ad ID as a string | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is fully carried by structured data. The description adds only the hint that results reflect current state; it says nothing about authentication/profile scoping or failure 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 short sentence with the verb and scope front-loaded; nothing is wasted, though there is very little substance for the space available.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 need not explain return values or side effects. The remaining gap is minor: it never clarifies which identifier to supply when both 'id' and 'adId' are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the four parameters are already documented, giving the baseline of 3. The description adds no disambiguation between the two identifier parameters (legacy 'id' vs 'adId'), which is the one piece of meaning it could usefully contribute.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 one ad by ID'), and 'one' plus 'for current-state verification' implicitly separates it from the bulk/snapshot siblings like ads_query and ad_report. It stops short of naming any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'For current-state verification' implies the intended context (fetch fresh single-record state rather than a report or list), but there is no explicit when-to-use/when-not guidance and no alternative tool is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_group_bid_previewBRead-onlyIdempotent
Preview an ad-group default bid update with decimal amount and currency.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | decimal bid amount | |
| profile | Yes | local Apple Ads profile name | |
| currency | Yes | ISO 4217 currency | |
| adGroupId | Yes | ad group ID as a string | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the annotations: 'preview' matching readOnlyHint=true and destructiveHint=false, so no contradiction. It adds little beyond the structured hints though — no statement about whether the preview validates against budget caps or account constraints, and no mention of the preview-then-apply handoff, which is the behavior an agent most needs disclosed 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?
A single front-loaded sentence with no filler; the object of the operation and the key value fields come first. It is efficient, though its brevity is what leaves the workflow gaps above.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 safety profile is covered by annotations. What is missing is exactly the context a preview tool requires: that it is a dry-run whose output must be applied via the operations tooling, and how it relates to the update/bid 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 100% with all five required parameters documented, so the baseline is 3. The description echoes 'decimal amount and currency', which slightly reinforces the format expectation but adds no constraint (e.g. currency must match the account's currency) beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: previewing an ad-group default bid update, with the two value-bearing fields (amount, currency) called out. It is distinguishable from campaign_bid_strategy_preview and keyword_bid_preview by resource, but it never clarifies how it differs from the closely-named sibling ad_group_update_preview, which plausibly also touches bids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 choose this over ad_group_update_preview, ad_group_cpa_cap_preview, or the other bid-related preview siblings. Critically for a *preview tool, it never says that producing a preview is only step one and that operations_apply (or operations_inspect) must follow to commit the change, so an agent has to infer the whole workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_group_cpa_cap_previewARead-onlyIdempotent
Deprecated by Apple: preview a legacy ad-group CPA cap update; retained for compatibility without automatic strategy conversion.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | decimal bid amount | |
| profile | Yes | local Apple Ads profile name | |
| currency | Yes | ISO 4217 currency | |
| adGroupId | Yes | ad group ID as a string | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world, so the safety profile is covered. The description adds genuinely new context: Apple deprecated it and it will not silently convert to a new bid strategy, which changes how an agent should interpret the preview 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?
A single compact sentence that front-loads the most important fact (deprecation) and packs the compatibility caveat into the same clause. 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 a full schema, an output schema, and rich annotations, the description only needs to add the deprecation and no-conversion semantics, which it does. Slightly more detail on what the preview returns or when to prefer the modern alternative 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?
Schema coverage is 100% and every parameter (amount, currency, profile, adAccountId, adGroupId) is documented in the schema. The description adds no parameter-level guidance such as currency/amount units or ID format, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (preview) and resource (legacy ad-group CPA cap update), which is more specific than the sibling ad_group_update_preview. It does not explicitly contrast with ad_group_bid_preview or target_cpa_recommendation_apply_preview, so an agent must still infer the boundary, keeping it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The deprecation notice and 'retained for compatibility' hint that new work should avoid this tool, but there is no explicit 'use X instead' routing to the modern CPA/bid strategy preview 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.
ad_group_create_previewBRead-onlyIdempotent
Preview creation of one ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | typed create payload for the resource | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that this is a preview of creation rather than an actual write, which is useful context, but it does not explain validation behavior, permissions, or what the preview 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?
The description is a single front-loaded sentence with zero waste. It is perhaps under-specified for the complexity of the nested payload, but from a pure conciseness and structure standpoint it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, rich annotations, and full schema coverage, which carry much of the documentation burden. However, the description does not explain how this preview should be used relative to the actual creation/apply workflow, leaving a notable gap for an agent deciding when and how to 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 100%, and the schema itself documents profile, adAccountId, and the nested payload fields. The description adds no parameter-specific meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource combination: 'Preview creation' of 'one ad group'. It clearly distinguishes creation from siblings such as ad_group_update_preview and ad_group_delete_preview by naming the operation, though it does not explicitly call out those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this preview tool versus alternatives such as operations_apply, operations_verify, or other ad-group preview tools. At most, 'Preview creation' implies a pre-creation validation use case, but no conditions, exclusions, or alternatives are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_group_delete_previewARead-onlyDestructiveIdempotent
Preview irreversible deletion of one ad group under a paused campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| expectedText | Yes | exact current resource name or keyword text |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds useful context that the deletion is irreversible and the campaign must be paused, but it does not explain preview mechanics, what the output represents, or how expectedText protects against mistakes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. The core action and scope appear 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?
An output schema exists and annotations are rich, so the description need not explain return values. However, for a destructive preview tool with a required expectedText guard, the description should clarify that this is a dry-run preview and why expectedText is required.
Complex tools with many parameters or behaviors need more documentation. Simple 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 75%, with descriptions for profile, adAccountId, and expectedText, while the id parameter is undocumented. The description itself adds no parameter-level meaning, so the schema remains the primary source.
Input schemas describe structure but not intent. Descriptions should explain 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, and scope: previewing deletion of one ad group. It distinguishes itself from campaign_delete_preview and ad_delete_preview by resource, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'under a paused campaign' implies a precondition for use, but there is no explicit guidance on when to choose this preview versus ad_group_get, ad_group_update_preview, or another delete preview. Usage is inferable but not clearly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_group_getBRead-onlyIdempotent
Read one ad group by ID for current-state verification.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy ad group ID | |
| profile | Yes | local Apple Ads profile name | |
| adGroupId | No | ad group ID as a string | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is clear. The description adds that the result is for 'current-state verification,' but does not describe error handling, missing-record behavior, or account/profile scoping beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no wasted words. The tradeoff is that it is very terse, but conciseness itself is strong.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get tool with annotations and an output schema, the description is minimally sufficient. However, it omits material invocation context around the two ID fields and does not describe expected behavior when the ad group 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 100%, so parameters are already documented. The description says 'by ID' but does not clarify the presence of both `id` (legacy) and `adGroupId` parameters, leaving the agent to rely entirely on the schema for that distinction.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Read one ad group by ID.' It clearly distinguishes a single-item fetch from siblings like ad_groups_query or ad_group_report, though it does not name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for current-state verification' implies a use case but does not explicitly state when to use this versus ad_groups_query, ad_group_report, or other sibling tools. 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.
ad_group_pause_previewCRead-onlyIdempotent
Preview pausing one ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description is consistent with that. But the description adds nothing beyond structured fields: it never says what a 'preview' returns, whether it mutates state, or that an apply step is required afterward.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste, but it is under-specified rather than concise. It is front-loaded with the verb, yet the brevity leaves key semantics unexplained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, but for a preview tool in a large family of preview/apply siblings the description should at least signal the dry-run nature and the follow-up step. With one of three params undocumented and no workflow context, it is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple 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 67%: profile and adAccountId are documented in the schema, but 'id' has no description in either place. The description does not clarify that 'id' is the ad group identifier or how it interacts with the ad account scope, so the coverage gap is left 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 ('pausing one ad group') qualified by 'preview', so the agent can tell it targets ad groups rather than campaigns, ads, or keywords. However, it does not explain what 'preview' means or distinguish this from the many sibling *_preview tools beyond the resource 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 guidance on when to use this versus ad_pause_preview, campaign_pause_preview, ad_group_resume_preview, or operations_apply. The preview-then-apply workflow that presumably governs this tool family is never mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_group_reportCRead-onlyIdempotent
Read bounded ad-group performance rows.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. Beyond that the description adds only the vague adjective 'bounded', which is never explained (page-size cap? row limits? date bounds?). It says nothing about rate limits, data freshness, or what happens when the window is exceeded.
Agents need to know what a tool does to the 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 clause with no filler, so it is certainly concise. But it is compressed past usefulness — 'bounded' and 'rows' are the only content beyond the name, which reads as under-specification rather than disciplined brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the schema covers parameters fully. However, for a 9-parameter reporting tool sitting among several sibling report tools, the definition leaves the agent without the routing and report-shape context needed to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 9 parameters (fields, filters, groupBy, sorting, timeRange, pagination, profile, adAccountId) is already documented in the schema. The description contributes nothing further about parameter semantics, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('ad-group performance rows'), and the word 'bounded' signals a windowed/paginated result. It does not distinguish this from close siblings like ad_report, campaign_report, or keyword_report beyond the resource level implied by 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?
No when-to-use guidance and no exclusions. With four report tools in the sibling list (ad_report, campaign_report, keyword_report, search_term_report), an agent gets no help deciding which aggregation level or report type to pick, nor any hint about prerequisites such as needing a valid profile and ad account.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_group_resume_previewBRead-onlyIdempotent
Preview resuming one ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, which covers the safety and idempotency profile. The description reinforces that this is a preview rather than an actual resume, but it adds little beyond the annotations and does not explain what the preview output allows the caller to do.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is appropriately concise for a simple preview tool, though its brevity is partly why other dimensions lack 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?
Given the simple three-parameter schema, annotations, and an output schema, the description is minimally adequate. However, it does not clarify the preview-to-apply workflow, the role of the id parameter, or when this preview should be chosen over sibling preview 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 coverage is 67%: profile and adAccountId are described in the schema, while id has no schema description. The description's phrase 'one ad group' implicitly identifies id as the ad group identifier, but it adds no format or constraint details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: previewing the resumption of one ad group. It is clear enough to distinguish this as an ad-group-level preview rather than an ad or campaign preview, but it does not explicitly contrast with siblings such as ad_group_pause_preview or ad_resume_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this preview versus related tools such as ad_group_get, ad_group_update_preview, or operations_apply. The word 'Preview' implies a read-only preflight step, but the description does not state prerequisites, exclusions, or next steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_group_schedule_previewBRead-onlyIdempotent
Preview an ad-group start and end schedule update.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| endTime | No | ||
| profile | Yes | local Apple Ads profile name | |
| startTime | No | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 fully covered. The description adds nothing beyond that — it doesn't explain what the preview output contains or whether the preview has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler and the key concepts front-loaded. Brevity is appropriate, though it leaves gaps noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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. However, for a 5-parameter scheduling tool with 40% schema coverage and an openWorld read, the description should at least clarify the time format and the apply-after-preview workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40% (only profile and adAccountId are documented). The description says nothing about startTime/endTime, which are nullable strings with no stated format, timezone, or null semantics — a critical gap for a scheduling 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 (Preview) and resource (ad-group start/end schedule update), distinguishing it from the sibling campaign_schedule_preview by scope. It doesn't explicitly name alternatives, 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' naming convention implies this is a dry-run before an apply step, but the description never states when to use it versus ad_group_update_preview or how the previewed change is committed. Usage is only inferable from the tool family pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_group_search_match_previewARead-onlyIdempotent
Preview enabling or disabling Apple Search Match for a Search Results ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adGroupId | Yes | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 structurally. The description adds that this is a preview of a state change, but says nothing about whether the preview must be applied via a separate step, how long it is valid, or that it hits the live Apple Ads API (openWorldHint).
Agents need to know what a tool does to the 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 action and target are the first things read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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. Still, for a 4-required-parameter mutation-preview with half the schema undocumented, the description leaves the preview-to-apply lifecycle and any placement-type constraints (Search Results only) 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 only 50%: adGroupId and enabled are undocumented in the schema. The description compensates by making 'enabling or disabling' the meaning of the enabled flag and by binding the operation to a specific ad group, so the agent can map the required inputs 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?
The description states a specific verb (preview enabling/disabling) and a specific resource (Apple Search Match on a Search Results ad group), which clearly separates it from the many pause/resume/bid preview siblings. It stops short of naming a concrete alternative or follow-up tool, so an agent must infer the surrounding 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?
The word 'Preview' implies a dry-run before applying, but the description never says when to prefer this over e.g. ad_group_update_preview or how the preview is committed (operations_apply). Usage is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_groups_queryCRead-onlyIdempotent
Query bounded ad groups with endpoint-specific filters.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy exact ad group ID shortcut | |
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| adGroupId | No | exact ad group ID shortcut | |
| timeRange | No | report or insight time range | |
| campaignId | No | campaign scope shortcut | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds only 'bounded' and 'endpoint-specific filters', which are vague and largely restate schema concepts; it does not explain pagination behavior, result breadth, or the meaning of endpoint-specific beyond what structured fields already 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?
The description is a single, front-loaded sentence with no filler. It is appropriately sized, though its brevity contributes to under-specification rather than being a model of economical clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 query tool with many overlapping siblings, the description is too thin. Even with an output schema and rich annotations, it does not clarify the tool's scope, endpoint-specific behavior, or how it relates to ad_group_get and ad_group_report.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 12 parameters are already documented in the input schema. The description mentions 'filters' but adds no syntax, constraints, or prioritization beyond the schema, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb and resource ('Query ... ad groups') and adds a qualifier ('bounded', 'endpoint-specific filters'), so the broad function is clear. However, it does not distinguish this tool from closely named siblings such as ad_group_get, ad_group_report, ads_query, or keyword_report, leaving the specific purpose ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 conditions for when to use this tool versus alternatives. It does not mention prerequisites, when to avoid it, or how it differs from ad_group_get or ad_group_report, so an agent must infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_group_targeting_previewCRead-onlyIdempotent
Preview App Store-only ad-group targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| adGroupId | Yes | ||
| targeting | Yes | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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, covering the safety profile. The description adds only the phrase 'App Store-only' and does not explain what the preview returns, whether it validates targeting, or any side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. However, for a tool with a complex nested targeting schema, it is too terse to be structurally adequate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 four required parameters, nested targeting objects, and an output schema, indicating a fairly complex preview operation. The description does almost nothing to explain the preview semantics, validation behavior, or App Store-only scope, leaving significant gaps beyond structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the description provides no parameter meaning at all. Required parameters such as adGroupId and the nested targeting structure are left almost entirely to the schema, which itself provides only generic descriptions for include/exclude arrays.
Input schemas describe structure but not intent. Descriptions should explain 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 preview operation for ad-group targeting, so the basic verb and resource are identifiable. However, 'App Store-only' is not explained and the description does not clarify what targeting aspects are previewed or how this differs from other ad_group_* preview 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?
There is no guidance on when to use this tool, when not to use it, or which sibling tools are alternatives. The agent is left to infer that this is a preflight check rather than an update or query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_group_update_previewCRead-onlyIdempotent
Preview an ad-group update.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | target resource ID as a string | |
| payload | Yes | typed fields to update | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the non-mutating nature is covered. The description adds little beyond the name and annotations: it does not explain that the payload is validated without being applied, what preview result is produced, or how it relates to an eventual apply 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?
The single sentence is front-loaded and free of fluff. It is efficient, though its brevity means it is underspecified for a complex nested update payload; that gap is better reflected in contextual completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex update-preview tool with a large nested payload and many sibling preview tools. The output schema and annotations cover return shape and safety, but the description does not explain partial-vs-full update semantics, validation behavior, or when this generic preview should be used instead of the specialized ones.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the complex payload fields, targeting structure, and deprecated cpaCap are documented in the schema. The description adds no parameter-level semantics, but the baseline is 3 when the schema already carries this burden.
Input schemas describe structure but not intent. Descriptions should explain 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 verb and resource ('Preview an ad-group update'), so the general purpose is inferable. However, it does not clarify what a preview means here or distinguish this broad update preview from siblings such as ad_group_targeting_preview, ad_group_bid_preview, or ad_group_cpa_cap_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool rather than the more specific ad-group preview tools or when a preview is required before an update. The agent must infer usage entirely from the name and sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_pause_previewCRead-onlyIdempotent
Preview pausing one ad.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description adds almost nothing beyond restating the tool name; it does not explain what the preview returns, whether it mutates state, or what happens after previewing.
Agents need to know what a tool does to the 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 four-word description is maximally front-loaded and wastes no space, but it is under-specified rather than usefully concise. Brevity here sacrifices necessary context for a tool with three required parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and annotations cover read-only/idempotent semantics. Still missing is guidance on how the preview fits into the broader workflow (e.g., pairing with operations_apply) and what preview results represent.
Complex tools with many parameters or behaviors need more documentation. Simple 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 67%, with 'id' undocumented in the schema. The description provides no parameter meaning, formats, or constraints, so it does not compensate for the coverage gap on the required 'id' 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 ('Preview pausing') and resource ('one ad'), which distinguishes it from ad_resume_preview, ad_delete_preview, and ad_update_preview. However, it does not explicitly differentiate from vaguely named siblings like ad_get or operations_inspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of ad_pause_preview's alternatives, whether it must be followed by operations_apply, or what conditions make preview appropriate. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_reportCRead-onlyIdempotent
Read bounded ad performance rows.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so safety behavior is covered structurally. The description adds only the vague notion of 'bounded' rows and provides no additional context about scoping, limits, or reporting behavior beyond what the annotations and schema already 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 a single front-loaded sentence with no wasted words. It is concise, though its brevity borders on under-specification for a nine-parameter reporting 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?
Although the schema and output schema are rich, the description does not explain the tool's place among many sibling report tools or clarify what 'ad performance rows' covers. For a complex, nine-parameter reporting endpoint, this leaves important selection context missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are documented in the input schema. The description itself adds no parameter-specific meaning, which is acceptable at baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: reading ad performance rows. It is clear at a high level, but it does not distinguish this ad-level report from sibling report tools such as campaign_report, ad_group_report, or keyword_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?
There is no guidance on when to use this tool versus the many sibling reporting tools. The word 'bounded' hints at pagination but does not explain prerequisites, appropriate reporting contexts, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_resume_previewBRead-onlyIdempotent
Preview resuming one ad.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 contributes the key framing that this is a preview rather than an actual state change, but it does not say whether the preview must be followed by an apply call to take effect or what a rejected preview looks like.
Agents need to know what a tool does to the 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 and no redundancy. Its brevity edges toward under-specification rather than elegance, but structurally 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 explained, and annotations cover safety. What remains missing is the operational context an agent needs: how this preview relates to operations_apply and whether a preview expires or must be immediately consumed.
Complex tools with many parameters or behaviors need more documentation. Simple 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 mid-range (67%) and the undescribed field is 'id', whose meaning ('the ad to resume') and accepted format are never clarified in the description. The description adds no meaning beyond the property names, leaving the parameter gap 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 ('Preview resuming') and resource ('one ad'), which cleanly separates it from ad_pause_preview and the campaign/campaign-group resume variants. What 'preview' concretely produces versus a real resume is left implicit, but the action itself 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?
No guidance on when to prefer this over a direct resume path, no mention of a prerequisite like ad_get to obtain the id, and no explanation of the preview-to-apply workflow despite operations_apply existing as a sibling. The agent must infer the entire usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ads_queryCRead-onlyIdempotent
Query bounded ads with endpoint-specific filters.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy exact ad ID shortcut | |
| adId | No | exact ad ID shortcut | |
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| adGroupId | No | ad group scope shortcut | |
| timeRange | No | report or insight time range | |
| campaignId | No | campaign scope shortcut | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld, so the safety profile is fully covered by structured data. The description adds only the vague notion that results are "bounded" and filtering is endpoint-dependent, saying nothing about scope resolution order for the id/adId/campaignId/adGroupId shortcuts or how pagination bounds results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though the brevity is partly a symptom of under-specification rather than disciplined compression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 query tool with shortcut scoping fields, nested filter/sort/timeRange objects, and pagination, one sentence is far too thin, even with an output schema and rich inline parameter docs. The agent is left to infer precedence between id/adId and the campaign/adGroup scope shortcuts, and what "bounded" actually enforces.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented inline and the baseline is 3. The description's "endpoint-specific filters" is consistent with the filters property but provides no additional syntax, precedence, or combination 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?
"Query bounded ads" gives a verb (query) and a resource (ads), so the purpose is identifiable, but "bounded" is unexplained and the phrasing does not distinguish this from close siblings like ad_report, ad_get, or ad_groups_query. An agent can guess it is a filtered/segmented ad list, but only by 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?
There is no statement of when to use this versus ad_report, ad_get, or ad_group_report, and no exclusions or prerequisites. "endpoint-specific filters" implies variability but never tells the agent how to choose the right entry point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_update_previewCRead-onlyIdempotent
Preview an ad update.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | target resource ID as a string | |
| payload | Yes | typed fields to update | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description mostly restates the 'preview' idea. It adds no details about what previewing means here, such as whether it validates the payload, returns a diff, or has any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, front-loaded, and free of waste. Its brevity is structurally clean, although the missing detail is penalized in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four required parameters, a nested payload, and real sibling alternatives, the description does almost nothing to explain the preview workflow. The output schema and annotations reduce some burden, but an agent still lacks essential context on the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema itself documents profile, adAccountId, id, and the nested payload fields. The description adds no parameter meaning beyond that baseline, which is acceptable only because the schema is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: previewing an ad update. It is clear what the tool acts on, but it does not distinguish this preview from nearby siblings such as ad_pause_preview, ad_resume_preview, or ad_group_update_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives no guidance on when to use this preview instead of ad_get, an apply operation, or other ad-related preview tools. The word 'preview' implies a pre-apply check, but no alternatives or conditions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advertiser_resources_listBRead-onlyIdempotent
List App Store content-provider delegations available to a profile.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety and idempotency profile is covered. The description adds only the scoping note that results are bounded by a profile; it says nothing about whether the listing hits a live Apple Ads endpoint, whether an empty result is normal, or what the delegations represent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition. It is efficiently sized, though it is terse to the point of leaving the domain term 'content-provider delegations' unexplained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 both parameters fully documented in the schema, the description needn't explain return values, so the essentials are covered. However, for a tool whose subject matter (content-provider delegations) is obscure, one clause on what it returns or when it is empty would make the definition fully 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 100% for both parameters, so the baseline of 3 applies. The description reinforces that 'profile' scopes the result set but adds no semantics for adAccountId or for how the two required 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 names a specific verb (List) and a specific resource (App Store content-provider delegations) scoped to a profile, which is enough to distinguish it from query-style siblings like product_pages_query or apps_search. It stops short of naming a sibling it should be preferred over.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 call this tool, what prerequisite state it assumes, or which sibling to use instead for related advertiser/resource lookups. The only guidance is the implicit 'list available to a profile', leaving the agent to infer applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_locale_detailsARead-onlyIdempotent
Query compact locale metadata, or full assets for one required languageCode.
| Name | Required | Description | Default |
|---|---|---|---|
| adamId | Yes | App Store Adam ID as a string | |
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID | |
| languageCode | No | optional exact locale such as en-US | |
| includeAssets | No | include full assets for one required languageCode |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered. The description adds the meaningful constraint that full-asset mode works for exactly one languageCode, but it never explains what 'compact metadata' vs 'full assets' actually contain or how the report-style parameters behave for this endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, zero filler, with the primary mode stated first and the alternate mode immediately after. Nothing 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?
Rich structured data (100% schema coverage, output schema, read-only annotations) means the description needn't explain returns or safety. But for a 12-parameter tool it leaves the agent guessing about sibling choice and about how the generic report-style parameters apply to a locale lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns a nudge above baseline by making explicit the conditional relationship between languageCode and includeAssets that is only scattered across individual field descriptions. It still does not clarify why report parameters like timeRange, groupBy, filters or sorting exist on a locale endpoint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Query compact locale metadata, or full assets') and distinguishes its two operating modes. However, it does not differentiate itself from similarly-purposed siblings such as product_page_locales and supported_app_languages, leaving the agent to infer which locale source to 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?
The two modes are implied: default returns compact metadata, while supplying a languageCode with includeAssets returns full assets. There is no explicit 'use this when...' guidance and no mention of the alternative locale-related tools, so routing relies on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_opportunitiesCRead-onlyIdempotent
Collect independently classified eligibility and suggestion sections for an app.
| Name | Required | Description | Default |
|---|---|---|---|
| terms | No | optional seed terms | |
| adamId | Yes | App Store Adam ID as a string | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| countriesOrRegions | Yes | ISO country or region codes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered structurally. The description adds nothing beyond that: it doesn't say what 'collect' entails (live calls? aggregation?), whether it is expensive or rate-limited, or what it produces. The jargon 'independently classified' 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?
It is a single short sentence with no padding, which is good, but the brevity comes at the cost of clarity — the one sentence is front-loaded with an undefined term rather than a concrete purpose. Short without being 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?
For a tool with four required parameters and an output schema, the description is too thin: it doesn't state the use case, how the collected sections relate to eligibility/suggestion output, or why an agent should pick this over apps_eligibility. The output schema covers return shape, but the selection rationale is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (terms, adamId, profile, adAccountId, countriesOrRegions) are documented in the schema. The description adds no meaning about how these parameters scope the result, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Collect' plus the phrase 'eligibility and suggestion sections for an app' gestures at what the tool returns, but 'independently classified sections' is unexplained jargon. Nothing distinguishes it from close siblings like apps_eligibility, keyword_suggestions, or category_suggestions, so an agent cannot confidently pick it over 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 contains no when-to-use guidance, no prerequisites (profile, adAccountId), and no mention of alternatives. An agent must infer its role relative to apps_eligibility and the various *_suggestions tools 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.
app_rejection_reason_getBRead-onlyIdempotent
Read one App Store app rejection reason.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| rejectionReasonId | Yes | app rejection reason ID as a string |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered elsewhere. The description is consistent with those annotations ("Read") but adds no behavioral context of its own, such as error behavior for an invalid rejectionReasonId or what openWorld access implies.
Agents need to know what a tool does to the 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 waste, appropriate for a simple read tool. It is arguably too terse to be maximally helpful, but nothing in it 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, annotations are rich, and parameters are fully documented, so the description only needs to carry routing and context. It falls short on sibling differentiation against app_rejection_reasons_query, which is the one gap an agent would actually need filled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (profile, adAccountId, rejectionReasonId) are documented in the schema itself. The description adds no parameter-level meaning beyond that, which is the baseline expectation when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Read") and resource ("App Store app rejection reason") with singular scope ("one"). It is clear on its own, but it does not distinguish itself from the sibling app_rejection_reasons_query tool, which likely lists the same resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this single-item lookup versus app_rejection_reasons_query, and no mention of prerequisites such as needing a valid ad account or profile. The agent must infer the choice from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_rejection_reasons_queryBRead-onlyIdempotent
Query bounded App Store app rejection reasons.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds only 'bounded,' which loosely signals a limited result window. With annotations carrying the behavioral 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 front-loaded sentence with no waste. It is efficient but nearly silent on key selection criteria and scope 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?
With nine parameters, a nested filters/sorting/timeRange schema, and a full output schema, the description is thin but not incomplete enough to be misleading – the schema and output schema compensate. It would benefit from naming the required profile/adAccountId context and the bounded-window behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are documented in the schema. The description adds no parameter-level meaning beyond echoing 'bounded' pagination. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Query') and resource ('App Store app rejection reasons'), plus a scope hint ('bounded'). It does not explicitly distinguish itself from the sibling app_rejection_reason_get, so the single-record vs. list distinction must be inferred from the word 'Query'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus app_rejection_reason_get, or what prerequisites (profile, adAccountId) are needed. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apps_eligibilityCRead-onlyIdempotent
Check App Store advertising eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that — it doesn't say whether the call hits Apple's API live (openWorld), whether results are scoped to the ad account or the app, or what the check actually evaluates.
Agents need to know what a tool does to the 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 single sentence is front-loaded and free of waste, but at that length it is under-specified rather than efficient — there is no second sentence carrying the distinctions the 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 nine parameters including time ranges, filters and pagination, and no app identifier, the description should explain what is being checked and which parameters are actually relevant. The output schema covers return values, but the input-side ambiguity 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 100%, so every one of the nine parameters is documented in the schema and the description is not required to compensate. However, it offers no explanation for why a reporting-style surface (fields, filters, timeRange, pagination) accompanies an eligibility check, leaving the agent to guess which params matter.
Input schemas describe structure but not intent. Descriptions should explain 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 clear verb ('Check') and a domain resource ('App Store advertising eligibility'), but leaves 'eligibility' undefined and never says whose eligibility — no app identifier appears in the parameter list, so an agent cannot tell whether this answers per-app or per-account questions or how it differs from siblings like apps_get and apps_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?
There is no statement of when to use this instead of apps_get, apps_search, or app_opportunities, and no prerequisites or exclusions are given. The agent must infer from the name alone that this is a pre-flight check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apps_getBRead-onlyIdempotent
Read an App Store app by Adam ID.
| Name | Required | Description | Default |
|---|---|---|---|
| adamId | Yes | App Store Adam ID as a string | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds essentially nothing beyond that—no note on permissions, profile/ad-account context, or behavior when the app is unknown—so it contributes little 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?
A single front-loaded sentence with no waste. It is efficient, though the extreme brevity leaves little room for added detail, keeping it just under 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?
With an output schema present and all three parameters documented, the description need not explain return values. For a simple read tool it is adequate, but it omits any hint about profile/ad-account context that an agent must supply on every call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so adamId, profile, and adAccountId are fully documented in the schema. The description only echoes the adamId lookup, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read an App Store app') with a clear lookup key ('by Adam ID'), which meaningfully separates it from apps_search and apps_eligibility. It doesn't explicitly name a sibling, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by Adam ID' implies direct identifier lookup rather than search, which is implicit usage guidance. There is no explicit when-to-use, when-not-to-use, or named alternative such as apps_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apps_searchCRead-onlyIdempotent
Search apps; an empty result for a non-ASCII owned-app query gets one bounded exact-name fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| cpids | No | optional iTunes content provider IDs | |
| limit | No | result limit from 1 to 200 | |
| query | No | app name or Adam ID search text | |
| offset | No | zero-based result offset | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| storefronts | No | ISO storefront country codes | |
| returnOwnedApps | Yes | limit results to apps owned by the organization |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld, so safety is covered. The description adds one genuinely non-obvious behavior — a single bounded exact-name retry when a non-ASCII owned-app query returns empty — but omits broader behavior such as pagination, default limit, or result ordering.
Agents need to know what a tool does to the 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 sentence with the verb front-loaded and no filler. The only quibble is proportion: most of the sentence is spent on a narrow fallback while the primary operation is compressed to two 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 an 8-parameter search tool with 3 required parameters, the description never states what is being searched, whether results are owned apps or store listings, or how the filters interact. The output schema and annotations cover returns and safety, but the search semantics — the agent's main uncertainty — are 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 100% across all 8 parameters, so the schema does the heavy lifting and a 3 baseline applies. The description contributes nothing about how query, cpids, storefronts, and returnOwnedApps combine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Search apps" gives a verb and resource, but it doesn't say what corpus is searched (App Store catalog vs. the organization's owned apps) or how it differs from siblings like apps_get and app_store_geo_search. The remainder of the sentence describes an edge-case fallback rather than clarifying the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus apps_get, apps_eligibility, or app_store_geo_search, nor any prerequisite guidance. The fallback clause describes internal behavior, not a selection rule for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_geo_searchCRead-onlyIdempotent
Search eligible App Store countries, administrative areas, and localities.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | geo search text with at least two characters or * | |
| entity | No | Country, AdminArea, or Locality | |
| offset | No | zero-based result offset | |
| profile | Yes | local Apple Ads profile name | |
| eligible | No | exclude soft-blocked geos | |
| pageSize | No | page size from 1 to 200 | |
| adAccountId | Yes | Apple Ads ad account ID | |
| countryCode | No | ISO 3166-1 alpha-2 country code |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds nothing behavioral—no pagination limits (pageSize max 200), no explanation of what 'soft-blocked' means for the eligible flag, and 'eligible' in the description mildly conflicts with the fact that filtering is opt-in via the eligible parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no padding. It is short to the point of omitting context an agent would want, 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?
With 8 params at full schema coverage, an output schema, and annotations present, the structured data carries most of the load. The description is still thin on usage context and on the semantics of the eligible/countryCode filters, which is the remaining 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 100%, so all eight parameters are already documented, giving baseline 3. The description restates three of the entity types but adds no syntax, defaults, or interaction details (e.g., how countryCode interacts with query) beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search') and resource ('App Store countries, administrative areas, and localities'), which maps directly to the entity parameter values. No sibling tool covers geo search, so differentiation is implicit rather than stated, and the word 'eligible' slightly muddies scope since eligibility is actually opt-in via a 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?
No guidance on when to use this vs. related lookups (campaign_countries_preview, apps_eligibility, category_suggestions), no mention of the two required parameters being prerequisites (profile, adAccountId), and no note on the minimum query length rule beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_checkBRead-onlyIdempotent
Validate OAuth credentials and return the caller identity.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered by structured data. The description adds that the call returns identity, which is useful context beyond the annotations. It says nothing about failure behavior (what an invalid/expired credential produces) or that it touches an external OAuth endpoint, which is the main missing behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, action-first, zero filler. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the sole parameter is fully documented, so the description only needs to state intent and return shape, which it does. The remaining gap is error/negative-path behavior, which an agent calling an auth check would plausibly want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single `profile` parameter, so the schema documents it fully and the baseline is 3. The description mentions no parameter at all, so it neither adds meaning nor compensates for anything — it simply relies on 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?
Specific verb+resource: validate OAuth credentials and return the caller identity. An agent immediately knows this is a credential/identity check rather than a data query, and no sibling covers that ground. It loses a point because it never reconciles 'caller identity' with the required `profile` argument (a local profile name), which is the more important semantic 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?
No when-to-use, when-not-to-use, or alternative is stated. An agent must infer that this is a pre-flight sanity check to run before other calls; nothing in the text says whether it is required first, optional, or a diagnostic only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_auditBRead-onlyIdempotent
Collect campaign, ad-group, keyword, and search-term report baselines.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint, idempotentHint, and openWorldHint annotations already establish safety and network behavior. The description adds that the tool gathers baselines across four report levels, which is useful context, but it does not explain whether all four are returned together, whether anything persists, or any rate-limit/auth nuance. With annotations covering the safety profile, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is appropriately sized and immediately states the resource 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?
For a nine-parameter tool with an output schema and safety annotations, the description gives only the broad collection scope. It leaves the meaning of 'baseline', the aggregation behavior, and the choice against sibling report tools implicit, so it is only partially complete for tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents all nine parameters including profile, adAccountId, timeRange, filters, and pagination. The description adds no parameter-level detail, so it neither helps nor hurts beyond the schema; the baseline is 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 ('Collect') and names the four report domains whose baselines are gathered. It is distinguishable from single-report siblings like campaign_report because it lists all four levels, though it does not define what a 'baseline' contains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance, no exclusions, and no mention of sibling report tools or optimization_baseline. An agent can infer it is for baseline collection, but the description does not say when this tool is preferable to campaign_report, ad_group_report, keyword_report, or search_term_report.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_bid_strategy_previewCRead-onlyIdempotent
Preview MANUAL_CPT or eligible App Store Search Results MAX_CONVERSIONS strategy.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| strategy | Yes | ||
| campaignId | Yes | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 one piece of behavioral context — the eligibility gate on MAX_CONVERSIONS — but does not state whether the call validates the strategy, what it returns, or how eligibility failure surfaces; output schema covers return values only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler and the eligibility qualifier front-loaded. It is efficient but borders on under-specified 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?
With annotations, an output schema, and nested enum-constrained params, most structure is covered elsewhere, so the description only needs to add preview semantics and eligibility rules. It half-does that: the MAX_CONVERSIONS constraint is stated, but what a 'preview' actually computes and returns to the caller is left 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 50%, and the description does contribute meaning beyond the schema by tying MAX_CONVERSIONS to App Store Search Results eligibility, which the schema's enums do not express. However it says nothing about the required campaignId/adAccountId scoping or the conditional bid/bidStrategyGoal pairing enforced by dependentRequired.
Input schemas describe structure but not intent. Descriptions should explain 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 fragment names a specific verb ('Preview') and resource ('...strategy') and enumerates the two supported strategy types, but never says it applies to a campaign-level bid strategy; only the tool name supplies that scope. It also leaves 'preview' undefined, so an agent cannot distinguish it cleanly from ad_group_bid_preview, keyword_bid_preview, or campaign_update_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use statement and no named alternative. The only constraint offered is an implicit eligibility condition ('eligible App Store Search Results' for MAX_CONVERSIONS), which is a precondition rather than guidance on choosing this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_countries_previewBRead-onlyIdempotent
Preview replacing campaign country targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| countries | Yes | ||
| campaignId | Yes | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 open-world. The description adds that the tool previews country-targeting replacement, but it does not explain what the preview evaluates, what constraints apply, or what the agent should do with the 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?
The description is a single front-loaded sentence with no wasted text. However, its terseness leaves the action and effect of "replacing" somewhat ambiguous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 provide the safety profile, reducing what the description must cover. Still, with four required parameters and only partial schema descriptions, the description lacks enough usage and parameter context to be 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 description coverage is only 50%, and the description does not compensate by explaining the undescribed parameters. It only indirectly references the countries parameter through "country targeting" and gives no added detail for campaignId or countries format.
Input schemas describe structure but not intent. Descriptions should explain 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, "Preview," and identifies the resource as campaign country targeting. It is clear enough to distinguish this tool from general campaign previews, but it does not explicitly differentiate itself from related campaign preview tools such as campaign_update_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, nor any stated prerequisites or exclusions. The agent must infer that it should be used before changing campaign country targeting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_create_previewBRead-onlyIdempotent
Preview creation of one campaign and return a ten-minute receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | typed create payload for the resource | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 contributes one genuinely new behavioral fact — that a receipt is issued with a ten-minute lifetime — but leaves critical mechanics unexplained: whether the receipt must be redeemed, what it contains, and what happens after 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?
A single front-loaded sentence with zero filler, and the action is stated first. It is terse to the point of leaving the workflow implicit, but nothing in it is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 deeply nested create-payload tool with conditionals, unstated invariants (adAccountId must match), and a multi-step preview/apply flow, one sentence is not sufficient. The output schema covers the return value, but the description never explains the receipt's purpose or the follow-up call, which is the highest-value missing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the input schema carries rich per-field guidance (APPSTORE-only supply source, APPSTORE_APP promoted type, bid strategy conditionals). The description adds no parameter meaning of its own, so the baseline 3 applies for a schema that does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Preview creation') and resource ('one campaign'), which clearly separates it from campaign_update_preview or campaign_delete_preview. It does not, however, explicitly name a sibling or state the scope constraints (dry-run only, nothing persisted).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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, when-not-to-use, or alternative is given. The 'ten-minute receipt' hint faintly implies a preview-then-apply workflow (operations_apply / operations_verify), but the agent must infer that entirely, and nothing warns that this call does not actually create the campaign.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_daily_budget_previewBRead-onlyIdempotent
Preview a campaign daily-budget update with typed money.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| campaignId | Yes | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 clear. The description adds 'typed money' to indicate the amount parameter is a structured object, but provides no further behavioral context such as what 'preview' entails (e.g., validation vs. diff) or any 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?
A single efficient sentence that front-loads the action and resource without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and rich annotations, the description covers the core purpose and the typed money aspect. However, for a preview tool with many siblings, it lacks clarity on what preview means operationally and how it relates to other budget-related preview tools, leaving a gap in contextual understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 50% schema description coverage, the description adds meaning only for the amount parameter by calling out 'typed money'. It does not compensate for the undocumented campaignId parameter or elaborate on profile/adAccountId beyond their schema snippets.
Input schemas describe structure but not intent. Descriptions should explain 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 (Preview) and resource (campaign daily-budget update), and 'with typed money' signals the structured amount parameter. It does not explicitly distinguish itself from similar preview tools like campaign_update_preview, 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?
No explicit when-to-use or when-not-to-use guidance is given. It does not clarify how this preview differs from campaign_update_preview or daily_budget_recommendation_apply_preview, leaving the agent to infer its role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_delete_previewARead-onlyDestructiveIdempotent
Preview irreversible deletion of one paused campaign and its cascade inventory.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| expectedText | Yes | exact current resource name or keyword text |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds real value beyond that by specifying the blast radius ('cascade inventory') and a precondition ('paused campaign'), which an agent cannot derive from the hints 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?
A single dense sentence with zero filler; the irreversibility and cascade scope are front-loaded. It is efficient, though it stops short of the point where an agent knows the next step.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 destructive preview in a preview/apply pipeline, the description omits what the preview produces for later use, what happens on expectedText mismatch, and how to proceed to actual deletion — meaningful gaps for this class of 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 75%, so the schema mostly documents profile, adAccountId and expectedText. The description adds nothing about parameters — notably it never explains that expectedText is a guard against deleting the wrong resource, which is the key semantic for safe invocation. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (preview) and resource (deletion of a campaign) with scope: 'one paused campaign and its cascade inventory'. The resource name distinguishes it from the delete-preview siblings (ad_delete_preview, ad_group_delete_preview, keyword_delete_preview), though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the word 'preview' — an agent can infer this is the dry-run step before a real campaign deletion. There is no statement of when to choose this over campaign_pause_preview, nor any mention of the follow-up apply step (operations_apply / operations_verify) that the sibling list strongly suggests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_getARead-onlyIdempotent
Read one campaign by ID for current-state verification.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy campaign ID | |
| profile | Yes | local Apple Ads profile name | |
| campaignId | No | campaign ID as a string | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so safety and idempotency are covered. The description adds only the 'current-state verification' nuance; it does not mention required profile/ad-account authorization or freshness/rate-limit behavior, so it provides modest incremental 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?
A single front-loaded sentence with no filler. It is appropriately sized for a simple read operation, though 'current-state verification' is slightly vague and 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?
The tool is a simple single-resource read, an output schema exists, annotations cover safety, and the input schema is fully documented. The description is complete enough to call the tool correctly, with only the minor gap around ID-parameter disambiguation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters. The description says 'by ID' but does not clarify the relationship or precedence between the legacy 'id' and 'campaignId' parameters, which is the one ambiguity the schema leaves unresolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 one campaign by ID. This clearly contrasts with list-style siblings such as campaigns_query, but does not explicitly name the alternative or explain how it differs from campaign_report or campaign_audit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for current-state verification' implies a use case and context, but there are no explicit when-to-use/when-not-to-use rules and no named alternatives. An agent can infer this is the single-campaign lookup, but the guidance stops short of full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_inventoryCRead-onlyIdempotent
Read a campaign and bounded child inventory for safe auditing.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| pageSize | No | maximum children per resource from 1 to 200 | |
| campaignId | Yes | campaign ID as a string | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, covering the safety profile. The description adds 'bounded child inventory' which implies pagination via pageSize, but does not explain what child resources are included, any rate limits, or authentication needs beyond the inline schema descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. However, 'for safe auditing' is somewhat vague and could be tightened to add more value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and full annotation coverage, the minimal description is adequate but leaves gaps: it does not specify which child resources are returned, nor does it help an agent choose between this and the many sibling campaign-reading tools. More context on the inventory scope would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are documented in the input schema. The description adds no parameter-level meaning beyond what the schema provides (e.g., no clarification on pageSize default behavior or how profile interacts with adAccountId).
Input schemas describe structure but not intent. Descriptions should explain 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 verb ('Read') and resources ('campaign and bounded child inventory'), but 'child inventory' is vague about which child resources are returned. It does not clearly distinguish from sibling tools like campaign_get or campaign_audit, especially given the overlapping 'auditing' framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only a vague hint ('for safe auditing') suggests a use case; there is no explicit guidance on when to use this tool versus alternatives such as campaign_get, campaign_audit, or campaigns_query. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_pause_previewBRead-onlyIdempotent
Preview pausing one campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| campaignId | Yes | campaign ID as a string | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and idempotentHint=true, so the safety profile is covered. The description adds that this is a preview (non-committal) operation, but it does not explain what a preview returns, how long it remains valid, or that it must be applied through operations_apply, which is the key behavioral fact for this whole tool family.
Agents need to know what a tool does to the 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. It is efficient, though its brevity reflects under-specification rather than tight editing of richer content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, but for a preview-style mutation tool in a preview/apply pipeline the description should mention the operations_apply handoff and any validation or side-effect notes. Neither is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so profile, adAccountId and campaignId are all documented in the schema. The description adds nothing about parameter meaning or constraints, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (pausing) and resource (one campaign), and the word 'Preview' signals it differs from an actual pause. It does not explicitly distinguish itself from close siblings like campaign_resume_preview or ad_group_pause_preview, but the resource 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?
There is no guidance on when to use this versus campaign_resume_preview, campaign_delete_preview, or campaign_update_preview, nor any mention of the follow-up step (operations_apply) that makes a preview actionable. An agent must infer the workflow entirely 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.
campaign_reportCRead-onlyIdempotent
Read bounded campaign performance rows.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds almost nothing beyond that: "Read" restates readOnlyHint, and "bounded" merely echoes the pagination schema's "bounded result window" without explaining truncation, rate limits, or auth/profile 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?
A single six-word sentence with zero filler and the key scope word up front. It borders on under-specification for a 9-parameter reporting tool rather than being wasteful, but nothing needs to 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 and the input schema is fully documented plus annotations cover safety, so the description does not need to explain return values. Still, for a report tool with nine parameters and many report siblings, the absence of any selection or scope context 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 100% across all 9 parameters (fields, filters, groupBy, options, timeRange, sorting, pagination, profile, adAccountId), so the schema carries full parameter meaning. The description supplies no additional semantics such as which fields are valid or how timeRange interacts with granularity, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource ("Read ... campaign performance rows") so an agent knows it is a reporting/read tool at campaign scope. However, it never distinguishes itself from the many sibling report tools (ad_report, ad_group_report, keyword_report, search_term_report), so the campaign-level boundary is inferred only 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?
No when-to-use guidance, no prerequisites (profile, ad account), and no mention of when to prefer it over the other report siblings. The only cue is the tool name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_resume_previewCRead-onlyIdempotent
Preview resuming one campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| campaignId | Yes | campaign ID as a string | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 safety is covered and the description does not contradict them. However, the description adds nothing beyond that: it never says the call makes no changes, whether the campaign must currently be paused, or what the preview response contains, all of which are the key behavioral facts for a preview tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the key qualifier ('preview') front-loaded and no filler. It is efficient, though the terseness comes at the cost of the missing behavioral detail scored elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 and annotations are present, so return values need not be spelled out, but the one concept that actually needs explaining for this tool — what 'preview' means relative to applying the resume — is absent. For a 3-required-parameter mutation-preview in a large sibling family, this leaves a real conceptual 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 100%; all three parameters (profile, adAccountId, campaignId) are documented in the schema. The description contributes no additional parameter meaning such as ID format, profile resolution, or how adAccountId scopes campaignId, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Preview resuming one campaign" states a specific verb (preview/resume) and a specific resource (one campaign), which cleanly separates it from siblings like campaign_pause_preview and campaign_delete_preview. It stops short of explaining what a 'preview' actually produces, but the action being modeled 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?
There is no statement of when to use this versus alternatives, nor any mention of the obvious pairing with operations_apply or campaign_get. The agent must infer that a preview is a dry-run that precedes an apply step, and that this is the campaign-level (not ad group or keyword-level) resume path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_schedule_previewCRead-onlyIdempotent
Preview a campaign start and end schedule update.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| endTime | No | ||
| profile | Yes | local Apple Ads profile name | |
| startTime | No | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 'start and end schedule' scoping and does not explain what a preview actually produces (validation errors, diff, confirmation token) or that it does not persist changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though the brevity reflects under-specification rather than tight writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 preview tool in a large preview/apply family, the description omits the apply step, time format expectations, and what the preview verifies. An output schema exists so return shape needn't be explained, but the workflow context is still 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 only 40% (profile and adAccountId documented; id, startTime, endTime bare). The description mentions 'start and end' but gives no format guidance for the nullable time strings, which is the key ambiguity 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 ('Preview') and resource ('campaign start and end schedule update'), so an agent can tell it targets campaign schedule fields. It does not distinguish itself from adjacent siblings such as campaign_update_preview or ad_group_schedule_preview, which is the missing fifth 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?
There is no guidance on when to call this versus campaign_update_preview or ad_group_schedule_preview, and no mention of the preview-then-apply workflow implied by operations_apply. 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.
campaigns_queryCRead-onlyIdempotent
Query bounded campaigns with endpoint-specific filters.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy exact campaign ID shortcut | |
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| campaignId | No | exact campaign ID shortcut | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds only "bounded" and "endpoint-specific" without explaining what bounds apply (pagination caps, result limits) or any auth/account-scope behavior, so it contributes little beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is good structurally, but concision here comes at the cost of substance — the one vague qualifier "bounded" is doing work it cannot support. Appropriately short, insufficiently 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?
For an 11-parameter tool with nested filter/sorting/pagination objects and required profile/adAccountId, the description leaves critical selection context unexplained: no mention that it is a list/search endpoint, no guidance on using the legacy "id" shortcut versus filters, and no interaction with the existing output schema. It is not complete enough to guide confident selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 11 parameters is already documented in the schema, including nested filter/sorting/pagination objects. The description adds no extra semantics (e.g., how "id" versus "campaignId" shortcuts interact), so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb and resource ("Query ... campaigns") so the agent knows it is a campaign read operation, but "bounded" is never defined and nothing distinguishes it from siblings like campaign_get, campaign_report, campaign_audit, or campaign_countries_preview. The agent must infer this is the general list/report query endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 at all: it does not say when to prefer this over campaign_get (single campaign), campaign_report (performance metrics), or campaign_audit. "endpoint-specific filters" gestures at flexibility without telling the agent which situations call for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_status_reason_detailsCRead-onlyIdempotent
Read App Store campaign limited-status reason details.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| campaignId | Yes | campaign ID as a string | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is fully covered by structured data. The description adds no behavioral context of its own—no mention of what the returned reasons look like, whether a campaign with normal status yields an empty result, or any auth/scoping notes.
Agents need to know what a tool does to the 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 arguably too terse rather than padded, so it earns good marks for efficiency but not the top score for informativeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 full parameter documentation, the description need not explain return values, and annotations cover the safety profile. Still, for a diagnostic tool an agent may hesitate without any hint about when the status-reason data is meaningful, leaving a modest gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (profile, campaignId, adAccountId) are documented in the schema, so the description need not repeat them. It adds no extra meaning such as ID format or where to obtain them, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and a specific resource ('App Store campaign limited-status reason details'), so an agent can tell this fetches the explanation behind a campaign's limited status. It does not explicitly differentiate from near siblings like campaign_get or app_rejection_reason_get, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus campaign_get or other campaign-diagnostic tools, and no stated preconditions beyond the required IDs. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_update_previewCRead-onlyIdempotent
Preview a campaign update after reading current state.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | target resource ID as a string | |
| payload | Yes | typed fields to update | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 and there is no contradiction with "preview." The description adds a small amount of context in implying a read-then-preview workflow, but it does not state whether the preview returns a diff, whether it can fail on invalid payloads, or that nothing is persisted — all useful for an agent reasoning about a no-op 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?
A single eight-word sentence with no filler and front-loaded, which is efficient. However, the terseness crosses into under-specification; the second clause ("after reading current state") spends words without adding actionable 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 needn't be explained, and annotations carry the safety profile. But for a tool with a large nested payload, four required parameters, and numerous specialized preview siblings, the description fails to convey the preview-then-apply workflow or the scope of the update, leaving real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents profile, adAccountId, id, and the deeply nested payload including enum-constrained bid strategy fields. The description adds nothing beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a verb and resource ("Preview a campaign update"), which an agent can map to a specific tool, but it omits what can be updated (name, status, budget, targeting, bid strategy) and how it differs from the many specialized preview siblings such as campaign_daily_budget_preview, campaign_schedule_preview, and campaign_pause_preview. The phrase "after reading current state" is ambiguous and does not sharpen the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no named alternative. Critically, it never says what to do with the preview result (presumably operations_apply) or why one would choose this general update preview over the field-specific preview siblings. "After reading current state" hints at a prerequisite but never names campaign_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
category_suggestionsCRead-onlyIdempotent
Get category opportunities for an App Store app.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds nothing beyond that: no explanation of what a 'category opportunity' contains, whether data is live or cached, or how the profile/adAccountId interact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It is terse but structurally sound; the brevity is a content gap rather than verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters, an output schema, and a rich set of suggestion/report siblings, a one-line description is too thin. An output schema relieves the need to document return values, but the agent still lacks context on what an opportunity is and how to select this tool over its many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are documented structurally and baseline 3 applies. The description contributes no additional meaning about how filters, groupBy, or options apply specifically to category insights.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb ('Get') plus resource ('category opportunities') scoped to an App Store app, so the agent knows the general operation. It does not differentiate itself from near-siblings like app_opportunities or keyword_suggestions, which remain ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 vs. alternatives such as app_opportunities, search_term_popularity, or keyword_suggestions, and no prerequisites or exclusions. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_historyBRead-onlyIdempotent
Read bounded Apple Ads change history for a required typed event window.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | required event window end date in YYYY-MM-DD | |
| start | Yes | required event window start date in YYYY-MM-DD | |
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| userIds | No | optional Apple Ads user IDs | |
| metadata | No | none, latest, or snapshot; defaults to latest | |
| timeZone | No | UTC or ORTZ; defaults to UTC | |
| entityIds | No | optional changed entity IDs | |
| timeRange | No | report or insight time range | |
| userTypes | No | CUSTOMER, CUSTOMER_API, or APPLE_SUPPORT | |
| adGroupIds | No | optional parent ad group IDs | |
| eventTypes | No | CREATE, UPDATE, or DELETE | |
| needTotals | No | request accurate totalCount; Apple defaults to true | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID | |
| campaignIds | No | optional parent campaign IDs | |
| entityTypes | No | optional Apple audit entity types | |
| adAccountIds | No | optional audited ad account IDs | |
| transactionIds | No | optional audit transaction IDs |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds that results are bounded and require a typed event window, but it does not explain pagination behavior, auth needs, or return characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It puts the core action and scope first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 23 parameters and 100% schema coverage plus an output schema, the description needn't document every field. However, for a tool with a close sibling like change_history_detail, it is too terse to fully guide correct selection and usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema itself documents all 23 parameters, including start, end, filters, pagination, and timeZone. The description mentions a required typed event window but adds no parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: read Apple Ads change history. It also scopes the request to a bounded, required typed event window, but it does not explicitly differentiate this tool from the sibling change_history_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 does not say when to use this tool versus change_history_detail or campaign_audit, nor does it state any exclusions or prerequisites. The required event window is implied by the schema, not explained as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_history_detailBRead-onlyIdempotent
Read bounded field-level details for one change-history entry.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | result limit from 1 to 200 | |
| offset | No | zero-based result offset | |
| profile | Yes | local Apple Ads profile name | |
| detailId | Yes | change detail ID | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds that results are "bounded" and field-level, which is useful context, but it does not explain how pagination works, what permissions are required, or what "bounded" means beyond the limit/offset parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no wasted words. The key distinction, reading details for one entry, appears 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?
For a simple read-only detail tool with full schema coverage, rich annotations, and an output schema, the description is largely complete: it identifies the resource and the entry-level scope. The main missing context is how to obtain the required detailId from the sibling change_history tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all five parameters including profile, adAccountId, detailId, limit, and offset. The description adds no syntax, constraints, or meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ("Read ... field-level details for one change-history entry") and makes clear this is a detail-level read scoped to a single entry, which distinguishes it from the sibling change_history listing tool without naming it explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the tool is for inspecting one existing change-history entry, but it provides no explicit when-to-use guidance, no when-not-to-use guidance, and does not name the sibling change_history tool that would be used to find the detailId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creative_create_previewCRead-onlyIdempotent
Preview creation of one creative.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | typed create payload for the resource | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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, but the description adds nothing about what the preview actually returns, whether it validates or persists state, or what prerequisites apply for openWorldHint access. With annotations doing the minimum, this is a missed opportunity 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?
One short, front-loaded sentence with no waste, but also no substance — it is under-specified rather than truly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a nested payload, an output schema, and preview semantics that need explaining, yet the description covers none of it. Because output schema and annotations exist, some burden is lifted, but for a nested create-preview operation this is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with profile, adAccountId, and the nested payload documented in the schema itself. The description adds no extra semantics for creativeType values, destination types, or the empty creativeSpec, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Preview creation of one creative" names the verb and resource, but it essentially restates the tool name and title rather than explaining what a preview is or how it differs from creative_update_preview or creative_delete_preview. The purpose is inferable but not sharpened.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 creatives_query, creative_get, or creative_update_preview, and no mention of what a caller should do with the preview result. The agent must infer the dry-run workflow 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.
creative_delete_previewARead-onlyDestructiveIdempotent
Preview irreversible deletion of one unreferenced creative.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| expectedText | Yes | exact current resource name or keyword text |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=true, so the safety profile is covered; the description adds real value by stating the deletion is irreversible and by flagging the unreferenced-only precondition, which is not encoded anywhere in structured fields. It stops short of explaining the preview→apply handoff, which would have fully closed the loop.
Agents need to know what a tool does to the 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 irreversible and unreferenced qualifiers arrive before anything else.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 cover the safety profile. However, for a destructive preview tool the description is silent on the confirmation workflow (that nothing is deleted yet and how the deletion is actually committed) and on the failure mode when the creative is still referenced, 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 coverage is 75% with concise descriptions for profile, adAccountId, and expectedText, so the schema carries most of the burden. The description adds nothing about how any parameter is used, notably why expectedText is required as a confirmation guard — a natural 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?
Names a specific verb (preview deletion) and resource (creative) with scope qualifiers (one, unreferenced, irreversible), which separates it from creative_create_preview/creative_update_preview and from ad_delete_preview. It does not explicitly contrast with siblings, but the resource noun plus 'preview' framing makes selection 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 word 'unreferenced' implies a precondition — the creative must not be in use — but this is left implicit. There is no statement of when to choose this over creative_get, nor any indication that the preview must be followed by a separate apply/execution step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creative_getBRead-onlyIdempotent
Read one creative by ID for current-state verification.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy creative ID | |
| profile | Yes | local Apple Ads profile name | |
| creativeId | No | creative ID as a string | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds nothing further: it says nothing about which ID form is authoritative, error behavior for stale IDs, or freshness guarantees. With the bar lowered by annotations, this is a thin 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?
One short sentence with the verb and resource front-loaded; there is no filler. It is efficient, though the brevity leaves out information the tool would benefit from carrying.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 schema coverage is complete, so return values and parameters need not be explained. However, the description does not resolve the two-ID ambiguity or give any usage context, which matters for a point-read tool in a family with a parallel query 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 100%, so all four parameters are documented in the schema itself, justifying the baseline 3. The description says only 'by ID' and does not clarify the relationship between the two ID parameters, so it adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Read one creative by ID.' That distinguishes it from mutation tools like creative_update_preview and from bulk ones like creatives_query. It stops short of explicitly naming creatives_query as the list alternative, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'for current-state verification' implies it should be used to fetch the live state, presumably before updates or after changes. It never states when to prefer creatives_query instead or what the 'verification' workflow entails. 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.
creatives_queryBRead-onlyIdempotent
Query bounded App Store creatives with endpoint-specific filters.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy exact creative ID shortcut | |
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| creativeId | No | exact creative ID shortcut | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds useful context that results are bounded and filters are endpoint-specific. However, it does not explain pagination behavior, permissions, or how the legacy id and creativeId shortcuts interact with filters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It puts the verb and resource first, then qualifies scope and filters. Every phrase contributes to the 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?
With 11 parameters, a rich 100% described schema, annotations, and an output schema, the description is minimally adequate. It does not explain routing relative to sibling tools or clarify the relationship among the many optional report/filter/pagination parameters. The structured fields carry most of the specification burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter schema already documents all 11 parameters, including filters, pagination, timeRange, and required profile/adAccountId. The description only alludes to filtering and bounding and adds no parameter-level semantics beyond the schema. This matches the baseline of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain 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: 'Query' and 'App Store creatives'. It also adds scope with 'bounded' and 'endpoint-specific filters'. It does not explicitly distinguish this tool from sibling creative_get or ads_query, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus creative_get or the other query tools. The phrase 'endpoint-specific filters' describes the filtering model but does not provide selection criteria. An agent must infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creative_update_previewCRead-onlyIdempotent
Preview a creative update.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | target resource ID as a string | |
| payload | Yes | typed fields to update | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 structurally. The description adds nothing beyond restating 'preview' — it does not say what the preview returns (a diff? validation errors?), whether it validates the payload, or that it leaves state unchanged. No contradiction with annotations, but no value added.
Agents need to know what a tool does to the 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 nothing extraneous, so it is not bloated. However, its brevity comes at the cost of under-specification rather than efficiency — the same length could have carried one clarifying clause about the preview's effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-required-parameter, nested-payload mutation-preview tool, the description omits the essentials: what the preview returns, whether it is a dry-run against the referenced creative, and how it relates to the eventual apply step. An output schema exists, which relieves some burden on return values, but the workflow context is still missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters including the nested payload are documented in the schema, which sets the baseline at 3. The description adds no semantics of its own — notably it does not mention that the payload only accepts 'name' with additionalProperties=false, a constraint the agent would only find by reading 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 verb ('Preview') and a resource ('creative update'), so the basic operation is inferable. But it does nothing to separate this tool from the many adjacent preview siblings (creative_create_preview, creative_delete_preview, ad_update_preview, campaign_update_preview), leaving the agent to rely on the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus creative_get, creative_create_preview, or the corresponding apply operation. The agent must infer the preview-then-apply workflow from the naming convention rather than from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_budget_recommendation_apply_previewCRead-onlyIdempotent
Preview applying one daily-budget recommendation under an explicit maximum.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| appliedAmount | No | ||
| maximumAmount | No | ||
| promotedObjectId | Yes | ||
| recommendationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, destructive=false, so the safety profile is covered. The description adds real context by flagging that the applied budget is bounded by an 'explicit maximum', but it never says what happens when the recommendation exceeds that maximum (rejected, capped, clamped) or that no state changes occur on the server.
Agents need to know what a tool does to the 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 key constraint front-loaded and no filler. It is efficient, though its brevity leaves the gaps noted in the other dimensions rather than being strength through economy alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 means return values need not be explained and annotations cover safety, but for a 6-parameter tool with 33% schema coverage the description should still clarify the appliedAmount/maximumAmount interaction and the promotedObjectId source. Those omissions are material 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 only 33%: profile and adAccountId are documented, while recommendationId, promotedObjectId, appliedAmount and maximumAmount are not. The description only gestures at maximumAmount ('explicit maximum') and 'one' recommendation; it says nothing about appliedAmount versus maximumAmount or what promotedObjectId identifies, 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 ('Preview applying'), a specific resource ('one daily-budget recommendation'), and a scoping constraint ('under an explicit maximum'). It implicitly distinguishes itself from the target_cpa_recommendation_apply_preview and dismiss_preview siblings by naming the resource type, 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?
No statement of when to use this versus daily_budget_recommendation_apply (the real apply) or daily_budget_recommendation_dismiss_preview, and no prerequisite noted (e.g. fetch IDs via daily_budget_recommendations first). Only the word 'Preview' hints at the workflow, leaving the agent to infer everything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_budget_recommendation_dismiss_previewCRead-onlyIdempotent
Preview dismissing one daily-budget recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| appliedAmount | No | ||
| maximumAmount | No | ||
| promotedObjectId | Yes | ||
| recommendationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so safety is covered. The description adds only that this is a preview of dismissing a single recommendation, which is useful but largely redundant with the read-only annotation and omits details such as whether it validates eligibility or returns warnings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no filler. Brevity is appropriate, though it contributes to the under-specification captured in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter preview tool, the description gives almost no context about the required identifiers or how the optional budget amounts affect the preview. An output schema exists, so return values need not be explained, but the input-side context remains 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 only 33%, so the description must compensate for undocumented parameters. It only loosely implies recommendationId via 'one daily-budget recommendation' and says nothing about profile, adAccountId, promotedObjectId, appliedAmount, or maximumAmount.
Input schemas describe structure but not intent. Descriptions should explain 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 ('dismissing'), resource ('daily-budget recommendation'), and scope ('one', 'Preview'). It implicitly distinguishes itself from apply and target-CPA siblings through the resource and action, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It does not explain when to use this preview versus the apply preview, the recommendation list, or any actual dismissal path. The only guidance is implied by the word 'Preview'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_budget_recommendationsBRead-onlyIdempotent
Read daily-budget recommendations without applying them.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered structurally; the phrase 'without applying them' reinforces that no mutation occurs, which is useful confirmation. It does not disclose where recommendations originate, whether they are account-wide or per-campaign, or any freshness/staleness behavior that would help interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the key constraint ('without applying them') arrives immediately. It is arguably under-specified rather than padded, so conciseness itself is not the problem.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 required profile/adAccountId are schema-documented. However, for a nine-parameter reporting-style tool with many optional shaping parameters, the description says nothing about what the recommendations represent or how filtering affects them, leaving the agent to infer behavior from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters (fields, filters, groupBy, timeRange, pagination, adAccountId, profile, etc.) are already documented in the schema. The description adds no parameter meaning beyond that, which lands exactly at the baseline for a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (read) plus specific resource (daily-budget recommendations), with the added qualifier 'without applying them' that separates it from the apply_preview and dismiss_preview siblings. It stops short of naming those siblings, so differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Without applying them' signals this is the inspection-only path and gestures at the apply/dismiss alternatives, but it never states the condition under which an agent should choose this over daily_budget_recommendation_apply_preview or daily_budget_recommendation_dismiss_preview. Usage is inferable, not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_bid_previewBRead-onlyIdempotent
Preview a targeting keyword bid update.
| Name | Required | Description | Default |
|---|---|---|---|
| bid | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adGroupId | No | optional parent ad group assertion | |
| keywordId | Yes | ||
| campaignId | No | optional parent campaign assertion | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint, and openWorldHint, and the description does not contradict them. However, the description adds no behavioral context beyond the annotations, such as what the preview validates or how it relates to applying the change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no redundant wording. It is appropriately sized for the amount of content it actually conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 return values and read-only behavior need not be explained. Still, for a tool with many close preview siblings, the description is too sparse to fully guide correct selection and use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 67% description coverage, but the description does not explain the nested bid amount/currency object, keywordId, or optional parent assertion parameters. It only vaguely links the tool to a keyword bid, which adds little 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 names a specific verb and resource: "Preview" plus "targeting keyword bid update." It is clearer than a generic update tool, but it does not explicitly distinguish itself from close siblings such as keyword_update_preview or ad_group_bid_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word "Preview" implies this should be used before applying a keyword bid change, but there is no explicit when-to-use guidance. It also does not mention alternatives such as keyword_update_preview or operations_apply, leaving selection context inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_create_previewCRead-onlyIdempotent
Preview creation of one targeting keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | typed create payload for the resource | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 structurally. The description adds nothing beyond that — it does not say the preview persists nothing, whether it validates against the ad account, or what the agent should do with the preview output before applying 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?
A single sentence with zero waste, front-loaded with the key distinction that this is a preview. It is efficient, though its brevity is also the source of the missing guidance rather than a virtue of tight writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 return values and mutation risk need not be explained. However, for a tool sitting inside a large preview/apply workflow with a deeply nested payload, the description should at least indicate that this is a dry run whose result feeds a subsequent apply step.
Complex tools with many parameters or behaviors need more documentation. Simple 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 nested payload properties are typed (matchType, status enum, bid object with amount/currency pattern), so the schema carries the parameter burden. The description adds no meaning about required fields, matchType values, or bid semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: previewing creation of a single targeting keyword. The word 'one' implicitly distinguishes it from the bulk siblings (keywords_bulk_create_preview), but no sibling is named explicitly and there is no mention of the singular create vs update distinction being 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?
No when-to-use guidance beyond the implied 'preview' framing. Nothing tells the agent how this relates to keywords_bulk_create_preview, keyword_update_preview, or the operations_apply/operations_verify siblings that presumably consume the preview result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_delete_previewBRead-onlyDestructiveIdempotent
Preview irreversible deletion of one keyword under a paused campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| expectedText | Yes | exact current resource name or keyword text |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, readOnlyHint=true, and idempotentHint=true, so the dry-run, non-mutating nature is partly covered by structured data. The description adds genuine value by calling the underlying deletion 'irreversible', which stresses consequence beyond the generic hint, but it says nothing about what the preview returns, whether approval is needed, or that expectedText guards against stale 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?
A single 11-word sentence with the operation, its risk level, and its scope all front-loaded. Nothing 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 no explanation, and annotations carry the safety profile. The only gap is the unexplained relationship to the paused-campaign precondition and the follow-up apply step; given how lean the tool is, that is a minor 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 coverage of 75% is high, so the baseline of 3 applies, and profile, adAccountId, and expectedText are already documented in the schema. The description does not explain the optimistic-concurrency role of expectedText or the undocumented id parameter, so it adds little beyond the schemas.
Input schemas describe structure but not intent. Descriptions should explain 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 verb-plus-resource combination ('Preview irreversible deletion of one keyword') is specific and clearly separable from siblings like keyword_pause_preview, keyword_update_preview, or negative_keyword_delete_preview. The scoping phrase 'under a paused campaign' narrows intent further, though it reads ambiguously, since there is no campaign parameter to enforce 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?
Nothing says when to choose this over alternatives or what to do next; there is no mention that it is a preview step that presumably feeds operations_apply, and no statement of conditions or exclusions. The agent must infer the whole workflow from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_getARead-onlyIdempotent
Read one targeting keyword by ID for current-state verification.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy keyword ID | |
| profile | Yes | local Apple Ads profile name | |
| keywordId | No | keyword ID as a string | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, idempotent, open-world operation. The description adds the useful notion of current-state verification, but does not disclose error behavior, permissions, rate limits, or how the live state differs from preview endpoints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no waste, and the key scoping information is front-loaded. It is appropriately sized for a simple read-by-ID tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has annotations covering safety and an output schema, and the schema fully documents parameters, so the description does not need to explain return values. It is nearly complete, though it could have explicitly clarified the legacy ID versus keywordId choice 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 100%, so all four parameters are documented in the schema. The description only says 'by ID' and does not clarify the relationship between the optional legacy 'id' and 'keywordId' parameters, so it adds no meaningful parameter semantics beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: read one targeting keyword by ID. The phrase 'for current-state verification' also implies a read of live state versus list or preview operations, but it does not explicitly name sibling tools such as keywords_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for current-state verification' gives an implied usage context, but there is no explicit guidance on when to use this versus keywords_query, keyword_update_preview, or negative_keyword_get. The agent must infer the appropriate boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_pause_previewBRead-onlyIdempotent
Preview pausing one targeting keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that this is a preview rather than an actual pause, but it does not explain what previewing entails or how the preview is later applied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is efficiently structured, though its brevity contributes to gaps handled in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 preview tool with annotations and an output schema, the description is minimally adequate. However, given the surrounding preview/apply workflow, it should clarify that this only previews the pause and does not itself apply the change.
Complex tools with many parameters or behaviors need more documentation. Simple 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 moderate at 67%; profile and adAccountId are documented in the schema, while id is undocumented there. The phrase 'one targeting keyword' implies id refers to a keyword, but the description adds little further meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: preview pausing one targeting keyword. The word 'targeting' distinguishes it from negative-keyword tools, and 'pausing' distinguishes it from sibling keyword resume, delete, update, bid, and create previews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 restates the operation and gives no explicit when-to-use guidance, exclusions, or alternatives such as how this relates to operations_apply or other keyword preview tools. Usage is implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_reportBRead-onlyIdempotent
Read bounded keyword performance rows, optionally including EMPTY_METRICS.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID | |
| includeZeroMetrics | No | include keywords with no metric rows by requesting EMPTY_METRICS |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered elsewhere. The description adds 'bounded', implying a capped result window that matters for planning pagination, and flags that empty-metric rows are optional rather than default. It says nothing about rate limits, row caps, or async behavior expected of a reporting endpoint over an open-world API.
Agents need to know what a tool does to the 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 scope ('bounded') and the notable option ('EMPTY_METRICS') come first. It is efficient but so short that the terseness shades into under-specification rather than economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, annotations, and full parameter coverage, much of the burden is offloaded, so the description need not explain return values or safety. However, for a 10-parameter reporting tool, it leaves the relationship between filters/groupBy/sorting and the result rows entirely to the schema, and gives no guidance on how to position this tool among the many sibling report tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including includeZeroMetrics ('include keywords with no metric rows by requesting EMPTY_METRICS') is already documented. The description's EMPTY_METRICS reference merely restates that schema text and adds no new semantics for filters, groupBy, sorting or timeRange.
Input schemas describe structure but not intent. Descriptions should explain 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+scope: 'Read bounded keyword performance rows' tells an agent this is a read-only reporting tool scoped to keyword-level metrics, distinct from keyword_get or keywords_query. It never names a sibling report tool (ad_group_report, search_term_report, ad_report) to sharpen the boundary, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not guidance beyond 'bounded' hinting at pagination. It does not say to prefer this over keyword_get when the agent needs metrics, nor over search_term_report when the agent wants query-level data. The only semi-useful hint is the EMPTY_METRICS mention, which still requires the agent to know which parameter enables it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_resume_previewBRead-onlyIdempotent
Preview resuming one targeting keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds that this is a preview of resuming rather than an actual resume, but it does not explain what the preview returns, what it validates, or any prerequisites beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is appropriately terse, though the extreme brevity leaves no room for structural clues about usage or prerequisites.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 benefits from rich annotations and an output schema, so the description need not explain return values. However, it omits any mention of how the preview relates to applying changes or what an agent should do next, leaving a contextual gap for a preview-style workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter meaning beyond the schema, and schema description coverage is only 67% because the required 'id' parameter has no description. With a meaningful gap in schema documentation and no compensating text in the description, parameter semantics are weak.
Input schemas describe structure but not intent. Descriptions should explain 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 ('resuming'), resource ('targeting keyword'), and operation mode ('preview'), which cleanly distinguishes it from siblings such as keyword_pause_preview and keyword_update_preview. An agent can tell what it 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 description gives no explicit guidance on when to use this preview versus alternatives such as keyword_pause_preview, keyword_update_preview, or operations_apply. The preview nature is implied only by the word 'Preview' and the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keywords_bulk_create_previewARead-onlyIdempotent
Preview up to 100 same- or cross-group keyword creates as one Apple bulk request and aggregate receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adGroupId | Yes | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld. The description adds behavioral context not in those annotations: a hard 100-item cap, one bulk request, support for same- or cross-group items, and aggregated receipt output. It does not discuss prerequisites or error handling, but the added batch semantics are 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?
A single, front-loaded sentence that captures verb, scope, batching model, and output aggregation 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 tool with a required nested items array and an output schema, the description supplies the key missing context – 100-item cap, cross-group capability, preview semantics, and receipt aggregation. It does not explain profile/ad-account prerequisites, but the schema and annotations cover the rest 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 coverage is 50%, with useful descriptions on the ambiguous fields (correlationId format, per-item adGroupId override, profile, adAccountId). The description's 'same- or cross-group' hint reinforces the per-item adGroupId override but adds no detail on the items array, bid, status, or matchType beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (preview keyword creates) with clear scope modifiers: up to 100 items, same- or cross-group, one Apple bulk request, aggregated receipt. This implicitly distinguishes it from keyword_create_preview (single) and keywords_bulk_update_preview (update), though it does not name 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 'bulk request' and 'up to 100' – an agent can infer this is for batching many creates rather than repeated single creates. However, there is no explicit when-to-use/when-not-to-use statement or named alternative, so it remains inference rather than guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keywords_bulk_update_previewARead-onlyIdempotent
Preview up to 100 targeting keyword updates as one drift-bound operation.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adGroupId | Yes | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 does add non-obvious context—the 100-item ceiling and the notion of a single atomic operation—but 'drift-bound' is undefined jargon that the agent cannot act on, and nothing explains whether the preview expires or must be followed by an apply 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 no filler; the batch limit and atomicity claim both land immediately. 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 no explanation, and the annotations cover safety. For a bulk mutation-preview tool the remaining gap is workflow: 'drift-bound' is unexplained and the agent is not told whether the preview must be applied via operations_apply.
Complex tools with many parameters or behaviors need more documentation. Simple 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 50%, with adGroupId and the items/bid structure undocumented. The description's 'up to 100' actually adds a real constraint the schema does not enforce (no maxItems), which is valuable, but it says nothing about the per-item id/bid/status/correlationId semantics that make up the bulk payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Preview) and resource (targeting keyword updates), plus two concrete qualifiers: a batch cap of 100 and single-operation semantics. It doesn't explicitly name how it differs from keyword_update_preview or keywords_bulk_create_preview, but 'bulk' and 'updates' make the distinction inferrable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 words 'bulk' and 'Preview'; the description never says when to pick this over keyword_update_preview for a single edit, nor when to pick it over keywords_bulk_create_preview. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keywords_queryBRead-onlyIdempotent
Query bounded targeting-keyword inventory with a required typed scope.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy exact keyword ID shortcut | |
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| adGroupId | No | ad group scope shortcut | |
| keywordId | No | exact keyword ID shortcut | |
| timeRange | No | report or insight time range | |
| campaignId | No | campaign scope shortcut | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, idempotent, open-world query. The description adds only that results are "bounded" and require a typed scope, which is useful context but does not elaborate on pagination limits, result ordering, or what the bound actually constrains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no wasted words. The terseness is efficient, though some of the phrasing ("typed scope") is jargon that could have been made more concrete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 tool that exposes filters, grouping, sorting, time ranges, and report-style options, the description says almost nothing about those capabilities or how they relate to a keyword inventory query. The rich schema and output schema help, but the description remains too thin for the 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 100%, so the schema already explains all 13 parameters in detail. The description's "required typed scope" loosely gestures at the scope parameters but adds no syntax, precedence, or selection guidance 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 gives a specific verb ("Query") and resource ("targeting-keyword inventory"), making the operation's intent reasonably clear. It does not, however, distinguish this tool from nearby siblings such as keyword_get, keyword_report, keyword_suggestions, or negative_keywords_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus the many keyword-related siblings. "Required typed scope" hints at a precondition but does not explain which scope to choose or when an exact-get or report tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_suggestionsCRead-onlyIdempotent
Get keyword opportunities for an App Store app.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds only that the opportunities are for an App Store app and does not explain scope, pagination behavior, or what kinds of opportunities are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single efficient sentence with no wasted wording. However, it is so terse that it omits useful front-loaded context about scope and alternatives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 nine parameters and an output schema, and annotations cover safety. Still, the description does not explain what a keyword opportunity is, how results differ from sibling suggestion tools, or how filtering and pagination should be used.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are documented in the schema itself. The description adds no parameter meaning beyond the schema, which is acceptable given full coverage but not enriching.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: getting keyword opportunities for an App Store app. It is understandable on its own, but it does not distinguish this tool from close siblings such as phrase_suggestions, category_suggestions, keyword_report, or keywords_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many sibling suggestion and keyword tools. It also omits prerequisites or context such as needing an Apple Ads profile and ad account, even though those are required parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_update_previewCRead-onlyIdempotent
Preview a targeting keyword update.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | target resource ID as a string | |
| payload | Yes | typed fields to update | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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, and the description adds no behavioral context beyond the word 'Preview'. It does not explain what the preview returns, whether it validates only, or how it differs from applying the update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is efficient, though its brevity leaves the operation under-explained for a tool with a nested payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 four-parameter update preview with a nested payload and many sibling preview tools, the description does not provide enough context about what the preview validates or how it relates to the apply/update workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents the four required parameters and the nested bid/status payload. The description adds no parameter meaning beyond what the schema provides, which is the baseline when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain 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 verb and resource ('Preview a targeting keyword update'), but it essentially restates the tool name and title without clarifying what is being previewed. With many keyword-related preview siblings (keyword_bid_preview, keyword_pause_preview, keyword_resume_preview, keywords_bulk_update_preview), it does not distinguish this tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many sibling preview tools or when not to use it. 'Preview' implies a dry run, but the description does not state that explicitly or name any alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
negative_keyword_create_previewCRead-onlyIdempotent
Preview creation of one negative keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | typed create payload for the resource | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, and the word 'Preview' is consistent with that, so there is no contradiction. However, the description adds no context beyond the annotations: it does not explain what the preview emits, that no state is changed, or how the preview ties to the apply 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 zero filler, but it is under-specified rather than efficiently minimal — the same length could have carried the preview-then-apply contract or a sibling pointer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, but for a nested-payload write-preview tool with two possible parent scopes the description leaves the agent guessing about targeting requirements and the follow-up apply step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three top-level params are documented, so the schema carries the load. The description only implies the payload contains a single keyword and gives no hint about the campaignId vs adGroupId targeting choice inside the nested payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Preview creation of one negative keyword') and the word 'one' implicitly separates it from the bulk sibling negative_keywords_bulk_create_preview. It does not explicitly name alternatives such as negative_keyword_update_preview or negative_keywords_query, so differentiation is inferential rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus negative_keywords_bulk_create_preview (many keywords) or negative_keyword_update_preview (existing keyword). Nothing says the preview must be followed by operations_apply to actually create the keyword, which is the key workflow decision for this tool family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
negative_keyword_delete_previewARead-onlyDestructiveIdempotent
Preview irreversible deletion of one negative keyword under a paused campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| expectedText | Yes | exact current resource name or keyword text |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=true, and the description usefully sharpens that with 'irreversible', telling the agent there is no undo. It also adds the 'paused campaign' scoping constraint. It stops short of explaining that the preview performs no mutation on its own and must be followed by an apply call, but the annotation baseline is well complemented.
Agents need to know what a tool does to the 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 destructive core of the tool is stated first and the scoping constraint trails 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?
The output schema covers return values and annotations cover safety, but two gaps remain: the description never links this preview to the apply step that actually deletes, and the 'under a paused campaign' clause is ambiguous (is a paused campaign a requirement, and what happens if the campaign is active?). For a destructive-path preview tool, that ambiguity could cause a wrong selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, with profile, adAccountId and expectedText already documented in the schema; only 'id' is bare. The description adds nothing about parameter behavior — notably it never explains that expectedText acts as an optimistic-concurrency guard against deleting the wrong keyword. Baseline 3 is appropriate when the schema does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (preview deletion), a specific resource (negative keyword), and a cardinality scope ('one', distinguishing it from negative_keywords_bulk_* siblings). An agent can tell it apart from negative_keyword_get and negative_keyword_update_preview 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 word 'Preview' implies this is a pre-flight step, and 'under a paused campaign' hints at a precondition, but neither the when-to-use rule nor the follow-up step (operations_apply) is stated. No alternative or exclusion is named, so the agent must infer the preview-then-apply workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
negative_keyword_getARead-onlyIdempotent
Read one negative keyword by ID for current-state verification.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy negative keyword ID | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| negativeKeywordId | No | negative keyword ID as a string |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already state readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds the 'current-state verification' framing, but it does not add meaningful behavioral context such as whether missing IDs return null/error or whether results are strongly consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It communicates the core operation efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover the read-only/idempotent profile, so the description does not need to explain return values. It is nearly complete for a simple get tool, with only minor missing guidance on sibling selection and parameter 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 100%, so all four parameters are already documented in the schema. The description says 'by ID' but does not clarify the relationship between the 'id' and 'negativeKeywordId' parameters, so it adds little beyond the structured 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?
The description states a specific verb and resource: 'Read one negative keyword by ID.' The word 'one' helps distinguish it from list-query siblings such as negative_keywords_query, but it does not explicitly name or contrast those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for current-state verification' gives an implied use case, but there is no explicit guidance on when to prefer this tool over negative_keywords_query or when not to use it. Usage is inferable but not fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
negative_keywords_bulk_create_previewBRead-onlyIdempotent
Preview up to 100 negative keyword creates in one scope.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adGroupId | No | ||
| campaignId | No | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 known. The description adds the 100-item cap and reinforces the preview-only nature, but says nothing about what the preview returns or how to commit the change, so it contributes only modestly.
Agents need to know what a tool does to the 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 no filler. It is appropriately short, though the brevity borders on under-specification given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, and annotations cover safety, so the description doesn't need those. But for a scoped bulk-preview tool it should clarify the campaign-vs-adGroup scope choice and the items structure; those gaps prevent 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 coverage is only 40%, and the description compensates minimally: it implies the items array and a single scope selector but never explains matchType, status, or the fact that campaignId and adGroupId are the mutually-exclusive scope parameters. The critical 'one scope' ambiguity between campaign vs ad group is left for the agent to infer.
Input schemas describe structure but not intent. Descriptions should explain 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 (preview creates) plus resource (negative keywords), with a bulk cap of 100 that distinguishes it from the single-item negative_keyword_create_preview. However 'in one scope' is vague — it doesn't clarify whether scope means campaign-level or ad-group-level, and it doesn't name the sibling it replaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this instead of negative_keyword_create_preview or negative_keywords_bulk_update_preview, and no statement of what to do after previewing (e.g. apply via operations_apply). The 'preview' wording implies non-mutating intent but no 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.
negative_keywords_bulk_update_previewBRead-onlyIdempotent
Preview up to 100 negative keyword updates in one scope.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adGroupId | No | ||
| campaignId | No | ||
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 well covered. The description adds useful constraints beyond annotations: the 100-item maximum and the single-scope limitation. It does not explain return behavior, but the output schema likely covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. The limit and scope are stated immediately, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a bulk mutation-preview tool with five parameters, nested item objects, and only 40% schema description coverage. The one-sentence description leaves important gaps around parameter roles, item structure, and when to use this preview versus related tools, even though annotations and the output schema reduce some burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, and the description does not compensate by explaining the required profile, adAccountId, items array, or the campaignId/adGroupId scope parameters. 'One scope' hints at campaign or ad group scoping but does not clarify which parameters define it or how items are structured.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Preview'), resource ('negative keyword updates'), quantity limit (up to 100), and scope, making the operation understandable. It does not explicitly distinguish itself from siblings like negative_keyword_update_preview, keywords_bulk_update_preview, or negative_keywords_bulk_create_preview, so it falls 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?
The word 'Preview' implies a dry-run use case, but the description gives no explicit guidance on when to use this bulk preview versus the single negative_keyword_update_preview or the bulk create preview. It also does not mention prerequisites, follow-up apply steps, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
negative_keywords_queryARead-onlyIdempotent
Query bounded negative-keyword inventory with a valid campaign or ad-group scope.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | legacy exact negative keyword ID shortcut | |
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| adGroupId | No | ad group scope shortcut | |
| timeRange | No | report or insight time range | |
| campaignId | No | campaign scope shortcut; without adGroupId selects campaign-level negatives | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID | |
| negativeKeywordId | No | exact negative keyword ID shortcut |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so safety and idempotency are covered. The description adds only the scoping constraint and the notion of a 'bounded' inventory query; it does not add detail about auth, rate limits, or result behavior beyond what annotations and 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?
The description is a single front-loaded sentence with no filler. It states purpose and scope immediately, so every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema coverage, output schema, and annotations, the description is mostly complete: it names the query purpose and adds the important scoping requirement not enforced by schema-level required fields. It lacks explicit usage alternatives, but the structured fields carry most of the remaining burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 13 parameters are already documented in the input schema. The description mentions campaign/ad-group scope but does not add syntax, format, or parameter-specific meaning beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Query') and resource ('negative-keyword inventory'), plus a scope constraint ('campaign or ad-group scope'). It is clear what the tool does, but it does not explicitly differentiate itself from sibling tools such as negative_keyword_get or negative_keywords_query alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'with a valid campaign or ad-group scope' implies that this tool is used for scoped inventory queries, but it does not explicitly say when to use this tool versus negative_keyword_get or other sibling query tools. Usage is therefore 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.
negative_keyword_update_previewBRead-onlyIdempotent
Preview a negative keyword update.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | target resource ID as a string | |
| payload | Yes | typed fields to update | |
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds almost no behavioral context beyond saying "Preview"; it does not explain what the preview validates, what it returns, or whether applying changes is a separate 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?
The description is a single front-loaded sentence with no filler. Its brevity is appropriate for a tool whose schema and annotations carry the detailed structured 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?
The tool has four required parameters, a nested payload, rich annotations, and an output schema, which reduces what the description must explain. However, the description still leaves unclear what previewing actually does and when an agent should choose preview versus another sibling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four required parameters, including the nested payload and its status enum. The description adds no parameter meaning beyond that structured documentation, which is acceptable at baseline 3 when the schema is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Preview" plus "a negative keyword update." It is distinguishable from siblings such as negative_keyword_create_preview and negative_keyword_delete_preview, though it does not explicitly differentiate itself from them or explain what preview means in this 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?
There is no explicit guidance about when to use this tool versus alternatives, nor any mention of prerequisites such as needing an existing negative keyword ID. The preview/apply workflow is only implied by the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
operations_applyADestructive
Apply exactly one non-expired, drift-free preview receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt | Yes | one-time operation receipt returned by a preview tool |
Output Schema
| Name | Required | Description |
|---|---|---|
| used | No | |
| error | No | |
| preview | No | |
| receipt | No | |
| summary | Yes | |
| verification | No |
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 the meaningful constraint that exactly one receipt is committed and that stale/drifted receipts are rejected, but it says nothing about what happens on rejection, whether the receipt is consumed on failure, or what state changes 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?
A single front-loaded sentence with no filler; the committing action and its preconditions are stated 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?
Output schema and annotations relieve the description of return-value and safety explanations, but for a destructive, non-idempotent commit operation the description omits where the receipt comes from, how drift is verified, and failure behavior — gaps that matter given the operations_verify/operations_inspect 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?
With one parameter and 100% schema coverage the baseline is already high, yet the description adds real meaning by constraining the receipt's validity (one-time, non-expired, drift-free) beyond the schema's 'returned by a preview tool'. It stops short of naming which preview tools mint receipts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Apply ... preview receipt') with tight scope constraints (exactly one, non-expired, drift-free). It does not name the sibling preview tools that produce receipts or operations_verify/operations_inspect, so differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The preconditions ('non-expired, drift-free') imply the preview-then-verify-then-apply sequence, but the description never names operations_verify or any *_preview tool as the source of the receipt. An agent must infer the workflow from sibling names rather than being routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
operations_inspectARead-onlyIdempotent
Inspect receipt binding, expiry, and use state without applying it.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt | Yes | one-time operation receipt returned by a preview tool |
Output Schema
| Name | Required | Description |
|---|---|---|
| used | No | |
| error | No | |
| preview | No | |
| receipt | No | |
| summary | Yes | |
| verification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so safety and repeatability are covered. The description adds value by specifying what state is revealed (binding, expiry, use state) and reinforcing that the receipt is not consumed, but it says nothing about error cases (expired/already-used receipts) or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, and the non-mutating qualifier is placed at the end where it reads as a constraint on the whole action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full schema coverage, an output schema, and annotations covering safety, the description carries enough: what is inspected and that nothing is applied. The only real gap is the unstated relationship to operations_verify.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single 'receipt' parameter fully documented as 'one-time operation receipt returned by a preview tool'. The description mentions inspecting a receipt but adds no format, sourcing, or validity guidance beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (inspect) and the exact object of inspection (receipt binding, expiry, use state), and the clause 'without applying it' separates it from the write path in operations_apply. It does not address how this differs from the sibling operations_verify, which an agent could easily confuse with inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Without applying it' implies the tool is for checking a receipt before calling operations_apply, so the usage context is inferable. However, no alternative is named, no exclusions are stated, and the boundary against operations_verify is left unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
operations_verifyARead-onlyIdempotent
Re-read receipt targets after an ambiguous write, including restart-safe optimization recovery, and return current state.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt | Yes | one-time operation receipt returned by a preview tool |
Output Schema
| Name | Required | Description |
|---|---|---|
| used | No | |
| error | No | |
| preview | No | |
| receipt | No | |
| summary | Yes | |
| verification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only and idempotent behavior, and the description adds scenario context about ambiguous writes and restart-safe recovery. It does not add details like authorization requirements, rate limits, or retry bounds, so it modestly extends the annotated behavior rather than fully elaborating 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?
The description is a single front-loaded sentence with no filler. It conveys the action, the triggering condition, and the return behavior efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a fully described single parameter, an output schema, and annotations covering safety, the description provides enough context for correct invocation. The main remaining gap is the absence of explicit routing versus sibling operation tools, which 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?
Schema coverage is 100% and the single parameter is already well described as a one-time operation receipt returned by a preview tool. The description does not add syntax or format meaning beyond that, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Re-read receipt targets'), its trigger ('after an ambiguous write'), and its outcome ('return current state'). It is clearly a verification/re-read operation, though it does not explicitly distinguish itself from siblings like operations_apply or operations_inspect 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 gives clear usage context: after an ambiguous write, including restart-safe optimization recovery. However, it does not name alternatives or state when not to use this tool versus operations_inspect or operations_apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimization_baselineBRead-onlyIdempotent
Build a bounded 28-day Apple Ads performance baseline for a named policy.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds the 28-day bounded window and policy scoping, but leaves open what 'bounded' means (row limits, data availability) and what happens when history is short — relevant for an openWorld 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?
A single front-loaded sentence with zero filler; the scoping qualifiers (bounded, 28-day, named policy) come before anything else.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 needn't be described, but for a policy-scoped analysis tool the description omits the policy lifecycle context (valid policy sources, insufficient-data behavior) and does not explain the 'bounded' qualifier, leaving real 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 documents profile and adAccountId (67% coverage), and the description's 'for a named policy' implies the policy param is a reference to a named optimization policy, which adds a little meaning. It does not clarify the accepted policy identifier format or where to obtain it (e.g. optimization_policies_list).
Input schemas describe structure but not intent. Descriptions should explain 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 and resource: builds a bounded 28-day Apple Ads performance baseline scoped to a named policy. An agent can tell it apart from siblings like optimization_plan or optimization_history by the 'baseline' framing, though the description never explicitly contrasts 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?
No when-to-use, when-not-to-use, or prerequisite guidance is given. Nothing says whether a baseline must precede optimization_plan, whether the policy must exist first, or what to do if there is insufficient 28-day history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimization_historyCRead-onlyIdempotent
Read bounded local decisions and verification history for a named policy.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description's only additional signal is "bounded", which hints at a result limit but never states the bound, time window, or ordering, so the added context is thin rather than 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?
A single front-loaded sentence with no filler, so it is appropriately sized. It is efficient, though its brevity comes partly at the cost of the missing detail noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 safety. Still missing for a 3-required-param tool: what "bounded" limits mean, how the policy is identified, and any relation to the adjacent history/plan 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 coverage is 67%: profile and adAccountId are documented in-schema while policy has no schema description. The description says "for a named policy" but does not clarify whether policy is a name, slug, or ID (siblings optimization_policy_get / optimization_policies_list suggest identifiers), so it only partially compensates 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?
It names a verb ("Read") and a resource ("decisions and verification history") constrained to "a named policy", which is more specific than a tautology. However, qualifiers like "bounded local" are unexplained jargon, and nothing here distinguishes it from close siblings such as change_history, change_history_detail, operations_inspect, or operations_verify.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 call this instead of the many history/inspection siblings (change_history, operations_verify, optimization_plan). The reader can only infer usage from the word "history"; 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.
optimization_planCRead-onlyIdempotent
Build an on-demand bounded optimization plan without creating a receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description adds one useful behavioral detail beyond annotations: it does not create a receipt. It does not explain what 'bounded' means, what the plan contains, or how the lack of a receipt affects subsequent operations, so the added context is limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is efficient, though its terseness contributes to gaps in usage and parameter clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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. Even so, for an open-world optimization tool with three required parameters and close siblings, the description is too thin: it does not clarify the policy parameter, the meaning of 'bounded,' or how the plan relates to preview/apply/history 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?
The description provides no information about the three required parameters. Schema coverage is 67%, with profile and adAccountId documented but policy left undescribed. Because the description does not compensate for the missing policy semantics or add meaning beyond the schema, parameter support is weak.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Build an on-demand bounded optimization plan.' It also distinguishes itself behaviorally by saying 'without creating a receipt,' which separates it from an apply-style operation. However, it does not explicitly name or compare itself with the close sibling optimization_plan_preview, so sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'on-demand' and 'without creating a receipt' hints at a dry-run/non-receipt use case, but there is no explicit guidance on when to choose this tool versus optimization_plan_preview, optimization_baseline, optimization_history, or operations_apply. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimization_plan_previewCRead-onlyIdempotent
Build and bind one bounded active-policy optimization plan to a composite receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds little beyond that: it does not explain what is being 'built' or 'bound', whether apply is required afterward, or how the composite receipt behaves. There is no direct contradiction, but transparency beyond annotations is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, and the action is front-loaded. Its terseness is efficient, though the heavy jargon limits immediate clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three required parameters and many optimization-related siblings, one jargon-heavy sentence is not enough. The output schema means return values need not be explained, but the description still lacks prerequisites, relationship to sibling preview/plan tools, and the meaning of the composite receipt.
Complex tools with many parameters or behaviors need more documentation. Simple 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 67%: profile and adAccountId are described in the schema, while the required 'policy' string is undocumented there. The description mentions 'active-policy' but does not clarify the policy format or what the string should contain, so it does not 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?
The description names an action ('Build and bind') and a resource ('optimization plan'), but the terms 'bounded active-policy' and 'composite receipt' are jargon that leave the actual output unclear. It also does not distinguish this tool from siblings like optimization_plan, optimization_baseline, or optimization_policy_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, when not to use it, or which sibling tool should be chosen instead. The agent must infer its role from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimization_policies_listARead-onlyIdempotent
List named local optimization policies without credentials or account data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds genuinely useful context that no credentials or account data are involved, but "local" sits in mild tension with openWorldHint=true and the description says nothing about ordering, scope of the returned policy set, or whether results are cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with the operation and its key qualifier front-loaded; nothing is repeated from the title or annotations 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 zero parameters, annotations covering safety, and an output schema handling the return shape, the description carries nearly everything an agent needs. It could still note whether the list is scoped to an account/profile or what identifies a policy, but 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 takes zero parameters, so the baseline is 4; there are no parameter semantics to explain. The description correctly implies no inputs are required by presenting the call as a bare listing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ("List named local optimization policies") and adds a scope qualifier ("without credentials or account data"). It is distinguishable from the read-only sibling optimization_policy_get by being a listing operation, though the description never names that sibling to sharpen the 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?
Usage is only implied: an agent can infer this is the enumeration step before calling optimization_policy_get for details. No explicit when-to-use, when-not-to-use, or comparison against optimization_baseline/optimization_history/optimization_plan is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimization_policy_getARead-onlyIdempotent
Read one named optimization policy with resolved balanced thresholds.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | ||
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered. The description adds genuine value with "resolved balanced thresholds," signaling thresholds are computed/inherited rather than stored raw, but it doesn't explain the resolution logic or error behavior for a missing policy.
Agents need to know what a tool does to the 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 action and the key qualifier (resolved thresholds) front-loaded. Nothing is wasted, though it is terse enough to leave real questions unanswered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 needn't be explained, and annotations cover the safety profile. The remaining gap is the undocumented `policy` parameter and the meaning of "resolved," which keeps this 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 67%: profile and adAccountId are documented in the schema while the required `policy` parameter is undocumented. The description's "one named optimization policy" partially compensates by implying `policy` is a name selector, but it doesn't state the name format or whether it scopes within the given profile/ad 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?
The description names a specific verb (read) and resource (one named optimization policy), and "one" implicitly contrasts with the list sibling. It does not name optimization_policies_list explicitly, 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?
Usage is only implied by "one named" — an agent can infer this fetches a single policy rather than enumerating them. There is no explicit when-to-use guidance, no mention of when to prefer optimization_policies_list or optimization_plan, and no statement about behavior when the policy name is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
org_getCRead-onlyIdempotent
Read one Apple Ads organization.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | Apple Ads organization ID | |
| profile | Yes | local Apple Ads profile name |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld behavior, so the description carries a lighter burden, but it adds nothing beyond restating a read: no mention of error behavior for unknown orgId, no auth/profile prerequisites, no indication of what the organization object contains. It essentially duplicates the readOnlyHint.
Agents need to know what a tool does to the 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 zero filler and the key concept front-loaded. It is efficient, though borderline under-specified rather than optimally 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 needn't be explained, and the parameters are fully documented in the schema. However, for a tool keyed on a profile/orgId pair with openWorld access, the description omits any context about profile-org relationships or failure modes, leaving gaps an agent would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both orgId ('Apple Ads organization ID') and profile ('local Apple Ads profile name') are documented. The description adds no semantic detail about how the two interrelate (e.g., whether orgId must belong to the given profile), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Read') and resource ('Apple Ads organization') with singular scope, which is distinguishable from siblings like ad_account_get or campaign_get. It stops short of any explicit sibling differentiation, but 'organization' is a unique resource in the tool set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives such as profiles_list or ad_account_get, nor any statement of prerequisites (e.g., needing a configured local profile first). 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.
phrase_suggestionsCRead-onlyIdempotent
Get phrase opportunities for an App Store app.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds nothing beyond that — no mention of what a 'phrase opportunity' contains, whether results are cached/live, or any rate or cost considerations for an open-world query.
Agents need to know what a tool does to the 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. It is efficient, though its brevity edges into under-specification rather than tight scoping.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, but for a 9-parameter reporting-style tool the description is thin: it does not convey what a phrase opportunity is, what dimensions apply, or how it differs from keyword suggestions in practice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 9 parameters have schema descriptions (100% coverage), so the schema carries the burden. The description does not clarify how its filters/groupBy/timeRange semantics apply specifically to phrase opportunity data, so it neither adds nor detracts beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('phrase opportunities') scoped to an App Store app, which is clearly distinct from generic reporting verbs. However, it never differentiates itself from near-sibling suggestion tools like keyword_suggestions or app_opportunities, which an agent would need to distinguish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 indication of when to use this tool versus keyword_suggestions, category_suggestions, app_opportunities, or search_term_popularity, all of which are listed siblings. No prerequisites, exclusions, or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_page_getBRead-onlyIdempotent
Read a Default or Custom Product Page by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| productPageId | Yes | Default or Custom Product Page ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety and repeatability profile is fully covered. The description adds no behavioral context beyond the word 'Read', and does not describe side effects, permissions, or result characteristics beyond what the annotations and 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 wasted words. It communicates the core operation and scope 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?
This is a simple getter with a fully documented input schema, rich annotations, and an output schema. The description does not need to explain return values or behavior in more depth, though it could note the context of profile and ad account scoping.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents profile, adAccountId, and productPageId. The description's mention of 'Default or Custom' adds slight semantic color to productPageId but largely repeats what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Read) and resource (Default or Custom Product Page) scoped by ID, which clearly identifies a single-item retrieval operation. It is distinguishable from sibling listing tools like product_pages_query and product_page_locales, though it does not explicitly 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 phrase 'by ID' implies this is the tool for fetching one known product page, while product_pages_query would be used for discovery. However, the description provides no explicit when-to-use guidance or named alternatives, leaving the agent to infer the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_page_localesBRead-onlyIdempotent
Query bounded Product Page locale details.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds only the ambiguous term 'bounded' and does not clarify the bounded window, pagination limits, or external API behavior 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?
The single sentence is front-loaded with the verb and resource, with no boilerplate or wasted text. It is perhaps too terse because 'bounded' is unexplained, but structurally it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given nine parameters, an output schema, and 100% schema description coverage, the sparse description is minimally adequate. However, it omits when to use this instead of sibling product-page tools and does not explain what 'bounded' means.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are documented in the schema. The description adds no parameter meaning beyond the vague 'bounded' wording, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb ('Query') and resource ('Product Page locale details'), so the agent can tell it retrieves locale-related data. It does not differentiate from sibling tools such as product_pages_query or product_page_get, and 'bounded' is left unexplained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance, prerequisites, or alternatives are provided. The agent must infer from the tool name that this is for locale details rather than general product page queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_pages_queryBRead-onlyIdempotent
Query bounded Default and Custom Product Pages.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds only the vague term 'bounded', without explaining what bounds apply or how pagination behaves, so it contributes little beyond the 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?
A single front-loaded sentence with zero waste. It is appropriately short, though it sacrifices some clarity for brevity by leaving 'bounded' unexplained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 schema fully documents parameters. The remaining gap is that the description does not clarify the 'bounded' scope or differentiate this query tool from its get/locales siblings, which matters for an agent choosing among them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are documented in the schema itself. The description adds no parameter-level meaning, which is acceptable at this coverage level but not additive.
Input schemas describe structure but not intent. Descriptions should explain 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 clear verb ('Query') and resource ('Default and Custom Product Pages'), which is more specific than the name alone. However, it does not explicitly distinguish itself from the sibling product_page_get, and the modifier 'bounded' is left undefined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 indication of when to use this tool versus product_page_get or product_page_locales, nor any mention of prerequisites like the required profile and adAccountId. The word 'bounded' hints at pagination but offers no actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_listARead-onlyIdempotent
List configured profile names without exposing credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world behavior, so the bar is lower. The description adds a genuinely useful security-relevant disclosure beyond the annotations: credentials are deliberately not exposed, and only 'configured' profiles are returned. It stops short of describing ordering or the empty-list case, which the output schema presumably handles.
Agents need to know what a tool does to the 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, front-loading the action and the result set, with the credential constraint appended as a qualifier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 with an output schema present, the description covers what is returned (profile names) and what is not (credentials). It could note whether profiles come from local config or the remote account, but nothing essential to calling it 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 no parameters, so the baseline is 4. There is no parameter surface for the description to clarify, and it correctly does not invent any argument vocabulary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 configured profile names, and adds the scope qualifier that credentials are withheld. It is clear what the tool returns, though it does not explicitly differentiate itself from nearby tools like auth_check, org_get, or server_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 intent is implied – use this to discover which profiles exist before doing credential-dependent work – but there is no explicit when-to-use, when-not-to-use, or named alternative such as auth_check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_term_popularityCRead-onlyIdempotent
Read search-term popularity insights.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is known without the description. The description adds nothing beyond that: no statement about what the popularity metric means (volume? rank? impression share?), whether time ranges are required, or how pagination affects results. It repeats the title rather than extending 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?
A single four-word sentence is front-loaded with zero waste, but at this length the brevity is under-specification rather than economy. There is nothing extraneous, but there is also almost nothing there to 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 and full parameter coverage, the description technically needn't explain return values. But a 9-parameter, open-world search-term analytics tool that is nearly indistinguishable from sibling search_term_report needs at least a sentence on what insight it yields and how it differs. The definition does not supply that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 9 parameters, so the schema itself documents fields, filters, groupBy, sorting, timeRange and pagination. The description adds no semantic layer on top — for a popularity query, an explanation of which fields/groupBy values matter would have been valuable — so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb ("Read") and a resource ("search-term popularity insights"), so the basic operation is identifiable. But "insights" is vague about what is actually returned, and the description does nothing to separate this tool from the closely-named sibling search_term_report (or keyword_report, impression_share), which likely also surface search-term 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?
There is no when-to-use guidance, no mention of prerequisites (profile + adAccountId, which the schema marks required), and no routing to alternatives. When an agent has to choose between search_term_popularity and search_term_report, nothing in the text helps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_term_reportCRead-onlyIdempotent
Read bounded search-term performance rows.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering the safety profile. The description's only added behavioral signal is the word 'bounded,' hinting at a limited result window, but it says nothing about default time ranges, row limits, or pagination behavior beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though its extreme brevity borders on under-specification rather than purposeful conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters, 2 required (profile, adAccountId), and report semantics around time ranges and field selection, a one-line description is thin. Although an output schema exists and annotations cover safety, the description doesn't tell the agent what kind of rows come back or what the required context is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (fields, filters, groupBy, timeRange, pagination, etc.) are already fully documented in the schema. The description adds no parameter-level meaning beyond what structured fields provide, which is baseline-acceptable 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 concrete verb ('Read') and resource ('search-term performance rows'), which distinguishes it from the similarly named search_term_popularity sibling. However, it doesn't explicitly contrast with other report tools like keyword_report or ad_group_report, leaving sibling differentiation implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to choose this tool over keyword_report, ad_group_report, or search_term_popularity. There are no prerequisites, exclusions, or alternative-selection guidance, so the agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_infoARead-onlyIdempotent
Show server version, safety mode, API family, and response limits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered by structured data. The description adds value by disclosing what this read exposes — notably 'safety mode' and 'response limits', which are behavioral facts (whether the server is in a dry-run/live mode, and throttling ceilings) that an agent needs and that no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb first and the four returned facts enumerated compactly. Zero filler and nothing repeated from the name 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 zero parameters, an output schema present, and annotations covering safety, this description is nearly sufficient — it tells the agent what category of information it receives. The remaining gap is situational: it never says when this diagnostic is warranted relative to auth_check or the other account-level 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?
The tool takes zero parameters, so there is no parameter semantics to explain; baseline 4 applies. The description correctly describes a no-argument call and adds no misleading input expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Show) and enumerates exactly what is reported: server version, safety mode, API family, and response limits. That is far better than a tautology, but it never distinguishes it from the nearby diagnostic sibling auth_check, so an agent cannot route between the two from the description 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 explicit when-to-use, when-not-to-use, or named alternative. Usage is only implied: an agent infers it should call this when it needs to know the server's safety mode or limits before performing mutations, but that inference is never stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
supported_app_languagesCRead-onlyIdempotent
Query bounded App Store advertising language metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is fully covered. The description adds almost nothing beyond that – 'bounded' hints at pagination but is not explained, and there is no disclosure of auth/profile requirements 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?
A single front-loaded sentence with no padding. It is efficient, though its brevity comes at the cost of substance rather than being a model of 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?
There is an output schema, so return values need not be explained, but for a tool with 9 parameters and a generic report schema the description is far too thin. It never explains what 'bounded' means, what language metadata is actually returned, or how to scope the query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all 9 parameters and the baseline is 3. The description adds no meaning beyond the schema and notably fails to clarify which fields/filters are valid for a language query, which is the key uncertainty for this generic report-shaped 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 gives a verb ('Query') and a resource ('App Store advertising language metadata'), but the qualifier 'bounded' is ambiguous and the description does not distinguish this from siblings like app_locale_details or product_page_locales that also surface locale/language data. The agent can guess the general area but not precisely what this 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?
There is no statement of when to use this tool, when not to, or which sibling to prefer for language vs locale data. The agent has to infer usage entirely 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.
target_cpa_recommendation_apply_previewBRead-onlyIdempotent
Preview applying one target-CPA recommendation under an explicit maximum.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| appliedAmount | No | ||
| maximumAmount | No | ||
| promotedObjectId | Yes | ||
| recommendationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 clear. The description adds the "explicit maximum" constraint, but it does not explain preview validation behavior or how a preview differs from an actual apply 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?
The description is a single front-loaded sentence with no wasted words. It communicates the core action and constraint efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with only 33% schema description coverage, the description is too sparse. Output schema and annotations help with return values and safety, but key parameter semantics and usage routing are still 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 only 33%, so the description would need to compensate for several undocumented parameters. It only loosely maps "one recommendation" to recommendationId and "explicit maximum" to maximumAmount, leaving appliedAmount, profile, adAccountId, promotedObjectId, and the appliedAmount-vs-maximumAmount relationship unclear.
Input schemas describe structure but not intent. Descriptions should explain 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: preview applying one target-CPA recommendation. It is distinguishable from the dismiss sibling by "apply," though it does not explicitly name alternatives or contrast with the non-preview apply path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 word "Preview" implies a dry-run before applying, which gives some usage context. However, it does not explicitly say when to use this versus target_cpa_recommendations, target_cpa_recommendation_dismiss_preview, or an actual apply operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
target_cpa_recommendation_dismiss_previewCRead-onlyIdempotent
Preview dismissing one target-CPA recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | local Apple Ads profile name | |
| adAccountId | Yes | Apple Ads ad account ID | |
| appliedAmount | No | ||
| maximumAmount | No | ||
| promotedObjectId | Yes | ||
| recommendationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| preview | No | |
| summary | Yes |
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 nothing about what 'preview' returns, whether the dismissal is staged, or how appliedAmount/maximumAmount affect the preview, so it barely goes 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?
A single front-loaded sentence with no filler, which is structurally clean. However, it is under-specified rather than genuinely concise, omitting information an agent needs to invoke the tool 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?
An output schema exists, so return values needn't be described, and annotations cover safety. But with 4 required parameters and two optional amount objects whose role is unclear, the description leaves the agent without enough context to construct a correct 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 only 33%; profile and adAccountId are documented, but recommendationId, promotedObjectId, appliedAmount, and maximumAmount are not explained anywhere. The description says nothing about any parameter, 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 ('Preview dismissing') and resource ('one target-CPA recommendation'), which clearly separates it from target_cpa_recommendation_apply_preview and target_cpa_recommendations. It doesn't explicitly name or contrast those siblings, 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?
No guidance on when to use this preview versus applying the dismissal directly, nor any prerequisites such as needing the recommendation to exist first. The intended workflow (preview before apply) must be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
target_cpa_recommendationsARead-onlyIdempotent
Read target-CPA recommendations without applying them.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description reinforces the non-mutating behavior with 'without applying them,' but adds no details about recommendation contents, rate limits, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words, and the key distinction from applying recommendations is stated 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?
The tool has nine parameters, an output schema, and full schema coverage, so the description need not explain return values or parameter details. Still, it leaves ambiguity about how this read tool relates to target_cpa_suggestions and the preview/apply 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 100%, so all nine parameters and nested fields are already documented in the input schema. The description adds no parameter-specific meaning beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read target-CPA recommendations.' The phrase 'without applying them' distinguishes it from the apply-preview sibling, though it does not clarify how it differs from target_cpa_suggestions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the read-only path when recommendations should be inspected rather than applied. However, it does not explicitly name when to use this versus target_cpa_suggestions or the apply/dismiss preview tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
target_cpa_suggestionsCRead-onlyIdempotent
Get target CPA suggestions.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | report fields to return | |
| filters | No | endpoint-specific filter conditions | |
| groupBy | No | report dimensions | |
| options | No | report or insight options | |
| profile | Yes | local Apple Ads profile name | |
| sorting | No | ordered sort fields | |
| timeRange | No | report or insight time range | |
| pagination | No | bounded result window | |
| adAccountId | Yes | Apple Ads ad account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | payload |
| error | No | |
| summary | Yes | |
| rateLimit | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds no behavioral context beyond the name—it does not explain what a 'suggestion' is, whether campaign context is required, or how results should be interpreted.
Agents need to know what a tool does to the 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-sentence description is concise but under-specified rather than appropriately sized. It is front-loaded with the verb, yet it omits essential context that would make this sentence earn 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?
This is a complex tool with nine parameters, nested filter/sorting/time-range objects, and an output schema. The description supplies none of the operational context an agent needs—what suggestions represent, how they relate to siblings, or what input combinations are meaningful—beyond the bare action phrase.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters (including profile, adAccountId, filters, timeRange, etc.) are fully documented in the schema. The description adds nothing about parameter usage, but the baseline is 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb and resource ('Get target CPA suggestions'), but it does not differentiate this tool from closely named siblings like target_cpa_recommendations or target_cpa_recommendation_apply_preview. An agent can infer it retrieves suggestions, but not how it differs from recommendation-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as target_cpa_recommendations or target_cpa_recommendation_apply_preview. No preconditions, exclusions, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
110 tool updates
v0.1.0- First observed
account_health - First observed
ad_account_get - First observed
ad_accounts_list - First observed
ad_create_preview - First observed
ad_delete_preview - First observed
ad_get - First observed
ad_group_bid_preview - First observed
ad_group_cpa_cap_preview - First observed
ad_group_create_preview - First observed
ad_group_delete_preview - First observed
ad_group_get - First observed
ad_group_pause_preview - First observed
ad_group_report - First observed
ad_group_resume_preview - First observed
ad_group_schedule_preview - First observed
ad_group_search_match_preview - First observed
ad_group_targeting_preview - First observed
ad_group_update_preview - First observed
ad_groups_query - First observed
ad_pause_preview - First observed
ad_report - First observed
ad_resume_preview - First observed
ad_update_preview - First observed
ads_query - First observed
advertiser_resources_list - First observed
app_locale_details - First observed
app_opportunities - First observed
app_rejection_reason_get - First observed
app_rejection_reasons_query - First observed
app_store_geo_search - First observed
apps_eligibility - First observed
apps_get - First observed
apps_search - First observed
auth_check - First observed
campaign_audit - First observed
campaign_bid_strategy_preview - First observed
campaign_countries_preview - First observed
campaign_create_preview - First observed
campaign_daily_budget_preview - First observed
campaign_delete_preview - First observed
campaign_get - First observed
campaign_inventory - First observed
campaign_pause_preview - First observed
campaign_report - First observed
campaign_resume_preview - First observed
campaign_schedule_preview - First observed
campaign_shared_budget_assign_preview - First observed
campaign_shared_budget_unassign_preview - First observed
campaign_status_reason_details - First observed
campaign_update_preview - First observed
campaigns_query - First observed
category_suggestions - First observed
change_history - First observed
change_history_detail - First observed
creative_create_preview - First observed
creative_delete_preview - First observed
creative_get - First observed
creative_update_preview - First observed
creatives_query - First observed
daily_budget_recommendation_apply_preview - First observed
daily_budget_recommendation_dismiss_preview - First observed
daily_budget_recommendations - First observed
impression_share - First observed
keyword_bid_preview - First observed
keyword_create_preview - First observed
keyword_delete_preview - First observed
keyword_get - First observed
keyword_pause_preview - First observed
keyword_report - First observed
keyword_resume_preview - First observed
keyword_suggestions - First observed
keyword_update_preview - First observed
keywords_bulk_create_preview - First observed
keywords_bulk_update_preview - First observed
keywords_query - First observed
negative_keyword_create_preview - First observed
negative_keyword_delete_preview - First observed
negative_keyword_get - First observed
negative_keyword_update_preview - First observed
negative_keywords_bulk_create_preview - First observed
negative_keywords_bulk_update_preview - First observed
negative_keywords_query - First observed
operations_apply - First observed
operations_inspect - First observed
operations_verify - First observed
optimization_baseline - First observed
optimization_history - First observed
optimization_plan - First observed
optimization_plan_preview - First observed
optimization_policies_list - First observed
optimization_policy_get - First observed
org_get - First observed
phrase_suggestions - First observed
product_page_get - First observed
product_page_locales - First observed
product_pages_query - First observed
profiles_list - First observed
search_term_popularity - First observed
search_term_report - First observed
server_info - First observed
shared_budget_create_preview - First observed
shared_budget_delete_preview - First observed
shared_budget_get - First observed
shared_budget_update_preview - First observed
shared_budgets_query - First observed
supported_app_languages - First observed
target_cpa_recommendation_apply_preview - First observed
target_cpa_recommendation_dismiss_preview - First observed
target_cpa_recommendations - First observed
target_cpa_suggestions
TDQS
Scored across 110 tools
Most tools are clearly separated by resource and action, with a strong preview/apply safety pattern and distinct read/query/get verbs. A few boundaries are less crisp, such as campaign_inventory versus campaigns_query/campaign_get, and operations_inspect/verify/apply, but descriptions generally make the intended choice clear.
The surface uses a predictable snake_case resource_action convention with consistent suffixes such as _preview, _get, _query, and _report. Minor deviations exist in ordering and noun forms, like ad_accounts_list versus ad_account_get and campaign_shared_budget_assign_preview, but the overall pattern is readable and stable.
At 110 tools, the server is extremely heavy for an agent-facing MCP surface, far beyond a practical working set. While the Apple Ads domain is broad, the tool count creates substantial selection overhead and suggests many operations could be consolidated or grouped.
The surface covers the domain extensively: campaigns, ad groups, ads, keywords, negatives, creatives, shared budgets, product pages, reports, recommendations, change history, auth, and optimization workflows. The preview-plus-operations_apply model provides lifecycle coverage while maintaining a deliberate safety boundary.
Maintenance
Related MCP Connectors
Google Ads MCP: reports, search terms, negatives, budgets, campaigns. Approval on every write.
Apple Search Ads MCP: campaign analytics, bid management, and attribution tracking.
Google Ads MCP server — manage campaigns, keywords, and metrics.
Hosted Meta ads MCP with OAuth, bounded reads, and prepare/confirm writes.
Related MCP Servers
- AlicenseBqualityDmaintenanceTyped MCP server for OpenAI Ads and ChatGPT Ads via the Advertiser API. Supports account, campaign, ad group, ad, creative, audience, insight, and conversion tools with readonly mode and guarded writes.123MIT
- AlicenseAqualityBmaintenanceExtends the official Google Ads MCP with a safe write layer for creating paused-by-default Search campaigns and an account auditor, all running locally with no hosted dependencies.131Apache 2.0
- AlicenseBqualityAmaintenanceEnables MCP clients to read and analyze Pinterest advertising data, with optional guarded write tools that preview changes before applying them, all while keeping your token on your own machine and protecting lead records.2634 npmApache 2.0
- AlicenseAqualityBmaintenanceEnables safe, informed management of Yandex.Direct accounts through 11 MCP tools, covering reads, planned two-phase writes, reports, media attachment, Wordstat, Metrika, and Audience operations, while exposing platform knowledge as resources such as limits, traps, and the red line of deliberately absent destructive actions.11MIT