shipstores
shipstores automates mobile app publishing end to end for App Store Connect, Google Play, and Expo EAS.
Diagnose credentials, browser sessions, and audit listings for identity leaks.
Apple: register bundle IDs; assist app creation; upload/list builds; create/manage versions; edit listing/app info; set age rating, price, availability, and privacy labels; upload screenshots; read/reply to App Review; resubmit/cancel submissions; manage TestFlight invites and subscriptions.
Google Play: assist app creation; inspect tracks; upload bundles; promote releases; edit listings; upload/list screenshots; manage contact details; get signing SHA-1; check submission status and send for review; complete App content declarations and Data safety via CSV.
Expo/EAS: list, start, poll, download builds, and submit them to stores.
Publishing/submitting tools are marked as external actions so the agent confirms before acting.
Drives App Store Connect end to end: manages builds, versions, store listings, screenshots, app info, age ratings, pricing, availability, privacy labels, review details, subscriptions, and App Review messages, replies, and submissions.
Integrates with Expo EAS to start, list, poll, download, and submit iOS and Android builds as part of the store publishing workflow.
Drives Google Play Console end to end: creates app records, uploads bundles, promotes releases, manages listings and screenshots, contact details, signing SHA1, submission status, App content declarations, and Data safety forms.
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., "@shipstoressubmit the latest iOS build for App Review"
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.
shipstores drives App Store Connect and Google Play Console end to end — builds, store listings, screenshots, privacy labels, review submission and even replying to App Review — so Claude (or any MCP client) can take an app from eas build to "Waiting for Review" without you clicking through two consoles.
Built because publishing was always the slowest part of shipping an app. Every quirk documented below cost at least one rejected build to discover.
flowchart LR
A["🤖 Claude / any MCP client"] -->|"tools"| M["shipstores"]
M -->|"public API"| ASC["App Store Connect"]
M -->|"public API"| GP["Google Play Developer API"]
M -->|"eas-cli"| EAS["Expo EAS builds"]
M -.->|"console automation<br/>(dedicated browser profile)"| C["Privacy label · availability<br/>App Review replies · Play App content"]Why
Publishing a mobile app is ~40 manual steps across two consoles, half of which have no public API. AI agents can write your app, but they stall at the store. This server closes that gap:
App Store Connect | Google Play | |
Upload build, versions, listing, screenshots | ✅ API | ✅ API |
Subscriptions / in-app purchases | ✅ API | — |
Age rating, categories, price, URLs | ✅ API | ✅ API |
Privacy label & country availability | ✅ console's internal API | ✅ Data safety via console |
Read the rejection & reply to App Review (with video) | ✅ console | — |
"App content" declarations (11 forms, no API) | — | ✅ console automation |
Create the app record | 🧭 opens the right form, tells you what to type | 🧭 same |
Expo / EAS builds | ✅ start, poll, download, submit | ✅ |
Neither store lets anyone create an app record through an API, so *_create_app_form opens the right page in a logged-in browser and returns the exact values to fill. Everything else is automated.
How it compares
There are other good MCP servers for the stores, such as app-publish-mcp and mobile-release-mcp, and they cover the public APIs well. shipstores focuses on the steps that have no public API and usually end up done by hand: replying to App Review, the App Store privacy label and Google Play's "App content" declarations. It also keeps the tool list short (60 tools), and tools that publish or submit say so in their description, so the agent asks before acting.
If you only need what the public APIs offer, any of them will do. If you keep getting stuck on the console-only steps, that's the gap this project fills.
Related MCP server: App Store Connect MCP
Quick start
Requirements: Python 3.12+, uv, an App Store Connect API key and/or a Google Play service account. Xcode command line tools for iOS uploads (xcrun altool).
Add it to Claude Code (no clone needed, uvx fetches it from PyPI and runs it):
claude mcp add shipstores \
-e ASC_KEY_ID=ABC123XYZ \
-e ASC_ISSUER_ID=00000000-0000-0000-0000-000000000000 \
-e ASC_PRIVATE_KEY_PATH=~/.config/shipstores/AuthKey_ABC123XYZ.p8 \
-e PLAY_SERVICE_ACCOUNT_PATH=~/.config/shipstores/play-service-account.json \
-- uvx shipstoresThen ask your agent: "run store_doctor". It checks both credentials with real calls and detects your Apple Team ID for you.
Credentials
Variable | Required | What it is |
| iOS | App Store Connect → Users and Access → Integrations → API key (role Admin or App Manager) |
| iOS | the |
| no | detected by |
| Android | service account JSON invited in Play Console with release permissions |
| console forms | the number after |
| no | comma-separated tool groups to expose: |
For example, SHIPSTORES_TOOLSETS=apple,eas exposes only Apple and EAS tools, plus core diagnostics. The same setting can be configured as [server] toolsets = ["apple", "eas"] in ~/.config/shipstores/config.toml. Values can also live in that file — see config.example.toml. Nothing secret is ever written to the repo.
Console features (optional)
Privacy labels, availability, App Review replies and Play "App content" forms run through the store consoles' own web endpoints in a dedicated, logged-in browser profile, driven by browser-harness. Log in once:
uvx --from shipstores python -m shipstores.browser login # opens a window; sign in to both consoles (2FA included)⚠️ These features use undocumented console endpoints (the same family fastlane's Spaceship relies on). They work today and are isolated behind small modules, but Apple or Google can change them without notice. PRs that keep them working are very welcome.
Tools
Diagnostics — store_doctor, store_browser_session, store_audit_identity
Apple: build & release — apple_list_apps, apple_register_bundle_id, apple_create_app_form, apple_upload_build, apple_list_builds, apple_create_version, apple_list_versions, apple_set_version_string, apple_attach_build, apple_submit_for_review, apple_resubmit_for_review, apple_cancel_submission, apple_testflight_invite
Apple: listing & app setup — apple_update_listing, apple_upload_screenshots, apple_set_app_info (subtitle, URLs, categories, copyright, content rights), apple_set_age_rating, apple_set_free_price, apple_set_availability, apple_set_app_privacy, apple_review_details, apple_set_review_details
Apple: App Review — apple_review_messages (read the rejection and its guideline), apple_reply_review (answer with text + attachments; iPhone HEVC videos are converted to H.264)
Apple: subscriptions — apple_create_subscription_group, apple_create_subscription, apple_list_price_points, apple_set_subscription_price, apple_set_subscription_availability, apple_create_intro_offer, apple_list_subscriptions, apple_upload_subscription_screenshot
Google Play — play_create_app_form, play_track_status, play_upload_bundle, play_promote_release, play_update_listing, play_upload_screenshots, play_list_screenshots, play_contact_details, play_set_contact_details, play_signing_sha1, play_submission_status, play_submit_for_review
Play Console forms — play_content_status, play_content_open, play_content_options, play_content_answer, play_content_save, play_data_safety_fill, play_data_safety_export, play_data_safety_import
Expo / EAS — eas_build_list, eas_build_start, eas_build_status, eas_build_download, eas_submit
Tools that publish or submit (apple_submit_for_review, apple_resubmit_for_review, apple_reply_review, apple_cancel_submission, apple_set_*, apple_testflight_invite, play_upload_bundle, play_promote_release, play_upload_screenshots) say so in their description, so the agent confirms with you first.
Workflows
New iOS app
apple_register_bundle_id → apple_create_app_form → [fill in the browser]
→ apple_list_apps → eas_build_start / apple_upload_build → apple_list_builds (wait for VALID)
→ apple_attach_build → apple_update_listing → apple_set_app_info → apple_set_age_rating
→ apple_set_free_price → apple_set_availability → apple_set_app_privacy
→ apple_upload_screenshots → apple_set_review_details → apple_submit_for_reviewNew Android app
play_create_app_form → [fill in the browser] → play_upload_bundle (track=internal)
→ play_update_listing → play_content_* / play_data_safety_fill → play_promote_release (production)Rejected with "Guideline 2.1 – Information Needed" (standard for new developer accounts)
apple_review_messages → record the iPhone walkthrough → apple_set_review_details (answers in Notes)
→ apple_reply_review (answers + video) → apple_resubmit_for_reviewHard-won lessons
The part people bookmark. Each one cost a rejected build or a lost afternoon.
App Store Connect
New developer accounts get "2.1 Information Needed" on the first submission, regardless of app quality. Apple wants a screen recording from a physical device that starts at app launch from the Home Screen and shows login, the main flow and account deletion, plus purpose, access instructions, external services, regional differences and regulated-industry info — in the reply and in the review Notes. Replying is not enough: the version stays "Rejected" until you resubmit it (
apple_resubmit_for_review, or "Update Review" on the version page).Health apps must ship from an organization account (Guideline 5.1.1(ix)). An app rejected on an individual account can't be transferred (transfers need a released version): it becomes a new app with a new bundle ID.
You can't learn your Team ID from the API until a bundle ID exists; then it's the bundle's
seedId.Privacy label records need category + purpose + protection in the same record. Separate records are accepted one by one, then publishing fails with "An app data usage is missing a category/purpose or data protection type".
Availability needs every territory in the payload, each flagged available or not — and the public API returns 409 anyway; the console endpoint works.
Cancelling a submission also cancels its subscriptions, and that can't be undone by API. Re-adding them requires the console (details in
docs/apple-subscriptions.md).An app with an auto-renewable subscription is auto-rejected (3.1.2) without a working Terms of Use link in the listing. The standard Apple EULA link fixes it without a new build.
xcrun altoolwon't take a key path argument, but it honorsAPI_PRIVATE_KEYS_DIR.Screenshots belong to a version on iOS (a released version won't accept new ones — create the next version) but to the listing on Play (live immediately).
Expo / EAS
eas submit --non-interactiverefuses App Store Connect API keys; this server downloads the.ipaand uploads withaltoolinstead.eas build:viewrejects--non-interactive("Nonexistent flag") — a classic source of silent failures in wrappers.APNs keys are per team. After moving an app to another Apple team, a push key from the old team silently stops delivering (
InvalidProviderToken).
Google Play
The 11 "App content" declarations have no API. The Material radio
<input>sits ~15px above the visible circle; clicking the center focuses but doesn't select. The accessibility tree is the source of truth.Play Console app and developer ids only appear in console URLs; no API resolves them from a package name.
Contributing
Contributions are what make this useful for everyone — new stores' quirks change monthly. See CONTRIBUTING.md. Good first issues are labeled good first issue.
Contributors
Star history
License
MIT © Matheus Fidelis. Not affiliated with Apple or Google; App Store Connect and Google Play are trademarks of their owners.
The animated demo features Clawd, the Claude Code mascot by Anthropic. shipstores is an independent project, not affiliated with or endorsed by Anthropic.
Available Tools
60 toolsapple_attach_buildA
Attach a processed build to an App Store version.
The build must have processingState VALID (see apple_list_builds).
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes | ||
| version_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the VALID-state precondition, but says nothing about whether attaching replaces an existing build, whether the operation is idempotent/reversible, or what permissions are required for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action stated first and the precondition second. No padding, every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the prerequisite plus cross-reference are helpful. However, for a two-parameter mutation with no annotations and 0% schema coverage, the description leaves parameters and mutation side effects 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 0%, so the description is the only source of parameter meaning, yet neither build_id nor version_id is explained. It only indirectly implies that build_id refers to a processed/VALID build and version_id to an App Store version, leaving format and sourcing unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Attach') and resource ('a processed build to an App Store version'), which cleanly distinguishes it from siblings like apple_upload_build and apple_list_builds. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition (the build must have processingState VALID) and routes to the sibling that reveals that state (apple_list_builds). It stops short of stating when not to use it or what happens if a build is already attached.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_cancel_submissionA
Pull a version submitted for review out of the queue (before Apple decides). External action.
Use it to swap the build without waiting for the review: the version goes back to DEVELOPER_REJECTED and can be resubmitted with apple_submit_for_review.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so reasonably: it discloses this is an 'external action' and that the version transitions to DEVELOPER_REJECTED and can be resubmitted. It omits auth/permission requirements and any rate-limit or irreversibility caveats, but the resulting state change is well described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, action front-loaded, with the resulting state and follow-up tool packed efficiently. The timing idea is repeated ('before Apple decides' and 'without waiting for the review'), a minor redundancy, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Purpose, usage trigger, resulting state, and the follow-up tool are all covered; the missing parameter semantics and auth context are the main residual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole required parameter app_id is never referenced or explained. The description only alludes to 'a version submitted for review' conceptually, adding no format or identity detail (e.g., whether app_id is a numeric App Store ID or a bundle identifier), 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+resource: pulling a version submitted for review out of Apple's queue. It also clarifies the timing constraint ('before Apple decides') and distinguishes the action from the related submission flow, so an agent can tell it apart from apple_submit_for_review/apple_resubmit_for_review.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use scenario ('swap the build without waiting for the review') and routes to the follow-up tool apple_submit_for_review. It does not state explicit when-not conditions or prerequisites, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_create_app_formA
Open the App Store Connect new-app form in the browser.
Apple's API does not expose app creation (there is no POST /v1/apps), so this step is assisted: the tool opens the page in the already logged-in Chrome and returns the values you need to fill in. Register the Bundle ID first with apple_register_bundle_id.
| Name | Required | Description | Default |
|---|---|---|---|
| bundle_id | Yes | ||
| suggested_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that Apple exposes no POST /v1/apps, that the tool operates by driving an already logged-in Chrome session, and that the actual creation is manual/assisted. It does not cover failure modes (e.g., no active browser session), keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, followed by the rationale and prerequisite. Three short sentences with little waste, though the parenthetical API detail is slightly redundant for selection purposes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, explaining return values is unnecessary, and the description still notes that the tool returns the values needed for the form. Combined with the prerequisite, an agent has enough to invoke correctly; only the suggested_name semantics are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for both parameters. It implicitly ties bundle_id to the registered Bundle ID, but suggested_name is never explained (usage, format, or relationship to the form), leaving an agent without guidance on a required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (open) + resource (the new-app form) + channel (browser). The description also contrasts with the API path, so an agent can distinguish this assisted step from API-backed siblings like apple_register_bundle_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs the agent to call apple_register_bundle_id first, giving a prerequisite and ordering. It does not enumerate when NOT to use it or name an alternative creation path, but the context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_create_intro_offerA
Create the subscription's introductory offer (free trial). External action.
duration: THREE_DAYS, ONE_WEEK, TWO_WEEKS, ONE_MONTH, TWO_MONTHS, THREE_MONTHS, SIX_MONTHS or ONE_YEAR. Apple has no "14 days" — TWO_WEEKS is the exact equivalent.
offer_mode: FREE_TRIAL (free), PAY_AS_YOU_GO or PAY_UP_FRONT. The last two charge a lower price and require a price point, which this tool does not cover.
territory is REQUIRED, one offer per country: Apple refuses to create the
offer without it. To apply in several countries, call once per territory.
| Name | Required | Description | Default |
|---|---|---|---|
| duration | No | TWO_WEEKS | |
| territory | No | BRA | |
| offer_mode | No | FREE_TRIAL | |
| subscription_id | Yes | ||
| number_of_periods | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that this is an 'External action' (network call to Apple), that territory is required or Apple refuses, that only one offer per territory can be created, and that paid offer modes are unsupported. It does not mention authentication, rate limits, or idempotency, but the key operational behaviors are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then uses clear, separated lines for each parameter's semantics. It is appropriately sized and every sentence adds value. Minor redundancy exists (e.g., 'free trial' appears in both the opening and offer_mode), but overall structure 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 the tool's complexity (creating a subscription intro offer via external API), the description is largely complete: it covers purpose, key parameters, limitations, and territory handling. The presence of an output schema means return values need not be explained. The main gaps are the unmentioned 'number_of_periods' parameter and the schema/description conflict about territory being 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 description coverage is 0%, so the description must explain parameters. It thoroughly enumerates duration values and offer_mode options, and explains territory requirements. However, it completely omits the 'number_of_periods' parameter and does not explicitly define 'subscription_id'. Additionally, it claims territory is REQUIRED while the schema lists only subscription_id as required and gives territory a default, creating a semantic conflict.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Create the subscription's introductory offer (free trial).' It clearly distinguishes from sibling tools like apple_set_subscription_price and apple_create_subscription by focusing on the introductory offer creation. The parenthetical '(free trial)' further narrows the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for use: it notes that the tool is an 'External action' and explains the territory requirement ('one offer per country: Apple refuses to create the offer without it. To apply in several countries, call once per territory'). It also states that PAY_AS_YOU_GO and PAY_UP_FRONT modes are not covered, implying when not to use. However, it does not explicitly compare to alternative tools or state when to choose this over other subscription-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_create_subscriptionA
Create a subscription product inside a group. External action.
product_id is IMMUTABLE and cannot be reused later — check it against what
the app sends to the store before calling. name is the internal reference
name; display_name and description are what customers read on the App Store.
subscription_period: ONE_WEEK, ONE_MONTH, TWO_MONTHS, THREE_MONTHS, SIX_MONTHS or ONE_YEAR. The App Store has no installment plans.
The product starts in MISSING_METADATA: it still needs a price (apple_set_subscription_price) and availability (apple_set_subscription_availability).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| locale | No | pt-BR | |
| group_id | Yes | ||
| product_id | Yes | ||
| description | Yes | ||
| display_name | Yes | ||
| subscription_period | No | ONE_MONTH |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it flags the operation as an external/live action, warns that product_id is IMMUTABLE and non-reusable, and discloses the resulting MISSING_METADATA state plus what is still required. It does not discuss permissions, error behavior, or reversibility, which keeps it out of the top band.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the external-action warning, then grouped into three short paragraphs covering immutability, field semantics, and lifecycle state. Every sentence provides decision-relevant information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the description covers creation, field meaning, valid periods, and the required follow-up workflow. The only gaps are the unspecified locale parameter and group_id semantics, minor against an otherwise complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for the important fields: product_id's immutability/reuse constraint, the name vs display_name/description distinction, and the full subscription_period value set with the 'no installment plans' caveat. locale and group_id are left unexplained, which is why it is not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb + resource + containment scope ('Create a subscription product inside a group'), which cleanly separates it from the sibling apple_create_subscription_group and apple_list_subscriptions. The 'External action' framing immediately signals a live-store mutation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real precondition ('check product_id against what the app sends before calling') and names the required follow-up tools (apple_set_subscription_price, apple_set_subscription_availability) to move the product out of MISSING_METADATA. It stops short of stating when NOT to use it versus a sibling group-creation tool, but the workflow context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_create_subscription_groupA
Create a subscription group and its localization. External action.
reference_name is internal (only you see it); display_name is shown to
customers on the App Store. Every subscription product lives inside a group,
and free-trial eligibility is counted PER GROUP: someone who already had a
trial does not get another one, even when switching products within the group.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | ||
| locale | No | pt-BR | |
| display_name | Yes | ||
| reference_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully flags 'External action' (a real App Store write) and explains the per-group free-trial consequence, but it omits permissions/auth requirements, whether the operation is reversible, and how re-running against an existing group behaves. Some value added, but significant gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action in the first sentence, followed by the two clarifying facts (name semantics, per-group trial behavior). Every sentence carries information and none is filler, though the length is at the upper end of what this tool needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the core naming and group/trial semantics. The main omissions are the meaning of the 'locale' parameter and any setup prerequisites, minor against an otherwise complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does define the two genuinely ambiguous params well ('reference_name' is internal, 'display_name' is customer-facing), but leaves 'locale' (with its pt-BR default) and 'app_id' undocumented, so half the parameters get no added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Create a subscription group and its localization'), which is clearly distinct from the sibling apple_create_subscription that creates individual products. However, it does not explicitly name or differentiate from siblings, so an agent must infer the relationship to apple_create_subscription from entity semantics alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the group's role clear ('Every subscription product lives inside a group') and explains that free-trial eligibility is per-group, which implies this is a foundational setup step. But it never states when to call it versus alternatives, nor any prerequisite ordering relative to apple_create_subscription or apple_set_subscription_price.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_create_versionA
Create a new App Store version for an existing app.
Fails if an editable version already exists — in that case reuse the existing one (apple_list_versions) instead of creating another.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | ||
| platform | No | IOS | |
| version_string | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose a real behavioral trait – the precondition failure when an editable version exists – which is valuable and not visible in the schema. However, it says nothing about permissions/auth requirements or what the created version's side effects are.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action, followed by the failure condition and fallback. No redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the behavioral/usage story is complete. The gap is input-side: three parameters, including an enumerated-by-convention platform default, are undocumented in both schema and description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 3 parameters, so the description must compensate and largely does not. 'Existing app' only loosely implies app_id, and neither version_string nor the platform parameter (IOS default) nor its accepted values are explained anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (create) and resource (an App Store version for an existing app), making clear it operates on an already-registered app rather than creating one. This cleanly separates it from siblings like apple_create_app_form and apple_set_version_string.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the when-not condition ('fails if an editable version already exists') and routes the agent to the alternative (apple_list_versions) to reuse the existing version. This is exactly the kind of routing guidance an agent needs before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_list_appsA
List the apps in the App Store Connect account with id, bundleId and name.
The returned app_id is the App ID (ascAppId) used by every other Apple tool.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: it discloses the scope (the whole account) and the returned identity fields, but says nothing about pagination, ordering, empty-account behavior, or credential/auth requirements. Adequate for a trivial read-only list, 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?
Two short sentences, the scope and result stated first and the cross-tool ID semantics second. Nothing is wasted and it is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be repeated. For a zero-parameter listing tool, the description covers purpose, scope, and the downstream meaning of the returned ID, which is everything an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; the schema is fully covered anyway. The description still adds meaning by explaining that app_id maps to ascAppId, which the empty schema could never convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the apps in the App Store Connect account') and names the identifying fields it returns. It does not explicitly contrast with siblings such as apple_list_builds or apple_list_versions, but no other tool in the set lists apps, so confusion risk is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 note that the returned app_id 'is the App ID (ascAppId) used by every other Apple tool' implicitly positions this as the entry point for Apple workflows, giving the agent a reason to call it first. There is no explicit when-not or alternative named, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_list_buildsB
List an app's builds and the processing state of each.
processingState PROCESSING means the build cannot be attached to a version yet; VALID means it is ready to use.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| app_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It implies a read-only list operation and explains the meaning of PROCESSING vs VALID, which is useful domain context, but it omits auth requirements, pagination behavior, and 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?
The description is short, front-loaded with the core action, and then gives a focused explanation of processingState. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with an output schema, the description covers the core purpose and the key output-state semantics. However, with no annotations and 0% schema description coverage, it leaves important invocation details such as parameter meaning and pagination unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not document either parameter. It only implies that an app is selected, without clarifying app_id syntax or what limit controls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb+resource ('List an app's builds') and adds the processing-state concept. It does not explicitly name sibling alternatives, but the Apple-specific scope is clear enough to distinguish it from generic build tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, no prerequisites, and no alternatives such as eas_build_list or apple_list_versions. It only explains how to interpret processingState once results are returned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_list_price_pointsA
List the price points available for a subscription in a territory.
Apple does not accept arbitrary prices: you pick a point from its price table.
Pass around to see only the points near the price you want (e.g. 79.90).
| Name | Required | Description | Default |
|---|---|---|---|
| around | No | ||
| territory | No | BRA | |
| subscription_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral load; it usefully discloses the domain constraint that prices come from a fixed table and that `around` narrows the result set. It says nothing about read-only safety, pagination, result volume, or what happens when no matches exist near `around`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose, then the domain rationale, then the one non-obvious parameter. Every sentence carries information an agent needs; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained here. Still, for a 3-parameter tool at 0% schema coverage, the description omits the territory default and the meaning/format of subscription_id, and gives no indication of result size or filtering fallback behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add real meaning for `around` (filters to points near a wanted price, with the 79.90 example), but says nothing about `subscription_id` or that `territory` defaults to BRA, leaving two of three parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List the price points available for a subscription in a territory'), so the agent immediately knows the operation. It does not, however, name or contrast with the most relevant sibling, apple_set_subscription_price, which consumes these points.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a workflow by explaining that Apple rejects arbitrary prices and you must pick from its table, which hints this precedes a price-setting call. But there is no explicit when-to-use/when-not, no mention of the sibling write tool, and no prerequisites for territory/subscription selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_list_subscriptionsA
List the app's subscription groups, with the products in each.
state tells whether the product can go to review yet: MISSING_METADATA
means a price, availability or localization is missing. Only READY_TO_SUBMIT
can be included in a submission.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully documents the 'state' field semantics (MISSING_METADATA vs READY_TO_SUBMIT), which is genuine behavioral context beyond the schema. However, it says nothing about pagination, permissions, rate limits, or whether this reflects live App Store Connect state, leaving gaps for a read tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: purpose first, then a key semantic note about the 'state' field. No filler; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be fully explained, yet the description goes further by clarifying the critical 'state' semantics. Missing pagination/permission context, but overall complete enough for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter (app_id) with 0% schema description coverage, but a single, self-evident required identifier. The description adds meaning by explaining the returned 'state' values, compensating for the missing param docs. Baseline for a 1-param tool is generous, and the state explanation adds real value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the app's subscription groups, with the products in each') and defines scope precisely. An agent can distinguish it from siblings like apple_create_subscription_group or apple_set_subscription_price without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via the app_id param and the state explanation, but never states when to call this vs alternatives (e.g., before submission) or any prerequisites. Usage is inferable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_list_versionsB
List an app's App Store versions, with the review state of each.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| app_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the notable behavioral trait that each version includes its review state, implying a richer read than a plain ID list, but it says nothing about read-only nature, rate limits, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource front-loaded and the extra return detail trailing. No wasted words, though it is arguably under-specified rather than optimally 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?
An output schema exists, so the description needn't explain return values beyond noting review state. The main gap is parameter documentation, which is absent from both schema and description, leaving the definition only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so neither app_id nor limit is documented anywhere. The description adds no meaning to either parameter—it does not clarify what app_id format is expected or what limit controls. 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 (List) and resource (an app's App Store versions) and adds that each entry includes review state. This clearly distinguishes it from sibling list tools like apple_list_builds or apple_list_apps, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb 'List' and by the required app_id, but there is no explicit when-to-use guidance, no mention of prerequisites or authentication, and no reference to sibling tools it might be confused with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_register_bundle_idB
Register a new Bundle ID in the Apple Developer portal.
This is the first step for a new app and IS supported by the API. After it, the app record itself must be created through the form (apple_create_app_form).
platform: IOS, MAC_OS or UNIVERSAL.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| platform | No | IOS | |
| identifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It notes that the operation is supported by the API and identifies the next workflow step, but gives no details about permissions, side effects, duplicate handling, or error behavior for this mutating registration call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core action, followed by workflow context and platform values. It contains no wasted sentences, though the all-caps emphasis on 'IS' is slightly informal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating registration tool with no annotations and 0% schema parameter coverage, the description is incomplete: it omits auth/permission requirements, identifier format expectations, and failure modes. It does cover workflow placement and notes an output schema exists, so return values need not be described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only gives the possible values for 'platform' (IOS, MAC_OS, UNIVERSAL); it says nothing about the required 'identifier' or 'name' parameters, leaving two of three parameters without added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Register') and resource ('new Bundle ID in the Apple Developer portal'), making the action unambiguous. It also distinguishes itself from the app-record creation step by naming apple_create_app_form as the follow-up tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use it: as the first step for a new app. It also points to the next tool (apple_create_app_form) for creating the app record itself, giving clear workflow context. It does not state when not to use it or any prerequisites such as authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reply_reviewA
Reply to App Review on a rejected submission, with attachments. External action.
For a "Guideline 2.1 - Information Needed" request: send the answers in
text (up to 4000 characters) and the video recorded on the iPhone in
attachments. HEVC video is converted to H.264 at 1920px before upload. Copy
the same information into the review notes with apple_set_review_details, as
Apple asks. Replying is not enough: the version stays Rejected until you
resubmit it ("Update Review" on the version page, then resubmit).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| app_id | Yes | ||
| attachments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it delivers: it warns this is an external action, that replying alone is insufficient because the version stays Rejected, that resubmission is required, and that HEVC is converted to H.264 at 1920px before upload. That is exactly the kind of irreversible/side-effect context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the external-action warning, then structured by scenario. Dense but every sentence carries operational weight; slightly over-packed for a single paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the action, the side effects, the size limit, the transcoding behavior, the required follow-up call, and the resubmission requirement. An output schema exists so return values needn't be explained, and nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for the important parts: `text` is bounded at 4000 characters, and `attachments` is framed as the iPhone-recorded video with a stated transcoding behavior. `app_id` is left unexplained, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Reply') and resource ('App Review on a rejected submission'), and explicitly flags it as an external action. An agent can distinguish this from apple_review_messages and apple_set_review_details without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use it (replying to a rejected submission) and names the companion tool apple_set_review_details with the condition that motivates using both. It stops short of a full when-not-to-use statement, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_resubmit_for_reviewA
Resubmit a rejected version after replying to App Review or fixing it. External action.
Same as "Update Review" on the version page followed by "Resubmit to App Review": marks the rejected items as resolved and submits the same review submission again. Replying in the Resolution Center alone keeps the version Rejected. Attach a new build first (apple_attach_build) if the fix needed one.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it flags 'External action', states that rejected items are marked resolved, and warns that a Resolution Center reply alone will not clear the Rejected state. It omits permission/auth requirements and any confirmation 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?
Front-loads the action and scope in the first sentence, then uses the second paragraph to disambiguate. The UI-analogy sentence ('Same as Update Review on the version page...') is slightly redundant but earns its place by clarifying behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return values are covered by the output schema, and the description supplies the mutation semantics, prerequisite tool, and the common failure mode. Remaining gaps (auth requirements, what happens if the version was not actually rejected) are modest for a single-parameter action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (app_id) with 0% schema description coverage, and the description adds no meaning to it. The parameter is self-evident from its name, so the gap is minor, but the description does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (resubmit) and resource (a rejected version) plus the scope condition ('after replying to App Review or fixing it'). The 'Same as Update Review + Resubmit' analogy pins the exact operation, and 'submits the same review submission again' separates it from apple_submit_for_review's fresh submission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when (after replying or fixing a rejection) and a when-not ('Replying in the Resolution Center alone keeps the version Rejected'). It also names the prerequisite/alternative tool (apple_attach_build) for the case where the fix required a new build.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_review_detailsA
Read a version's App Review information (contact, demo account, notes).
The demo account password is masked — the goal here is to check what Apple will see, not to extract credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| version_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden, and it does add one genuinely useful behavior: the demo account password is masked. However, it omits permission/auth prerequisites, whether the read is safe/non-mutating, and any rate-limit or freshness caveats, leaving real gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and followed by exactly one non-obvious caveat. No filler or restated boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description usefully previews the returned fields and the masking behavior. It is complete enough to call correctly, with only minor gaps around parameter sourcing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (version_id) with 0% schema description coverage, so the description would ideally clarify what a version id is or where it comes from. It says nothing about parameters, though version_id is largely self-explanatory, keeping this at a minimum-viable 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and resource (a version's App Review information) plus the concrete fields returned (contact, demo account, notes), which cleanly separates it from the write-side sibling apple_set_review_details. It stops short of naming that sibling explicitly, so it doesn't fully earn 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 closing clause frames intent ('check what Apple will see, not extract credentials'), which implies read-only inspection use, but it never states when to prefer this over apple_set_review_details or apple_review_messages. 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.
apple_review_messagesA
Read the review messages (Resolution Center) and the rejection reasons.
The public API does not expose this: it reads through the console's internal API, in the dedicated Chrome session (check store_browser_session if it fails due to login).
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that this bypasses the public API and reads via the console's internal API inside a dedicated Chrome session, plus the login-failure remedy (store_browser_session). It stops short of describing rate limits, session prerequisites, or failure modes beyond login.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, with the core purpose front-loaded and the implementation caveat second. The parenthetical is slightly dense but every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and the description covers the key operational risk (internal API / session login). Only app_id semantics are left unaddressed, which is minor for a single required identifier.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single app_id parameter is undocumented in both schema and description. The description adds no semantics for app_id; it is adequate only because a lone, self-evident identifier keeps the ambiguity low.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 a specific resource (review messages / Resolution Center, rejection reasons). It is distinguishable from siblings like apple_reply_review and apple_review_details, though it doesn't explicitly contrast itself with apple_review_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the Resolution Center framing and the failure hint to check store_browser_session, but there is no explicit when-to-use / when-not-to-use guidance relative to apple_review_details or apple_reply_review.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_set_age_ratingA
Answer the age rating questionnaire. External action.
Starts from all "no/NONE" and applies overrides with what the app actually has.
Frequency values: NONE, INFREQUENT_OR_MILD, FREQUENT_OR_INTENSE.
E.g. a health app: {"healthOrWellnessTopics": true,
"medicalOrTreatmentInformation": "INFREQUENT_OR_MILD"}.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | ||
| overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It discloses that this is an external action, that it starts from all 'no/NONE' defaults, and that only provided overrides are applied. That clarifies the mutation semantics well, though it omits permission requirements or whether the change is immediately live.
Agents need to know what a tool does to the 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 brief, front-loaded with the core action, and every sentence adds value. The example clarifies the overrides format without 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?
An output schema exists, so return values need not be explained. For a mutation tool with no annotations and 0% schema coverage, the description supplies the key behavioral and parameter context. It still lacks sibling routing and prerequisite/auth details, keeping it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It clearly defines the behavior of `overrides` (applied on top of no/NONE defaults), enumerates valid frequency values, and provides a concrete example object. `app_id` is undocumented but self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it sets or answers the age rating questionnaire. It is clearly distinct from generic app-info or privacy setters. However, it does not explicitly name sibling tools or differentiate itself from them, 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?
Usage is implied by the phrase 'Answer the age rating questionnaire,' but there is no explicit when-to-use, when-not-to-use, or alternative tool guidance. The context of an app store submission makes the use case inferable, but the description does not carry the burden of routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_set_app_infoA
Fill in the listing fields that apple_update_listing does not cover. External action.
Subtitle and privacy policy URL live on the appInfo; support URL, marketing URL and copyright live on the editable version; categories use Apple IDs (e.g. MEDICAL, HEALTH_AND_FITNESS, LIFESTYLE, EDUCATION, PRODUCTIVITY, BOOKS). Only the fields passed are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | ||
| locale | No | pt-BR | |
| subtitle | No | ||
| copyright | No | ||
| support_url | No | ||
| marketing_url | No | ||
| primary_category | No | ||
| privacy_policy_url | No | ||
| secondary_category | No | ||
| uses_third_party_content | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose useful behavior: 'External action' flags a side effect, and 'Only the fields passed are changed' documents partial-update semantics, plus the non-obvious fact that fields live on two different resources (appInfo vs. editable version). However it says nothing about authentication/permissions required, reversibility, or whether changes go live immediately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the sibling boundary, then a compact enumeration of field placement. No filler sentences, though the second paragraph is a dense run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a 10-parameter mutation tool with 0% schema coverage and no annotations, the description covers most listing fields but leaves locale (and its pt-BR default) and uses_third_party_content entirely undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 10 parameters, so the description must compensate. It adds real meaning for the category fields (Apple IDs such as MEDICAL, HEALTH_AND_FITNESS) and maps most listing fields to their owning resource, but app_id, locale, and uses_third_party_content are never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Fill in the listing fields') and explicitly carves out scope relative to the sibling apple_update_listing, so an agent can tell the two apart. It is slightly indirect in that the exact fields are only revealed in the following sentence, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative tool (apple_update_listing) and defines the boundary: use this for the fields update_listing does not cover. There is no explicit statement of prerequisites or when not to use it, but the routing rule is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_set_app_privacyA
Replace and publish the "App Privacy" declaration (privacy nutrition label). External action.
usages: one item per collected data type: {"category": "NAME", "purposes": ["APP_FUNCTIONALITY"], "linked": true, "tracking": false} Empty list = "we do not collect data". Accepted categories and purposes are in apple_console.DATA_CATEGORIES / DATA_PURPOSES. Uses the console's internal API.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | ||
| usages | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does disclose the important traits: "Replace" signals a full overwrite of the existing declaration, "publish" and "External action" signal a live, externally visible mutation, and "Uses the console's internal API" warns of a non-public, potentially fragile integration. Missing are auth requirements and irreversibility/rollback details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its side effect, followed by the payload contract. The inline JSON example earns its space, though the categories/purposes pointer is a bit terse for an agent that cannot read the referenced constants directly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the description covers the mutation semantics and payload format that the schema and missing annotations leave open. It falls short only on permissions/prerequisites and on what "publish" changes about store readiness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the `usages` array is loosely typed, so the description has to compensate: it supplies a concrete item shape, states one item per collected data type, defines the empty-list meaning ("we do not collect data"), and points to apple_console.DATA_CATEGORIES / DATA_PURPOSES for valid values. Only `app_id` is left unmentioned, which is self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair ("Replace and publish") and a specific resource (the "App Privacy" declaration / privacy nutrition label). No sibling tool does anything comparable, so an agent can route here unambiguously from the name plus 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?
Usage of the `usages` payload is explained in detail, and "Replace and publish" implies the update context, but there is no explicit statement of when to call this (e.g. before submission, when data practices change) or any prerequisite such as an existing app version/declaration to replace.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_set_availabilityB
Choose the countries where the app is available (3-letter ISO, e.g. ["BRA"]). External action.
Uses the console's internal API (the public one answers 409), in the dedicated Chrome session. Including the European Union requires the trader declaration (DSA) on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | ||
| territories | Yes | ||
| available_in_new_territories | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so reasonably: it discloses that this is an external mutation, that it uses the console's internal API because the public one returns 409, that it runs in the dedicated Chrome session, and that EU inclusion requires a trader declaration. It still omits whether existing territories are overwritten or merged, which matters for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first clause and the supporting caveats are compact. Formatting is slightly awkward with the parenthetical example and line breaks, but there is little wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Still, for a 3-parameter mutation tool with zero schema documentation and no annotations, the description should explain available_in_new_territories and the overwrite semantics; it covers the environment and EU prerequisite but not those gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain territories as 3-letter ISO codes with an example (["BRA"]), but app_id is left implicit and available_in_new_territories — a non-obvious boolean — is never explained, leaving a meaningful gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource — choosing the countries where the app is available — which is clear and concrete. However, it does not distinguish itself from the close sibling apple_set_subscription_availability, so an agent must infer the app-vs-subscription scope from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no naming of alternatives. The only contextual note is a prerequisite (EU availability requires the DSA trader declaration), which is a constraint rather than a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_set_free_priceC
Make the app free (price 0 in the base territory). External action.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | ||
| base_territory | No | BRA |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. 'External action' vaguely signals a remote mutation, and 'price 0 in the base territory' implies the change is scoped, but there is no disclosure of permissions required, reversibility, whether existing purchasers are affected, or how other territories are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, front-loaded with the action and no filler. It is appropriately sized, though the trailing 'External action.' reads as a cryptic note that could be clearer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a mutation tool with no annotations and zero parameter documentation, however, the description omits prerequisites and side effects that an agent would need before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only gestures at 'base territory' (the base_territory param, default BRA) and says nothing about its accepted format or values, and never explains app_id. This leaves both parameters effectively undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource: making the app free at price 0 in the base territory, which is unambiguous and distinct from the sibling 'apple_set_subscription_price' (subscriptions vs. app price). It stops short of explicitly differentiating itself from that sibling, but the action is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g., paid-app agreements, build state), and no routing to alternatives. The agent gets a bare action statement with no context on when this is the right call versus other pricing operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_set_review_detailsA
Fill in the information App Review reads before testing. External action.
Only the fields passed are changed. When the app has content behind a login, the demo account must be able to reach what Apple wants to evaluate: in a subscription app, an account that already has everything unlocked hides the purchase screen, and review rejects the app for not being able to test it.
Passing demo_account_name turns on demoAccountRequired automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| version_id | Yes | ||
| contact_email | No | ||
| contact_phone | No | ||
| contact_last_name | No | ||
| demo_account_name | No | ||
| contact_first_name | No | ||
| demo_account_password | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares "External action" (a remote mutation), discloses partial-update semantics ("Only the fields passed are changed"), and reveals a hidden side effect ("Passing demo_account_name turns on demoAccountRequired automatically"). It stops short of stating auth/permission requirements or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the key constraint (partial update) are front-loaded. The subscription-app rationale is somewhat digressive but genuinely instructive, so it earns most of its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The description covers the mutation's key behavioral traits and the demo-account workflow, though the unexplained contact/notes parameters and unstated auth requirements leave modest gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 8 params, so the description must compensate. It explains the demo_account fields' purpose and the demoAccountRequired side effect well, but says nothing about notes, contact_email, contact_phone, or contact_first/last_name semantics, leaving half the surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: filling in App Review contact/demo-account details before testing. An agent can tell it apart from listing or submission siblings like apple_review_details and apple_submit_for_review, though it never explicitly names those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides conditional context ("when the app has content behind a login" the demo account must reach the purchase flow), which is genuine usage guidance. However, there is no explicit when-to-use-this-vs-alternatives statement, e.g. versus apple_set_app_info or apple_review_details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_set_subscription_availabilityB
Set the countries where the subscription is sold. External action.
Without this the product stays in MISSING_METADATA and cannot go to review. The default is Brazil only (BRA).
| Name | Required | Description | Default |
|---|---|---|---|
| territories | No | ||
| subscription_id | Yes | ||
| available_in_new_territories | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the downstream state consequence (MISSING_METADATA blocking review) and the default territory (BRA only), but omits reversibility, whether existing territories are replaced or merged, and the permission/'external action' implications. Partial coverage for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no waste: the action first, then the consequence and default. Every sentence earns its place, though it could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need no explanation, and the consequence of skipping this tool is well covered. The significant remaining gap is parameter semantics (0% schema coverage) for a three-parameter mutation with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters. The description only touches the default for territories ('Brazil only (BRA)'); it never explains the format of territory codes, the meaning of subscription_id, or what available_in_new_territories controls. With no schema help, the description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Set the countries where the subscription is sold.' The 'subscription' scope distinguishes it from apple_set_availability (app-level), though it does not name that sibling explicitly. Clear enough to act on 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 a strong prerequisite condition ('Without this the product stays in MISSING_METADATA and cannot go to review') and flags it as an external action, which implies required authorization. However, it never contrasts this with alternatives such as apple_set_availability or apple_set_subscription_price, nor states 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.
apple_set_subscription_priceA
Set the subscription price from a price point. External action.
Get the price_point_id from apple_list_price_points, and list it AFTER
setting availability: price points are issued per territory.
preserve_current_price keeps existing subscribers on their current price when
the price goes up, and only applies to a price CHANGE. Sending this attribute
on the initial price makes Apple answer 409 with "An error occurred while
processing the pricing information" — that is why the default is None, which
omits the field.
| Name | Required | Description | Default |
|---|---|---|---|
| price_point_id | Yes | ||
| subscription_id | Yes | ||
| preserve_current_price | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the external side effect, the ordering dependency on availability, per-territory issuance, and the concrete 409 failure mode with Apple's error text when the attribute is sent on an initial price. It stops short of auth/permission requirements and whether the change takes effect immediately or at a renewal boundary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then prerequisites, then the parameter caveat; each sentence carries real information. The 'External action.' fragment is terse but useful. Slightly dense, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param mutation tool with an output schema, the description supplies the ordering prerequisite, parameter semantics, and the failure mode an agent will actually hit. The only gap is authentication/permission context, which is minor given the output schema covers the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for the two non-obvious parameters: the origin of price_point_id and the full semantics of preserve_current_price (only valid on a price change, None default omits the field entirely, 409 otherwise). subscription_id is left unexplained but is self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set the subscription price from a price point') and flags it as an external action. It names apple_list_price_points as the source of price_point_id, letting an agent distinguish it from siblings like apple_list_price_points or apple_set_free_price without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: fetch price_point_id from apple_list_price_points and call it AFTER setting availability, since price points are issued per territory. It also states when preserve_current_price should and should not be sent. No meaningful usage condition is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_set_version_stringB
Rename an editable version. External action.
Useful to reuse a REJECTED version: while it occupies the slot, Apple refuses to create another one ("You cannot create a new version of the App in the current state"). Renaming it to the new build's version number avoids wiping the already filled-in listing.
| Name | Required | Description | Default |
|---|---|---|---|
| version_id | Yes | ||
| version_string | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that this is an 'External action' and explains the App Store state-machine constraint (Apple refuses to create a new version while a slot is occupied), which is genuinely useful. However, it says nothing about permissions required, whether the rename is reversible, or the effect on the version's current state beyond the listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core operation is front-loaded, immediately followed by the behavioral tag 'External action' and then the rationale. The use-case sentence is somewhat long but each part earns its place by explaining the constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the why/when is covered. But for a mutation tool with zero annotations and zero parameter documentation, the description omits prerequisites (obtaining version_id, permission needs) that 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 coverage is 0%, so the description must document both parameters. It partially clarifies version_string by implying it should be the new build's version number, but version_id is never explained (e.g. where to obtain it, presumably from apple_list_versions). Half the parameters remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening 'Rename an editable version' states a specific verb (rename) and resource (version), and the constraint about the slot being occupied distinguishes it from apple_create_version. It is clear, though it never names the sibling tools it must be distinguished from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete when-to-use scenario: reusing a REJECTED version that blocks creation of a new one. This tells the agent the triggering condition well, but it does not explicitly route away from alternatives such as apple_create_version in the normal case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_submit_for_reviewA
Submit a version for Apple review. External action, hard to reverse.
Confirm with the user before calling. Requires the version to already have a build attached and complete metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| version_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it flags the call as an external action that is 'hard to reverse' and mandates user confirmation. It omits auth/permission requirements and failure behavior, but the irreversibility and prerequisite disclosures are the most valuable behavioral facts 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?
Three short sentences, all front-loaded with the action first and the caveat and prerequisites immediately after. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers prerequisites and the confirmation gate for a high-stakes mutation. For an annotation-free irreversible action, slightly more on permissions or post-call state would be ideal, but it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter (version_id) is undocumented, so the description must compensate. It implies that the identifier refers to a version with an attached build, but adds no format, source, or lookup guidance for obtaining a valid version_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Submit a version for Apple review'), so the action is unambiguous. It does not explicitly differentiate itself from the sibling apple_resubmit_for_review or play_submit_for_review, so the agent must infer the distinction, but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable preconditions ('version to already have a build attached and complete metadata') and a confirmation requirement before calling. It stops short of naming alternatives such as apple_resubmit_for_review or stating when resubmission is preferred over a first submission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_testflight_inviteA
Invite someone to the app's internal TestFlight (a group that receives every build). External action.
Internal testing skips review, but the person must be a user on the team in
App Store Connect (check under Users and Access). If no internal group named
group_name exists, one is created.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| app_id | Yes | ||
| last_name | No | ||
| first_name | No | ||
| group_name | No | Internal |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it flags 'External action', discloses the side effect that a group is created if `group_name` doesn't exist, and states the team-membership prerequisite. It omits auth/permission requirements and reversibility (how to revoke an invite), keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, purpose front-loaded, with the prerequisite and group-creation behavior following. No filler, though the parenthetical aside is slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained. For a side-effecting mutation with no annotations, the description covers the prerequisite, the create-if-missing behavior, and the external-action nature, leaving only permission/reversibility details unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It clarifies the most non-obvious parameter (`group_name` auto-creates a group with that name) and implies email is the invitee, but app_id, first_name, and last_name are left entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Invite') and resource ('internal TestFlight'), and clarifies what an internal group means (a group that receives every build). No sibling tool covers TestFlight invites, so it is cleanly distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite (the invitee must already be a team user in App Store Connect, check Users and Access) and notes that internal testing skips review. It provides context for when this applies but names no explicit alternative tool or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_update_listingB
Update the store listing texts of a version, for one locale.
Only the fields passed are changed. whats_new is the version's "What's New"
text; it cannot be used on an app's first version.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | pt-BR | |
| keywords | No | ||
| whats_new | No | ||
| version_id | Yes | ||
| description | No | ||
| promotional_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does disclose the important partial-update semantic ('Only the fields passed are changed'), which tells the agent omitted fields are preserved rather than nulled. However it says nothing about permissions, whether changes trigger review/resubmission, or reversibility for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and the partial-update rule, with zero filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the partial-update rule plus the whats_new caveat are the most important behavioral facts. Still, for a 6-parameter mutation tool with no annotations and 0% schema coverage, the absence of locale-default and per-field guidance leaves 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 0% across 6 parameters, so the description is the only source of parameter meaning, and it only explains whats_new. keywords, description, promotional_text, and especially locale (which has an unusual default of pt-BR) are left entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (store listing texts of a version) with a scope qualifier (for one locale). It is distinguishable from the platform-mirror sibling play_update_listing mainly by the apple_ naming prefix rather than by anything in the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use vs when-not guidance and no mention of prerequisites (auth, version state). The one usage constraint given, that whats_new cannot be used on an app's first version, is genuinely useful but is field-specific rather than a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_upload_buildA
Upload an .ipa to App Store Connect via xcrun altool.
Build processing takes a few minutes after the upload — track it with apple_list_builds. platform: ios, osx or appletvos.
| Name | Required | Description | Default |
|---|---|---|---|
| ipa_path | Yes | ||
| platform | No | ios |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that build processing is asynchronous ('takes a few minutes') and how to track it. However it says nothing about required credentials/auth for xcrun altool, overwrite/replace behavior, or failure modes, which are material for an upload mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action front-loaded and the async caveat plus platform values appended. 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 the description covers the key async behavior and the tracking tool. The main gap is the absence of any authentication or prerequisite context for an upload operation, which is a moderate omission rather than a fatal one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and no enums are declared, so the description must compensate. It does enumerate valid platform values (ios, osx, appletvos), which is genuinely additive over the schema's bare string. It adds nothing about ipa_path format, but the required parameter is self-describing from its name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Upload an .ipa to App Store Connect') plus the mechanism ('via xcrun altool'), so the agent knows exactly what action is performed. It does not explicitly distinguish itself from sibling upload tools such as play_upload_bundle, but the App Store target makes the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (upload after building an iOS/tvOS/macOS artifact) and it points to apple_list_builds as the follow-up tool for tracking processing. There is no explicit when-to-use-vs-alternative guidance or prerequisite statement, so it stays at minimum-viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_upload_screenshotsA
Upload the App Store listing screenshots, in order. External action.
Uploads every image in the folder, in alphabetical order of file name, and pins that order in the store — without this the order falls back to creation order, which Apple does not guarantee. Name the files with a numeric prefix (01-, 02-).
A screenshot belongs to a VERSION: a READY_FOR_SALE version cannot be changed.
Create the next one with apple_create_version and point to it — the new
version inherits the previous one's screenshots, and replace swaps them for
these.
display_type: APP_IPHONE_67, APP_IPHONE_65, APP_IPHONE_61, APP_IPAD_PRO_3GEN_129, among others.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | Yes | ||
| locale | No | pt-BR | |
| replace | No | ||
| version_id | Yes | ||
| display_type | No | APP_IPHONE_67 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it delivers the non-obvious traits: it uploads every image in the folder in alphabetical order, pins that order in the store, and that order otherwise falls back to unguaranteed creation order. It omits permissions/auth requirements and partial-failure behavior, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short paragraphs, each earning its place (ordering rule, naming convention, version lifecycle, display_type values), and the core action is front-loaded. The standalone 'External action.' line is the only slightly wasteful element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described. For a mutating external tool with 5 params and no annotations, the description covers ordering, naming, version state, and replace behavior; missing auth/error context is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains folder (all images inside), replace ('swaps them for these'), and display_type (listing valid values despite no enum in the schema), plus version_id implicitly via the VERSION paragraph. Only locale is left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Upload the App Store listing screenshots, in order') and flags that it is an external action. This clearly separates it from the sibling play_upload_screenshots (different store) and from apple_create_version / apple_attach_build.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions and exclusions: a READY_FOR_SALE version cannot be changed, so create the next one with apple_create_version (named sibling). It also explains the replace semantics and the file-naming requirement, covering when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_upload_subscription_screenshotA
Upload a subscription's App Review screenshot. External action.
Every subscription needs a screenshot showing where the purchase happens in the app, otherwise it stays stuck in MISSING_METADATA and cannot be part of any submission — even with price, localization, availability and offer all set. Use the screen where the subscription is offered, not the home screen.
App Store Connect uploads happen in three steps: reserve the asset, send the bytes to the URL it returns, and commit with the checksum.
| Name | Required | Description | Default |
|---|---|---|---|
| image_path | Yes | ||
| subscription_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it flags the call as an 'External action' and describes the three-step reserve/send/commit mechanism, which tells the agent this is a multi-stage mutation against App Store Connect. It omits permissions/auth requirements, file-size or format limits, and retry/idempotency behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then requirement rationale, then mechanics. Sentences are dense but each adds meaning; the three-step upload sentence is arguably more than needed for an agent that just supplies two params, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers purpose, precondition, and mutation mechanics. The remaining gap is parameter-level detail (especially image format/path expectations), which is the one thing an agent cannot infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema offers no descriptions, so the description must compensate — but it never mentions subscription_id or image_path. The only hint about image_path is the implied 'screenshot' requirement, with no format, size, or path-type detail. Two required, fully undocumented parameters hold this down.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Upload a subscription's App Review screenshot'), and the scope is narrow enough to separate it from the plural apple_upload_screenshots sibling. It does not explicitly name that 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?
Explains the triggering condition clearly: without this screenshot the subscription stays in MISSING_METADATA and cannot be submitted. It also gives a concrete selection hint (use the screen where the subscription is offered, not the home screen). No exclusions or alternative-tool routing, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eas_build_downloadA
Download the binary of a finished EAS build to a local path.
This is the link between EAS and the publishing tools: download the artifact and pass the path to apple_upload_build or play_upload_bundle.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes | ||
| destination | Yes | ||
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It usefully notes the build must be 'finished' (a precondition), but says nothing about auth/permissions, whether an existing file at destination is overwritten, retry behavior, or download size/rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and followed by routing context. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the workflow role is covered. However, for a three-parameter tool with no annotations and no schema descriptions, the absence of any parameter or operational detail (auth, destination overwrite) leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three required parameters. The text implies build_id ('finished EAS build') and destination ('to a local path') loosely, but project_path is never explained and no parameter is given format or semantics beyond what the names suggest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Download) and resource (the binary of a finished EAS build) and the target (a local path). It is clearly distinguishable from the sibling EAS tools eas_build_list, eas_build_start, and eas_build_status, which do not download artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence explicitly places the tool in a workflow—download the artifact then pass the path to apple_upload_build or play_upload_bundle—which tells the agent when this tool is the right step. It omits any exclusion conditions (e.g., what to do if the build is not yet finished) but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eas_build_listA
List an Expo project's EAS builds, with the artifact URL.
Use this to find out whether a ready binary already exists before spending a new
build. A present artifact_url means it can be published directly.
platform: ios or android. status: finished, in-queue, in-progress, errored.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | ||
| platform | No | ||
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries full burden. It usefully explains how to interpret the result (a present artifact_url means it can be published directly) and enumerates status values, but says nothing about auth, rate limits, or whether listing 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?
Front-loaded with the core action and its decision rationale, then parameter hints. Tight and low-waste, with only a minor dangling parameter line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return format need not be explained, and the description covers the key interpretation (artifact_url). Given 0% schema coverage, the missing `limit` semantics is the only real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents platform (ios or android) and status (finished, in-queue, in-progress, errored) well, but leaves `limit` and `project_path` unexplained; half the parameters remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List an Expo project's EAS builds, with the artifact URL.' An agent can distinguish this from eas_build_start and eas_build_status by the listing/read nature, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this to find out whether a ready binary already exists before spending a new build' gives a clear when-to-use with a rationale. It lacks explicit exclusions or naming of alternatives like eas_build_status or eas_build_download, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eas_build_startA
Start an EAS build and return immediately, without waiting for it to finish.
Builds take 10 to 40 minutes. This tool does NOT block — track progress with eas_build_status using the returned build_id.
platform: ios, android or all. profile: a profile defined in eas.json.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | production | |
| platform | Yes | ||
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it states the call is non-blocking ('does NOT block'), gives the expected 10-40 minute duration, and names the artifact needed to continue (build_id). It omits prerequisites such as authentication/credentials and that a build is a costly, side-effecting operation that is not trivially reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its non-blocking nature, followed by just enough follow-up (duration, status hand-off) and one line of parameter hints. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, yet the description still usefully points to build_id as the tracking handle. For a mutating, long-running tool with no annotations, the only meaningful omission is auth/credential prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there are no enums, so the description must compensate, and it largely does: it enumerates valid platform values (ios, android, all) and defines profile as a profile from eas.json. project_path is left undocumented, which is the one remaining gap for a required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start an EAS build') plus the key behavioral fact that it returns immediately. An agent can distinguish it from eas_build_list, eas_build_status and eas_build_download without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: after starting, track progress with eas_build_status using the returned build_id. This is a clear hand-off to the correct sibling, though it gives no guidance on when a build should be initiated vs. other lifecycle steps (e.g., eas_submit).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eas_build_statusB
Get the state of an EAS build by id.
status FINISHED with artifact_url set means it is ready to publish.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes | ||
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It adds a genuine semantic about the return state (FINISHED + artifact_url = publishable), which is valuable, but it omits whether the call is read-only, what happens on an unknown/in-progress build id, and any auth or project-scoping requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and followed by the one piece of interpretive guidance that matters. 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 structure needn't be documented, and the description still calls out the key status semantics. For a simple two-param read tool this is nearly sufficient; only the undocumented parameters and lack of explicit sibling routing hold it back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two required parameters. 'By id' loosely implies build_id, but project_path is nowhere explained, and neither parameter receives any format or expected-value guidance. The description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get the state of an EAS build by id,' which clearly separates it from eas_build_list, eas_build_start, and eas_build_download. It doesn't explicitly name sibling alternatives, so it falls short of the top band, but an agent can identify its role immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives useful decision context — a FINISHED status with artifact_url set signals readiness to publish — implying this tool precedes a submit/publish step. However, it never says when to call this versus eas_build_list (which presumably also surfaces builds) or what prerequisites exist, leaving usage largely inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eas_submitA
Submit an EAS build straight to the store, using the submit profile in eas.json.
External action: this really publishes. Confirm the profile and platform with the user.
iOS: downloads the .ipa from EAS and uploads it via altool with this server's key (eas submit does not accept an API key without a prompt). Android: eas submit with the submit profile in eas.json. Without build_id, uses the most recent finished build.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | production | |
| build_id | No | ||
| platform | Yes | ||
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to lean on, the description carries the full burden and does so well: it flags the irreversible external publish action, the confirmation requirement, the iOS auth constraint (server key, no API key without a prompt), the altool upload path, and the fallback to the latest finished build.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and the publish warning, then adds platform-specific detail. Every sentence carries information, though the iOS/Android split could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers the risk, prerequisites, defaults and platform quirks an agent needs before firing an irreversible submission. Complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it explains three of four params meaningfully: profile (the submit profile in eas.json), platform (with platform-specific behavior), and build_id (defaults to the most recent finished build). Only project_path is left to inference, which is low risk.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 (submit a build to the store) and scopes it to the EAS submit profile in eas.json. It is clearly distinguishable from siblings like eas_build_start or eas_build_download, which prepare or fetch builds rather than publishing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context and an explicit gate: it really publishes, so the agent should confirm the profile and platform with the user first, and notes what happens without build_id (most recent finished build). It stops short of naming alternative tools or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_contact_detailsB
Read the public contact details of the app's Play listing.
These fields (contactEmail, contactWebsite, contactPhone) ARE covered by the API — do not automate the console form for them.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that these fields are API-covered (preventing a wasteful console-automation detour), which is real behavioral value, but it says nothing about auth requirements, rate limits, or whether the listing must exist/is published. Read-only nature is only implied by '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?
Two short sentences, purpose front-loaded, zero filler. The second sentence is somewhat tangential but earns its place by preventing a wrong approach.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and this is a simple one-parameter read. The description covers purpose and the API-vs-console caveat; the only real omission is guidance on the package_name parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter package_name has 0% schema description coverage, and the description only indirectly refers to 'the app's Play listing' without defining the package name format or where to obtain it. The description does not compensate for the documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read the public contact details of the app's Play listing,' and even enumerates the three returned fields. The read/set distinction from the sibling play_set_contact_details is inferable from the verb, though the sibling is never named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives a when-not-to-use rule ('do not automate the console form for them'), which is genuinely useful routing guidance. However, it addresses a browser-automation fallback rather than competing sibling tools, and there is no stated precondition or pointer to play_set_contact_details for the write path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_content_answerA
Select an option by its text in the open declaration and confirm it took effect.
Material's sits ~15px above the visible circle, so a click at the center toggles nothing. This tool tries several offsets and only reports success when the accessibility tree confirms the state.
option: the option's label as shown in the console UI (pt-BR, e.g. "Não"). nth: when the same text appears several times (e.g. several "Não"), which occurrence to select, starting at 0.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | ||
| option | Yes | ||
| save_after | No | ||
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries full burden. It discloses a critical behavioral quirk: Material input offset causing center clicks to fail, and that the tool tries multiple offsets and only reports success via accessibility tree confirmation. This is exactly the kind of implementation detail an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, followed by essential behavioral context, then parameter definitions. Every sentence serves a purpose; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values needn't be explained. However, with no annotations and 0% schema coverage, the description leaves gaps: 'package_name' and 'save_after' are unexplained, and the prerequisite of an open declaration (and likely an active browser session) is only implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It defines 'option' (pt-BR label, e.g. 'Não') and 'nth' (occurrence index for duplicates) well, but omits 'package_name' and especially 'save_after', leaving half the parameters without added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: select an option by its text in the open declaration and confirm it took effect. It distinguishes from siblings like play_content_options (list) and play_content_save (save) by focusing on selection and verification, though it doesn't name 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?
Implies usage context ('open declaration') but does not explicitly state prerequisites such as calling play_content_open first, nor when to prefer this over play_content_options or play_content_save. The parameter guidance helps but usage guidance remains implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_content_openA
Open an "App content" declaration in the browser and return its text.
Use it to see the questions and options before answering. URL slugs do not follow the form name (e.g. "financial" lives at /finance, "app_access" at /testing-credentials) — this mapping is already resolved.
form: privacy_policy, ads, app_access, government, financial, health, data_safety, content_rating.
| Name | Required | Description | Default |
|---|---|---|---|
| form | Yes | ||
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It usefully discloses that a browser is opened, that text is returned, and that URL slug mapping is already resolved (removing a real source of agent error). However it says nothing about auth/session requirements (a store_browser_session sibling exists), rate limits, or 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?
Front-loaded with the action and purpose, followed by the slug caveat and the valid-value list. Every sentence earns its place, though it is slightly sprawling with three distinct ideas.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 expansion; the description's 'return its text' suffices. The form-value enumeration closes the biggest gap left by the schema. Missing auth/session context for a browser-opening tool is the notable remaining 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 is 0% and the form parameter has no enum, so the description must compensate. It does so by enumerating valid form values (privacy_policy, ads, app_access, government, financial, health, data_safety, content_rating) and clarifying that slugs differ from names. package_name remains unexplained, keeping this below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Open an App content declaration in the browser and return its text.' This is clearly distinct from siblings like play_content_answer or play_content_save. It does not explicitly contrast itself with play_content_options, but the role (open/read a declaration) is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: 'Use it to see the questions and options before answering.' This implies it belongs earlier in the workflow than answer/save siblings. No explicit when-not guidance or named alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_content_optionsA
List the controls (radios/checkboxes) of the open declaration and the state of each.
Reads from the accessibility tree, not the DOM — Angular Material controls are not usable via querySelector. Call play_content_open first.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and does add real behavioral context: it reads from the accessibility tree rather than the DOM, and warns that Angular Material controls are not reachable via querySelector. This is exactly the kind of implementation detail that prevents failed invocations. It stops short of stating permissions/rate limits or that the operation is non-mutating.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, front-loaded with what is returned and then the two operational facts an agent needs. Nothing here is redundant with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the tool carries the essential sequencing prerequisite and implementation caveat. The only meaningful omission is any explanation of package_name, which the schema leaves bare.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter, package_name, and the description never mentions it or clarifies its format (e.g. app package identifier). The name is fairly self-explanatory in context, so this is a gap rather than a failure, but the description does not compensate for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (controls/radios/checkboxes of the open declaration) plus what is returned (the state of each). This is clearly distinguishable from sibling read tools like play_content_status, although it doesn't explicitly name a sibling to differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ordering instruction: 'Call play_content_open first.' That tells the agent when this tool is valid. It doesn't state what to do if no declaration is open or name alternative tools, so it falls short of a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_content_saveB
Save the open declaration and dismiss the dialog the console opens afterwards.
button: the console button label, matched literally against the pt-BR UI: "Salvar" (Save), "Avançar" (Next, in multi-step wizards) or "Salvar como rascunho" (Save as draft).
| Name | Required | Description | Default |
|---|---|---|---|
| button | No | Salvar | |
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It usefully discloses that the tool saves and then dismisses a console dialog, but it omits permissions, failure behavior, and other mutation 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 front-loaded with the core action and then provides necessary button details without excess. It is appropriately sized, though the parameter detail is slightly fragmented.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained. However, given no annotations and 0% schema description coverage, the description should cover the required package_name parameter and better situate the tool among siblings, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does this well for the button parameter by listing exact pt-BR labels and their meanings, but it says nothing about the required package_name parameter, leaving a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: saving the open declaration and dismissing the subsequent dialog. It is clear what the tool does, though it does not explicitly distinguish itself from siblings such as play_content_answer or play_content_options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage only through 'the open declaration,' but gives no explicit when-to-use guidance or alternatives. The button options explain parameter choices within multi-step wizards, not when to select this tool over related Play Content tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_content_statusA
Show how many "App content" declarations are still missing before the app can publish.
A draft app on Play only leaves draft once all of them are complete. None of them has an API endpoint — they are console forms.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose real behavior: it reports a count of outstanding declarations, the gating rule that a draft only publishes once all are complete, and the fact that the declarations are console-only with no API endpoint. It does not state whether this call is strictly read-only, whether it needs auth, or whether it is rate-limited, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the outcome (how many declarations are missing) before the rationale. Every sentence adds information; only the terseness of the final dash clause slightly weakens readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value format needn't be explained, and the single-parameter surface is small. The description covers purpose, the publish-gating rule, and the console-only limitation, leaving only the parameter's meaning unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description says nothing about package_name — which app the count is scoped to, its format, or where to obtain it. With one required parameter undocumented in both schema and description, the description 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+resource: counts missing "App content" declarations and frames it as a publish-readiness check. It is distinguishable from the fill-in siblings (play_content_open/answer/save) because it reports status rather than completing forms, though it never names a 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?
Clearly implies when to use it (checking whether a draft can leave draft state before publishing) and adds a genuine constraint — the declarations themselves have no API endpoint, so this is a read-only checkpoint rather than a completion path. No explicit 'use X instead' routing, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_create_app_formA
Open the Play Console app list in the browser to create a new app.
The Google Play Developer API cannot create a new packageName — the initial registration must go through the console. This tool opens the page and returns what to fill in.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | ||
| suggested_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that the tool opens a browser page rather than performing an API mutation, that it cannot itself create the app, and that it returns fill-in guidance. It omits prerequisites such as an authenticated console/browser session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, purpose front-loaded, with the rationale following immediately. Efficient overall, though the second sentence could be compressed without losing the constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and purpose/behavior are covered. However, with 0% parameter coverage and no annotations, the description leaves both required inputs and any auth/browser-session requirements undocumented, which is a real gap for a tool an agent must invoke with the right values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions package_name or suggested_name, so neither required parameter gains meaning beyond its bare name. The phrase 'returns what to fill in' hints at the output, not at what the inputs must contain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 ('Open the Play Console app list in the browser to create a new app') and explicitly frames it against the sibling Apple counterpart and the API-based alternatives by explaining the API cannot create a packageName. An agent can tell exactly what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains clearly when this is the right path: initial app registration must go through the console because the Google Play Developer API cannot create the packageName. It does not name any alternative tool explicitly, but the context makes the boundary between this and the API tools unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_data_safety_exportB
Download the Data safety declaration CSV template.
The declaration is a 5-step wizard with hundreds of checkboxes, but it accepts CSV import — much faster and more reliable than clicking screen by screen. The download requires Browser.setDownloadBehavior (Page. does not work) and the file arrives with a GUID name, which this tool renames to datasafety-template.csv.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | ||
| destination_dir | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and does so well: it discloses that the download requires Browser.setDownloadBehavior (and that Page. does not work) and that the file arrives with a GUID name before being renamed. That is meaningful quirk information an agent could not get elsewhere. It stops short of covering auth needs, overwrite behavior at destination_dir, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with the core action front-loaded in the first line, followed by supporting context. The middle sentence is justificatory rather than instructional, but it is compact and earns its place by explaining the CSV advantage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 download quirks are well covered. However, for a 2-parameter tool at 0% schema coverage, the description leaves parameter semantics and prerequisite conditions unexplained, making it only minimally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both params, so the description must compensate, but it never explains what package_name or destination_dir mean or their expected format. It mentions the renamed output file, which hints at destination_dir semantics, but leaves package_name entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Download the Data safety declaration CSV template.' An agent can immediately tell this produces a CSV file. However, it never distinguishes itself from the closely related sibling tools play_data_safety_import and play_data_safety_fill, which an agent could easily confuse with this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains why the CSV path is preferable ('much faster and more reliable than clicking screen by screen'), which implies the intended workflow, but it never explicitly says when to use this versus play_data_safety_import or play_data_safety_fill. Usage must be inferred from the wizard context rather than stated as a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_data_safety_fillA
Fill in the Data safety CSV and return a summary of what was declared.
Imports nothing — it generates the file for review. An incorrect declaration here can take down a published app, so review the summary with the user before play_data_safety_import.
collected_data maps the Response ID of each collected data type (e.g. "PSL_EMAIL") to {"group": "PSL_DATA_TYPES_PERSONAL", "shared": false, "optional": false, "purposes": ["PSL_APP_FUNCTIONALITY", "PSL_ACCOUNT_MANAGEMENT"]}.
| Name | Required | Description | Default |
|---|---|---|---|
| template_path | Yes | ||
| collected_data | Yes | ||
| destination_path | Yes | ||
| supports_deletion | No | ||
| account_deletion_url | No | ||
| encrypted_in_transit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does valuable work: it discloses that this is a non-destructive generation step ("imports nothing"), that it emits a summary for human review, and that errors carry real production risk. Gaps remain around destination_path overwrite behavior and any auth/permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then the import/risk warning, then the parameter example — a sensible priority order with no filler. The prose is slightly loose (paragraph breaks mid-sentence) but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-value detail is not needed, and the description still signals what it returns (a declaration summary). For a tool of this complexity the main omission is the undocumented scalar parameters, but the risk warning and the collected_data example cover the parts most likely to be misused.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does so well for collected_data — explaining the Response-ID key mapping and the {group, shared, optional, purposes} value shape with concrete PSL_* examples. However template_path, destination_path, supports_deletion, account_deletion_url and encrypted_in_transit remain undocumented in both schema and description, so the compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Fill in the Data safety CSV and return a summary") and explicitly distinguishes itself from the sibling play_data_safety_import by declaring "Imports nothing — it generates the file for review." An agent can tell exactly what this tool produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear workflow cue: review the summary with the user before calling play_data_safety_import, and warns that an incorrect declaration can take down a published app. It does not discuss play_data_safety_export (read vs generate), so the routing story is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_data_safety_importA
Import the filled-in CSV into the Data safety declaration.
External action: replaces the app's entire declaration. Review the summary from play_data_safety_fill with the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| csv_path | Yes | ||
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose the critical behavior: it is an external action that 'replaces the app's entire declaration' (destructive/irreversible-ish). It omits permission/auth requirements and does not describe failure modes, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the destructive external-action warning front-loaded right after the purpose statement. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description supplies the crucial destructive-action warning and the sibling prerequisite. The remaining gap is parameter-level detail for a 0%-coverage schema and any auth/permission context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema says nothing beyond types. The description's 'filled-in CSV' implies csv_path points at the output of play_data_safety_fill, which adds modest meaning, but it says nothing about path format or package_name expectations, leaving the two required parameters mostly undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: importing a filled-in CSV into the Data safety declaration, tied to a named sibling (play_data_safety_fill) that produces the input. An agent can distinguish this from play_data_safety_export and play_data_safety_fill immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('Review the summary from play_data_safety_fill with the user before calling') and names the external-action consequence, which tells the agent when this step belongs in the workflow. It does not state any case where the tool should be avoided, so it falls short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_list_screenshotsB
List the published screenshots of one listing image type. Read-only.
Returns the sha256 of each image, in the order they appear in the store — you can compare them with local files to confirm what is published.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | pt-BR | |
| image_type | No | phoneScreenshots | |
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose useful behavior: read-only, deterministic ordering, and the sha256 return shape. It omits auth requirements, rate limits, pagination, and what happens for an unpublished or missing image type, so behavior is only partially covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with purpose and read-only status, followed by the return detail. No filler, though the return explanation is partly redundant given the output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, so listing content is a bonus rather than a necessity. However, with 0% parameter coverage and no annotations, the definition leaves an agent without the argument semantics and safety/authorization context needed to call 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 0% across three parameters. The description loosely maps 'one listing image type' to image_type and 'listing' to package_name, but adds no format, enum values, or defaults, and says nothing about the language parameter. 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 and resource: 'List the published screenshots of one listing image type.' The verb 'list' plus the read-only framing clearly separates it from the write-side sibling play_upload_screenshots, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'compare them with local files to confirm what is published' hints at a verification workflow, but there is no explicit when-to-use/when-not guidance or reference to alternatives like play_content_status or play_upload_screenshots.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_promote_releaseA
Promote an already uploaded versionCode to another track, without a new upload.
External action: promoting to production publishes the app. Confirm with the user. For a staged rollout use status=inProgress with user_fraction (e.g. 0.1 = 10%).
| Name | Required | Description | Default |
|---|---|---|---|
| track | Yes | ||
| status | No | completed | |
| package_name | Yes | ||
| version_code | Yes | ||
| user_fraction | No | ||
| release_notes_pt_br | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it flags that this is an external action, that promoting to production publishes the app, and that user confirmation is required. It omits permissions/auth requirements, reversibility of a promotion, and what happens to prior releases on the target track, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool does, then the safety-critical warning, then the optional rollout pattern. No filler; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The description covers the core action, the high-stakes production side effect, and the staged-rollout pattern — enough for a safe call. The remaining gap is the undocumented non-rollout parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, so the description must compensate. It explains status=inProgress and semantics of user_fraction (0.1 = 10%), but track, package_name, version_code, and release_notes_pt_br are left without any added meaning beyond their names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (promote), resource (an already uploaded versionCode), and destination (another track), plus the key differentiator from the upload siblings: 'without a new upload.' An agent can immediately distinguish this from play_upload_bundle and eas_submit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context (promoting an existing build rather than uploading) and routes staged-rollout users to status=inProgress with user_fraction. It does not name a sibling as an explicit alternative nor state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_set_contact_detailsA
Update the public contact details of the app's Play listing and commit.
External action: these details are shown to users on Google Play. Double-check that the e-mail and website belong to the publishing entity (see store_audit_identity).
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | ||
| contact_email | No | ||
| contact_phone | No | ||
| contact_website | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose key traits: the change is an external, user-visible action and is committed to the listing. It adds a correctness check (verify ownership) that goes beyond structured data, though it omits what null values do and whether authentication/authorization is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and its commit semantics, then the external-visibility caveat. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the external/commit semantics are covered. The remaining gap is the semantics of nullable parameters (does passing null clear a field?), which neither the description nor the schema resolves.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description must compensate. It names only two of the four fields (e-mail and website) and omits package_name and contact_phone, and gives no format or null-means-clear semantics, so it only partially fills the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (public contact details of the Play listing) and adds the commit semantic, which distinguishes it from the read-only sibling play_contact_details. An agent can tell it apart from play_update_listing and play_contact_details without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear context (publishing-facing details shown on Google Play) and names a verification alternative, store_audit_identity, for confirming the publishing entity. It does not state explicit when-not-to-use conditions or prerequisites, but the routing hint is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_signing_sha1A
Download Play's app signing certificates and return the SHA-1 of each.
Use when "Sign in with Google" works on a local build but fails with the store
APK — symptom: the account picker opens, the user picks an account and lands
back on the login screen, with no error. With Play App Signing the distributed
APK is re-signed by Google, and the SHA-1 that reaches the device is the one
from deployment_cert.der.
The SHA-1 shown as text on the "App signing" page is the UPLOAD key's and does not work. This is the value to register as an Android OAuth client (package + SHA-1) in the Google Cloud Console — there is no API for that, UI only.
| Name | Required | Description | Default |
|---|---|---|---|
| download_dir | Yes | ||
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the Google re-signing behavior, the source artifact (deployment_cert.der), and that the visible UI value is the wrong key. It does not cover auth requirements or what happens if package_name is invalid, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the diagnostic scenario, then the caveat. Every sentence adds real value, though the symptom narrative is a bit long relative to the two-parameter operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out, yet the description still explains the SHA-1 payload. The main gap is the unknown parameter semantics and the file side-effect of writing to download_dir, which matters for an unannotated tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It implies purpose for both parameters (package_name identifies the app, download_dir receives the downloaded certs) but never specifies format, path semantics, or whether download_dir must exist. Adequate but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (download), resource (Play's app signing certificates), and output (SHA-1 of each). It is clearly distinguishable from unrelated siblings like store_audit_identity or apple_register_bundle_id, and even clarifies which certificate is involved (deployment_cert.der).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger scenario ('Sign in with Google' works locally but fails with the store APK, account picker loops with no error) and explicitly warns against using the wrong value (the upload key's SHA-1 on the App signing page). It also names where the output is consumed (Android OAuth client in Google Cloud Console).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_submission_statusB
Report whether there are changes waiting to be sent, in review, or nothing pending.
Reads the "Publishing overview" page. "Changes in review" means the changes were already sent to Google; "Send N changes for review" means they are still waiting to be sent.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral load; it does disclose that this is a read of the 'Publishing overview' page (hence non-mutating) and that the terminology is ambiguous, which is genuinely useful. It says nothing about auth requirements, failure modes, or what happens if the package is unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the answer 'what does this report', followed by a short disambiguation of the two confusing status strings. Two tight paragraphs, no filler; the quoted phrasing earns its place by mapping UI text to state 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 format need not be explained, and the description supplies the one thing the schema cannot: what 'in review' vs 'waiting to be sent' actually mean. Only the undocumented package_name parameter keeps this 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 0% and the description never mentions package_name or what form it takes (bundle ID, app ID, etc.). For a single required identifier this is a real gap the description should have filled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific reporting verb and the resource (pending submission state) and enumerates the three possible outcomes, so an agent knows exactly what question this tool answers. It does not explicitly distinguish itself from near-neighbours like play_content_status or play_track_status, which keeps it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description (check whether changes are waiting, in review, or done), but there is no explicit 'call this when X, use play_content_status when Y' guidance despite several overlapping siblings. The state disambiguation helps interpretation rather than selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_submit_for_reviewA
Send the app's pending changes to Google for review.
External action. On a new app this does NOT publish: "Send for review" and "Publish" are separate steps, and the second one remains yours. On an already published app with managed publishing turned off, approval publishes automatically — confirm before using it in that case.
Before calling, the release must be confirmed (Production -> Releases -> Edit release -> Next -> Save). Use play_submission_status to check.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it identifies this as an external action, clarifies that it does not publish on a new app, and discloses that approval may auto-publish on an already-published app with managed publishing off. It also states the required release-confirmation prerequisite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then adds the critical publish-behavior caveat and prerequisites in compact paragraphs. Every sentence adds useful operational context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter external mutation with no annotations and an output schema, the description covers the important side effects, prerequisites, and alternative status check. Return-value details are unnecessary because an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter, package_name, with 0% schema description coverage, so the description must compensate. It does not mention package_name or explain its expected format or source, leaving parameter meaning entirely to the name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: sending pending app changes to Google for review. It also distinguishes this from publishing on a new app and from the separate Publish step, so the agent can tell it apart from related sibling tools like play_promote_release.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit preconditions (the release must be confirmed first), an alternative checking tool (play_submission_status), and a when-not warning for already-published apps with managed publishing off. The agent has clear guidance on when to use it and when to confirm before use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_track_statusA
List the app's Play tracks and the active releases on each.
Read-only — opens and discards an edit without committing anything. Also useful to confirm that the service account has access to the app.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden, and it does disclose real behavior: the call opens an edit and discards it without committing, so it is safe and side-effect free. Remaining gaps (what error surfaces when the service account lacks access, any rate limits) keep it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what is returned, followed by a tightly scoped note on side effects and a secondary use case. No filler, though the em-dash aside could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain return values, and for a one-parameter listing tool it covers purpose, safety profile, and a use case. The one real omission is the meaning/format of package_name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter (package_name) is never mentioned or explained. The phrase "the app's" only loosely implies this parameter's role, so the description does not compensate for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: list the app's Play tracks and the active releases on each. That is unambiguous, but it never positions itself against the nearby siblings (play_submission_status, play_content_status), so an agent must infer which status tool it wants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a clear context for use — read-only introspection of tracks/releases — plus a secondary explicit use case: verifying that the service account has access to the app. It does not name an alternative tool or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_update_listingA
Update the Play Store listing texts, for one language.
External action: the commit publishes the texts to the store. Google's limits — title 30 characters, short description 80, full description 4000.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| language | No | pt-BR | |
| package_name | Yes | ||
| full_description | No | ||
| short_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does useful work: it explicitly flags an external side effect ('the commit publishes the texts to the store'), which is exactly the kind of write/publish disclosure an agent needs. It omits auth/scope requirements, reversibility, and whether an update requires review, keeping it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core action front-loaded and the external-action warning and constraints following. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be described, and the description covers the publishing side effect and text constraints. It leaves a real ambiguity unresolved — whether omitted/null text fields are left untouched or cleared — but is otherwise adequate for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it names the three text fields and gives their Google-imposed limits (title 30, short description 80, full description 4000), adding real meaning beyond the bare schema. It says nothing about package_name or how null fields behave (clear vs. leave unchanged), which is the main 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 (Update) and resource (Play Store listing texts) scoped to one language, which cleanly separates it from apple_update_listing (platform) and other play_* tools that touch screenshots, contact details, or content. It does not name any sibling or the Apple equivalent explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no mention of alternatives, prerequisites, or ordering relative to play_submit_for_review or play_content_* tools. Usage is at best implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_upload_bundleA
Upload an .aab and release it on a Play track, in a single committed edit.
External action: on commit, the release becomes visible to the track's testers (or to the public, if track=production). Confirm the track with the user.
track: internal, alpha, beta or production. status: completed, draft, inProgress or halted.
| Name | Required | Description | Default |
|---|---|---|---|
| track | No | internal | |
| status | No | completed | |
| aab_path | Yes | ||
| package_name | Yes | ||
| release_name | No | ||
| release_notes_pt_br | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it flags this as an 'external action', explains that on commit the release becomes visible to testers or the public, and requires user confirmation of the track. It does not mention auth/permission requirements or reversibility, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the main action, then layers the side-effect warning and the enum reference compactly. Every sentence is useful; the trailing parameter lists are slightly terse but earn their place given zero schema coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the mutation semantics, visibility consequence, and confirmation requirement are covered. The gap is missing permission/authorization context for a write tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It adds real value by enumerating the accepted values for track (internal, alpha, beta, production) and status (completed, draft, inProgress, halted), which the schema omits entirely, but leaves aab_path, package_name, release_name, and release_notes_pt_br undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('upload an .aab and release it on a Play track, in a single committed edit'), which clearly distinguishes it from siblings like play_promote_release and play_submit_for_review. The scope of the operation (a single committed edit) is 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?
It tells the agent to 'confirm the track with the user', which is actionable guidance, but it never states when to prefer this tool over alternatives such as play_promote_release or play_submit_for_review. Usage context is implied rather than framed as when/when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_upload_screenshotsA
Upload the Play Store listing screenshots, in order. External action.
The commit publishes to the listing immediately — it does not depend on a release or on review. Store order is upload order, so images go in alphabetical order of file name: name them with a numeric prefix (01-, 02-).
image_type: phoneScreenshots, sevenInchScreenshots, tenInchScreenshots, tvScreenshots or wearScreenshots. Each size is a separate set — call once per folder.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | Yes | ||
| replace | No | ||
| language | No | pt-BR | |
| image_type | No | phoneScreenshots | |
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the critical behavior: it is an 'External action' and the commit 'publishes to the listing immediately — it does not depend on a release or on review'. That is meaningful, non-obvious context. It omits what happens to existing screenshots (the replace parameter's effect) and any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then immediacy, then ordering, then image_type semantics — a logical progression with little waste. Slightly verbose in the middle paragraph but each sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be described, and the key behavioral trait (immediate publish, no review) is covered. The gap is the undocumented replace/language parameters for a mutation tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does document image_type's five accepted values and the folder naming/ordering convention, but leaves replace, language, and package_name entirely unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Upload the Play Store listing screenshots') and scopes it further by clarifying that each image_type size is a separate call. An agent can distinguish this from the read counterpart play_list_screenshots without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real usage guidance: 'call once per folder' and 'each size is a separate set', plus the ordering convention. It stops short of naming the alternative tools (e.g. play_list_screenshots to verify) or stating prerequisites like auth/account context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_audit_identityA
Scan both stores for text that should not be there.
Built to catch identity leaks — the wrong company's e-mail or name in a public
listing, review notes or contact details. pattern is a case-insensitive regex;
pass the domains/names that must not appear (the default is only a placeholder).
Returns what matched and where.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | example\.com|example corp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the safety burden and does disclose useful behavior: it scans both stores, the pattern is a case-insensitive regex, and it 'returns what matched and where'. The read-only nature is conveyed by 'Scan'/'Returns', though it never explicitly states side effects or permissions, leaving a small gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, purpose front-loaded, no filler. The placeholder warning and the return-value note each earn their place by preventing a mis-call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter scan tool with an output schema (so return format need not be re-explained), the description covers purpose, parameter meaning, and the placeholder pitfall. It is nearly complete, losing only for not clarifying which stores are scanned or the read-only guarantee.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter has only a default value, so the description must compensate — and it does, explaining that pattern is a case-insensitive regex, what to pass (domains/names that must not appear), and that the default is a placeholder. Minor remaining gap on regex syntax details keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Scan both stores for text that should not be there') and narrows the scope to identity leaks (wrong company e-mail/name in listings, reviews, contacts). This clearly separates it from the generic diagnostic sibling store_doctor, so an agent can pick it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to reach for it ('Built to catch identity leaks') and warns that the default pattern is only a placeholder, so callers know to pass real domains/names. It stops short of naming an alternative or stating when-not-to-use, so it does not reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_browser_sessionA
Login state of the dedicated browser on both consoles.
Console forms (App content, Data safety, app creation) run in a headless Chrome with its own profile, so they do not fight the user for the screen. Apple's session expires often; when it does, the automation ends up reading the login screen and returns meaningless results — so check here before investigating a form that "did not save".
With relogin=True, opens Chrome WITH a window so a person can authenticate
(2FA cannot be automated). Pass console ('play' or 'apple') to open only
the one that expired.
| Name | Required | Description | Default |
|---|---|---|---|
| console | No | ||
| relogin | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses that forms run in a headless profile that does not seize the user's screen, that Apple sessions expire frequently producing meaningless reads, that relogin opens a visible window, and that 2FA cannot be automated so a human must intervene.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core statement is front-loaded on the first line and the following lines explain why it matters and how parameters change behavior. Slightly prose-heavy, but every sentence adds diagnostic context rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The description covers purpose, trigger condition, and both parameters, leaving only small ambiguities such as whether relogin blocks until authentication completes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: relogin=True is explained as opening an interactive window, and console is documented with its accepted values ('play' or 'apple') to scope the relogin. Minor gaps remain (e.g. the default relogin=False check-only behavior is only implied).
Input schemas describe structure but not intent. Descriptions should explain 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 concrete resource and behavior: it reports the login state of the dedicated headless-Chrome console session, and with relogin=True it opens an interactive window. That is a specific verb-plus-resource, though it never explicitly distinguishes itself from similarly-named siblings such as store_doctor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger condition: check here before investigating a form that 'did not save', and explains when to use relogin=True or the console argument. It stops short of naming any alternative tool for diagnosing store problems, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_doctorA
Check the credentials for both stores with real API calls.
Use this before investigating any authentication error. Returns, for each store, whether the credential authenticates and what is missing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it does useful work: it discloses that the check makes real API calls (so it is a live network operation, not a cached/offline lookup) and that it is a read-only diagnostic returning per-store auth status. It does not disclose latency, rate-limit exposure, or whether the live calls can trigger side effects such as 2FA prompts, which would complete the picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: capability first, then the trigger condition, then the return shape. No filler, nothing repeated from schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description does not need to enumerate return fields, yet it still summarizes the useful signal ('whether the credential authenticates and what is missing'). For a zero-parameter diagnostic this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline expectation is that nothing needs explaining. The description confirms it acts on 'both stores' implicitly and requires no input, which matches the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Check the credentials for both stores with real API calls', scoped to both Apple and Play credential checks. No sibling tool covers the same ground (store_audit_identity audits identity, not credential validity), so an agent can select it without schema 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?
'Use this before investigating any authentication error' gives an explicit trigger condition and a clear ordering relative to other diagnostics. It stops short of naming a when-not condition or an alternative tool, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
60 tool updates
v0.1.0- First observed
apple_attach_build - First observed
apple_cancel_submission - First observed
apple_create_app_form - First observed
apple_create_intro_offer - First observed
apple_create_subscription - First observed
apple_create_subscription_group - First observed
apple_create_version - First observed
apple_list_apps - First observed
apple_list_builds - First observed
apple_list_price_points - First observed
apple_list_subscriptions - First observed
apple_list_versions - First observed
apple_register_bundle_id - First observed
apple_reply_review - First observed
apple_resubmit_for_review - First observed
apple_review_details - First observed
apple_review_messages - First observed
apple_set_age_rating - First observed
apple_set_app_info - First observed
apple_set_app_privacy - First observed
apple_set_availability - First observed
apple_set_free_price - First observed
apple_set_review_details - First observed
apple_set_subscription_availability - First observed
apple_set_subscription_price - First observed
apple_set_version_string - First observed
apple_submit_for_review - First observed
apple_testflight_invite - First observed
apple_update_listing - First observed
apple_upload_build - First observed
apple_upload_screenshots - First observed
apple_upload_subscription_screenshot - First observed
eas_build_download - First observed
eas_build_list - First observed
eas_build_start - First observed
eas_build_status - First observed
eas_submit - First observed
play_contact_details - First observed
play_content_answer - First observed
play_content_open - First observed
play_content_options - First observed
play_content_save - First observed
play_content_status - First observed
play_create_app_form - First observed
play_data_safety_export - First observed
play_data_safety_fill - First observed
play_data_safety_import - First observed
play_list_screenshots - First observed
play_promote_release - First observed
play_set_contact_details - First observed
play_signing_sha1 - First observed
play_submission_status - First observed
play_submit_for_review - First observed
play_track_status - First observed
play_update_listing - First observed
play_upload_bundle - First observed
play_upload_screenshots - First observed
store_audit_identity - First observed
store_browser_session - First observed
store_doctor
TDQS
Scored across 60 tools
Tools are mostly distinct with clear prefixes (apple_, play_, eas_, store_) and specific actions, making it easy to select the right one for a given store or task. However, multiple submission-related tools (e.g., eas_submit, apple_submit_for_review, play_submit_for_review) and several 'set_' tools for different metadata fields could cause confusion without careful reading of descriptions.
Tool names follow a highly consistent pattern: a platform prefix (apple_, play_, eas_, store_) followed by a verb_noun structure (e.g., list_apps, create_version, upload_build). There are no deviations in casing or style, making the set predictable and easy to navigate.
With 60 tools, the server far exceeds the typical 3–15 range and even the 25-tool threshold for being overly heavy. While the domain (two app stores plus EAS builds) is broad, the sheer number of tools risks overwhelming an agent and suggests the server could be split into more focused sets.
The tool surface covers the full lifecycle for both Apple and Google Play: builds, uploads, metadata, submissions, subscriptions, screenshots, and content declarations. Minor gaps exist, such as reading Play reviews or managing Apple in-app purchases beyond subscriptions, but these are not critical for the core publishing workflows.
Maintenance
Related MCP Connectors
- app-managerOAuthapp.lance
App Store Connect operator for AI agents: icons, TestFlight builds, listings, IAP, rejection fixes.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Your agent needs app-store data — what an app looks like on the App Store and Google Play, what reviewers say, and what ranks for a search in a given country. **What you can ask for** • "What does this app's store listing look like, and how is it rated?" • "Pull recent reviews for this app and group the complaints." • "What apps rank for this search term in Japan?" • "List the top apps in this category on both stores." • "Compare this app's listing on iOS and Android." **How to use it** Point any MCP client at https://mcp.aisa.one/seo-apps/mcp and sign in with OAuth — there is no key to create or paste. 37 tools: Apple App Store and Google Play app info, app lists, category listings, reviews and store search results, in live and queued forms, with categories, languages and locations for each. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Read the store listing here, then ask the same agent what the app's website ranks for — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/seo/mcp for all of it at once — rankings, keywords, backlinks, site health and AI-answer visibility across DataForSEO, Semrush and Ahrefs.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseBqualityAmaintenanceUnified MCP server for App Store Connect & Google Play Console — manage listings, screenshots, releases, reviews & submissions9162 npm35MIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that exposes the entire Apple App Store Connect API (1,200+ operations) as MCP tools, enabling AI assistants to query apps, manage builds, handle submissions, read analytics, and more.24 npmMIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server that exposes the Apple App Store Connect API to AI agents, enabling management of apps, metadata, in-app purchases, subscriptions, TestFlight, provisioning, reviews, analytics, and more through 113 curated tools plus two generic JSON:API escape-hatch tools.2-
- AlicenseNot gradedqualityBmaintenanceMCP server for managing mobile app releases on App Store Connect and Google Play. It exposes 101 tools for iOS and Android release lifecycle and reacts to EAS/GitHub webhooks automatically.9 npmMIT